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. Troubleshooting
  3. Problem with Ardunio Ethernet as gateway

Problem with Ardunio Ethernet as gateway

Scheduled Pinned Locked Moved Troubleshooting
9 Posts 3 Posters 3.0k Views 3 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.
  • TiasT Offline
    TiasT Offline
    Tias
    wrote on last edited by Tias
    #1

    Hi !

    Trying to make my first gateway to work with no success.
    I found out (by adding some Serial.println() statements) it fails in rf24.isPVariant().
    Output (shown by the serial monitor) from MySensors is "0;0;3;0;9;radio init fail"
    I am rather sure I have wired my NRF24L01+ wrong since the Arduino Ethernet board does not have the exact same pin markings as listen in MySenbors,org.

    (Ethernet is correctly setup since in my sketch I can ping the Arduino from my PC without problem)

    My setup : Arduino Ethernet
    Arduino IDE : 1.6.5
    OS : Windows 10 Prof.
    MySensors library version : 1.5.4
    NRF devices are clearly the Plus version, chip is marked as
    NRF M
    24L01+
    1452AB

    Wiring (based on info I found here:
    Arduino NRF24
    GND GND
    3.3V Vcc
    Digital pin 7 CE
    Digital pin 8 CSN/CS
    SCK SCK
    MOSI MOSI
    MISO MISO
    IRQ Not connected

    Changes in the EthernetGateway sketch :
    #define RADIO_CE_PIN 7 // radio chip enable
    #define RADIO_SPI_SS_PIN 8 // radio SPI serial select

    Changes in MyConfig.h :
    #define DEBUG (obviously... :) )
    ...
    #define RF24_CE_PIN 7
    #define RF24_CS_PIN 8
    ....
    const uint8_t SOFT_SPI_MISO_PIN = 12;
    const uint8_t SOFT_SPI_MOSI_PIN = 11;
    const uint8_t SOFT_SPI_SCK_PIN = 13;

    Has anyone else been successful using the Arduino Ethernet as a MySensor gateway ? If so, what am I doing wrong here... ?

    Cheers & TIA !
    /T

    F 1 Reply Last reply
    0
    • TiasT Tias

      Hi !

      Trying to make my first gateway to work with no success.
      I found out (by adding some Serial.println() statements) it fails in rf24.isPVariant().
      Output (shown by the serial monitor) from MySensors is "0;0;3;0;9;radio init fail"
      I am rather sure I have wired my NRF24L01+ wrong since the Arduino Ethernet board does not have the exact same pin markings as listen in MySenbors,org.

      (Ethernet is correctly setup since in my sketch I can ping the Arduino from my PC without problem)

      My setup : Arduino Ethernet
      Arduino IDE : 1.6.5
      OS : Windows 10 Prof.
      MySensors library version : 1.5.4
      NRF devices are clearly the Plus version, chip is marked as
      NRF M
      24L01+
      1452AB

      Wiring (based on info I found here:
      Arduino NRF24
      GND GND
      3.3V Vcc
      Digital pin 7 CE
      Digital pin 8 CSN/CS
      SCK SCK
      MOSI MOSI
      MISO MISO
      IRQ Not connected

      Changes in the EthernetGateway sketch :
      #define RADIO_CE_PIN 7 // radio chip enable
      #define RADIO_SPI_SS_PIN 8 // radio SPI serial select

      Changes in MyConfig.h :
      #define DEBUG (obviously... :) )
      ...
      #define RF24_CE_PIN 7
      #define RF24_CS_PIN 8
      ....
      const uint8_t SOFT_SPI_MISO_PIN = 12;
      const uint8_t SOFT_SPI_MOSI_PIN = 11;
      const uint8_t SOFT_SPI_SCK_PIN = 13;

      Has anyone else been successful using the Arduino Ethernet as a MySensor gateway ? If so, what am I doing wrong here... ?

      Cheers & TIA !
      /T

      F Offline
      F Offline
      flopp
      wrote on last edited by
      #2

      @Tias
      Hi

      I am not sure
      But for CE you wrote 7 and in sketch it is 5?
      Try to change sketch to 7.

      Same about SPI, you wrote 8 and in sketch it is 4.

      1 Reply Last reply
      0
      • TiasT Offline
        TiasT Offline
        Tias
        wrote on last edited by
        #3

        Hi !

        Sorry, I tried both version 5 & 4 and then 7 & 8) so that's why I messed it up in my post.
        It is 7 & 8 (now corrected in my OP) based on the info for the Arduino Ethernet I linked to in tho OP.

        Cheers !

        F A 2 Replies Last reply
        0
        • TiasT Tias

          Hi !

          Sorry, I tried both version 5 & 4 and then 7 & 8) so that's why I messed it up in my post.
          It is 7 & 8 (now corrected in my OP) based on the info for the Arduino Ethernet I linked to in tho OP.

          Cheers !

          F Offline
          F Offline
          flopp
          wrote on last edited by
          #4

          @Tias
          Can you please copy your sketch here
          Easier for everyone to help you, maybe it can be something with soft pins?

          TiasT 1 Reply Last reply
          0
          • TiasT Tias

            Hi !

            Sorry, I tried both version 5 & 4 and then 7 & 8) so that's why I messed it up in my post.
            It is 7 & 8 (now corrected in my OP) based on the info for the Arduino Ethernet I linked to in tho OP.

            Cheers !

            A Offline
            A Offline
            anibaldiniz
            wrote on last edited by
            #5

            @Tias
            Hi, I'am using :

            in my application
            #define RADIO_CE_PIN 5 // radio chip enable
            #define RADIO_SPI_SS_PIN 6 // radio SPI serial select

            in MyConfig.h
            #define SOFTSPI
            #ifdef SOFTSPI
            // Define the soft SPI pins used for NRF radio

            const uint8_t SOFT_SPI_MISO_PIN =   12;          //A2       
            const uint8_t SOFT_SPI_MOSI_PIN = 11;            //A1         
            const uint8_t SOFT_SPI_SCK_PIN =  13;            //A0         
            

            #endif

            the connection NRF24l01 with Uno, MISO->A2
            MOSI->A1
            SCK ->A0
            CE -> D5
            CS-> D6

            1 Reply Last reply
            0
            • F flopp

              @Tias
              Can you please copy your sketch here
              Easier for everyone to help you, maybe it can be something with soft pins?

              TiasT Offline
              TiasT Offline
              Tias
              wrote on last edited by
              #6

              @flopp
              No Problem, here's my EthernetGateway.ino and below MyConfig.h :

              EthernetGateway.ino :

              #include <MyConfig.h>
              #include <MyHw.h>
              #include <MyHwATMega328.h>
              #include <MyHwESP8266.h>
              #include <MyMessage.h>
              #include <MyParser.h>
              #include <MyParserSerial.h>
              #include <MySensor.h>
              #include <MySigning.h>
              #include <MySigningAtsha204.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningNone.h>
              #include <MyTransport.h>
              #include <MyTransportNRF24.h>
              #include <MyTransportRFM69.h>
              #include <Version.h>
              
              #include <MyConfig.h>
              #include <MyHw.h>
              #include <MyHwATMega328.h>
              #include <MyHwESP8266.h>
              #include <MyMessage.h>
              #include <MyParser.h>
              #include <MyParserSerial.h>
              #include <MySensor.h>
              #include <MySigning.h>
              #include <MySigningAtsha204.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningNone.h>
              #include <MyTransport.h>
              #include <MyTransportNRF24.h>
              #include <MyTransportRFM69.h>
              #include <Version.h>
              
              #include <MyConfig.h>
              #include <MyHw.h>
              #include <MyHwATMega328.h>
              #include <MyHwESP8266.h>
              #include <MyMessage.h>
              #include <MyParser.h>
              #include <MyParserSerial.h>
              #include <MySensor.h>
              #include <MySigning.h>
              #include <MySigningAtsha204.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningNone.h>
              #include <MyTransport.h>
              #include <MyTransportNRF24.h>
              #include <MyTransportRFM69.h>
              #include <Version.h>
              
              #include <NewPing.h>
              
              #include <MyConfig.h>
              #include <MyHw.h>
              #include <MyHwATMega328.h>
              #include <MyHwESP8266.h>
              #include <MyMessage.h>
              #include <MyParser.h>
              #include <MyParserSerial.h>
              #include <MySensor.h>
              #include <MySigning.h>
              #include <MySigningAtsha204.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningNone.h>
              #include <MyTransport.h>
              #include <MyTransportNRF24.h>
              #include <MyTransportRFM69.h>
              #include <Version.h>
              
              #include <MyConfig.h>
              #include <MyHw.h>
              #include <MyHwATMega328.h>
              #include <MyHwESP8266.h>
              #include <MyMessage.h>
              #include <MyParser.h>
              #include <MyParserSerial.h>
              #include <MySensor.h>
              #include <MySigning.h>
              #include <MySigningAtsha204.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningNone.h>
              #include <MyTransport.h>
              #include <MyTransportNRF24.h>
              #include <MyTransportRFM69.h>
              #include <Version.h>
              
              /**
              * The MySensors Arduino library handles the wireless radio link and protocol
              * between your home built sensors/actuators and HA controller of choice.
              * The sensors forms a self healing radio network with optional repeaters. Each
              * repeater and gateway builds a routing tables in EEPROM which keeps track of the
              * network topology allowing messages to be routed to nodes.
              *
              * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
              * Copyright (C) 2013-2015 Sensnology AB
              * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
              *
              * Documentation: http://www.mysensors.org
              * Support Forum: http://forum.mysensors.org
              *
              * This program is free software; you can redistribute it and/or
              * modify it under the terms of the GNU General Public License
              * version 2 as published by the Free Software Foundation.
              *
              *******************************
              *
              * REVISION HISTORY
              * Version 1.0 - Henrik EKblad
              * Contribution by a-lurker and Anticimex, 
              * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
              *
              * 
              * DESCRIPTION
              * The EthernetGateway sends data received from sensors to the ethernet link. 
              * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
              *
              * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
              * 
              *
              * COMPILING WIZNET (W5100) ETHERNET MODULE
              * > Edit MyConfig.h in (libraries\MySensors\) to enable softspi (remove // before "#define SOFTSPI").
              *
              * COMPILING ENC28J60 ETHERNET MODULE
              * > Use Arduino IDE 1.5.7 (or later) 
              * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading. 
              * > Remove Ethernet.h include below and include UIPEthernet.h 
              * > Remove DigitalIO include 
              * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which means you have to choose a static IP for that module)
              *
              * VERA CONFIGURATION:
              * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
              * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
              *
              * LED purposes:
              * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h
              * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
              * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
              * - ERR (red) - fast blink on error during transmission error or recieve crc error  
              * 
              * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
              *
              */
              #define DEBUG 1
              #define NO_PORTB_PINCHANGES 
              
              #include <DigitalIO.h>     // This include can be removed when using UIPEthernet module  
              #include <SPI.h>  
              
              #include <MySigningNone.h>
              #include <MyTransportRFM69.h>
              #include <MyTransportNRF24.h>
              #include <MyHwATMega328.h>
              #include <MySigningAtsha204Soft.h>
              #include <MySigningAtsha204.h>
              
              #include <MyParserSerial.h>  
              #include <MySensor.h>  
              #include <stdarg.h>
              #include <PinChangeInt.h>
              #include "GatewayUtil.h"
              
              
              // Use this if you have attached a Ethernet ENC28J60 shields  
              // #include <UIPEthernet.h>  
              
              // Use this for WizNET W5100 module and Arduino Ethernet Shield 
              #include <Ethernet.h>   
              
              
              #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
              #define INCLUSION_MODE_PIN  3 // Digital pin used for inclusion mode button
              
              #define RADIO_CE_PIN        7  // radio chip enable
              #define RADIO_SPI_SS_PIN    8  // radio SPI serial select
              
              #define RADIO_ERROR_LED_PIN 7  // Error led pin
              #define RADIO_RX_LED_PIN    8  // Receive led pin
              #define RADIO_TX_LED_PIN    9  // the PCB, on board LED
              
              
              // NRFRF24L01 radio driver (set low transmit power by default) 
              MyTransportNRF24 transport(RADIO_CE_PIN, RADIO_SPI_SS_PIN, RF24_PA_LEVEL_GW);  
              //MyTransportRFM69 transport;
              
              // Message signing driver (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
              //MySigningNone signer;
              //MySigningAtsha204Soft signer;
              //MySigningAtsha204 signer;
              
              // Hardware profile 
              MyHwATMega328 hw;
              
              // Construct MySensors library (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
              // To use LEDs blinking, uncomment WITH_LEDS_BLINKING in MyConfig.h
              #ifdef WITH_LEDS_BLINKING
              MySensor gw(transport, hw /*, signer*/, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);
              #else
              MySensor gw(transport, hw /*, signer*/);
              #endif
              
              
              #define IP_PORT 5003        // The port you want to open 
              IPAddress myIp (192, 168, 1, 89);  // Configure your static ip-address here    COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later!
              
              // 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.
              byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x45, 0x5F };  // DEAD BEEF FEED
              
              // a R/W server on the port
              EthernetServer server = EthernetServer(IP_PORT);
              // handle to open connection
              EthernetClient client = EthernetClient();
              
              char inputString[MAX_RECEIVE_LENGTH] = "";    // A string to hold incoming commands from serial/ethernet interface
              int inputPos = 0;
              bool sentReady = false;
              
              void output(const char *fmt, ... )
              {
                va_list args;
                va_start (args, fmt );
                vsnprintf_P(serialBuffer, MAX_SEND_LENGTH, fmt, args);
                va_end (args);
                Serial.print(serialBuffer);
                server.write(serialBuffer);
              }
              
              void setup()  
              { 
               Serial.begin(115200);//MT: Without this, I don't get any debug msgs on the serial port.
              
               Ethernet.begin(mac, myIp);
              
               setupGateway(INCLUSION_MODE_PIN, INCLUSION_MODE_TIME, output);
              
               // Add interrupt for inclusion button to pin
               PCintPort::attachInterrupt(pinInclusion, startInclusionInterrupt, RISING);
              
               // give the Ethernet interface a second to initialize
               delay(1000);
              
               // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
               gw.begin(incomingMessage, 0, true, 0);
               
               // start listening for clients
               server.begin();
              }
              
              void loop()
              {
               gw.process();  
               
               checkButtonTriggeredInclusion();
               checkInclusionFinished();
              
               // if an incoming client connects, there will be
               // bytes available to read via the client object
               EthernetClient newclient = server.available();
               // if a new client connects make sure to dispose any previous existing sockets
               if (newclient)
               {
                   if (client != newclient)
                   {
                    client.stop();
                    client = newclient;
                    output(PSTR("0;0;%d;0;%d;Gateway startup complete.\n"),  C_INTERNAL, I_GATEWAY_READY);
                  }
                }
              
                if (client)
                {
                  if (!client.connected())
                  {
                    client.stop();
                  }
                  else if (client.available())
                  { 
                    // read the bytes incoming from the client
                    char inChar = client.read();
                    if (inputPos<MAX_RECEIVE_LENGTH-1)
                    { 
                      // if newline then command is complete
                      if (inChar == '\n')
                      {  
                        Serial.println("Finished");
                         // a command was issued by the client
                         // we will now try to send it to the actuator
                         inputString[inputPos] = 0;
                   
                         // echo the string to the serial port
                         Serial.print(inputString);
                   
                         parseAndSend(gw, inputString);
                   
                         // clear the string:
                         inputPos = 0;
                      }
                      else
                      {  
                        // add it to the inputString:
                        inputString[inputPos] = inChar;
                        inputPos++;
                      }
                   }
                   else
                   {
                      // Incoming message too long. Throw away 
                      inputPos = 0;
                   }
                 }
               }
              }
              

              MyConfig.h :

              /**
               * The MySensors Arduino library handles the wireless radio link and protocol
               * between your home built sensors/actuators and HA controller of choice.
               * The sensors forms a self healing radio network with optional repeaters. Each
               * repeater and gateway builds a routing tables in EEPROM which keeps track of the
               * network topology allowing messages to be routed to nodes.
               *
               * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
               * Copyright (C) 2013-2015 Sensnology AB
               * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
               *
               * Documentation: http://www.mysensors.org
               * Support Forum: http://forum.mysensors.org
               *
               * This program is free software; you can redistribute it and/or
               * modify it under the terms of the GNU General Public License
               * version 2 as published by the Free Software Foundation.
               */
              
              
              #ifndef MyConfig_h
              #define MyConfig_h
              #include <stdint.h>
              
              // Enable debug flag for debug prints. This will add a lot to the size of the final sketch but good
              // to see what is actually is happening when developing
              #define DEBUG
              
              // Disable this line, If you are using TX(1), RX(0) as normal I/O pin
              #define ENABLED_SERIAL
              
              // Serial output baud rate (for debug prints and serial gateway)
              #define BAUD_RATE 115200
              
              
              /**********************************
              *  Over the air firmware updates
              ***********************************/
              
              // The following define enables the safe over-the-air firmware update feature
              // which requires external flash and the DualOptiBoot bootloader.
              // Note: You can still have OTA FW updates without external flash but it
              // requires the MYSBootloader and disabled MY_OTA_FIRMWARE_FEATURE
              //#define MY_OTA_FIRMWARE_FEATURE
              // Slave select pin for external flash
              #define MY_OTA_FLASH_SS 8
              // Flash jdecid
              #define MY_OTA_FLASH_JDECID 0x1F65
              
              
              /**********************************
              *  Information LEDs blinking
              ***********************************/
              // This feature enables LEDs blinking on message receive, transmit
              // or if some error occured. This was commonly used only in gateways,
              // but now can be used in any sensor node. Also the LEDs can now be
              // disabled in the gateway.
              
              //#define WITH_LEDS_BLINKING
              
              // The following setting allows you to inverse the blinking feature WITH_LEDS_BLINKING
              // When WITH_LEDS_BLINKING_INVERSE is enabled LEDSs are normally turned on and switches
              // off when blinking
              
              //#define WITH_LEDS_BLINKING_INVERSE
              
              
              // default LEDs blinking period in milliseconds
              #define DEFAULT_LED_BLINK_PERIOD 300
              // The RX LED default pin
              #define DEFAULT_RX_LED_PIN 6
              // The TX LED default pin
              #define DEFAULT_TX_LED_PIN 5
              // The Error LED default pin
              #define DEFAULT_ERR_LED_PIN 4
              
              
              /**********************************
              *  Message Signing Settings
              ***********************************/
              // Disable to completly disable signing functionality in library
              //#define MY_SIGNING_FEATURE
              
              // Define a suitable timeout for a signature verification session
              // Consider the turnaround from a nonce being generated to a signed message being received
              // which might vary, especially in networks with many hops. 5s ought to be enough for anyone.
              #define MY_VERIFICATION_TIMEOUT_MS 5000
              
              // Enable to turn on whitelisting
              // When enabled, a signing node will salt the signature with it's unique signature and nodeId.
              // The verifying node will look up the sender in a local table of trusted nodes and
              // do the corresponding salting in order to verify the signature.
              // For this reason, if whitelisting is enabled on one of the nodes in a sign-verify pair, both
              // nodes have to implement whitelisting for this to work.
              // Note that a node can still transmit a non-salted message (i.e. have whitelisting disabled)
              // to a node that has whitelisting enabled (assuming the receiver does not have a matching entry
              // for the sender in it's whitelist)
              //#define MY_SECURE_NODE_WHITELISTING
              
              // MySigningAtsha204 default setting
              #define MY_ATSHA204_PIN 17 // A3 - pin where ATSHA204 is attached
              
              // MySigningAtsha204Soft default settings
              #define MY_RANDOMSEED_PIN 6 // A7 - Pin used for random generation (do not connect anything to this)
              
              // Key to use for HMAC calculation in MySigningAtsha204Soft (32 bytes)
              #define MY_HMAC_KEY 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
              
              /**********************************
              *  NRF24L01 Driver Defaults
              ***********************************/
              #define RF24_CE_PIN		   7
              #define RF24_CS_PIN		   8
              #define RF24_PA_LEVEL 	   RF24_PA_MAX
              #define RF24_PA_LEVEL_GW   RF24_PA_LOW
              // RF channel for the sensor net, 0-127
              #define RF24_CHANNEL	   76
              //RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
              #define RF24_DATARATE 	   RF24_250KBPS
              // This is also act as base value for sensor nodeId addresses. Change this (or channel) if you have more than one sensor network.
              #define RF24_BASE_RADIO_ID ((uint64_t)0xA8A8E1FC00LL)
              
              // Enable SOFTSPI for NRF24L01 when using the W5100 Ethernet module
              #define SOFTSPI
              #ifdef SOFTSPI
              	  // Define the soft SPI pins used for NRF radio
              	  const uint8_t SOFT_SPI_MISO_PIN = 12;
                  const uint8_t SOFT_SPI_MOSI_PIN = 11;
                  const uint8_t SOFT_SPI_SCK_PIN = 13;
              #endif
              
              
              /**********************************
              *  RFM69 Driver Defaults
              ***********************************/
              // Default network id. Use the same for all nodes that will talk to each other
              #define RFM69_NETWORKID     100
              
              // Default frequency to use. This must match the hardware version of the RFM69 radio (uncomment one):
              // #define RFM69_FREQUENCY   RF69_433MHZ
              #define RFM69_FREQUENCY   RF69_868MHZ
              //#define FREQUENCY     RF69_915MHZ
              
              // Enable this for encryption of packets
              //#define RFM69_ENABLE_ENCRYPTION
              #define RFM69_ENCRYPTKEY    "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
              
              
              
              
              #endif
              
              A 1 Reply Last reply
              0
              • TiasT Tias

                @flopp
                No Problem, here's my EthernetGateway.ino and below MyConfig.h :

                EthernetGateway.ino :

                #include <MyConfig.h>
                #include <MyHw.h>
                #include <MyHwATMega328.h>
                #include <MyHwESP8266.h>
                #include <MyMessage.h>
                #include <MyParser.h>
                #include <MyParserSerial.h>
                #include <MySensor.h>
                #include <MySigning.h>
                #include <MySigningAtsha204.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningNone.h>
                #include <MyTransport.h>
                #include <MyTransportNRF24.h>
                #include <MyTransportRFM69.h>
                #include <Version.h>
                
                #include <MyConfig.h>
                #include <MyHw.h>
                #include <MyHwATMega328.h>
                #include <MyHwESP8266.h>
                #include <MyMessage.h>
                #include <MyParser.h>
                #include <MyParserSerial.h>
                #include <MySensor.h>
                #include <MySigning.h>
                #include <MySigningAtsha204.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningNone.h>
                #include <MyTransport.h>
                #include <MyTransportNRF24.h>
                #include <MyTransportRFM69.h>
                #include <Version.h>
                
                #include <MyConfig.h>
                #include <MyHw.h>
                #include <MyHwATMega328.h>
                #include <MyHwESP8266.h>
                #include <MyMessage.h>
                #include <MyParser.h>
                #include <MyParserSerial.h>
                #include <MySensor.h>
                #include <MySigning.h>
                #include <MySigningAtsha204.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningNone.h>
                #include <MyTransport.h>
                #include <MyTransportNRF24.h>
                #include <MyTransportRFM69.h>
                #include <Version.h>
                
                #include <NewPing.h>
                
                #include <MyConfig.h>
                #include <MyHw.h>
                #include <MyHwATMega328.h>
                #include <MyHwESP8266.h>
                #include <MyMessage.h>
                #include <MyParser.h>
                #include <MyParserSerial.h>
                #include <MySensor.h>
                #include <MySigning.h>
                #include <MySigningAtsha204.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningNone.h>
                #include <MyTransport.h>
                #include <MyTransportNRF24.h>
                #include <MyTransportRFM69.h>
                #include <Version.h>
                
                #include <MyConfig.h>
                #include <MyHw.h>
                #include <MyHwATMega328.h>
                #include <MyHwESP8266.h>
                #include <MyMessage.h>
                #include <MyParser.h>
                #include <MyParserSerial.h>
                #include <MySensor.h>
                #include <MySigning.h>
                #include <MySigningAtsha204.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningNone.h>
                #include <MyTransport.h>
                #include <MyTransportNRF24.h>
                #include <MyTransportRFM69.h>
                #include <Version.h>
                
                /**
                * The MySensors Arduino library handles the wireless radio link and protocol
                * between your home built sensors/actuators and HA controller of choice.
                * The sensors forms a self healing radio network with optional repeaters. Each
                * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                * network topology allowing messages to be routed to nodes.
                *
                * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                * Copyright (C) 2013-2015 Sensnology AB
                * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                *
                * Documentation: http://www.mysensors.org
                * Support Forum: http://forum.mysensors.org
                *
                * This program is free software; you can redistribute it and/or
                * modify it under the terms of the GNU General Public License
                * version 2 as published by the Free Software Foundation.
                *
                *******************************
                *
                * REVISION HISTORY
                * Version 1.0 - Henrik EKblad
                * Contribution by a-lurker and Anticimex, 
                * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
                *
                * 
                * DESCRIPTION
                * The EthernetGateway sends data received from sensors to the ethernet link. 
                * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
                *
                * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
                * 
                *
                * COMPILING WIZNET (W5100) ETHERNET MODULE
                * > Edit MyConfig.h in (libraries\MySensors\) to enable softspi (remove // before "#define SOFTSPI").
                *
                * COMPILING ENC28J60 ETHERNET MODULE
                * > Use Arduino IDE 1.5.7 (or later) 
                * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading. 
                * > Remove Ethernet.h include below and include UIPEthernet.h 
                * > Remove DigitalIO include 
                * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which means you have to choose a static IP for that module)
                *
                * VERA CONFIGURATION:
                * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
                * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
                *
                * LED purposes:
                * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h
                * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
                * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
                * - ERR (red) - fast blink on error during transmission error or recieve crc error  
                * 
                * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
                *
                */
                #define DEBUG 1
                #define NO_PORTB_PINCHANGES 
                
                #include <DigitalIO.h>     // This include can be removed when using UIPEthernet module  
                #include <SPI.h>  
                
                #include <MySigningNone.h>
                #include <MyTransportRFM69.h>
                #include <MyTransportNRF24.h>
                #include <MyHwATMega328.h>
                #include <MySigningAtsha204Soft.h>
                #include <MySigningAtsha204.h>
                
                #include <MyParserSerial.h>  
                #include <MySensor.h>  
                #include <stdarg.h>
                #include <PinChangeInt.h>
                #include "GatewayUtil.h"
                
                
                // Use this if you have attached a Ethernet ENC28J60 shields  
                // #include <UIPEthernet.h>  
                
                // Use this for WizNET W5100 module and Arduino Ethernet Shield 
                #include <Ethernet.h>   
                
                
                #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
                #define INCLUSION_MODE_PIN  3 // Digital pin used for inclusion mode button
                
                #define RADIO_CE_PIN        7  // radio chip enable
                #define RADIO_SPI_SS_PIN    8  // radio SPI serial select
                
                #define RADIO_ERROR_LED_PIN 7  // Error led pin
                #define RADIO_RX_LED_PIN    8  // Receive led pin
                #define RADIO_TX_LED_PIN    9  // the PCB, on board LED
                
                
                // NRFRF24L01 radio driver (set low transmit power by default) 
                MyTransportNRF24 transport(RADIO_CE_PIN, RADIO_SPI_SS_PIN, RF24_PA_LEVEL_GW);  
                //MyTransportRFM69 transport;
                
                // Message signing driver (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
                //MySigningNone signer;
                //MySigningAtsha204Soft signer;
                //MySigningAtsha204 signer;
                
                // Hardware profile 
                MyHwATMega328 hw;
                
                // Construct MySensors library (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
                // To use LEDs blinking, uncomment WITH_LEDS_BLINKING in MyConfig.h
                #ifdef WITH_LEDS_BLINKING
                MySensor gw(transport, hw /*, signer*/, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);
                #else
                MySensor gw(transport, hw /*, signer*/);
                #endif
                
                
                #define IP_PORT 5003        // The port you want to open 
                IPAddress myIp (192, 168, 1, 89);  // Configure your static ip-address here    COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later!
                
                // 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.
                byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x45, 0x5F };  // DEAD BEEF FEED
                
                // a R/W server on the port
                EthernetServer server = EthernetServer(IP_PORT);
                // handle to open connection
                EthernetClient client = EthernetClient();
                
                char inputString[MAX_RECEIVE_LENGTH] = "";    // A string to hold incoming commands from serial/ethernet interface
                int inputPos = 0;
                bool sentReady = false;
                
                void output(const char *fmt, ... )
                {
                  va_list args;
                  va_start (args, fmt );
                  vsnprintf_P(serialBuffer, MAX_SEND_LENGTH, fmt, args);
                  va_end (args);
                  Serial.print(serialBuffer);
                  server.write(serialBuffer);
                }
                
                void setup()  
                { 
                 Serial.begin(115200);//MT: Without this, I don't get any debug msgs on the serial port.
                
                 Ethernet.begin(mac, myIp);
                
                 setupGateway(INCLUSION_MODE_PIN, INCLUSION_MODE_TIME, output);
                
                 // Add interrupt for inclusion button to pin
                 PCintPort::attachInterrupt(pinInclusion, startInclusionInterrupt, RISING);
                
                 // give the Ethernet interface a second to initialize
                 delay(1000);
                
                 // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
                 gw.begin(incomingMessage, 0, true, 0);
                 
                 // start listening for clients
                 server.begin();
                }
                
                void loop()
                {
                 gw.process();  
                 
                 checkButtonTriggeredInclusion();
                 checkInclusionFinished();
                
                 // if an incoming client connects, there will be
                 // bytes available to read via the client object
                 EthernetClient newclient = server.available();
                 // if a new client connects make sure to dispose any previous existing sockets
                 if (newclient)
                 {
                     if (client != newclient)
                     {
                      client.stop();
                      client = newclient;
                      output(PSTR("0;0;%d;0;%d;Gateway startup complete.\n"),  C_INTERNAL, I_GATEWAY_READY);
                    }
                  }
                
                  if (client)
                  {
                    if (!client.connected())
                    {
                      client.stop();
                    }
                    else if (client.available())
                    { 
                      // read the bytes incoming from the client
                      char inChar = client.read();
                      if (inputPos<MAX_RECEIVE_LENGTH-1)
                      { 
                        // if newline then command is complete
                        if (inChar == '\n')
                        {  
                          Serial.println("Finished");
                           // a command was issued by the client
                           // we will now try to send it to the actuator
                           inputString[inputPos] = 0;
                     
                           // echo the string to the serial port
                           Serial.print(inputString);
                     
                           parseAndSend(gw, inputString);
                     
                           // clear the string:
                           inputPos = 0;
                        }
                        else
                        {  
                          // add it to the inputString:
                          inputString[inputPos] = inChar;
                          inputPos++;
                        }
                     }
                     else
                     {
                        // Incoming message too long. Throw away 
                        inputPos = 0;
                     }
                   }
                 }
                }
                

                MyConfig.h :

                /**
                 * The MySensors Arduino library handles the wireless radio link and protocol
                 * between your home built sensors/actuators and HA controller of choice.
                 * The sensors forms a self healing radio network with optional repeaters. Each
                 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                 * network topology allowing messages to be routed to nodes.
                 *
                 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                 * Copyright (C) 2013-2015 Sensnology AB
                 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                 *
                 * Documentation: http://www.mysensors.org
                 * Support Forum: http://forum.mysensors.org
                 *
                 * This program is free software; you can redistribute it and/or
                 * modify it under the terms of the GNU General Public License
                 * version 2 as published by the Free Software Foundation.
                 */
                
                
                #ifndef MyConfig_h
                #define MyConfig_h
                #include <stdint.h>
                
                // Enable debug flag for debug prints. This will add a lot to the size of the final sketch but good
                // to see what is actually is happening when developing
                #define DEBUG
                
                // Disable this line, If you are using TX(1), RX(0) as normal I/O pin
                #define ENABLED_SERIAL
                
                // Serial output baud rate (for debug prints and serial gateway)
                #define BAUD_RATE 115200
                
                
                /**********************************
                *  Over the air firmware updates
                ***********************************/
                
                // The following define enables the safe over-the-air firmware update feature
                // which requires external flash and the DualOptiBoot bootloader.
                // Note: You can still have OTA FW updates without external flash but it
                // requires the MYSBootloader and disabled MY_OTA_FIRMWARE_FEATURE
                //#define MY_OTA_FIRMWARE_FEATURE
                // Slave select pin for external flash
                #define MY_OTA_FLASH_SS 8
                // Flash jdecid
                #define MY_OTA_FLASH_JDECID 0x1F65
                
                
                /**********************************
                *  Information LEDs blinking
                ***********************************/
                // This feature enables LEDs blinking on message receive, transmit
                // or if some error occured. This was commonly used only in gateways,
                // but now can be used in any sensor node. Also the LEDs can now be
                // disabled in the gateway.
                
                //#define WITH_LEDS_BLINKING
                
                // The following setting allows you to inverse the blinking feature WITH_LEDS_BLINKING
                // When WITH_LEDS_BLINKING_INVERSE is enabled LEDSs are normally turned on and switches
                // off when blinking
                
                //#define WITH_LEDS_BLINKING_INVERSE
                
                
                // default LEDs blinking period in milliseconds
                #define DEFAULT_LED_BLINK_PERIOD 300
                // The RX LED default pin
                #define DEFAULT_RX_LED_PIN 6
                // The TX LED default pin
                #define DEFAULT_TX_LED_PIN 5
                // The Error LED default pin
                #define DEFAULT_ERR_LED_PIN 4
                
                
                /**********************************
                *  Message Signing Settings
                ***********************************/
                // Disable to completly disable signing functionality in library
                //#define MY_SIGNING_FEATURE
                
                // Define a suitable timeout for a signature verification session
                // Consider the turnaround from a nonce being generated to a signed message being received
                // which might vary, especially in networks with many hops. 5s ought to be enough for anyone.
                #define MY_VERIFICATION_TIMEOUT_MS 5000
                
                // Enable to turn on whitelisting
                // When enabled, a signing node will salt the signature with it's unique signature and nodeId.
                // The verifying node will look up the sender in a local table of trusted nodes and
                // do the corresponding salting in order to verify the signature.
                // For this reason, if whitelisting is enabled on one of the nodes in a sign-verify pair, both
                // nodes have to implement whitelisting for this to work.
                // Note that a node can still transmit a non-salted message (i.e. have whitelisting disabled)
                // to a node that has whitelisting enabled (assuming the receiver does not have a matching entry
                // for the sender in it's whitelist)
                //#define MY_SECURE_NODE_WHITELISTING
                
                // MySigningAtsha204 default setting
                #define MY_ATSHA204_PIN 17 // A3 - pin where ATSHA204 is attached
                
                // MySigningAtsha204Soft default settings
                #define MY_RANDOMSEED_PIN 6 // A7 - Pin used for random generation (do not connect anything to this)
                
                // Key to use for HMAC calculation in MySigningAtsha204Soft (32 bytes)
                #define MY_HMAC_KEY 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                
                /**********************************
                *  NRF24L01 Driver Defaults
                ***********************************/
                #define RF24_CE_PIN		   7
                #define RF24_CS_PIN		   8
                #define RF24_PA_LEVEL 	   RF24_PA_MAX
                #define RF24_PA_LEVEL_GW   RF24_PA_LOW
                // RF channel for the sensor net, 0-127
                #define RF24_CHANNEL	   76
                //RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
                #define RF24_DATARATE 	   RF24_250KBPS
                // This is also act as base value for sensor nodeId addresses. Change this (or channel) if you have more than one sensor network.
                #define RF24_BASE_RADIO_ID ((uint64_t)0xA8A8E1FC00LL)
                
                // Enable SOFTSPI for NRF24L01 when using the W5100 Ethernet module
                #define SOFTSPI
                #ifdef SOFTSPI
                	  // Define the soft SPI pins used for NRF radio
                	  const uint8_t SOFT_SPI_MISO_PIN = 12;
                    const uint8_t SOFT_SPI_MOSI_PIN = 11;
                    const uint8_t SOFT_SPI_SCK_PIN = 13;
                #endif
                
                
                /**********************************
                *  RFM69 Driver Defaults
                ***********************************/
                // Default network id. Use the same for all nodes that will talk to each other
                #define RFM69_NETWORKID     100
                
                // Default frequency to use. This must match the hardware version of the RFM69 radio (uncomment one):
                // #define RFM69_FREQUENCY   RF69_433MHZ
                #define RFM69_FREQUENCY   RF69_868MHZ
                //#define FREQUENCY     RF69_915MHZ
                
                // Enable this for encryption of packets
                //#define RFM69_ENABLE_ENCRYPTION
                #define RFM69_ENCRYPTKEY    "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
                
                
                
                
                #endif
                
                A Offline
                A Offline
                anibaldiniz
                wrote on last edited by
                #7

                @Tias
                Your Arduino is Mega?????

                TiasT 1 Reply Last reply
                0
                • A anibaldiniz

                  @Tias
                  Your Arduino is Mega?????

                  TiasT Offline
                  TiasT Offline
                  Tias
                  wrote on last edited by
                  #8

                  @anibaldiniz
                  Nope, it's an Arduino Ethernet (there's a link to it in my OP above).

                  TiasT 1 Reply Last reply
                  0
                  • TiasT Tias

                    @anibaldiniz
                    Nope, it's an Arduino Ethernet (there's a link to it in my OP above).

                    TiasT Offline
                    TiasT Offline
                    Tias
                    wrote on last edited by
                    #9

                    @Tias
                    Right, I gave up and got an Arduino Nano to use as a Serial gateway instead.

                    It's initializing ok and entering the loop() but presents other issues, however, that's for another thread.

                    Cheers & thanks !
                    /T

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


                    21

                    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