Raspberry Gateway + Arduino pro mini (atmega328p) NRF24L01 (without plus +)



  • I have difficulties about following setup:
    I have a controller home assisitant.
    It runs on raspbery pi 3.
    On the same I have a serial gateway MySensors (just attached NRF24L01 (without plus!) on it.
    I have an (atmega328p) like arduino pro mini as node with a motion sensor attached.
    I'm trying to "connect" the node to the gateway but without success.
    Btw I have tested other different gettingstarted scripts with this radios and they are working fine.

    Here is the output of the gateway:

    pi@RP3HA:~/MySensors $ sudo ./bin/mysgw -d
    mysgw: Starting gateway...
    mysgw: Protocol version - 2.2.0-beta
    mysgw: MCO:BGN:INIT GW,CP=RNNG----,VER=2.2.0-beta
    mysgw: TSF:LRT:OK
    mysgw: TSM:INIT
    mysgw: TSF:WUR:MS=0
    mysgw: TSM:INIT:TSP OK
    mysgw: TSM:INIT:GW MODE
    mysgw: TSM:READY:ID=0,PAR=0,DIS=0
    mysgw: MCO:REG:NOT NEEDED
    mysgw: MCO:BGN:STP
    mysgw: MCO:BGN:INIT OK,TSP=1
    

    Here is the serial output of the node:

    0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
    3 TSM:INIT
    4 TSF:WUR:MS=0
    11 TSM:INIT:TSP OK
    13 TSM:FPAR
    1611 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    3619 !TSM:FPAR:NO REPLY
    3621 TSM:FPAR
    5221 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    7229 !TSM:FPAR:NO REPLY
    7231 TSM:FPAR
    

    On Raspberry only change that I have done is in MyConfig.h

    #define MY_RF24_DATARATE				RF24_2MBPS
    

    Here is the code on the node:

    /**
     * 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
     *
     * DESCRIPTION
     * Motion Sensor example using HC-SR501
     * http://www.mysensors.org/build/motion
     *
     */
    
    // Enable debug prints
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    
    #include <SPI.h>
    #include <MySensors.h>
    #include <MyConfig.h>
    #define MY_RF24_CE_PIN 6
    #define MY_RF24_CS_PIN 10
    //#define MY_RF24_PA_LEVEL RF24_PA_LOW
    #define MY_RF24_DATARATE RF24_2MBPS
    
    //unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
    #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
    #define CHILD_ID 11   // Id of the sensor child
    
    // Initialize motion message
    MyMessage msg(CHILD_ID, V_TRIPPED);
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
      Serial.println(F("Setup"));
    }
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Motion Sensor", "1.0");
    
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID, S_MOTION);
      Serial.println(F("Presentation"));
    }
    
    void loop()
    {
      Serial.println(F("loop"));
      // Read digital motion value
      bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
    
      Serial.println(tripped);
      send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
    
      // Sleep until interrupt comes in on motion sensor. Send update every two minute.
    //  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
    }
    
    

    I want to see some serial print, but there is nothing comming ever with this code.
    On getting started, I receive the serial print.


  • Mod

    @alop all MySensors defines need to be before including MySensors.h.

    Move them and upload the sketch again should be all you need.



  • Unfortunatelly not.
    Same result

    0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
    3 TSM:INIT
    4 TSF:WUR:MS=0
    11 TSM:INIT:TSP OK
    13 TSF:SID:OK,ID=1
    14 TSM:FPAR
    1613 TSF:MSG:SEND,1-1-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    3621 !TSM:FPAR:NO REPLY
    3623 TSM:FPAR
    5223 TSF:MSG:SEND,1-1-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    7230 !TSM:FPAR:NO REPLY
    7232 TSM:FPAR
    8832 TSF:MSG:SEND,1-1-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    10839 !TSM:FPAR:NO REPLY
    

    And here is the code:

    /**
     * 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
     *
     * DESCRIPTION
     * Motion Sensor example using HC-SR501
     * http://www.mysensors.org/build/motion
     *
     */
    
    // Enable debug prints
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    
    
    #define MY_RF24_CE_PIN 6
    #define MY_RF24_CS_PIN 10
    //#define MY_RF24_PA_LEVEL RF24_PA_LOW
    #define MY_RF24_DATARATE RF24_2MBPS
    
    unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
    #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
    #define CHILD_ID 11   // Id of the sensor child
    
    #include <SPI.h>
    #include <MySensors.h>
    #include <MyConfig.h>
    
    // Initialize motion message
    MyMessage msg(CHILD_ID, V_TRIPPED);
    
    void setup()
    {
      Serial.begin(115200);
      pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
      Serial.println(F("Setup"));
    }
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Motion Sensor", "1.0");
    
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID, S_MOTION);
      Serial.println(F("Presentation"));
    }
    
    void loop()
    {
      Serial.println(F("loop"));
      // Read digital motion value
      bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
    
      Serial.println(tripped);
      send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
    
      // Sleep until interrupt comes in on motion sensor. Send update every two minute.
      sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
    }
    
    

  • Hardware Contributor

    @alop said in Raspberry Gateway + Arduino pro mini (atmega328p) NRF24L01 (without plus +):

    !TSM:FPAR:NO REPLY

    This means "no potential parents replied to find parent request" so pretty much the node and the gw doesnt talk to each other. Why? Well, it looks like the radios is initialized if im right but either its a range issue (to long between, or sometimes even to close so they over-shout eachother) and it could be a power issue. The most important thing is that you have capacitors on the radio.

    How do you power the radios?



  • @sundberg84
    I dont have capacitors on radios.
    The distance between radios is 20-30 cm.
    Raspberry radio is powered from raspberry.
    On Arduino i have additional power supply 5v for the motion sensor.
    Arduino is powered through USB.

    Am I assuming right, that on raspberry when there is no configure parameter for something, I just change it in MyConfig.h and "make" again?

    I had the same hardware setup tested with gettingstarted and the communication was established.


  • Mod

    @alop you'll have a hard time getting help from anyone until you have capacitors on the radios. Power issues are the top 1, 2, 3, 4 and 5 issues if you look at the problems people are having. Yes, sometimes it works with a very simple example. No that does not mean that your power is stable enough.

    https://www.mysensors.org/build/raspberry#advanced shows how to set defines if you don't want to modify MyConfig.h, but modifying MyConfig.h also works. I prefer the -D variant because then I can easily switch MySensors versions in git without having to re-apply the changes.



  • @mfalkvidd OK. I just bought some 4.7 capacitors :)
    I'll make the setup with them.

    @mfalkvidd said in Raspberry Gateway + Arduino pro mini (atmega328p) NRF24L01 (without plus +):

    https://www.mysensors.org/build/raspberry#advanced shows how to set defines if you don't want to modify MyConfig.h, but modifying MyConfig.h also works. I prefer the -D variant because then I can easily switch MySensors versions in git without having to re-apply the changes.

    Just to clerify, if I change MyConfig.h on raspberry it is not enough just to save the file and "build" the gateway with other parameters?
    Maybe this is why I dont receive any signal.


  • Mod

    @alop geat.
    Until you have the capacitors in place, see if sundberg's advice on moving the nodes apart helps, about 2-3 meters. The signal can become too strong.



  • @mfalkvidd
    Just in general: What is the procedure if I change the MyConfig.h on raspberry?


  • Mod

    @alop edit it with your favorite editor?



  • @mfalkvidd Ok, so far :)
    But do I need to "compile", "build", "make" something so that changes in MyConfig.h will be taken?


  • Mod

    @alop ok :)

    I think make is sufficient (and make install if you want the new binary installed).

    make is smart enough to recompile everything that has been modified.



  • @mfalkvidd
    Unfortunatelly no change after adding capacitor :(
    Now I have bought NRF24L01 WITH Plus and I'm trying with them.
    I have reinstalled from skratch everything.
    Gateway and sensor are now ca. 3-4 meters appart.

    Sketch on atmega328p (light sensor)

    /**
     * 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
     *
     * DESCRIPTION
     * Example sketch showing how to measue light level using a LM393 photo-resistor
     * http://www.mysensors.org/build/light
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #include <MySensors.h>
    
    #define CHILD_ID_LIGHT 15
    #define LIGHT_SENSOR_ANALOG_PIN 0
    
    unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
    
    MyMessage msg(CHILD_ID_LIGHT, V_LIGHT_LEVEL);
    int lastLightLevel;
    
    
    void presentation()
    {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Light Sensor", "1.0");
    
        // Register all sensors to gateway (they will be created as child devices)
        present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);
    }
    
    void loop()
    {
        int16_t lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23;
        Serial.println(lightLevel);
        if (lightLevel != lastLightLevel) {
            send(msg.set(lightLevel));
            lastLightLevel = lightLevel;
        }
        sleep(SLEEP_TIME);
    }
    

    On raspberry

    ./configure --my-transport=nrf24 --my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttyUSB020
    

    Serial on the sensor

    114445 !TSM:FPAR:NO REPLY
    114447 TSM:FPAR
    114449 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    116457 !TSM:FPAR:FAIL
    116459 TSM:FAIL:CNT=7
    116461 TSM:FAIL:DIS
    116463 TSF:TDI:TSL
    176465 TSM:FAIL:RE-INIT
    176467 TSM:INIT
    176475 TSM:INIT:TSP OK
    176477 TSM:FPAR
    176479 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    178487 !TSM:FPAR:NO REPLY
    178489 TSM:FPAR
    178491 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    180499 !TSM:FPAR:NO REPLY
    180501 TSM:FPAR
    180503 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    182511 !TSM:FPAR:NO REPLY
    182513 TSM:FPAR
    182515 TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    

    on raspberry

    
    pi@RP3HA:~/MySensors $ sudo ./bin/mysgw -d
    mysgw: Starting gateway...
    mysgw: Protocol version - 2.2.0-beta
    mysgw: MCO:BGN:INIT GW,CP=RNNG----,VER=2.2.0-beta
    mysgw: TSF:LRT:OK
    mysgw: TSM:INIT
    mysgw: TSF:WUR:MS=0
    mysgw: TSM:INIT:TSP OK
    mysgw: TSM:INIT:GW MODE
    mysgw: TSM:READY:ID=0,PAR=0,DIS=0
    mysgw: MCO:REG:NOT NEEDED
    mysgw: MCO:BGN:STP
    mysgw: MCO:BGN:INIT OK,TSP=1
    

    And on my home automation (home assistant)

    2017-07-22 13:00:19 ERROR (Thread-13) [mysensors.gateway_serial] Unable to connect to /dev/ttyUSB020
    

    Update:
    After 15-20 minutes running the gateway I received following lines:

    mysgw: TSF:SAN:OK
    mysgw: TSM:READY:NWD REQ
    mysgw: TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK:
    


  • It's a workaroud, but not "nice".
    Since I have no problem on creating gateway on another arduino pro mini, I just connected per USB the arduino to RP3 and everything is working fine.
    So sensors can be read by a controller (home assistant).
    Big downside is, that for pro mini I have to use usb to ttl convertor in between.
    Maybe the code for raspberry is with bugs, since to be able to see my rf radio on raspberry I had to install the "development" branch.


  • Mod

    the development branch works well, why don't you use it on the RPI?



  • @gohan As described above, there was no connection between serial gateway on RPi und sensor nodes.
    Above is the whole setup described. Wiring is taken from the mysensors web site.


  • Mod

    I am referring to create an ethernet gw running on the RPI instead of a serial gw.



  • @gohan I do not have ethernet hardware. I just wanted to connect radio directly to RPI


  • Mod

    Just follow the guide of raspberry gateway and choose to configure it as ethernet, it makes it easier to setup con controller.



  • @gohan said in Raspberry Gateway + Arduino pro mini (atmega328p) NRF24L01 (without plus +):

    choose to configure it as ethernet, .

    But if I understand right, I need ethernet gateway hardware, or am I missing something?



Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.