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. Controllers
  3. Home Assistant
  4. Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY

Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY

Scheduled Pinned Locked Moved Home Assistant
12 Posts 4 Posters 124 Views 5 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 mrhutchinsonmn
    #1

    Hardware: Arduino nano boards+ RS485 devices with separate 5 volt power supply

    I am trying to set up my 1st Rs485 gateway motion sensor on Home Assistant, per the following tutorial:
    https://www.mysensors.org/build/rs485

    The motion sensor is not presenting itself to the gateway, so I did some digging and found this thread on the subject:

    https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network.

    I have things wired up as per this pic provided in the tutorial

    Although I am not using mqtt, everything seemed to be pertinent but I was still unable to get communication between the sensor and gateway.

    Ha logs show the gateway seems to be happy:

    [mysensors] Connected to Serial<id=0x7f2fd0c2f518, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False)
    2020-10-05 13:17:05 INFO (MainThread) [mysensors] Connected to <_SelectorSocketTransport fd=25 read=idle write=<idle, bufsize=0>>
    p:Gateway startup complete.
    

    However serial monitor for the motion sensor shows the following:

    
    |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
    | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
    | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
    |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
            |___/                      2.3.2
    
    16 MCO:BGN:INIT NODE,CP=RSNNA---,FQ=16,REL=255,VER=2.3.2
    26 TSM:INIT
    28 TSF:WUR:MS=0
    29 TSM:INIT:TSP OK
    31 TSM:FPAR
    33 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    2041 !TSM:FPAR:NO REPLY
    2043 TSM:FPAR
    2045 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    4054 !TSM:FPAR:NO REPLY
    4056 TSM:FPAR
    4058 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    6066 !TSM:FPAR:NO REPLY
    6068 TSM:FPAR
    6070 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    8078 !TSM:FPAR:FAIL
    8079 TSM:FAIL:CNT=1
    8081 TSM:FAIL:DIS
    8083 TSF:TDI:TSL
    18085 TSM:FAIL:RE-INIT
    18087 TSM:INIT
    18088 TSM:INIT:TSP OK
    

    Gateway sketch:

    /**
    * 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-2019 Sensnology AB
    * Full contributor list: https://github.com/mysensors/MySensors/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.
    *
    *******************************
    *
    * DESCRIPTION
    * The RS485 Gateway prints data received from sensors on the serial link.
    * The gateway accepts input on seral which will be sent out on
    * the RS485 link.
    *
    * Wire connections (OPTIONAL):
    * - Inclusion button should be connected between digital pin 3 and GND
    * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
    *
    * LEDs (OPTIONAL):
    * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
    * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
    * - ERR (red) - fast blink on error during transmission error or receive crc error
    *
    * If your Arduino board has additional serial ports
    * you can use to connect the RS485 module.
    * Otherwise, the gateway uses AltSoftSerial to handle two serial
    * links on one Arduino. Use the following pins for RS485 link
    *
    *  Board          Transmit  Receive   PWM Unusable
    * -----          --------  -------   ------------
    * Teensy 3.0 & 3.1  21        20         22
    * Teensy 2.0         9        10       (none)
    * Teensy++ 2.0      25         4       26, 27
    * Arduino Uno        9         8         10
    * Arduino Leonardo   5        13       (none)
    * Arduino Mega      46        48       44, 45
    * Wiring-S           5         6          4
    * Sanguino          13        14         12
    *
    */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable RS485 transport layer
    #define MY_RS485
    
    // Define this to enables DE-pin management on defined pin
    #define MY_RS485_DE_PIN 2
    
    // Set RS485 baud rate to use
    #define MY_RS485_BAUD_RATE 115200
    
    // Enable this if RS485 is connected to a hardware serial port
    #define MY_RS485_HWSERIAL Serial
    
    // Enable serial gateway
    #define MY_GATEWAY_SERIAL
    
    
    // Enable inclusion mode
    //#define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    //#define MY_INCLUSION_BUTTON_FEATURE
    // Set inclusion mode duration (in seconds)
    //#define MY_INCLUSION_MODE_DURATION 60
    // Digital pin used for inclusion mode button
    //#define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Flash leds on rx/tx/err
    #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
    #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
    
    #include <MySensors.h>
    
    void setup()
    {
      // Setup locally attached sensors
    }
    
    void presentation()
    {
      // Present locally attached sensors
    }
    
    void loop()
    {
      // Send locally attached sensor data here
    }
    
    

    Motion detector Sketch:

    /*
     * 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-2019 Sensnology AB
     * Full contributor list: https://github.com/mysensors/MySensors/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
     * This is an example of sensors using RS485 as transport layer
     *
     * Motion Sensor example using HC-SR501
     * http://www.mysensors.org/build/motion
     *
     * If your Arduino board has additional serial ports
     * you can use to connect the RS485 module.
     * Otherwise, the transport uses AltSoftSerial to handle two serial
     * links on one Arduino. Use the following pins for RS485 link
     *
     *  Board          Transmit  Receive   PWM Unusable
     * -----          --------  -------   ------------
     * Teensy 3.0 & 3.1  21        20         22
     * Teensy 2.0         9        10       (none)
     * Teensy++ 2.0      25         4       26, 27
     * Arduino Uno        9         8         10
     * Arduino Leonardo   5        13       (none)
     * Arduino Mega      46        48       44, 45
     * Wiring-S           5         6          4
     * Sanguino          13        14         12 *
     *
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable RS485 transport layer
    #define MY_RS485
    
    // Define this to enables DE-pin management on defined pin
    #define MY_RS485_DE_PIN 2
    
    // Set RS485 baud rate to use
    #define MY_RS485_BAUD_RATE 115200
    
    // Enable this if RS485 is connected to a hardware serial port
    //#define MY_RS485_HWSERIAL Serial
    
    #include <MySensors.h>
    
    uint32_t 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 MY_NODE_ID 123
    #define CHILD_ID 1   // Id of the sensor child
    
    // Initialize motion message
    MyMessage msg(CHILD_ID, V_TRIPPED);
    
    void setup()
    {
      pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
    }
    
    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);
    }
    
    void 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);
    }
    
    
    

    To rule out hardware failure, I followed this tutorial, and all works as expected:
    https://naylampmechatronics.com/blog/37_Comunicación-RS485-con-Arduino.html

    Transmitter sketch:

    const int ledPin =  13;  // Built-in LED
    const int EnTxPin =  2;  // HIGH:Transmitter, LOW:Receiver
    void setup() 
    { 
      Serial.begin(9600);
      Serial.setTimeout(100);  
      pinMode(ledPin, OUTPUT);
      pinMode(EnTxPin, OUTPUT);
      digitalWrite(ledPin, LOW); 
      digitalWrite(EnTxPin, HIGH); 
    } 
     
    void loop() 
    {   
      int rdata = analogRead(0); //data from potentiometer 
      int angle= map(rdata, 0, 1023, 0, 180); 
      
      //transmitter data packet
      Serial.print("I"); //initiate data packet
      Serial.print("S"); //code for servo
      Serial.print(angle); //servo angle data
      Serial.print("F"); //finish data packet
      delay(50); 
    
      //receiver data packet
      Serial.print("I"); //initiate data packet
      Serial.print("L"); //code for sensor
      Serial.print("F"); //finish data packet
      Serial.flush();    
      
      digitalWrite(EnTxPin, LOW); //RS485 as receiver
    
      if(Serial.find("i"))
      {
          int data=Serial.parseInt(); 
          if(Serial.read()=='f') //finish reading
           {
             onLED(data);            
          }
          
      }
      digitalWrite(EnTxPin, HIGH); //RS485 as transmitter
      
    } 
    
    void onLED(int data)
    {
      if(data>500)
         digitalWrite(ledPin, HIGH); 
      else
         digitalWrite(ledPin, LOW); 
    }
    

    Reciever sketch:

    #include <Servo.h>
    Servo myservo; 
    const int EnTxPin = 2;
    void setup () {
      Serial.begin (9600);
      myservo.attach (9); 
      pinMode(EnTxPin, OUTPUT );
      digitalWrite (EnTxPin, LOW );
    }
    
    void loop (){
      if ( Serial.available ()){
        if ( Serial.read () == 'I' ){
          char function = Serial.read ();
          if (function == 'S' ){
            int angle = Serial.parseInt ();
            if ( Serial.read () == 'F' ){
              if (angle <= 180) {
                myservo.write (angle);
              }
            }
          }
          else if (function == 'L' ){
            if ( Serial.read () == 'F' ){
              int val = analogRead (0);
              digitalWrite (EnTxPin, HIGH ); //enable to transmit
              Serial.print ( "i" ); 
              Serial.print (val); 
              Serial.println ( "f" ); 
              Serial.flush (); 
              digitalWrite (EnTxPin, LOW ); //enable to receive
            }
          }
        }
      }
      delay (10);
    }
    
    

    Any ideas about what might be causing the issue?

    mfalkviddM M 2 Replies Last reply
    0
    • M mrhutchinsonmn

      Hardware: Arduino nano boards+ RS485 devices with separate 5 volt power supply

      I am trying to set up my 1st Rs485 gateway motion sensor on Home Assistant, per the following tutorial:
      https://www.mysensors.org/build/rs485

      The motion sensor is not presenting itself to the gateway, so I did some digging and found this thread on the subject:

      https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network.

      I have things wired up as per this pic provided in the tutorial

      Although I am not using mqtt, everything seemed to be pertinent but I was still unable to get communication between the sensor and gateway.

      Ha logs show the gateway seems to be happy:

      [mysensors] Connected to Serial<id=0x7f2fd0c2f518, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False)
      2020-10-05 13:17:05 INFO (MainThread) [mysensors] Connected to <_SelectorSocketTransport fd=25 read=idle write=<idle, bufsize=0>>
      p:Gateway startup complete.
      

      However serial monitor for the motion sensor shows the following:

      
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RSNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      29 TSM:INIT:TSP OK
      31 TSM:FPAR
      33 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2041 !TSM:FPAR:NO REPLY
      2043 TSM:FPAR
      2045 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4054 !TSM:FPAR:NO REPLY
      4056 TSM:FPAR
      4058 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6066 !TSM:FPAR:NO REPLY
      6068 TSM:FPAR
      6070 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8078 !TSM:FPAR:FAIL
      8079 TSM:FAIL:CNT=1
      8081 TSM:FAIL:DIS
      8083 TSF:TDI:TSL
      18085 TSM:FAIL:RE-INIT
      18087 TSM:INIT
      18088 TSM:INIT:TSP OK
      

      Gateway sketch:

      /**
      * 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-2019 Sensnology AB
      * Full contributor list: https://github.com/mysensors/MySensors/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.
      *
      *******************************
      *
      * DESCRIPTION
      * The RS485 Gateway prints data received from sensors on the serial link.
      * The gateway accepts input on seral which will be sent out on
      * the RS485 link.
      *
      * Wire connections (OPTIONAL):
      * - Inclusion button should be connected between digital pin 3 and GND
      * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
      *
      * LEDs (OPTIONAL):
      * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
      * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
      * - ERR (red) - fast blink on error during transmission error or receive crc error
      *
      * If your Arduino board has additional serial ports
      * you can use to connect the RS485 module.
      * Otherwise, the gateway uses AltSoftSerial to handle two serial
      * links on one Arduino. Use the following pins for RS485 link
      *
      *  Board          Transmit  Receive   PWM Unusable
      * -----          --------  -------   ------------
      * Teensy 3.0 & 3.1  21        20         22
      * Teensy 2.0         9        10       (none)
      * Teensy++ 2.0      25         4       26, 27
      * Arduino Uno        9         8         10
      * Arduino Leonardo   5        13       (none)
      * Arduino Mega      46        48       44, 45
      * Wiring-S           5         6          4
      * Sanguino          13        14         12
      *
      */
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Enable RS485 transport layer
      #define MY_RS485
      
      // Define this to enables DE-pin management on defined pin
      #define MY_RS485_DE_PIN 2
      
      // Set RS485 baud rate to use
      #define MY_RS485_BAUD_RATE 115200
      
      // Enable this if RS485 is connected to a hardware serial port
      #define MY_RS485_HWSERIAL Serial
      
      // Enable serial gateway
      #define MY_GATEWAY_SERIAL
      
      
      // Enable inclusion mode
      //#define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      //#define MY_INCLUSION_BUTTON_FEATURE
      // Set inclusion mode duration (in seconds)
      //#define MY_INCLUSION_MODE_DURATION 60
      // Digital pin used for inclusion mode button
      //#define MY_INCLUSION_MODE_BUTTON_PIN  3
      
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Flash leds on rx/tx/err
      #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
      #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
      #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
      
      #include <MySensors.h>
      
      void setup()
      {
        // Setup locally attached sensors
      }
      
      void presentation()
      {
        // Present locally attached sensors
      }
      
      void loop()
      {
        // Send locally attached sensor data here
      }
      
      

      Motion detector Sketch:

      /*
       * 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-2019 Sensnology AB
       * Full contributor list: https://github.com/mysensors/MySensors/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
       * This is an example of sensors using RS485 as transport layer
       *
       * Motion Sensor example using HC-SR501
       * http://www.mysensors.org/build/motion
       *
       * If your Arduino board has additional serial ports
       * you can use to connect the RS485 module.
       * Otherwise, the transport uses AltSoftSerial to handle two serial
       * links on one Arduino. Use the following pins for RS485 link
       *
       *  Board          Transmit  Receive   PWM Unusable
       * -----          --------  -------   ------------
       * Teensy 3.0 & 3.1  21        20         22
       * Teensy 2.0         9        10       (none)
       * Teensy++ 2.0      25         4       26, 27
       * Arduino Uno        9         8         10
       * Arduino Leonardo   5        13       (none)
       * Arduino Mega      46        48       44, 45
       * Wiring-S           5         6          4
       * Sanguino          13        14         12 *
       *
       */
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Enable RS485 transport layer
      #define MY_RS485
      
      // Define this to enables DE-pin management on defined pin
      #define MY_RS485_DE_PIN 2
      
      // Set RS485 baud rate to use
      #define MY_RS485_BAUD_RATE 115200
      
      // Enable this if RS485 is connected to a hardware serial port
      //#define MY_RS485_HWSERIAL Serial
      
      #include <MySensors.h>
      
      uint32_t 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 MY_NODE_ID 123
      #define CHILD_ID 1   // Id of the sensor child
      
      // Initialize motion message
      MyMessage msg(CHILD_ID, V_TRIPPED);
      
      void setup()
      {
        pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
      }
      
      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);
      }
      
      void 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);
      }
      
      
      

      To rule out hardware failure, I followed this tutorial, and all works as expected:
      https://naylampmechatronics.com/blog/37_Comunicación-RS485-con-Arduino.html

      Transmitter sketch:

      const int ledPin =  13;  // Built-in LED
      const int EnTxPin =  2;  // HIGH:Transmitter, LOW:Receiver
      void setup() 
      { 
        Serial.begin(9600);
        Serial.setTimeout(100);  
        pinMode(ledPin, OUTPUT);
        pinMode(EnTxPin, OUTPUT);
        digitalWrite(ledPin, LOW); 
        digitalWrite(EnTxPin, HIGH); 
      } 
       
      void loop() 
      {   
        int rdata = analogRead(0); //data from potentiometer 
        int angle= map(rdata, 0, 1023, 0, 180); 
        
        //transmitter data packet
        Serial.print("I"); //initiate data packet
        Serial.print("S"); //code for servo
        Serial.print(angle); //servo angle data
        Serial.print("F"); //finish data packet
        delay(50); 
      
        //receiver data packet
        Serial.print("I"); //initiate data packet
        Serial.print("L"); //code for sensor
        Serial.print("F"); //finish data packet
        Serial.flush();    
        
        digitalWrite(EnTxPin, LOW); //RS485 as receiver
      
        if(Serial.find("i"))
        {
            int data=Serial.parseInt(); 
            if(Serial.read()=='f') //finish reading
             {
               onLED(data);            
            }
            
        }
        digitalWrite(EnTxPin, HIGH); //RS485 as transmitter
        
      } 
      
      void onLED(int data)
      {
        if(data>500)
           digitalWrite(ledPin, HIGH); 
        else
           digitalWrite(ledPin, LOW); 
      }
      

      Reciever sketch:

      #include <Servo.h>
      Servo myservo; 
      const int EnTxPin = 2;
      void setup () {
        Serial.begin (9600);
        myservo.attach (9); 
        pinMode(EnTxPin, OUTPUT );
        digitalWrite (EnTxPin, LOW );
      }
      
      void loop (){
        if ( Serial.available ()){
          if ( Serial.read () == 'I' ){
            char function = Serial.read ();
            if (function == 'S' ){
              int angle = Serial.parseInt ();
              if ( Serial.read () == 'F' ){
                if (angle <= 180) {
                  myservo.write (angle);
                }
              }
            }
            else if (function == 'L' ){
              if ( Serial.read () == 'F' ){
                int val = analogRead (0);
                digitalWrite (EnTxPin, HIGH ); //enable to transmit
                Serial.print ( "i" ); 
                Serial.print (val); 
                Serial.println ( "f" ); 
                Serial.flush (); 
                digitalWrite (EnTxPin, LOW ); //enable to receive
              }
            }
          }
        }
        delay (10);
      }
      
      

      Any ideas about what might be causing the issue?

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

      @mrhutchinsonmn I haven’t used rs485 myself, but I think it will work better if you use the same speed for MY_RS485_BAUD_RATE on gateway and nodes.

      1 Reply Last reply
      1
      • M mrhutchinsonmn

        Hardware: Arduino nano boards+ RS485 devices with separate 5 volt power supply

        I am trying to set up my 1st Rs485 gateway motion sensor on Home Assistant, per the following tutorial:
        https://www.mysensors.org/build/rs485

        The motion sensor is not presenting itself to the gateway, so I did some digging and found this thread on the subject:

        https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network.

        I have things wired up as per this pic provided in the tutorial

        Although I am not using mqtt, everything seemed to be pertinent but I was still unable to get communication between the sensor and gateway.

        Ha logs show the gateway seems to be happy:

        [mysensors] Connected to Serial<id=0x7f2fd0c2f518, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False)
        2020-10-05 13:17:05 INFO (MainThread) [mysensors] Connected to <_SelectorSocketTransport fd=25 read=idle write=<idle, bufsize=0>>
        p:Gateway startup complete.
        

        However serial monitor for the motion sensor shows the following:

        
        |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
        | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
        | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
        |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
                |___/                      2.3.2
        
        16 MCO:BGN:INIT NODE,CP=RSNNA---,FQ=16,REL=255,VER=2.3.2
        26 TSM:INIT
        28 TSF:WUR:MS=0
        29 TSM:INIT:TSP OK
        31 TSM:FPAR
        33 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
        2041 !TSM:FPAR:NO REPLY
        2043 TSM:FPAR
        2045 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
        4054 !TSM:FPAR:NO REPLY
        4056 TSM:FPAR
        4058 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
        6066 !TSM:FPAR:NO REPLY
        6068 TSM:FPAR
        6070 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
        8078 !TSM:FPAR:FAIL
        8079 TSM:FAIL:CNT=1
        8081 TSM:FAIL:DIS
        8083 TSF:TDI:TSL
        18085 TSM:FAIL:RE-INIT
        18087 TSM:INIT
        18088 TSM:INIT:TSP OK
        

        Gateway sketch:

        /**
        * 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-2019 Sensnology AB
        * Full contributor list: https://github.com/mysensors/MySensors/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.
        *
        *******************************
        *
        * DESCRIPTION
        * The RS485 Gateway prints data received from sensors on the serial link.
        * The gateway accepts input on seral which will be sent out on
        * the RS485 link.
        *
        * Wire connections (OPTIONAL):
        * - Inclusion button should be connected between digital pin 3 and GND
        * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
        *
        * LEDs (OPTIONAL):
        * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
        * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
        * - ERR (red) - fast blink on error during transmission error or receive crc error
        *
        * If your Arduino board has additional serial ports
        * you can use to connect the RS485 module.
        * Otherwise, the gateway uses AltSoftSerial to handle two serial
        * links on one Arduino. Use the following pins for RS485 link
        *
        *  Board          Transmit  Receive   PWM Unusable
        * -----          --------  -------   ------------
        * Teensy 3.0 & 3.1  21        20         22
        * Teensy 2.0         9        10       (none)
        * Teensy++ 2.0      25         4       26, 27
        * Arduino Uno        9         8         10
        * Arduino Leonardo   5        13       (none)
        * Arduino Mega      46        48       44, 45
        * Wiring-S           5         6          4
        * Sanguino          13        14         12
        *
        */
        
        // Enable debug prints to serial monitor
        #define MY_DEBUG
        
        // Enable RS485 transport layer
        #define MY_RS485
        
        // Define this to enables DE-pin management on defined pin
        #define MY_RS485_DE_PIN 2
        
        // Set RS485 baud rate to use
        #define MY_RS485_BAUD_RATE 115200
        
        // Enable this if RS485 is connected to a hardware serial port
        #define MY_RS485_HWSERIAL Serial
        
        // Enable serial gateway
        #define MY_GATEWAY_SERIAL
        
        
        // Enable inclusion mode
        //#define MY_INCLUSION_MODE_FEATURE
        // Enable Inclusion mode button on gateway
        //#define MY_INCLUSION_BUTTON_FEATURE
        // Set inclusion mode duration (in seconds)
        //#define MY_INCLUSION_MODE_DURATION 60
        // Digital pin used for inclusion mode button
        //#define MY_INCLUSION_MODE_BUTTON_PIN  3
        
        // Set blinking period
        #define MY_DEFAULT_LED_BLINK_PERIOD 300
        
        // Flash leds on rx/tx/err
        #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
        #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
        #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
        
        #include <MySensors.h>
        
        void setup()
        {
          // Setup locally attached sensors
        }
        
        void presentation()
        {
          // Present locally attached sensors
        }
        
        void loop()
        {
          // Send locally attached sensor data here
        }
        
        

        Motion detector Sketch:

        /*
         * 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-2019 Sensnology AB
         * Full contributor list: https://github.com/mysensors/MySensors/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
         * This is an example of sensors using RS485 as transport layer
         *
         * Motion Sensor example using HC-SR501
         * http://www.mysensors.org/build/motion
         *
         * If your Arduino board has additional serial ports
         * you can use to connect the RS485 module.
         * Otherwise, the transport uses AltSoftSerial to handle two serial
         * links on one Arduino. Use the following pins for RS485 link
         *
         *  Board          Transmit  Receive   PWM Unusable
         * -----          --------  -------   ------------
         * Teensy 3.0 & 3.1  21        20         22
         * Teensy 2.0         9        10       (none)
         * Teensy++ 2.0      25         4       26, 27
         * Arduino Uno        9         8         10
         * Arduino Leonardo   5        13       (none)
         * Arduino Mega      46        48       44, 45
         * Wiring-S           5         6          4
         * Sanguino          13        14         12 *
         *
         */
        
        // Enable debug prints to serial monitor
        #define MY_DEBUG
        
        // Enable RS485 transport layer
        #define MY_RS485
        
        // Define this to enables DE-pin management on defined pin
        #define MY_RS485_DE_PIN 2
        
        // Set RS485 baud rate to use
        #define MY_RS485_BAUD_RATE 115200
        
        // Enable this if RS485 is connected to a hardware serial port
        //#define MY_RS485_HWSERIAL Serial
        
        #include <MySensors.h>
        
        uint32_t 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 MY_NODE_ID 123
        #define CHILD_ID 1   // Id of the sensor child
        
        // Initialize motion message
        MyMessage msg(CHILD_ID, V_TRIPPED);
        
        void setup()
        {
          pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
        }
        
        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);
        }
        
        void 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);
        }
        
        
        

        To rule out hardware failure, I followed this tutorial, and all works as expected:
        https://naylampmechatronics.com/blog/37_Comunicación-RS485-con-Arduino.html

        Transmitter sketch:

        const int ledPin =  13;  // Built-in LED
        const int EnTxPin =  2;  // HIGH:Transmitter, LOW:Receiver
        void setup() 
        { 
          Serial.begin(9600);
          Serial.setTimeout(100);  
          pinMode(ledPin, OUTPUT);
          pinMode(EnTxPin, OUTPUT);
          digitalWrite(ledPin, LOW); 
          digitalWrite(EnTxPin, HIGH); 
        } 
         
        void loop() 
        {   
          int rdata = analogRead(0); //data from potentiometer 
          int angle= map(rdata, 0, 1023, 0, 180); 
          
          //transmitter data packet
          Serial.print("I"); //initiate data packet
          Serial.print("S"); //code for servo
          Serial.print(angle); //servo angle data
          Serial.print("F"); //finish data packet
          delay(50); 
        
          //receiver data packet
          Serial.print("I"); //initiate data packet
          Serial.print("L"); //code for sensor
          Serial.print("F"); //finish data packet
          Serial.flush();    
          
          digitalWrite(EnTxPin, LOW); //RS485 as receiver
        
          if(Serial.find("i"))
          {
              int data=Serial.parseInt(); 
              if(Serial.read()=='f') //finish reading
               {
                 onLED(data);            
              }
              
          }
          digitalWrite(EnTxPin, HIGH); //RS485 as transmitter
          
        } 
        
        void onLED(int data)
        {
          if(data>500)
             digitalWrite(ledPin, HIGH); 
          else
             digitalWrite(ledPin, LOW); 
        }
        

        Reciever sketch:

        #include <Servo.h>
        Servo myservo; 
        const int EnTxPin = 2;
        void setup () {
          Serial.begin (9600);
          myservo.attach (9); 
          pinMode(EnTxPin, OUTPUT );
          digitalWrite (EnTxPin, LOW );
        }
        
        void loop (){
          if ( Serial.available ()){
            if ( Serial.read () == 'I' ){
              char function = Serial.read ();
              if (function == 'S' ){
                int angle = Serial.parseInt ();
                if ( Serial.read () == 'F' ){
                  if (angle <= 180) {
                    myservo.write (angle);
                  }
                }
              }
              else if (function == 'L' ){
                if ( Serial.read () == 'F' ){
                  int val = analogRead (0);
                  digitalWrite (EnTxPin, HIGH ); //enable to transmit
                  Serial.print ( "i" ); 
                  Serial.print (val); 
                  Serial.println ( "f" ); 
                  Serial.flush (); 
                  digitalWrite (EnTxPin, LOW ); //enable to receive
                }
              }
            }
          }
          delay (10);
        }
        
        

        Any ideas about what might be causing the issue?

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

        @mrhutchinsonmn said in Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY:

        9600

        Good catch.. That was an old version... both are set to 115200 after 9600 did not work

        M 1 Reply Last reply
        1
        • M mrhutchinsonmn

          @mrhutchinsonmn said in Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY:

          9600

          Good catch.. That was an old version... both are set to 115200 after 9600 did not work

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

          @mrhutchinsonmn Might have confused the issue with my reply.. Neither 115200 nor 9600 baud rates resolve the communication issue.

          1 Reply Last reply
          0
          • mfalkviddM Offline
            mfalkviddM Offline
            mfalkvidd
            Mod
            wrote on last edited by
            #5

            The sketch uses MY_RS485_HWSERIAL but you say you have wired according to https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network which uses pins 8 and 9?

            Pins 8 and 9 are not the hardware serial pins.

            M 1 Reply Last reply
            0
            • mfalkviddM mfalkvidd

              The sketch uses MY_RS485_HWSERIAL but you say you have wired according to https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network which uses pins 8 and 9?

              Pins 8 and 9 are not the hardware serial pins.

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

              @mfalkvidd Ugh!!! Too many versions of the sketch :)... Had to switch between my laptop and pc because of sketch upload issues.... Must have grabbed an old sketch.. I HAD commented hwserial out earlier... Getting communication now but not a valid message, not enough values to unpack errors. I will dig into that tomorrow. Thank you!!!

              mfalkviddM 1 Reply Last reply
              1
              • M mrhutchinsonmn

                @mfalkvidd Ugh!!! Too many versions of the sketch :)... Had to switch between my laptop and pc because of sketch upload issues.... Must have grabbed an old sketch.. I HAD commented hwserial out earlier... Getting communication now but not a valid message, not enough values to unpack errors. I will dig into that tomorrow. Thank you!!!

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

                @mrhutchinsonmn I would try 9600 again. 115200 leaves very little room for interference and oscillator differences.

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

                  Thank you for the advice!

                  I started over, just to be sure I didn't have anymore mix ups, but still have not been able to get the RS485 motion sensor and RS485 gateway to talk.

                  Hardware: Arduino Nanos+ RS485 modules.

                  Wiring:
                  RO = Pin 8 of Arduino
                  DI = Pin 9 of Arduino
                  A = A on other Nano
                  B = B on other Nano
                  DI= Pin 9 of Nano
                  RO = Pin 8 of Nano
                  DE & RE = Pin 2 of Nano
                  VCC = External power source
                  GND = External power source

                  Current Gateway Sketch:

                  /**
                  * 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-2019 Sensnology AB
                  * Full contributor list: https://github.com/mysensors/MySensors/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.
                  *
                  *******************************
                  *
                  * DESCRIPTION
                  * The RS485 Gateway prints data received from sensors on the serial link.
                  * The gateway accepts input on seral which will be sent out on
                  * the RS485 link.
                  *
                  * Wire connections (OPTIONAL):
                  * - Inclusion button should be connected between digital pin 3 and GND
                  * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
                  *
                  * LEDs (OPTIONAL):
                  * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
                  * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
                  * - ERR (red) - fast blink on error during transmission error or receive crc error
                  *
                  * If your Arduino board has additional serial ports
                  * you can use to connect the RS485 module.
                  * Otherwise, the gateway uses AltSoftSerial to handle two serial
                  * links on one Arduino. Use the following pins for RS485 link
                  *
                  *  Board          Transmit  Receive   PWM Unusable
                  * -----          --------  -------   ------------
                  * Teensy 3.0 & 3.1  21        20         22
                  * Teensy 2.0         9        10       (none)
                  * Teensy++ 2.0      25         4       26, 27
                  * Arduino Uno        9         8         10
                  * Arduino Leonardo   5        13       (none)
                  * Arduino Mega      46        48       44, 45
                  * Wiring-S           5         6          4
                  * Sanguino          13        14         12
                  *
                  */
                  
                  // Enable debug prints to serial monitor
                  #define MY_DEBUG
                  
                  // Enable RS485 transport layer
                  #define MY_RS485
                  
                  // Define this to enables DE-pin management on defined pin
                  #define MY_RS485_DE_PIN 2
                  
                  // Set RS485 baud rate to use
                  #define MY_RS485_BAUD_RATE 9600
                  
                  // Enable this if RS485 is connected to a hardware serial port
                  //#define MY_RS485_HWSERIAL Serial
                  
                  // Enable serial gateway
                  #define MY_GATEWAY_SERIAL
                  
                  
                  // Enable inclusion mode
                  #define MY_INCLUSION_MODE_FEATURE
                  // Enable Inclusion mode button on gateway
                  #define MY_INCLUSION_BUTTON_FEATURE
                  // Set inclusion mode duration (in seconds)
                  #define MY_INCLUSION_MODE_DURATION 60
                  //Digital pin used for inclusion mode button
                  #define MY_INCLUSION_MODE_BUTTON_PIN  3
                  
                  // Set blinking period
                  #define MY_DEFAULT_LED_BLINK_PERIOD 300
                  
                  // Flash leds on rx/tx/err
                  #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
                  #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
                  #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
                  
                  #include <MySensors.h>
                  
                  void setup()
                  {
                    // Setup locally attached sensors
                  }
                  
                  void presentation()
                  {
                    // Present locally attached sensors
                  }
                  
                  void loop()
                  {
                    // Send locally attached sensor data here
                  }
                  
                  

                  Current Motion Detector Sketch:

                  /*
                   * 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-2019 Sensnology AB
                   * Full contributor list: https://github.com/mysensors/MySensors/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
                   * This is an example of sensors using RS485 as transport layer
                   *
                   * Motion Sensor example using HC-SR501
                   * http://www.mysensors.org/build/motion
                   *
                   * If your Arduino board has additional serial ports
                   * you can use to connect the RS485 module.
                   * Otherwise, the transport uses AltSoftSerial to handle two serial
                   * links on one Arduino. Use the following pins for RS485 link
                   *
                   *  Board          Transmit  Receive   PWM Unusable
                   * -----          --------  -------   ------------
                   * Teensy 3.0 & 3.1  21        20         22
                   * Teensy 2.0         9        10       (none)
                   * Teensy++ 2.0      25         4       26, 27
                   * Arduino Uno        9         8         10
                   * Arduino Leonardo   5        13       (none)
                   * Arduino Mega      46        48       44, 45
                   * Wiring-S           5         6          4
                   * Sanguino          13        14         12 *
                   *
                   */
                  
                  // Enable debug prints to serial monitor
                  #define MY_DEBUG
                  
                  // Enable RS485 transport layer
                  #define MY_RS485
                  
                  // Define this to enables DE-pin management on defined pin
                  #define MY_RS485_DE_PIN 2
                  
                  // Set RS485 baud rate to use
                  #define MY_RS485_BAUD_RATE 9600
                  
                  // Enable this if RS485 is connected to a hardware serial port
                  //#define MY_RS485_HWSERIAL Serial1
                  
                  #include <MySensors.h>
                  
                  uint32_t 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 MY_NODE_ID 12
                  #define CHILD_ID 1   // Id of the sensor child
                  
                  // Initialize motion message
                  MyMessage msg(CHILD_ID, V_TRIPPED);
                  
                  void setup()
                  {
                    pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
                  }
                  
                  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);
                  }
                  
                  void 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);
                  }
                  

                  Commented the following out on the gateway, as per other forum users recommendations ( but made no difference)

                  // Enable inclusion mode
                  //#define MY_INCLUSION_MODE_FEATURE
                  // Enable Inclusion mode button on gateway
                  //#define MY_INCLUSION_BUTTON_FEATURE
                  // Set inclusion mode duration (in seconds)
                  //#define MY_INCLUSION_MODE_DURATION 60
                  //Digital pin used for inclusion mode button
                  //#define MY_INCLUSION_MODE_BUTTON_PIN  3
                  

                  Serial Monitor info:

                  21257 TSM:FAIL:CNT=7
                  321259 TSM:FAIL:DIS
                  321261 TSF:TDI:TSL
                  381263 TSM:FAIL:RE-INIT
                  381265 TSM:INIT
                  381266 TSM:INIT:TSP OK
                  381268 TSM:FPAR
                  381287 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                  383295 !TSM:FPAR:NO REPLY
                  383297 TSM:FPAR
                  383315 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                  385324 !TSM:FPAR:NO REPLY
                  385326 TSM:FPAR
                  385344 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                  387352 !TSM:FPAR:NO REPLY
                  387354 TSM:FPAR
                  387373 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                  389381 !TSM:FPAR:FAIL
                  

                  Ideas?

                  rejoe2R 1 Reply Last reply
                  0
                  • M mrhutchinsonmn

                    Thank you for the advice!

                    I started over, just to be sure I didn't have anymore mix ups, but still have not been able to get the RS485 motion sensor and RS485 gateway to talk.

                    Hardware: Arduino Nanos+ RS485 modules.

                    Wiring:
                    RO = Pin 8 of Arduino
                    DI = Pin 9 of Arduino
                    A = A on other Nano
                    B = B on other Nano
                    DI= Pin 9 of Nano
                    RO = Pin 8 of Nano
                    DE & RE = Pin 2 of Nano
                    VCC = External power source
                    GND = External power source

                    Current Gateway Sketch:

                    /**
                    * 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-2019 Sensnology AB
                    * Full contributor list: https://github.com/mysensors/MySensors/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.
                    *
                    *******************************
                    *
                    * DESCRIPTION
                    * The RS485 Gateway prints data received from sensors on the serial link.
                    * The gateway accepts input on seral which will be sent out on
                    * the RS485 link.
                    *
                    * Wire connections (OPTIONAL):
                    * - Inclusion button should be connected between digital pin 3 and GND
                    * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
                    *
                    * LEDs (OPTIONAL):
                    * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
                    * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
                    * - ERR (red) - fast blink on error during transmission error or receive crc error
                    *
                    * If your Arduino board has additional serial ports
                    * you can use to connect the RS485 module.
                    * Otherwise, the gateway uses AltSoftSerial to handle two serial
                    * links on one Arduino. Use the following pins for RS485 link
                    *
                    *  Board          Transmit  Receive   PWM Unusable
                    * -----          --------  -------   ------------
                    * Teensy 3.0 & 3.1  21        20         22
                    * Teensy 2.0         9        10       (none)
                    * Teensy++ 2.0      25         4       26, 27
                    * Arduino Uno        9         8         10
                    * Arduino Leonardo   5        13       (none)
                    * Arduino Mega      46        48       44, 45
                    * Wiring-S           5         6          4
                    * Sanguino          13        14         12
                    *
                    */
                    
                    // Enable debug prints to serial monitor
                    #define MY_DEBUG
                    
                    // Enable RS485 transport layer
                    #define MY_RS485
                    
                    // Define this to enables DE-pin management on defined pin
                    #define MY_RS485_DE_PIN 2
                    
                    // Set RS485 baud rate to use
                    #define MY_RS485_BAUD_RATE 9600
                    
                    // Enable this if RS485 is connected to a hardware serial port
                    //#define MY_RS485_HWSERIAL Serial
                    
                    // Enable serial gateway
                    #define MY_GATEWAY_SERIAL
                    
                    
                    // Enable inclusion mode
                    #define MY_INCLUSION_MODE_FEATURE
                    // Enable Inclusion mode button on gateway
                    #define MY_INCLUSION_BUTTON_FEATURE
                    // Set inclusion mode duration (in seconds)
                    #define MY_INCLUSION_MODE_DURATION 60
                    //Digital pin used for inclusion mode button
                    #define MY_INCLUSION_MODE_BUTTON_PIN  3
                    
                    // Set blinking period
                    #define MY_DEFAULT_LED_BLINK_PERIOD 300
                    
                    // Flash leds on rx/tx/err
                    #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
                    #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
                    #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
                    
                    #include <MySensors.h>
                    
                    void setup()
                    {
                      // Setup locally attached sensors
                    }
                    
                    void presentation()
                    {
                      // Present locally attached sensors
                    }
                    
                    void loop()
                    {
                      // Send locally attached sensor data here
                    }
                    
                    

                    Current Motion Detector Sketch:

                    /*
                     * 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-2019 Sensnology AB
                     * Full contributor list: https://github.com/mysensors/MySensors/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
                     * This is an example of sensors using RS485 as transport layer
                     *
                     * Motion Sensor example using HC-SR501
                     * http://www.mysensors.org/build/motion
                     *
                     * If your Arduino board has additional serial ports
                     * you can use to connect the RS485 module.
                     * Otherwise, the transport uses AltSoftSerial to handle two serial
                     * links on one Arduino. Use the following pins for RS485 link
                     *
                     *  Board          Transmit  Receive   PWM Unusable
                     * -----          --------  -------   ------------
                     * Teensy 3.0 & 3.1  21        20         22
                     * Teensy 2.0         9        10       (none)
                     * Teensy++ 2.0      25         4       26, 27
                     * Arduino Uno        9         8         10
                     * Arduino Leonardo   5        13       (none)
                     * Arduino Mega      46        48       44, 45
                     * Wiring-S           5         6          4
                     * Sanguino          13        14         12 *
                     *
                     */
                    
                    // Enable debug prints to serial monitor
                    #define MY_DEBUG
                    
                    // Enable RS485 transport layer
                    #define MY_RS485
                    
                    // Define this to enables DE-pin management on defined pin
                    #define MY_RS485_DE_PIN 2
                    
                    // Set RS485 baud rate to use
                    #define MY_RS485_BAUD_RATE 9600
                    
                    // Enable this if RS485 is connected to a hardware serial port
                    //#define MY_RS485_HWSERIAL Serial1
                    
                    #include <MySensors.h>
                    
                    uint32_t 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 MY_NODE_ID 12
                    #define CHILD_ID 1   // Id of the sensor child
                    
                    // Initialize motion message
                    MyMessage msg(CHILD_ID, V_TRIPPED);
                    
                    void setup()
                    {
                      pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
                    }
                    
                    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);
                    }
                    
                    void 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);
                    }
                    

                    Commented the following out on the gateway, as per other forum users recommendations ( but made no difference)

                    // Enable inclusion mode
                    //#define MY_INCLUSION_MODE_FEATURE
                    // Enable Inclusion mode button on gateway
                    //#define MY_INCLUSION_BUTTON_FEATURE
                    // Set inclusion mode duration (in seconds)
                    //#define MY_INCLUSION_MODE_DURATION 60
                    //Digital pin used for inclusion mode button
                    //#define MY_INCLUSION_MODE_BUTTON_PIN  3
                    

                    Serial Monitor info:

                    21257 TSM:FAIL:CNT=7
                    321259 TSM:FAIL:DIS
                    321261 TSF:TDI:TSL
                    381263 TSM:FAIL:RE-INIT
                    381265 TSM:INIT
                    381266 TSM:INIT:TSP OK
                    381268 TSM:FPAR
                    381287 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                    383295 !TSM:FPAR:NO REPLY
                    383297 TSM:FPAR
                    383315 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                    385324 !TSM:FPAR:NO REPLY
                    385326 TSM:FPAR
                    385344 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                    387352 !TSM:FPAR:NO REPLY
                    387354 TSM:FPAR
                    387373 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                    389381 !TSM:FPAR:FAIL
                    

                    Ideas?

                    rejoe2R Offline
                    rejoe2R Offline
                    rejoe2
                    wrote on last edited by
                    #9

                    @mrhutchinsonmn At RS485, it's obligatory to assign NodeIDs within your sketch.

                    Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

                    M 1 Reply Last reply
                    0
                    • electrikE Offline
                      electrikE Offline
                      electrik
                      wrote on last edited by
                      #10

                      You should move the define for the node ID before you include mysensors.h

                      1 Reply Last reply
                      2
                      • rejoe2R rejoe2

                        @mrhutchinsonmn At RS485, it's obligatory to assign NodeIDs within your sketch.

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

                        @rejoe2 In research, some stated it needed to be there if the sensor did not present itself. Followed @electrik advice and it now works. Thank you for your feedback!

                        M 1 Reply Last reply
                        0
                        • M mrhutchinsonmn

                          @rejoe2 In research, some stated it needed to be there if the sensor did not present itself. Followed @electrik advice and it now works. Thank you for your feedback!

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

                          @electrik Yes... that worked!!! Moved node and child id above mysensors.h

                          Thank you!!!!

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


                          19

                          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