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

    New M-code to send a network request

    Scheduled Pinned Locked Moved
    Firmware wishlist
    15
    51
    6.6k
    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.
    • Nightreaverundefined
      Nightreaver
      last edited by

      I think having MQTT for this scenario makes sense to me.

      I already like the Idea of having MQTT as part of the DuetFirmware as described here: https://github.com/dc42/RepRapFirmware/issues/284

      Having a more detailed status will allow you to use MQTT to do lots of things with the report.
      Even taking a picture would be possible that way if the status is properly prepared.

      So lets say the MQTT connection is setup like wifi with some M-code, and you have another "M-code" (like M118 Px) to send a message to a MQTT topic, which is checked form another service/agent that will take care of anything else.

      Also like mentioned in my ticket, you can use it to tigger power supplies like Tasmota-Compatible via Homeassistant/OpenHAB.

      Setting up the Broker itself is part of another system, you usually dont use MQTT if there itsn't anything else in place. For these scenarios you might already have a broker running. Even if not, that broker can simply run on a RaspberryPI that you might use for the Webcam as well.

      I really support that MQTT idea. MQTT with a proper topic-layout can be used to do many many more things...

      Nightreaver created this issue in dc42/RepRapFirmware

      closed MQTT Status Update / MQTT power control #284

      1 Reply Last reply Reply Quote 1
      • fmaundefined
        fma
        last edited by

        Why not just use a little RPi Zero W, and connect it to the Duet via I²C? RRF can send I²C commands, so once the RPi is set up, you can do whatever you want (up to cmplex tasks). An ESP8266/32 could also do the job.

        Frédéric

        Nightreaverundefined 1 Reply Last reply Reply Quote 0
        • Jacotheronundefined
          Jacotheron
          last edited by

          Regarding the RPi Zero W on I2C, we should just remember that at present a RaspberryPi can't be an I2C slave (it can communicate with I2C devices, but other devices can't establish a connection to them). I have spent a few days trying to set it up (in my case it was trying to safely shutdown the Pi, before the printer shuts itself down).

          1 Reply Last reply Reply Quote 0
          • fmaundefined
            fma
            last edited by

            I didn't know that. Too bad 😞 So one should use Arduino/ESP...

            Frédéric

            1 Reply Last reply Reply Quote 1
            • Nightreaverundefined
              Nightreaver
              last edited by

              yes you might use it, but then I'm having another ESP32/8622 device beside the esp of the duet, to get a feature via I2C that could be "easily" integrated via MQTT on the current duet?

              I know there is many workaround to solve my issue, but MQTT is a neat solution.

              Also think of this
              https://forum.duet3d.com/topic/9668/telnet-printing-using-a-filament-monitor

              There is already solution that work with MQTT and telegram.

              So i.e. the Duet is updating a "Status" mqtt topic, when this is changing to "out of filament" send a telegram message. no need of utilizing and coding arduino or micropython. it can be done with much simpler and higher level language.

              And as other already said, why do i have need to have another device for much simpler things when i already have a 179$ duet in place.

              Feels like fixing my porsche with cheap volvo parts...

              fmaundefined 1 Reply Last reply Reply Quote 1
              • fmaundefined
                fma @Nightreaver
                last edited by

                @nightreaver said in New M-code to send a network request:

                And as other already said, why do i have need to have another device for much simpler things when i already have a 179$ duet in place.

                Well, I like the idea to have multiple simple systems doing specific tasks, and doing them well, rather than heavy things doing badly a lot of stuffs... Maybe RRF needs a good hooks system, with a simple and powerfull com design, to allow us to expand its capabilities without the need to modify the firmware, introducing complexity and potential unstability...

                Feels like fixing my porsche with cheap volvo parts...

                What a waste of Volvo parts 😉

                Frédéric

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

                  I have it on the list for RRF3 for the Duet to be able to send network messages. Whether we support sending via HTTP or MQTT or something else has not been decided yet.

                  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

                  Nightreaverundefined 1 Reply Last reply Reply Quote 4
                  • dc42undefined
                    dc42 administrators @fma
                    last edited by dc42

                    @fma said in New M-code to send a network request:

                    ... Maybe RRF needs a good hooks system, with a simple and powerfull com design, to allow us to expand its capabilities without the need to modify the firmware, introducing complexity and potential unstability...

                    That's hard to do on Duet 2, but it will be provided on Duet 3 right from the start.

                    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

                    1 Reply Last reply Reply Quote 0
                    • Nightreaverundefined
                      Nightreaver @dc42
                      last edited by

                      @dc42 said in New M-code to send a network request:

                      I have it on the list for RRF3 for the Duet to be able to send network messages. Whether we support sending via HTTP or MQTT or something else has not been decided yet.

                      IMHO is MQTT THE IoT protocol.

                      Other opinions ( "mqtt vs http" ) :

                      https://medium.com/mqtt-buddy/mqtt-vs-http-which-one-is-the-best-for-iot-c868169b3105
                      https://www.linkedin.com/pulse/internet-things-http-vs-websockets-mqtt-ronak-singh-cspo
                      https://cloud.google.com/blog/products/iot-devices/http-vs-mqtt-a-tale-of-two-iot-protocols

                      I'd probably not go, an reinvent the wheel with "something else". But im biased 🙂

                      1 Reply Last reply Reply Quote 1
                      • Nightreaverundefined
                        Nightreaver @fma
                        last edited by

                        @fma said in New M-code to send a network request:

                        Why not just use a little RPi Zero W, and connect it to the Duet via I²C? RRF can send I²C commands, so once the RPi is set up, you can do whatever you want (up to cmplex tasks). An ESP8266/32 could also do the job.

                        So how would I utilize I²C on duet? I mean.. in need something while no solution is there.

                        I'd like to get:

                        • power on/off before/after print
                        • print status / filament status

                        I think if you can point me to any of these, I can figure out everything else

                        1 Reply Last reply Reply Quote 0
                        • fmaundefined
                          fma
                          last edited by

                          M260 can send data over I²C bus:

                          https://duet3d.dozuki.com/Wiki/Gcode#Section_M260_i2c_Send_and_or_request_Data

                          On the I²C slave, just mimic some registers you will write from Duet to take the actions you need.

                          I recently developped a project using an ATtiny841 as I²C slave (this chip as a hardware I²C slave implementation), working this way. See:

                          https://framagit.org/fma38/Servo_Node

                          This is for an hexapod (I will use 6 of them, to control the 4 servos of each leg). But I will certainly use this chip for other projects, like here.

                          Code in Arduino/ dir is a master example; the real master will be a RPi, running my framework Py4bot: https://framagit.org/fma38/Py4bot

                          Frédéric

                          Nightreaverundefined 2 Replies Last reply Reply Quote 2
                          • Nightreaverundefined
                            Nightreaver @fma
                            last edited by

                            @fma can i also get a hook in power on/off before and after a print?

                            Also is there a way to get serial through not usb?

                            1 Reply Last reply Reply Quote 0
                            • fmaundefined
                              fma
                              last edited by

                              You can send I²c commands from your start and stops scripts.

                              You can drive the Duet from the LCD connector instead of USB port (This is a serial TTL, you need a TTL-RS232 converter to hook it to a PC serial port).

                              Frédéric

                              1 Reply Last reply Reply Quote 0
                              • Nightreaverundefined
                                Nightreaver @fma
                                last edited by

                                @fma I want to use a WemosD1 because I got a couple for cheap. Im currently struggleing getting the I2C connection working (total noob on arduion and I²C)

                                The wemos is a 3v3 device, so I can use without a level shifter. Ive use the pins of the expansion board.
                                0_1558808799959_945279ed-cd99-48cd-9302-b77d6e3c201a-image.png

                                I assume sda is TWD, and scl is TWCK ?

                                What else do I need?

                                I'm giving my device a 0x08 address and send the following from the duet: M260 A"x08" B99 or M260 A8 B99
                                But I cant see anything happening tho.

                                Did I miss something or is it just a coding/cabling issue? The wires are ~10cm

                                Danalundefined 1 Reply Last reply Reply Quote 0
                                • Danalundefined
                                  Danal @Nightreaver
                                  last edited by Danal

                                  @nightreaver said in New M-code to send a network request:

                                  I assume sda is TWD, and scl is TWCK ?

                                  ESP8266s do I2C in firmware, not hardware. Whatever pins you assign in the wire.begin() will work, with very few exceptions. I do encourage you to use "Dn" format, vs. just a number, the Dn are defined to map properly to the silkscreen on the board. Also, as far as I know, and ESP8266 can be an I2C master, but not a slave.

                                  And... this may help your efforts. This sketch scans the I2C bus and tells you the addresses of all slaves that respond. I've tried it, and it does work. I don't remember where I got it, and its own header comments don't say.

                                  /*
                                   * Wire - I2C Scanner
                                   *
                                   * The WeMos D1 Mini I2C bus uses pins:
                                   * D1 = SCL
                                   * D2 = SDA
                                   */
                                  
                                  #include <Wire.h>
                                  
                                  const int sclPin = D1;
                                  const int sdaPin = D2;
                                  
                                  void setup()
                                  {
                                    Wire.begin(sdaPin, sclPin);
                                  
                                    Serial.begin(115200);
                                    Serial.println("I2C Scanner");
                                  }
                                  
                                  void loop()
                                  {
                                    byte error, address;
                                    int nDevices;
                                  
                                    Serial.println("Scanning...");
                                  
                                    nDevices = 0;
                                    for (address = 1; address < 127; address++)
                                    {
                                      // The i2c scanner uses the return value of
                                      // the Write.endTransmisstion to see if
                                      // a device did acknowledge to the address.
                                      Wire.beginTransmission(address);
                                      error = Wire.endTransmission();
                                  
                                      if (error == 0)
                                      {
                                        Serial.print("I2C device found at address 0x");
                                        if (address < 16) {
                                          Serial.print("0");
                                        }
                                        Serial.print(address, HEX);
                                        Serial.println(" !");
                                  
                                        nDevices++;
                                      }
                                      else if (error == 4)
                                      {
                                        Serial.print("Unknown error at address 0x");
                                        if (address < 16) {
                                          Serial.print("0");
                                        }
                                        Serial.println(address, HEX);
                                      }
                                    }
                                    if (nDevices == 0) {
                                      Serial.println("No I2C devices found\n");
                                    }
                                    else {
                                      Serial.println("Done.\n");
                                    }
                                  
                                    delay(2000);
                                  }
                                  

                                  Delta / Kossel printer fanatic

                                  Nightreaverundefined 1 Reply Last reply Reply Quote 0
                                  • Nightreaverundefined
                                    Nightreaver @Danal
                                    last edited by

                                    @danal Hey, i found that scetch on github yesterday. I assume it's the esp sample library. Nonetheless I tried it and didn't work for me. I also changed to pins in the firmware, so i assume the pins on the duet i use are wrong, or i missed a cable.
                                    Are the marked pins good for i2c communication on the duet? Do i need any more wires or connections?

                                    dc42undefined Danalundefined 2 Replies Last reply Reply Quote 0
                                    • dc42undefined
                                      dc42 administrators @Nightreaver
                                      last edited by

                                      You need to add pull up resistors between each of the I2C lines and +3.3V.

                                      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

                                      Nightreaverundefined 1 Reply Last reply Reply Quote 0
                                      • fmaundefined
                                        fma
                                        last edited by

                                        Are not pullups already on the Duet?

                                        Frédéric

                                        1 Reply Last reply Reply Quote 0
                                        • Nightreaverundefined
                                          Nightreaver @dc42
                                          last edited by

                                          @dc42 said in New M-code to send a network request:

                                          pull up resistors

                                          On https://forum.duet3d.com/topic/7269/duet-sometimes-really-slow-i2c-error-or/58 you said, between 1.3k and 2.2k, that works with Duet3d Wifi as well?

                                          @fma Idk, I find it also a bit frustrating why there is no collection about I2C basics anywhere, I have to collect all the information I need to get started one by one... ☹

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

                                            If you have only the Duet and your I2C device on the I2C bus, and your I2C device doesn't itself have any pullup resistors, then you can go as low as 1K.

                                            I2C isn't particular to the Duet, and there are plenty of pages about I2C on the web. What matters is that somewhere on the I2C bus you have pullup resistors, and they are not too strong that the I2C devices can't handle them, and not too weak that the capacitance on the I2C bus makes the rise time too long. Pullup resistors of 4K7 are commonly used with I2C, but lower value give better rise times and noise immunity.

                                            The Duet does not have any pullup resistors on the I2C lines, because if you are not using I2C you could use them as general purpose I/O pins. The DueX2 and DueX5 do have pullup resistors, with value 1K on recent production and 4K7 on older boards.

                                            Note, I2C was intended for connecting chips together on a single circuit board. It was not designed to work over any length of cable.

                                            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

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