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. nrf24 gateway don't send ack

nrf24 gateway don't send ack

Scheduled Pinned Locked Moved Troubleshooting
acknrf24
1 Posts 1 Posters 1.2k Views 2 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.
  • G Offline
    G Offline
    gerard
    wrote on last edited by
    #1

    I have an arduino that has connected one NRF24L01 + module and a motion sensor and other arduino that has just connected a NRF24L01 module configured as the father of the first . The gateway receives packets of motion sensor but does not return the ack

    This is the source code or gateway

    #include <MySensor.h>
    #include <MySigningNone.h>
    #include <MyTransportNRF24.h>
    #include <MyHwATMega328.h>
    #include <SPI.h>
     
    #define NODE_ID 0
    
    
    #define MOTION_SENSOR_ID 0
    #define MOTION_SENSOR_NODE 1
    #define BEGIN_TRANSMISSION "BEGIN"
    #define END_TRANSMISSION "END"
    #define WHO_AM_I "WHO_AM_I"
    #define WHICH_SENSOR "WHICH_SENSOR"
    #define WHATH "WHATH"
    #define SEND_TELEGRAM "SEND_TELEGRAM"
    #define OK "OK"
    
    MyTransportNRF24 transport(7, 8,RF24_PA_HIGH);
    MySigningNone signer;
    MyHwATMega328 hw;
    MySensor gw(transport,hw);
    
    bool begin_transmission=false;
    int who_am_i=-1;
    int which_sensor=-1;
    int whath=-1;
    String send_telegram="";
    unsigned long timeout=10000;
    unsigned long begin_transmission_time=millis();
    MyMessage msg(MOTION_SENSOR_ID,V_VAR1);
    
    
    void response(const MyMessage &m){
        
      String message_text=m.getString();
      Serial.println(message_text);
      if(message_text==BEGIN_TRANSMISSION && !begin_transmission){
        begin_transmission=true;
        begin_transmission_time=millis();
      }
      if(begin_transmission){
        if(who_am_i<0 && message_text.startsWith(WHO_AM_I)){
          who_am_i=message_text.substring(String(WHO_AM_I).length()+1).toInt();
        } 
        else if(which_sensor<0 && message_text.startsWith(WHICH_SENSOR)){
          which_sensor=message_text.substring(String(WHICH_SENSOR).length()+1).toInt();
        }
        else if(whath<0 && message_text.startsWith(WHATH)){
          whath=message_text.substring(String(WHATH).length()+1).toInt();
        }
        else if(message_text.startsWith(SEND_TELEGRAM)){
          send_telegram+=message_text.substring(String(SEND_TELEGRAM).length()+1);
        }
        else if(message_text.startsWith(END_TRANSMISSION)){
          begin_transmission=false;
          if(send_telegram!=""){
            String telegram=String("Node ")+who_am_i+String(" Sensor ")+which_sensor+String(" Valor ")+whath+String(" ")+send_telegram+String("*");
            who_am_i=-1;
            which_sensor=-1;
            whath=-1;
            send_telegram="";
            Serial.println(telegram);
          }
         }
        }
      msg.setDestination(MOTION_SENSOR_NODE);
      gw.send(msg.set(OK),true);
    }
     
    void setup() 
    { 
      Serial.begin(115200);
      gw.begin(response,NODE_ID,false,NULL);
      
    }
     
    void loop()
    {
         gw.process();
         gw.wait(10000); // Wait 10 seconds
         if((begin_transmission_time+timeout)<millis()){
          begin_transmission=false;
          who_am_i=-1;
          which_sensor=-1;
          whath=-1;
          send_telegram="";
         }
    }
    

    And this is the source code of motion sensor sketch

    #include <MySensor.h>
    #include <MySigningNone.h>
    #include <MyTransportNRF24.h>
    #include <MyHwATMega328.h>
    #include <SPI.h>
     
    #define MOTION_SENSOR_ID 0
    #define MOTION_SENSOR_PIN 5
    #define NODE_ID 1
    #define PARENT_ID 0
    #define BEGIN_TRANSMISSION "BEGIN"
    #define END_TRANSMISSION "END"
    #define WHO_AM_I "WHO_AM_I"
    #define WHICH_SENSOR "WHICH_SENSOR"
    #define WHATH "WHATH"
    #define SEND_TELEGRAM "SEND_TELEGRAM"
    
    String who_am_i;
    String which_sensor;
    String whath;
    String send_telegram;
    bool ack_received=false;
    unsigned long send_time=millis();
    int retry_times=5;
    
    MyTransportNRF24 transport(7, 8,RF24_PA_HIGH);
    MySigningNone signer;
    MyHwATMega328 hw;
    MySensor gw(transport,hw);
    MyMessage msg(MOTION_SENSOR_ID, V_TRIPPED);
    
    void response(const MyMessage &m){
      ack_received=m.isAck();
      Serial.print("ack_received ");
      Serial.println(ack_received);
    }
    
    void send_message(const char* text){
      for(int i=0;i<retry_times && !ack_received;++i){
        gw.send(msg.set(text),true);
        delay(100);
      }
    }
     
    void setup() 
    { 
      Serial.begin(115200);
      gw.begin(response,NODE_ID,false,PARENT_ID);
      gw.sendSketchInfo("Motion sensor", "0.1");
      gw.present(MOTION_SENSOR_ID,S_MOTION,"Motion sensor",false); 
      Serial.print("Id ");
      Serial.println(gw.getNodeId());
      pinMode(MOTION_SENSOR_PIN, INPUT);
    }
     
    void loop()
    {
         gw.process();
         if(digitalRead(MOTION_SENSOR_PIN)){
          
          send_message(BEGIN_TRANSMISSION);
          //Who am I
          if(ack_received){
            ack_received=false;
            who_am_i=String(WHO_AM_I)+" "+gw.getNodeId();
            send_message(who_am_i.c_str());
          }
          //Which sensor
          if(ack_received){
            ack_received=false;
            which_sensor=String(WHICH_SENSOR)+" "+MOTION_SENSOR_ID;
            send_message(which_sensor.c_str());
          }
          //Whath
          if(ack_received){
            ack_received=false;
            whath=String(WHATH)+" "+1;
            send_message(whath.c_str());
          }
          //Telegram
          if(ack_received){
            int string_pos=0;
            String message_text=String(" Detectada presencia");
            while(string_pos<message_text.length()){
              ack_received=false;
              send_telegram=String(SEND_TELEGRAM)+" "+message_text.substring(string_pos,string_pos+25-String(SEND_TELEGRAM).length());
              send_message(send_telegram.c_str());
              string_pos=string_pos+25-String(SEND_TELEGRAM).length()-1;
            }
          }
          //End transmission
          if(ack_received){
            ack_received=false;
            send_message(END_TRANSMISSION);
          }
          ack_received=false;
         }
         
         gw.wait(1000); // Wait 10 seconds
    }
    

    Serial port output for gateway is

    0;0;3;0;9;gateway started, id=0, parent=0, distance=0
    0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
    BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
    0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
    BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
    0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
    BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=24,pt=0,l=2,sg=0,st=fail:OK
    0;0;3;0;9;read: 1-1-0 s=0,c=1,t=16,pt=0,l=5,sg=0:BEGIN
    0;0;3;0;9;send: 0-0-0-1 s=0,c=1,t=16,pt=0,l=5,sg=0,st=fail:BEGIN
    BEGIN
    

    And serial port output for motion sensor sketch is

    send: 1-1-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=ok:1.5.4
    send: 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0
    sensor started, id=1, parent=0, distance=1
    send: 1-1-0-0 s=255,c=3,t=11,pt=0,l=13,sg=0,st=ok:Motion sensor
    send: 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=fail:0.1
    send: 1-1-0-0 s=0,c=0,t=1,pt=0,l=13,sg=0,st=ok:Motion sensor
    Id 1
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    send: 1-1-0-0 s=0,c=1,t=16,pt=0,l=5,sg=0,st=ok:BEGIN
    

    Where is the problem? It seems that the gateway can not find the motion sensor.
    Moreover, there is a method in the myMessage class to know id of node sending a message?

    Thanks

    1 Reply Last reply
    0

    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

    With your input, this post could be even better 💗

    Register Login
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    12

    Online

    12.1k

    Users

    11.2k

    Topics

    113.4k

    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