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 951 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 Online
      mfalkviddM Online
      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 Online
            mfalkviddM Online
            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 Online
                mfalkviddM Online
                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

                          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.0k

                          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