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. General Discussion
  3. Help modifying sketch for rf-nano

Help modifying sketch for rf-nano

Scheduled Pinned Locked Moved General Discussion
5 Posts 3 Posters 73 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.
  • M Offline
    M Offline
    mrhutchinsonmn
    wrote on last edited by
    #1

    I have set all my sensors up using a nano and nrf24l01 wireless modules. Just received some rf-nanos I ordered but they are not working with my current sketches. I could use some advice on what to change in my moisture sensor sketch to get it to send data to my gateway. I verified the new rf-nanos work with the following 2 sketches.

    rf-nano send sketch:

    /*
        
       RF Nano Send Example
       
       Hey guys! This example code is designed to send one random 
       integer from one RF Nano to a second RF Nano, to show just how 
       simple the code can be. This code is also compatible with an RF Nano 
       (Arduino Nano with integrated NRF24L01)
    
       - Matt (ACBR 2020)
       
       Pins for Radio
       1 - GND 
       2 - VCC 5v
       3 - CE - Arduino pin 9
       4 - CSN - Arduino pin 10
       5 - SCK - Arduino pin 13
       6 - MOSI - Arduino pin 11
       7 - MISO - Arduino pin 12
       8 - UNUSED
     */
     
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN   10
    #define CSN_PIN 9
    
    const uint64_t pipe = 0x1; // This is the transmit pipeline
    int sendData[1];  // One element array holding our random number
    
    RF24 radio(CE_PIN, CSN_PIN); // Activate the Radio
    
    void setup()   
    {
      Serial.begin(9600);
      radio.begin();
      radio.openWritingPipe(pipe);
      randomSeed(analogRead(A0));
    }
    
    
    void loop()   
    {
      radio.write( sendData, sizeof(sendData));
      sendData[0] = random(10);
      Serial.println(sendData[0]);
    }
    

    rf-nano receive sketch:

    /* 
      
       RF Nano Receive Example
     
       Hey guys! This example code is designed to send one random integer 
       from one RF Nano to a second RF Nano, to show just how simple the 
       code can be. This code is also compatible with an RF Nano (Arduino 
       Nano with integrated NRF24L01)
    
       - Matt (ACBR 2020)
       
       1 - GND 
       2 - VCC 3.3V 
       3 - CE - Arduino pin 9
       4 - CSN - Arduino pin 10
       5 - SCK - Arduino pin 13
       6 - MOSI - Arduino pin 11
       7 - MISO - Arduino pin 12
       8 - UNUSED 
    */
    
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN   10
    #define CSN_PIN 9
    
    const uint64_t pipe = 0x1;  // This is the transmit pipe
    int sendData[1];  // One element array holding our random number
    
    RF24 radio(CE_PIN, CSN_PIN);
    
    void setup()  
    {
      Serial.begin(9600); 
      delay(1000);
      Serial.println("Nrf24L01 Receiver Starting");
      radio.begin();
      radio.openReadingPipe(1,pipe);
      radio.startListening();
    }
    
    
    void loop()   
    {
      if ( radio.available() )
      {
        bool done = false;
        while (!done)
        {
          radio.read(sendData, sizeof(sendData));
          Serial.print("Random Number: ");
          Serial.println(sendData[0]);
          delay(50);
        }
      }
      else
      {    
          Serial.println("Darn, not working yet!");
      }
    }
    

    sensor sketch needing modification:

    /*
      AnalogReadSerial
    
      Reads an analog input on pin 0, prints the result to the Serial Monitor.
      Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
      Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
    
      This example code is in the public domain.
    
      http://www.arduino.cc/en/Tutorial/AnalogReadSerial
    */
    #define MY_NODE_ID 35
    // Enable debug prints
     #define MY_DEBUG
    // Enable and select radio type attached
    #define MY_RADIO_RF24
    //#define MY_RADIO_NRF5_ESB
    //#define MY_RADIO_RFM69
    //#define MY_RADIO_RFM95
    #define CHILD_ID_A0 0
    //#define CHILD_ID_A1 1
    //#define CHILD_ID_A2 2
    #include <MySensors.h>
    #include #include <RF24.h>
    MyMessage msg(CHILD_ID_A0, V_LEVEL);
    //MyMessage msg2(CHILD_ID_A1, V_LEVEL);
    //MyMessage msg3(CHILD_ID_A2, V_LEVEL);
    // the setup routine runs once when you press reset:
    void setup() {
      // initialize serial communication at 9600 bits per second:
      Serial.begin(9600);
    }
    void presentation()
    {
      sendSketchInfo("Analog Soil Moisture Sensorx3", "1c.0");
      present(CHILD_ID_A0, S_MOISTURE);
     // present(CHILD_ID_A1, S_MOISTURE);
     // present(CHILD_ID_A2, S_MOISTURE);
    }
    // the loop routine runs over and over again forever:
    void loop() {
      // read the input on analog pin 0:
     int sensorValue = analogRead(A0);
     //int sensorValueA1 = analogRead(A1);
     //int sensorValueA2 = analogRead(A2);
      // print out the value you read:
      Serial.println(sensorValue);
      // Serial.println(sensorValueA1);
      //Serial.println(sensorValueA2);
      send(msg.set(sensorValue));
      // send(msg2.set(sensorValueA1));
     // send(msg3.set(sensorValueA2));
      delay(10000);        // delay in between reads for stability
    }
    
    1 Reply Last reply
    0
    • Michiel van der WulpM Offline
      Michiel van der WulpM Offline
      Michiel van der Wulp
      wrote on last edited by
      #2

      The comments at the top in the first two sketches mention the pin numbers of the CE and CS pins reversed, the code itself is correct.
      The third sketch lacks these definitions, so it won't work.

      M 1 Reply Last reply
      0
      • Michiel van der WulpM Michiel van der Wulp

        The comments at the top in the first two sketches mention the pin numbers of the CE and CS pins reversed, the code itself is correct.
        The third sketch lacks these definitions, so it won't work.

        M Offline
        M Offline
        mrhutchinsonmn
        wrote on last edited by
        #3

        @Michiel-van-der-Wulp

        The sketch looks like this now but does not work with gateway sketch (below). Is that related to code in the mysensors.h library, or do I need to make a change in the serial gateway sketch?

        /*
          AnalogReadSerial
        
          Reads an analog input on pin 0, prints the result to the Serial Monitor.
          Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
          Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
        
          This example code is in the public domain.
        
          http://www.arduino.cc/en/Tutorial/AnalogReadSerial
        */
        #define MY_NODE_ID 35
        // Enable debug prints
         #define MY_DEBUG
        // Enable and select radio type attached
        #define MY_RADIO_RF24
        //#define MY_RADIO_NRF5_ESB
        //#define MY_RADIO_RFM69
        //#define MY_RADIO_RFM95
        #define CE_PIN   10
        #define CSN_PIN 9
        #define CHILD_ID_A0 0
        //#define CHILD_ID_A1 1
        //#define CHILD_ID_A2 2
        #include <MySensors.h>
        MyMessage msg(CHILD_ID_A0, V_LEVEL);
        //MyMessage msg2(CHILD_ID_A1, V_LEVEL);
        //MyMessage msg3(CHILD_ID_A2, V_LEVEL);
        // the setup routine runs once when you press reset:
        void setup() {
          // initialize serial communication at 9600 bits per second:
          Serial.begin(9600);
        }
        void presentation()
        {
          sendSketchInfo("Analog Soil Moisture Sensorx3", "1c.0");
          present(CHILD_ID_A0, S_MOISTURE);
         // present(CHILD_ID_A1, S_MOISTURE);
         // present(CHILD_ID_A2, S_MOISTURE);
        }
        // the loop routine runs over and over again forever:
        void loop() {
          // read the input on analog pin 0:
         int sensorValue = analogRead(A0);
         //int sensorValueA1 = analogRead(A1);
         //int sensorValueA2 = analogRead(A2);
          // print out the value you read:
          Serial.println(sensorValue);
          // Serial.println(sensorValueA1);
          //Serial.println(sensorValueA2);
          send(msg.set(sensorValue));
          // send(msg2.set(sensorValueA1));
         // send(msg3.set(sensorValueA2));
          delay(10000);        // delay in between reads for stability
        }
        

        Gateway Sketch:

        /*
          AnalogReadSerial
        
          Reads an analog input on pin 0, prints the result to the Serial Monitor.
          Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
          Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
        
          This example code is in the public domain.
        
          http://www.arduino.cc/en/Tutorial/AnalogReadSerial
        */
        #define MY_NODE_ID 35
        // Enable debug prints
         #define MY_DEBUG
        // Enable and select radio type attached
        #define MY_RADIO_RF24
        //#define MY_RADIO_NRF5_ESB
        //#define MY_RADIO_RFM69
        //#define MY_RADIO_RFM95
        #define CE_PIN   10
        #define CSN_PIN 9
        #define CHILD_ID_A0 0
        //#define CHILD_ID_A1 1
        //#define CHILD_ID_A2 2
        #include <MySensors.h>
        MyMessage msg(CHILD_ID_A0, V_LEVEL);
        //MyMessage msg2(CHILD_ID_A1, V_LEVEL);
        //MyMessage msg3(CHILD_ID_A2, V_LEVEL);
        // the setup routine runs once when you press reset:
        void setup() {
          // initialize serial communication at 9600 bits per second:
          Serial.begin(9600);
        }
        void presentation()
        {
          sendSketchInfo("Analog Soil Moisture Sensorx3", "1c.0");
          present(CHILD_ID_A0, S_MOISTURE);
         // present(CHILD_ID_A1, S_MOISTURE);
         // present(CHILD_ID_A2, S_MOISTURE);
        }
        // the loop routine runs over and over again forever:
        void loop() {
          // read the input on analog pin 0:
         int sensorValue = analogRead(A0);
         //int sensorValueA1 = analogRead(A1);
         //int sensorValueA2 = analogRead(A2);
          // print out the value you read:
          Serial.println(sensorValue);
          // Serial.println(sensorValueA1);
          //Serial.println(sensorValueA2);
          send(msg.set(sensorValue));
          // send(msg2.set(sensorValueA1));
         // send(msg3.set(sensorValueA2));
          delay(10000);        // delay in between reads for stability
        }
        
        F 1 Reply Last reply
        0
        • M mrhutchinsonmn

          @Michiel-van-der-Wulp

          The sketch looks like this now but does not work with gateway sketch (below). Is that related to code in the mysensors.h library, or do I need to make a change in the serial gateway sketch?

          /*
            AnalogReadSerial
          
            Reads an analog input on pin 0, prints the result to the Serial Monitor.
            Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
            Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
          
            This example code is in the public domain.
          
            http://www.arduino.cc/en/Tutorial/AnalogReadSerial
          */
          #define MY_NODE_ID 35
          // Enable debug prints
           #define MY_DEBUG
          // Enable and select radio type attached
          #define MY_RADIO_RF24
          //#define MY_RADIO_NRF5_ESB
          //#define MY_RADIO_RFM69
          //#define MY_RADIO_RFM95
          #define CE_PIN   10
          #define CSN_PIN 9
          #define CHILD_ID_A0 0
          //#define CHILD_ID_A1 1
          //#define CHILD_ID_A2 2
          #include <MySensors.h>
          MyMessage msg(CHILD_ID_A0, V_LEVEL);
          //MyMessage msg2(CHILD_ID_A1, V_LEVEL);
          //MyMessage msg3(CHILD_ID_A2, V_LEVEL);
          // the setup routine runs once when you press reset:
          void setup() {
            // initialize serial communication at 9600 bits per second:
            Serial.begin(9600);
          }
          void presentation()
          {
            sendSketchInfo("Analog Soil Moisture Sensorx3", "1c.0");
            present(CHILD_ID_A0, S_MOISTURE);
           // present(CHILD_ID_A1, S_MOISTURE);
           // present(CHILD_ID_A2, S_MOISTURE);
          }
          // the loop routine runs over and over again forever:
          void loop() {
            // read the input on analog pin 0:
           int sensorValue = analogRead(A0);
           //int sensorValueA1 = analogRead(A1);
           //int sensorValueA2 = analogRead(A2);
            // print out the value you read:
            Serial.println(sensorValue);
            // Serial.println(sensorValueA1);
            //Serial.println(sensorValueA2);
            send(msg.set(sensorValue));
            // send(msg2.set(sensorValueA1));
           // send(msg3.set(sensorValueA2));
            delay(10000);        // delay in between reads for stability
          }
          

          Gateway Sketch:

          /*
            AnalogReadSerial
          
            Reads an analog input on pin 0, prints the result to the Serial Monitor.
            Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
            Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
          
            This example code is in the public domain.
          
            http://www.arduino.cc/en/Tutorial/AnalogReadSerial
          */
          #define MY_NODE_ID 35
          // Enable debug prints
           #define MY_DEBUG
          // Enable and select radio type attached
          #define MY_RADIO_RF24
          //#define MY_RADIO_NRF5_ESB
          //#define MY_RADIO_RFM69
          //#define MY_RADIO_RFM95
          #define CE_PIN   10
          #define CSN_PIN 9
          #define CHILD_ID_A0 0
          //#define CHILD_ID_A1 1
          //#define CHILD_ID_A2 2
          #include <MySensors.h>
          MyMessage msg(CHILD_ID_A0, V_LEVEL);
          //MyMessage msg2(CHILD_ID_A1, V_LEVEL);
          //MyMessage msg3(CHILD_ID_A2, V_LEVEL);
          // the setup routine runs once when you press reset:
          void setup() {
            // initialize serial communication at 9600 bits per second:
            Serial.begin(9600);
          }
          void presentation()
          {
            sendSketchInfo("Analog Soil Moisture Sensorx3", "1c.0");
            present(CHILD_ID_A0, S_MOISTURE);
           // present(CHILD_ID_A1, S_MOISTURE);
           // present(CHILD_ID_A2, S_MOISTURE);
          }
          // the loop routine runs over and over again forever:
          void loop() {
            // read the input on analog pin 0:
           int sensorValue = analogRead(A0);
           //int sensorValueA1 = analogRead(A1);
           //int sensorValueA2 = analogRead(A2);
            // print out the value you read:
            Serial.println(sensorValue);
            // Serial.println(sensorValueA1);
            //Serial.println(sensorValueA2);
            send(msg.set(sensorValue));
            // send(msg2.set(sensorValueA1));
           // send(msg3.set(sensorValueA2));
            delay(10000);        // delay in between reads for stability
          }
          
          F Offline
          F Offline
          Fear na Boinne
          wrote on last edited by
          #4

          @mrhutchinsonmn

          In my sketches I had to define the below for the built in radio to even work:
          #define MY_RF24_CE_PIN 10
          #define MY_RF24_CS_PIN 9

          Also, I have rf-nano's from 2 sources, the one I got from the first source (don't recall where it was from) doesn't send anything at all, according to the RasPi gateway*), the other 4 (from the 2nd source) just worked™

          *) the radio initializes just fine, the gateway doesn't see any messages from it at all!...

          1 Reply Last reply
          1
          • M Offline
            M Offline
            mrhutchinsonmn
            wrote on last edited by
            #5

            That worked for me. Thank you!

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


            10

            Online

            11.7k

            Users

            11.2k

            Topics

            113.0k

            Posts


            Copyright 2019 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