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

    C++ API for Duet 3 Mainboard 6HC

    Scheduled Pinned Locked Moved
    DSF Development
    6
    24
    1.3k
    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.
    • ElevenJuneundefined
      ElevenJune
      last edited by

      Hello,

      Is there a C++ API to communicate with the Duet 3 Mainboard 6HC please ?
      I would like to create a custom C++ Software to send the code to the card and then ask to execute it. How could I do please ?

      Thanks in advance

      droftartsundefined 1 Reply Last reply Reply Quote 0
      • droftartsundefined
        droftarts administrators @ElevenJune
        last edited by

        @ElevenJune A number of people have written apps for the Duet. I think (I'm no programmer!) they use the HTTP requests and REST.api mostly. See:

        HTTP requests in standalone mode
        REST requests exposed by the SBC webserver

        This thread has a lot of detail that may be useful: https://forum.duet3d.com/topic/19673/native-app-for-duet3d-rrf-wishlist

        Ian

        Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

        ElevenJuneundefined 1 Reply Last reply Reply Quote 0
        • ElevenJuneundefined
          ElevenJune
          last edited by

          Thanks a lot for your answer !

          1 Reply Last reply Reply Quote 0
          • ElevenJuneundefined
            ElevenJune @droftarts
            last edited by

            @droftarts Hello,
            I have a new question regarding the communication between a third-party software (that I will be programming) and the Duet 3 M6HC
            I will be connecting a Raspberry Pi 4 to the Duet 3 through SPI and then the Raspberry Pi will run the Duet Web Server.
            With this configuration, will I be able to use the HTTP Requests handle by RepRapFirmware please ?

            wilrikerundefined T3P3Tonyundefined 2 Replies Last reply Reply Quote 0
            • wilrikerundefined
              wilriker @ElevenJune
              last edited by

              @ElevenJune You could but if you are using the SBC there are multiple client libraries to interact with DuetControlServer that are much more efficient than using HTTP requests. Currently there are implementations in C#.NET (native language of DuetSoftwareFramework), Python and GoLang.

              Manuel
              Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
              with probably always latest firmware/DWC (incl. betas or self-compiled)
              My Tool Collection

              1 Reply Last reply Reply Quote 0
              • T3P3Tonyundefined
                T3P3Tony administrators @ElevenJune
                last edited by

                @ElevenJune see here:

                https://github.com/Duet3D/DSF-APIs

                If you have to use C++ you can adapt one of the other APIs. alternatively maybe you can use the C# API directly.

                www.duet3d.com

                ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                • ElevenJuneundefined
                  ElevenJune @T3P3Tony
                  last edited by

                  @T3P3Tony and @wilriker Thanks a lot for your answers !
                  How more efficient would using a client library you mentioned be compared to using HTTP requests please ? Are we talking about speed or something else ?

                  I guess that if I use the SBC without the HTTP requests then the app i'll be developing can only be deployed on the Raspberry Pi connected by SBC to the Duet ?

                  T3P3Tonyundefined 1 Reply Last reply Reply Quote 0
                  • T3P3Tonyundefined
                    T3P3Tony administrators @ElevenJune
                    last edited by

                    @ElevenJune how much more efficient it is depends on how much information you need to query, network performance etc. if you need very frequently updates the it will be a lot faster than the network interface. OTOH if you don't need frequent updates but you need to do loads of calculations then maybe using the network interface and running your application on a more powerful machine will be faster...

                    @ElevenJune said in C++ API for Duet 3 Mainboard 6HC:

                    I guess that if I use the SBC without the HTTP requests then the app i'll be developing can only be deployed on the Raspberry Pi connected by SBC to the Duet ?

                    Yes

                    www.duet3d.com

                    ElevenJuneundefined 2 Replies Last reply Reply Quote 0
                    • ElevenJuneundefined
                      ElevenJune @T3P3Tony
                      last edited by

                      @T3P3Tony Thank you for your clear answer ! I'll choose accordingly to the needs I will have. But I guess that not being restricted to the Raspberry Pi can be interesting on the long run.

                      1 Reply Last reply Reply Quote 0
                      • ElevenJuneundefined
                        ElevenJune @T3P3Tony
                        last edited by ElevenJune

                        @T3P3Tony I have a question just to be sure I understood well. I will soon start the development of a control App and want to be sure before beginning to code.

                        I will develop a C++ software, can it communicate with the Duet 3 in these configurations :

                        • Duet 3 6HC In Standalone mode. I plug a RJ45 cable between the Duet and a PC (no Raspberry Pi or other SBC is involved) and can use the HTTP Requests to communicate with the card (https://github.com/Duet3D/RepRapFirmware/wiki/HTTP-requests). My software exchanges directly with RepRapFirmware

                        • Duet 3 6HC connected to an Raspberry Pi 4 (a SBC) through SPI. I run the Duet Web Server on the Raspberry and can there use the RESTful API (https://github.com/Duet3D/DuetSoftwareFramework#rest-api) to communicate with the card. I can deploy my software on the Raspeberry Pi or on a more powerful PC (not a SBC) that I will connect to the Raspberry with RJ45. My software exchanges with Duet Web Server , like Duet Web Control exchanges with Duet Web Server

                        Is this right please ?

                        There is the third option where I can develop my own C++ API communicating with the card through SBC and use it as part of my C++ software. I do not plan on choosing this one.

                        I really thank you in advance !

                        T3P3Tonyundefined 1 Reply Last reply Reply Quote 0
                        • T3P3Tonyundefined
                          T3P3Tony administrators @ElevenJune
                          last edited by

                          @ElevenJune said in C++ API for Duet 3 Mainboard 6HC:

                          @T3P3Tony I have a question just to be sure I understood well. I will soon start the development of a control App and want to be sure before beginning to code.

                          I will develop a C++ software, can it communicate with the Duet 3 in these configurations :

                          • Duet 3 6HC In Standalone mode. I plug a RJ45 cable between the Duet and a PC (no Raspberry Pi or other SBC is involved) and can use the HTTP Requests to communicate with the card (https://github.com/Duet3D/RepRapFirmware/wiki/HTTP-requests). My software exchanges directly with RepRapFirmware

                          Yes, configure a fixed IP on the Duet and your laptop within the same range

                          • Duet 3 6HC connected to an Raspberry Pi 4 (a SBC) through SPI. I run the Duet Web Server on the Raspberry and can there use the RESTful API (https://github.com/Duet3D/DuetSoftwareFramework#rest-api) to communicate with the card. I can deploy my software on the Raspeberry Pi or on a more powerful PC (not a SBC) that I will connect to the Raspberry with RJ45. My software exchanges with Duet Web Server , like Duet Web Control exchanges with Duet Web Server

                          That is also possible. If you are deploying to the Same raspberry pi then I have not tested connection to the Webserver restful API using 127.0.0.1, you might need to use the external facing IP.

                          Is this right please ?

                          There is the third option where I can develop my own C++ API communicating with the card through SBC and use it as part of my C++ software. I do not plan on choosing this one.

                          I really thank you in advance !

                          www.duet3d.com

                          ElevenJuneundefined 2 Replies Last reply Reply Quote 0
                          • ElevenJuneundefined
                            ElevenJune @T3P3Tony
                            last edited by

                            @T3P3Tony Thanks a lot ! This is clear for me !

                            1 Reply Last reply Reply Quote 0
                            • ElevenJuneundefined
                              ElevenJune @T3P3Tony
                              last edited by

                              @T3P3Tony I have a new question regarding a command
                              How does the M291 command (to display a message) works ?
                              If this command is in a G-Code being executed, how can I retrieve the message ? How will the REST API will notify me of this please ?

                              1 Reply Last reply Reply Quote 0
                              • ElevenJuneundefined
                                ElevenJune
                                last edited by

                                Concerning the REST API, can I access a statut Response like the one proposed by RepRapFirmware please ? https://github.com/Duet3D/RepRapFirmware/wiki/JSON-responses
                                I can't find any info on this.

                                1 Reply Last reply Reply Quote 0
                                • dc42undefined
                                  dc42 administrators
                                  last edited by dc42

                                  That's one for @chrishamm, however there is some documentation here https://github.com/Duet3D/DuetSoftwareFramework/blob/master/README.md.

                                  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

                                  ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                  • ElevenJuneundefined
                                    ElevenJune @dc42
                                    last edited by

                                    @dc42 Thank you for your answer ! My question is regarding this request : https://github.com/Duet3D/DuetSoftwareFramework/blob/master/README.md#get-machinestatus
                                    Do you know where I can find the status response that I will receive when using this request please ?

                                    1 Reply Last reply Reply Quote 0
                                    • MintyTreborundefined
                                      MintyTrebor
                                      last edited by MintyTrebor

                                      @ElevenJune: When getting status information I think you may benefit from understanding the JSON Machine Model, as most of the information returned via status requests will be either the full Machine Model, a subset, or a patch - depending on the api and commands you use. There is a Machine Model plugin for DWC which is a great way of navigating the model to find where keys/values are.

                                      For example you mentioned a M291 msg: When triggered, an M291 command will populate the Machine Model keys:

                                      state.messageBox.title
                                      
                                      state.messageBox.message
                                      

                                      So the command : M291 P"This Is A Test Msg" R"My Msg"
                                      Would result in:

                                      state.messageBox.title : "My Msg"
                                      
                                      state.messageBox.message : "This Is A Test Msg"
                                      

                                      The values will auto clear once the msg has been acknowledged or timed-out.
                                      (Note: There are other keys set by M291 but I have excluded them for brevity)

                                      (I actually use these keys specifically in my NodeDSF project to trigger events. I would normally point you at my code to give you an idea, but its node.js/javascript so I'm not sure it would be much help.)

                                      Hope this helps!

                                      NodeDSF - Native Node-Red integration with Duet boards.
                                      BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                                      ReleaseMgr - Duet update info inside DWC.
                                      Repo

                                      ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                      • ElevenJuneundefined
                                        ElevenJune @MintyTrebor
                                        last edited by

                                        @MintyTrebor Thanks for your reply ! Unfortunately I will be programming in C++ so I cannot use this Machine Model. Do you know how I can access this type of information with the REST API to later use it in C++ please ?

                                        MintyTreborundefined 1 Reply Last reply Reply Quote 0
                                        • MintyTreborundefined
                                          MintyTrebor @ElevenJune
                                          last edited by

                                          @ElevenJune If your using the rest api to query the status then you will have to use the machine model. The HTTP GET /machine/status request you can send returns a JSON object which is the Machine Model. If you go the websocket route, it will still be JSON and the machine model. I don't think there is any way around it with the rest api.

                                          NodeDSF - Native Node-Red integration with Duet boards.
                                          BtnCmd - Customise DWC with user defined buttons/layouts/panels (DWC Plugin)
                                          ReleaseMgr - Duet update info inside DWC.
                                          Repo

                                          ElevenJuneundefined 1 Reply Last reply Reply Quote 0
                                          • ElevenJuneundefined
                                            ElevenJune @MintyTrebor
                                            last edited by

                                            @MintyTrebor Thanks for your reply.
                                            Is MachineModel a Json structure that will be returned with the request ? Or is it a something like a JavaScript class ? I don't understand.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA