Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Announcements
  3. 💬 Building an Ethernet Gateway

💬 Building an Ethernet Gateway

Scheduled Pinned Locked Moved Announcements
133 Posts 42 Posters 36.0k Views 35 Watching
  • 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.
  • gohanG Offline
    gohanG Offline
    gohan
    Mod
    wrote on last edited by
    #60

    sorry, but that is not the complete code.

    1 Reply Last reply
    0
    • H hiddenuser

      I am not sure where I went wrong the below code hangs half way through. I am using ENC28J60
      https://www.aliexpress.com/item/Mini-ENC28J60-Webserver-module-Ethernet-Shield-board-for-Arduino-Nano-v3-0/2037927977.html?spm=2114.40010208.4.8.mUp9p8

      #ifndef config_h
      #define config_h
      #include <stdint.h>
      
      /**********************************
         MySensors configuration
      **********************************/
      //#define MY_BAUD_RATE 9600
      #define MY_DEBUG
      //#define MY_BAUD_RATE 38400
      //#define MY_BAUD_RATE 115200
      //#define MY_NODE_ID 100
      
      #define MY_RADIO_NRF24
      
      // Enable gateway ethernet module type
      #define MY_GATEWAY_ENC28J60
      //#define MY_GATEWAY_W5100
      // Enabled repeater feature for this node
      //#define MY_REPEATER_FEATURE
      
      
      // Enable Soft SPI for NRF radio (note different radio wiring is required)
      // The ENC28J60 ethernet module seems to have a hard time co-operate with
      // radio on the same spi bus.
      #define MY_SOFTSPI
      #define MY_SOFT_SPI_SCK_PIN 14
      #define MY_SOFT_SPI_MISO_PIN 16
      #define MY_SOFT_SPI_MOSI_PIN 15
      
      
      // When ENC28J60 is connected we have to move CE/CSN pins for NRF radio
      #ifndef MY_RF24_CE_PIN
      #define MY_RF24_CE_PIN 5
      #endif
      #ifndef MY_RF24_CS_PIN
      #define MY_RF24_CS_PIN 6
      #endif
      
      
      // Gateway IP address
      #define MY_IP_ADDRESS 192,168,0,66
      
      // The port to keep open on node server mode / or port to contact in client mode
      #define MY_PORT 5003
      
      // Controller ip address. Enables client mode (default is "server" mode).
      // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
      //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 0, 55
      
      // The MAC address can be anything you want but should be unique on your network.
      // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
      // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
      #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFE
      
      // Flash leds on rx/tx/err
      //#define MY_LEDS_BLINKING_FEATURE
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      #define MY_INCLUSION_BUTTON_FEATURE
      // Set inclusion mode duration (in seconds)
      #define MY_INCLUSION_MODE_DURATION 60
      // Digital pin used for inclusion mode button
      #define MY_INCLUSION_MODE_BUTTON_PIN  3
      
      #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
      #define MY_DEFAULT_RX_LED_PIN  8  // Receive led pin
      #define MY_DEFAULT_TX_LED_PIN  9  // the PCB, on board LED
      
      
      
      //#define MY_DISABLED_SERIAL
      
      
      // Turn off debug if serial pins is used for other stuff
      #ifdef MY_DISABLED_SERIAL
      #undef MY_DEBUG
      #endif
      
      
      /**********************************
      *  Gateway config
      ***********************************/
      
      /**
       * @def MY_GATEWAY_MAX_RECEIVE_LENGTH
       * @brief Max buffersize needed for messages coming from controller.
       */
      #ifndef MY_GATEWAY_MAX_RECEIVE_LENGTH
      #define MY_GATEWAY_MAX_RECEIVE_LENGTH (100u)
      #endif
      
      
      /**
       * @def MY_GATEWAY_MAX_SEND_LENGTH
       * @brief Max buffer size when sending messages.
       */
      #ifndef MY_GATEWAY_MAX_SEND_LENGTH
      #define MY_GATEWAY_MAX_SEND_LENGTH (120u)
      #endif
      
      /**
       * @def MY_GATEWAY_MAX_CLIENTS
       * @brief Max number of parallel clients (sever mode).
       */
      #ifndef MY_GATEWAY_MAX_CLIENTS
      #define MY_GATEWAY_MAX_CLIENTS (1u)
      #endif
      
      
      /**
      * @def MY_RX_MESSAGE_BUFFER_FEATURE
      * @brief This enabled the receiving buffer feature.
      *
      * This feature is currently not supported for RFM69 and RS485, for RF24 MY_RF24_IRQ_PIN has to be defined.
      */
      //#define MY_RX_MESSAGE_BUFFER_FEATURE
      
      /**
       * @def MY_RX_MESSAGE_BUFFER_SIZE
       * @brief Declare the amount of incoming messages that can be buffered.
       */
      #ifdef MY_RX_MESSAGE_BUFFER_FEATURE
      #ifndef MY_RX_MESSAGE_BUFFER_SIZE
      #define MY_RX_MESSAGE_BUFFER_SIZE  (20)
      #endif
      #endif
      
      /**
       * @def MY_RF24_PA_LEVEL
       * @brief Default RF24 PA level. Override in sketch if needed.
       */
      #ifndef MY_RF24_PA_LEVEL
      #define MY_RF24_PA_LEVEL RF24_PA_MAX
      #endif
      
      /**
       * @def MY_RF24_CHANNEL
       * @brief RF channel for the sensor net, 0-125.
       * Frequence: 2400 Mhz - 2525 Mhz Channels: 126
       * http://www.mysensors.org/radio/nRF24L01Plus.pdf
       * 0 => 2400 Mhz (RF24 channel 1)
       * 1 => 2401 Mhz (RF24 channel 2)
       * 76 => 2476 Mhz (RF24 channel 77)
       * 83 => 2483 Mhz (RF24 channel 84)
       * 124 => 2524 Mhz (RF24 channel 125)
       * 125 => 2525 Mhz (RF24 channel 126)
       * In some countries there might be limitations, in Germany for example only the range 2400,0 - 2483,5 Mhz is allowed
       * http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf
       */
      #ifndef MY_RF24_CHANNEL
      #define MY_RF24_CHANNEL  76
      #endif
      
      /**
       * @def MY_RF24_DATARATE
       * @brief RF24 datarate (RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps or RF24_2MBPS for 2Mbps).
       */
      #ifndef MY_RF24_DATARATE
      #define MY_RF24_DATARATE RF24_250KBPS
      #endif
      
      
      #endif
      
      
      
      #include "config.h"
      
      
      #include <SPI.h>
      #include <UIPEthernet.h>
      #include <MySensors.h>
      
      void setup() {
      }
      void loop() {
      }
      

      Output:

      0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.1.1
      0;255;3;0;9;TSM:INIT
      0;255;3;0;9;TSF:WUR:MS=0
      0;255;3;0;9;TSM:INIT:TSP OK
      0;255;3;0;9;TSM:INIT:GW MODE
      0;255;3;0;9;TSM:READY:ID=0,PAR=0,DIS=0
      0;255;3;0;9;MCO:REG:NOT NEEDED
      IP: 192.168.0.66
      0;255;3;0;9;MCO:BGN:STP
      0;255;3;0;9;MCO:BGN:INIT OK,TSP=1
      0;255;3;0;9;Eth: connect
      0;255;3;0;9;Eth: 0;0;3;0;2;
      0;255;3;0;9;Eth: 0;0;3;0;2;Get Version
      0;255;3;0;9;Eth: 0;0;3;0;18;PING
      0;255;3;0;9;TSF:MSG:READ,1-1-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
      0;255;3;0;9;TSF:MSG:BC
      0;255;3;0;9;TSF:MSG:FPAR REQ,ID=1
      0;255;3;0;9;TSF:PNG:SEND,TO=0
      0;255;3;0;9;TSF:CKU:OK
      0;255;3;0;9;TSF:MSG:GWL OK
      
      

      ketch uses 26,232 bytes (85%) of program storage space. Maximum is 30,720 bytes.
      Global variables use 1,286 bytes (62%) of dynamic memory, leaving 762 bytes for local variables. Maximum is 2,048 bytes.

      E Offline
      E Offline
      Ed1500
      wrote on last edited by Ed1500
      #61

      @hiddenuser That is too bad.
      I must say I find your sketch somewhat confusing. What is the purpose of the ifndef confif_h followed by a config_h?

      your config.h seems to just define the configuration. Why not just do an #include "config.h"
      The large amount of ifdefs make the sketch a little bit hard to read.
      If you are a beginner (we all have been) and make a sketch primarily for yourself, many of those ifdes are not really necessary and at least you are not losing track.
      Anyway, not trying to criticize you, but error tracking also for yrself would be easier.
      Also... you are using a soft SPI. For the ENC28J60 that is not really necessary. (not necessary for w5100 either with a little adaptation).
      So... I am afraid that at this point I cant say anything sensible about yr sketch, but I can say the ENC28J60 works, even with a shared SPI bus.
      Have you tried a working W5100 sketch with simply changing Ethernet.h into UIPEthernet.h?

      1 Reply Last reply
      0
      • H Offline
        H Offline
        hiddenuser
        wrote on last edited by
        #62

        @Ed1500 Thanks for you feedback. I have switched over to using W5100. However I have noticed that for some reason I am missing a data which is sent over nrf24. The gaps in the data are random and I can't seem to figure out why this is happening. BTW I am using domoticz on a pi to get the data. Initially I was using mysensor over usb to get the data and used to work fine. In order to get the update OTA I am trying to switch to ethernet Gateway and does not seem to work :(

        //#define MY_DEBUG
        
        #define MY_RADIO_NRF24
        #define MY_GATEWAY_W5100
        
        #define MY_SOFTSPI
        #define MY_SOFT_SPI_SCK_PIN 14
        #define MY_SOFT_SPI_MISO_PIN 16
        #define MY_SOFT_SPI_MOSI_PIN 15
        
        #define MY_RF24_CE_PIN 5
        #define MY_RF24_CS_PIN 6
        
        
        #define MY_IP_ADDRESS 192,168,0,66   // If this is disabled, DHCP is used to retrieve address
        #define MY_PORT 5003
        
        #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
        
        
        #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
        #define MY_DEFAULT_RX_LED_PIN  7  // Receive led pin
        #define MY_DEFAULT_TX_LED_PIN  7  // Transmit led pin
        
        
        #include <Ethernet.h>
        #include <MySensors.h>
        
        
        void setup(){
          delay(10000);
        }
        
        void loop(){
        }
        ``
        E 1 Reply Last reply
        0
        • gohanG Offline
          gohanG Offline
          gohan
          Mod
          wrote on last edited by
          #63

          Are you running domoticz on a raspberry? If so, you could skip the arduino and connect the radio on the rpi directly.

          1 Reply Last reply
          0
          • H hiddenuser

            @Ed1500 Thanks for you feedback. I have switched over to using W5100. However I have noticed that for some reason I am missing a data which is sent over nrf24. The gaps in the data are random and I can't seem to figure out why this is happening. BTW I am using domoticz on a pi to get the data. Initially I was using mysensor over usb to get the data and used to work fine. In order to get the update OTA I am trying to switch to ethernet Gateway and does not seem to work :(

            //#define MY_DEBUG
            
            #define MY_RADIO_NRF24
            #define MY_GATEWAY_W5100
            
            #define MY_SOFTSPI
            #define MY_SOFT_SPI_SCK_PIN 14
            #define MY_SOFT_SPI_MISO_PIN 16
            #define MY_SOFT_SPI_MOSI_PIN 15
            
            #define MY_RF24_CE_PIN 5
            #define MY_RF24_CS_PIN 6
            
            
            #define MY_IP_ADDRESS 192,168,0,66   // If this is disabled, DHCP is used to retrieve address
            #define MY_PORT 5003
            
            #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
            
            
            #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
            #define MY_DEFAULT_RX_LED_PIN  7  // Receive led pin
            #define MY_DEFAULT_TX_LED_PIN  7  // Transmit led pin
            
            
            #include <Ethernet.h>
            #include <MySensors.h>
            
            
            void setup(){
              delay(10000);
            }
            
            void loop(){
            }
            ``
            E Offline
            E Offline
            Ed1500
            wrote on last edited by
            #64

            @hiddenuser Your code seems OK apart from the fact it doesnt seem to do anything. Randomly missing data when using an nrf24 could be due to data just not arriving over the link although with shot distance that is rare. Nevertheless you could disconnect the w5100 and check a serial.print for a while to see if data is still missing.
            I dont have much experience using the soft spi, only using hardware SPI. You may want to consider Gohan' s suggestion

            H 1 Reply Last reply
            0
            • E Ed1500

              @hiddenuser Your code seems OK apart from the fact it doesnt seem to do anything. Randomly missing data when using an nrf24 could be due to data just not arriving over the link although with shot distance that is rare. Nevertheless you could disconnect the w5100 and check a serial.print for a while to see if data is still missing.
              I dont have much experience using the soft spi, only using hardware SPI. You may want to consider Gohan' s suggestion

              H Offline
              H Offline
              hiddenuser
              wrote on last edited by hiddenuser
              #65

              @Ed1500 @gohan Thanks. I am trying to create an ehternet gateway so I can do OTAs.

              E 1 Reply Last reply
              0
              • H hiddenuser

                @Ed1500 @gohan Thanks. I am trying to create an ehternet gateway so I can do OTAs.

                E Offline
                E Offline
                Ed1500
                wrote on last edited by
                #66

                @hiddenuser I understand. Not sure if that is possible through a W5100/arduino, I guess it is but might not be easy :-)

                1 Reply Last reply
                0
                • gohanG Offline
                  gohanG Offline
                  gohan
                  Mod
                  wrote on last edited by
                  #67

                  Ethernet gateway works either way, it is only a matter of personal taste. Personally I did go for the raspberry gw because I have less stuff around and I save an arduino board.

                  1 Reply Last reply
                  0
                  • Jonathan CaesJ Offline
                    Jonathan CaesJ Offline
                    Jonathan Caes
                    wrote on last edited by
                    #68

                    Hi everyone,
                    Is it possible to build an ethernet gateway with a RFM69 radio module?
                    Because I tried this a while ago and that didn't work because of a software problem in the library's. Is that already solved or not?
                    Thanks!

                    E 1 Reply Last reply
                    0
                    • gohanG Offline
                      gohanG Offline
                      gohan
                      Mod
                      wrote on last edited by
                      #69

                      With development branch it should be solved, but I still have to try

                      1 Reply Last reply
                      0
                      • Jonathan CaesJ Jonathan Caes

                        Hi everyone,
                        Is it possible to build an ethernet gateway with a RFM69 radio module?
                        Because I tried this a while ago and that didn't work because of a software problem in the library's. Is that already solved or not?
                        Thanks!

                        E Offline
                        E Offline
                        Ed1500
                        wrote on last edited by
                        #70

                        @Jonathan-Caes I did, with an RFM69HW an arduino pro mini and a funduino Ethernetmodule. Used the setup from computourist in github https://github.com/computourist/RFM69-MQTT-client

                        1 Reply Last reply
                        0
                        • Toni RamosT Offline
                          Toni RamosT Offline
                          Toni Ramos
                          wrote on last edited by
                          #71

                          hello @Ed1500, i have the same problem as @Mitja-Blazinsek. i have a w5100 module (funduino), arduino pro mini and nrf24 radio. i try to use your tip, including a delay in setup() but it doen't work yet, the gateway isn't reached using ping. is necesary another change? did you move the setup() function in the program? thanks!!

                          E 1 Reply Last reply
                          0
                          • Toni RamosT Toni Ramos

                            hello @Ed1500, i have the same problem as @Mitja-Blazinsek. i have a w5100 module (funduino), arduino pro mini and nrf24 radio. i try to use your tip, including a delay in setup() but it doen't work yet, the gateway isn't reached using ping. is necesary another change? did you move the setup() function in the program? thanks!!

                            E Offline
                            E Offline
                            Ed1500
                            wrote on last edited by Ed1500
                            #72

                            @Toni-Ramos Sorry to hear that. Are you using Soft SPI or hardware SPI for both?
                            Can you get any connection if you just use it as webserver without the NRF24?

                            1 Reply Last reply
                            0
                            • Toni RamosT Offline
                              Toni RamosT Offline
                              Toni Ramos
                              wrote on last edited by
                              #73

                              @Ed1500 i'm using softSPI as the example. I can see ping works correctly if i comment "#define MY_RADIO_NRF24". If not, the gateway shows the following messages continuosly:

                              0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.1.1
                              0;255;3;0;9;TSM:INIT
                              0;255;3;0;9;TSF:WUR:MS=0
                              0;255;3;0;9;!TSM:INIT:TSP FAIL
                              0;255;3;0;9;TSM:FAIL:CNT=1
                              0;255;3;0;9;TSM:FAIL:PDT
                              0;255;3;0;9;TSM:FAIL:RE-INIT

                              1 Reply Last reply
                              0
                              • Toni RamosT Offline
                                Toni RamosT Offline
                                Toni Ramos
                                wrote on last edited by
                                #74

                                @Ed1500 after tests with different versions of the library i discovered a bad welded pin in the nrf24. It seens to work fine now,i'll conect a node to the gateway and check all

                                E 1 Reply Last reply
                                1
                                • Toni RamosT Toni Ramos

                                  @Ed1500 after tests with different versions of the library i discovered a bad welded pin in the nrf24. It seens to work fine now,i'll conect a node to the gateway and check all

                                  E Offline
                                  E Offline
                                  Ed1500
                                  wrote on last edited by
                                  #75

                                  @Toni-Ramos Glad you got it solved. apologies I had not seen yr earlier reply yet, but thats no longer relevant.
                                  Always good to check the joints :-)

                                  1 Reply Last reply
                                  0
                                  • gohanG Offline
                                    gohanG Offline
                                    gohan
                                    Mod
                                    wrote on last edited by
                                    #76

                                    What is the best way to make the gateway wait for ip address (it's set to use dhcp) when power goes down? I noticed that the gateway starts faster than the router and doesn't get the ip address so I had to push the reset button to get it to work.

                                    mfalkviddM 1 Reply Last reply
                                    0
                                    • gohanG gohan

                                      What is the best way to make the gateway wait for ip address (it's set to use dhcp) when power goes down? I noticed that the gateway starts faster than the router and doesn't get the ip address so I had to push the reset button to get it to work.

                                      mfalkviddM Offline
                                      mfalkviddM Offline
                                      mfalkvidd
                                      Mod
                                      wrote on last edited by
                                      #77

                                      @gohan maybe add a wait call in before()? Not sure if before() is run early enough, but it might be worth a try.

                                      Maybe the library can be modified to try for a longer time before giving up.

                                      1 Reply Last reply
                                      0
                                      • gohanG Offline
                                        gohanG Offline
                                        gohan
                                        Mod
                                        wrote on last edited by
                                        #78

                                        Maybe I could make a check if there is no client connected I could reset the board, but I was wondering if there is any was to know if the system has a valid ip

                                        1 Reply Last reply
                                        0
                                        • Mitja BlazinsekM Offline
                                          Mitja BlazinsekM Offline
                                          Mitja Blazinsek
                                          wrote on last edited by
                                          #79

                                          hi after long time i finaly get new w5100 module now the test sketch from arduino ide for ethernet like web server are working fine bur still don't work as a gateway in domoticz or mycontroler. i just open example gatewayw5100 from my sensor libary and upload to mega bard bit status in my controler is always down af course i set the gateway in my controler :Enabled
                                          Enabled
                                          Type
                                          Ethernet
                                          Network type
                                          MySensors
                                          Connection details
                                          Host:192.168.178.66, Port:5003
                                          Status
                                          Down
                                          Status since
                                          7 minutes ago
                                          Status message
                                          ERROR: connect timed out

                                          mfalkviddM 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          13

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.1k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular