• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

PrintEye; simple information panel for Duet boards.

Scheduled Pinned Locked Moved
General Discussion
6
21
3.1k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    EasyTarget
    last edited by 30 Sept 2019, 12:06

    So; this is what I did to prove to myself that I could. Maybe for my CV, I had fun and learned a lot doing this. Enjoy, or ignore, as you wish.

    printeye-printing.jpg

    PrintEye is a minimalist information panel for Duet boards; it plugs into the DanelDue UART port, taking power from there and sending M408 S0 once a second, and otherwise waiting for a reply and updating the display based on their contents.

    It consists of a ATMega328P on a simple standalone board, linked to 2x 0.96' I2C OLED displays, a LED, a Button, and two mosfet level converters for the serial connection to the 3.3v UART on the Duet board.

    hardware.jpg

    The Primary connector for the Board doubles as a FTDI programming port, allowing me to update and debug without yanking the CPU out of it's socket. There is no reason why the current cable could not be adapted to the spiffy new 5-pin IO connector of the Duet3 and then that port configured as a UART. Afik the D3 does not have a dedicated panelDue port,

    The displays I used have hard-set identical I2C addresses, to avoid using a multiplexer I create two separate software I2C interfaces, one per display, this works surprisingly well. The U8x8 Arduino library handles all the heavy lifting on the display side.

    Most of my effort went into the software, which:

    • Follows printer status; can turn displays off when printer is in psu-off mode. (configurable)
    • Heartbeat/Status LED; brightness configurable.
    • Pause/Resume button; configurable on/off and hold-down time.
    • Bed plus selected tool heater set and actual temps are reported; as are 'off' and 'fail' states.
    • Screen brightness, timeouts, etc are all configurable.

    Processing the M408 response Json proved a challenge with minimal memory; I ended up using the Jsmn library. Once I had this running I realised I could leverage this to provide config control too. 🙂

    The Project exists as two repos on GitHub: Software and Hardware. Both have TL;DR readme's. The Hardware repo has the full KiCad project, and Gerber files.

    I have also written this up as a formal project on Hackaday, with archives, gallery and a better summary but lacking very detailed instructions, I assume you know which end of a soldering iron to pick up etc..

    assembled-running.jpg

    PrintEyeCase-layout.png

    My plan for the V2 of this drops the displays in flavor of a LED dot-matrix (16x2) and four servos plus these; for a mad plan to put a delta printer into a 70's era Tardis console. Possibly.

    Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
    PrintPy2024 to the rescue!
    MicroPython based; with simple wiring and and no custom PCB.

    1 Reply Last reply Reply Quote 12
    • undefined
      Danal
      last edited by 30 Sept 2019, 13:08

      Very nice!! I like the fact that you went full custom, new board, etc, etc.

      Delta / Kossel printer fanatic

      1 Reply Last reply Reply Quote 0
      • undefined
        zapta
        last edited by 30 Sept 2019, 15:39

        Very nice, and the OLED displays have great contrast.

        Can you use PanelDue while this is connected?

        Next step is to add buttons and joystick and make it the first Duet pendant (discussed in another thread here).

        1 Reply Last reply Reply Quote 0
        • undefined
          EasyTarget
          last edited by EasyTarget 30 Sept 2019, 16:14

          @zapta said in PrintEye; simple information panel for Duet boards.:

          Can you use PanelDue while this is connected?

          As it is, no. Not unless you can find another UART/Port for it.

          But.. you could wire the RX line only on some sort of splitter cable, this would leave it 'parisitic' on the same serial port as the PanelDue. It would then rely on PaneDue for sending the requests, but should independently recieve and process the responses. (theoretically.. ymmv).

          Next step is to add buttons and joystick

          I'm more thinking of a CNC pendant, xyz(+a) position and tool info on a single display, jog and probe buttons etc.

          Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
          PrintPy2024 to the rescue!
          MicroPython based; with simple wiring and and no custom PCB.

          undefined undefined 2 Replies Last reply 30 Sept 2019, 18:50 Reply Quote 0
          • undefined
            zapta @EasyTarget
            last edited by 30 Sept 2019, 18:50

            @EasyTarget said in PrintEye; simple information panel for Duet boards.:

            I'm more thinking of a CNC pendant, xyz(+a) position and tool info on a single display, jog and probe buttons etc.

            I think this idea will have a lot of interest here, per https://forum.duet3d.com/topic/11389/cnc-st

            1 Reply Last reply Reply Quote 0
            • undefined
              Danal @EasyTarget
              last edited by Danal 30 Sept 2019, 19:40

              @EasyTarget said in PrintEye; simple information panel for Duet boards.:

              @zapta said in PrintEye; simple information panel for Duet boards.:
              You could wire the RX line only on some sort of splitter cable,

              It should work with just the TX out of Duet that go to RX on the Panel, have that wire also go to the RX into PrintEye, There should be no need for any active components, diodes, etc. The one output gate on the Duet should drive 5 or more inputs on Panels and PrintEyes and so forth; they are very low impedance.

              Going "pendant" is a whole nother kettle of fish. The TX lines from the Pendant and the Panel probably need a diode so they don't backwash into each other. Then, there may need to be some sort of collision detection. Or maybe not; just don't attempt to use Panel commands and Pendant buttons at the same time. Maybe.

              Delta / Kossel printer fanatic

              1 Reply Last reply Reply Quote 0
              • undefined
                zapta
                last edited by 30 Sept 2019, 20:45

                @Danal said in PrintEye; simple information panel for Duet boards.:

                There should be no need for any active components, diodes

                Yes, this should work. I used something similar for my status led. It just sniffs on traffic from the duet and passively extracts information from the jsons.

                The TX lines from the Pendant and the Panel probably need a diode so they don't backwash into each other.

                Theoretically you can also you can also run it in proxy mode. Your device has two rx/tx pairs, one for the paneldue and one for the duet, and have smart software that will buffer duet commands and send them to the duet when idle. Or something like that. Requires more thinking.

                1 Reply Last reply Reply Quote 1
                • undefined
                  Danal
                  last edited by 30 Sept 2019, 21:55

                  @zapta said in PrintEye; simple information panel for Duet boards.:

                  Theoretically you can also you can also run it in proxy mode. Your device has two rx/tx pairs, one for the paneldue and one for the duet, and have smart software that will buffer duet commands and send them to the duet when idle. Or something like that. Requires more thinking.

                  The current implementation, on an ATMega328P, has only one UART.

                  There are LOTS of other chips, and selecting something with 2 UARTS would be easy. Proxy mode would work great with two UARTs. Very straightforward.

                  Delta / Kossel printer fanatic

                  undefined 1 Reply Last reply 1 Oct 2019, 03:28 Reply Quote 0
                  • undefined
                    EasyTarget @Danal
                    last edited by 1 Oct 2019, 03:28

                    @Danal said in PrintEye; simple information panel for Duet boards.:

                    current implementation, on an ATMega328P

                    One of the design goals was to keep it on the 328P since I have a bag of them on my desk. I guess I always assumed that someone with a PanelDue already has a superior display on their machine and would go 'meh' at this.

                    PS: Having lworked on this a lot, my go to choice for an alternate processor would be something like an ESP8266. So I could connect via wifi and never have to worry about serial cables or limited cpu resources again.

                    Something like this in fact: https://github.com/Qrome/printer-monitor

                    • I use two of these at home.
                    • It's an octoprint accessory with a better display and functionality,
                    • it helped inspire me, I contributed some code to it.
                    • But I made PrintEye and so never got round to implementing Duet support on it.

                    Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
                    PrintPy2024 to the rescue!
                    MicroPython based; with simple wiring and and no custom PCB.

                    1 Reply Last reply Reply Quote 0
                    • undefined
                      Danal
                      last edited by Danal 10 Jan 2019, 21:15 1 Oct 2019, 20:13

                      I have implemented a Duet specific, ESP8266 based, monitor. Designed for the little boards that have the ESP, a 1.2 (or was it 0.9??) OLED, and a carrier for a single lithium 18650 style cell. It has a built in charger, micro usb.

                      It was based on one of the octoprint monitors, possibly even the one mentioned above.

                      I need to post the code on Github.

                      If it can't connect to the WiFi network, it flips over into Access Point mode, and you connect to it (with your phone or whatever) and config the SSID and Password.

                      After that, there is a web page that can be used to set the Name or IP of the printer.

                      After that, it scrolls through various temperatures and times regarding the print in progress.

                      It could be VERY easily upgraded to also be a "pendant".

                      Delta / Kossel printer fanatic

                      undefined 1 Reply Last reply 2 Oct 2019, 12:16 Reply Quote 2
                      • undefined
                        EasyTarget @Danal
                        last edited by EasyTarget 10 Feb 2019, 14:33 2 Oct 2019, 12:16

                        @Danal
                        Nice, I like the sound of that, if you do get it to a state where you push it out please let us know 🙂

                        I'm currently playing with ESP32-CAM units; yet another plan(*) involves one of them (using Wifi this time) since there should be enough IO left over for a stepper and endstop, or servo.
                        Idea is to make a webcam that can self track current Z height, and turn on when needed, auto time-lapse while printing etc.. Think This, but with power coming via the rods+wifi

                        (*) Note to self: Stop. Finish other stuff first.

                        Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
                        PrintPy2024 to the rescue!
                        MicroPython based; with simple wiring and and no custom PCB.

                        undefined T3P3Tonyundefined 2 Replies Last reply 2 Oct 2019, 20:17 Reply Quote 1
                        • undefined
                          Danal @EasyTarget
                          last edited by 2 Oct 2019, 20:17

                          @EasyTarget said in PrintEye; simple information panel for Duet boards.:

                          (*) Note to self: Stop. Finish other stuff first.

                          Aaaaaaaaaaaaaaaaaaamen!!

                          Delta / Kossel printer fanatic

                          1 Reply Last reply Reply Quote 1
                          • T3P3Tonyundefined
                            T3P3Tony administrators @EasyTarget
                            last edited by 16 Feb 2024, 13:14

                            @EasyTarget I saw from your signature that you had a plan for PrintEye for when M408 is deprecated and removed?

                            www.duet3d.com

                            undefined 1 Reply Last reply 16 Feb 2024, 14:41 Reply Quote 1
                            • undefined
                              EasyTarget @T3P3Tony
                              last edited by EasyTarget 16 Feb 2024, 14:41

                              @T3P3Tony said in PrintEye; simple information panel for Duet boards.:

                              @EasyTarget I saw from your signature that you had a plan for PrintEye for when M408 is deprecated and removed?

                              I do indeed; but was avoiding necro-posting here until I had something to show.. 😇

                              cb09b4ae-645f-4ce2-b9d0-ee79abe5c14a-image.png

                              TL;DR

                              The original PrintEYE code probably could be modified for M409 use; but it would be fiddly; directly targeting the keys needed and avoiding fetching full keysets. It's quite do-able but I want to move on.

                              • The ATmega328 is the limiting factor; it's really low on RAM and once you have displays etc also running the JSON decoding became a 'mare, eventually I had to cobble together a 'inline' json decoder from various libs I found neglected elsewhere. Plus I was crippled in choices of fonts due to ROM space, and had to forget using a framebuffer (ram) and directly draw the screen.
                              • It was good fun and satisfying to do, but not again...

                              After I finished the original I started on 'PrintESP' with a similar plan, but a WemosD1 mini in the same case. And the code ported to take advantage of all the extra resources.

                              • Did you know that 99% of D1 mini clones cripple the UART with a pulldown resistor? I didnt.. That, cranky SoftSerial implementations and covid stopped progress.

                              What did happen during Lockdown was that I learned Python.. eventually coming up with 'SBCeye' (unoriginal naming is my superpower):
                              https://github.com/easytarget/SBCEye

                              To cut to the chase; I've been working on 'PrintPy', smaller and snazzier, micropython powered with 2 cores and a framebuffer! But still 2x OLED's and one button.
                              https://github.com/easytarget/PrintPy2040

                              If curious take a look at the Python/Tools folder, the script there currently runs well, is data-driven and flexible, and prints a once-per-interval status line from the OM. It's very in-development so ymmv.

                              Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
                              PrintPy2024 to the rescue!
                              MicroPython based; with simple wiring and and no custom PCB.

                              yngndrwundefined 1 Reply Last reply 16 Feb 2024, 14:52 Reply Quote 2
                              • yngndrwundefined
                                yngndrw @EasyTarget
                                last edited by 16 Feb 2024, 14:52

                                @EasyTarget You may want to consider an ESP32 over the RP2040. I adore the RP2040 and use it whenever I can but I often find that for projects which involve a lot of JSON, the memory limit becomes an issue. The ESP32 has the advantage that it can use external memory, whilst still being a modern dual-core microcontroller.

                                undefined 1 Reply Last reply 16 Feb 2024, 15:06 Reply Quote 1
                                • undefined
                                  EasyTarget @yngndrw
                                  last edited by EasyTarget 16 Feb 2024, 15:06

                                  @yngndrw said in PrintEye; simple information panel for Duet boards.:

                                  You may want to consider an ESP32 over the RP2040

                                  The design uses a XIAO (seedstudio) form-factor. Go for it.

                                  I have a ESP32-C3 (risc-v) Xiao that I could use.. Or I could get either of the S3 Xiao boards. But they all lack an onboard NeoPixel (and cost more..), so I'd need to add one, or do without.

                                  Actually the Xiao C3 board is going to run a LORA transceiver + temperature sensor at my sailclub.; 5uA deep sleep, USB-C and onboard charging circuit for 5eur! Fantastic bit of kit. Also risc-v which pleases me; I have a VisionFive2 running LaserWeb on my CNC.

                                  There is a pattern here which I'm seeing a lot; Somebody mentions using ESP32 and shortly thereafter someone arrives saying 'but why not use Pico!', and vice-versa.

                                  PrintPy can use both... It's a concept, not set in stone.

                                  edited for tone.

                                  Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
                                  PrintPy2024 to the rescue!
                                  MicroPython based; with simple wiring and and no custom PCB.

                                  yngndrwundefined 1 Reply Last reply 16 Feb 2024, 15:09 Reply Quote 0
                                  • yngndrwundefined
                                    yngndrw @EasyTarget
                                    last edited by 16 Feb 2024, 15:09

                                    @EasyTarget I'm just advising that memory might become an issue for the JSON parsing, that's all. I did say I adore the RP2040, it's my go-to when memory isn't an issue - They all have their place. I'll keep to myself next time, sorry to bother you.

                                    undefined dc42undefined 2 Replies Last reply 16 Feb 2024, 15:14 Reply Quote 1
                                    • undefined
                                      EasyTarget @yngndrw
                                      last edited by 16 Feb 2024, 15:14

                                      @yngndrw You are right, I was a bit snarkyt there; you make a good point and as I have yet to begin porting from CPython to microPython, your words might haunt me when I do 😉

                                      I apologies for the last comment; we've recently had some similar stuff with fanboys/spambots on makerforums and I was translating that here. Mea Culpa.

                                      Disaster? The original Printeye is dying with RRF 3.5 (M208 depreciated).
                                      PrintPy2024 to the rescue!
                                      MicroPython based; with simple wiring and and no custom PCB.

                                      yngndrwundefined 1 Reply Last reply 16 Feb 2024, 15:25 Reply Quote 0
                                      • yngndrwundefined
                                        yngndrw @EasyTarget
                                        last edited by yngndrw 16 Feb 2024, 15:25

                                        @EasyTarget No worries, I'm sorry my message came across badly - It was probably not the best judgement for my first post on here in years to be a "have you considered X hardware" post. The issue only came to mind because I'd recently used an RP2040 (Specifically the W5500-EVB-Pico, a fantastic board if you need ethernet in a project) on a commercial project and hit the memory limit a number of times. At the end of the day the "right" thing to use is whatever you're comfortable with - It's all personal preference as long as you're aware of the limits and trade-offs.

                                        1 Reply Last reply Reply Quote 2
                                        • dc42undefined
                                          dc42 administrators @yngndrw
                                          last edited by 25 Feb 2024, 18:40

                                          @yngndrw said in PrintEye; simple information panel for Duet boards.:

                                          I'm just advising that memory might become an issue for the JSON parsing, that's all

                                          You might like to look at the PanelDueFirmware code on github. It uses a Json parser that uses minimal RAM.

                                          Duet WiFi hardware designer and firmware engineer
                                          Please do not ask me for Duet support via PM or email, use the forum
                                          http://www.escher3d.com, https://miscsolutions.wordpress.com

                                          yngndrwundefined 1 Reply Last reply 25 Feb 2024, 22:54 Reply Quote 1
                                          • First post
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA