Corrupted data from RS485 Sensor Node



  • Hello. I'm using Arduino Pro Mini (atmega328) and checking one of basic examples (MotionSensorRS485). The gateway is connected via same RS485 converter. Unfortunately they do not communicate.
    First I checked connection (direct TX-RX/RX-TX) connection - with failure. Then I took another USB/TTL converter to check what is on the output of softserial - and I found some kind of garbage data. It looks like wrong baudrate so I checked all "standard" speeds from 2400 up to 115200. (Configured to 9600).
    Then I enabled DEBUG, enabled HWSERIAL and set to Serial. Both baudrates set to 9600. So I have now both, the communication frame and debug. See screenshot below.

    e5936525-8349-4880-bce8-24c5e80e90c2-image.png

    When I disable DEBUG, only corrupted frame left:
    6ab75562-5bfe-431a-a23b-15d84ac69bfa-image.png

    The code:

    //#define MY_DEBUG
    //#define MY_DEBUG_LOCAL
    
    // 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_BAUD_RATE 9600
    #define MY_RS485_BAUD_RATE 9600 //19200 //57600 //38400 //9600
    #define MY_RS485_SOH_COUNT 1
    #define MY_RS485_HWSERIAL Serial
    #define MY_SPLASH_SCREEN_DISABLED
    //#define MY_PASSIVE_NODE
    #define MY_NODE_ID 10
    
    #include <MySensors.h>
    
    uint32_t SLEEP_TIME = 3000;//+120000 // Sleep time between reports (in milliseconds)
    #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
    #define CHILD_ID 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);
    }
    

    An Idea? Arduino board is not corrupted, any short sketch with SoftSerial library works fine. Haven't checked MySensors with SoftSerial though. MySensors version 2.3.2. Checked on Arduino IDE and VSC.
    Cheers!


    Log in to reply
     


  • What about RS485 bus topology and connection to RS485 recievers on Arduino Pro Mini module?



  • Hi Cabat. Both checked. I wrote my own code to test it. I'm having my own working RS485 network at home already. I did it by myself and I'm pretty experienced in debugging ;). I want to switch to MySensors now due to more flexibility.
    So to summarize:

    • it is not a RS485 issue, tested,
    • it is not a USB/TTL converter issue, tested,
    • it is not an UART bitrate issue, not on the PC side at least,
    • there is no difference if I use hardware or software serial - same content.

    I have conserns about the Library. According to this page:
    https://www.mysensors.org/download/serial_api_20
    the typical frame sent by a node should be like this:
    12;6;0;0;3;My Light\n
    12;6;1;0;0;36.5\n
    13;7;1;0;2;1\n

    As you can see on picture in firs post, when I configured to use HWSerial for RS485 and DEBUG set ON, I shall expect both - Communication and Debug on the same line. Debug data is correct, but the frame is nothing like a text message - looks like the content is sent in HEX not ASCII.
    I learned there is no encryption, so it is not an encrypted data I assume.



  • RS485 data is different to serial api. Serial api is only from gateway to controller.
    Please check links in 1st post.
    https://forum.mysensors.org/topic/1947/rs485-rs232-serial-transport-class-for-mysensors-org



  • Yes, I realized that last Sunday. I went through the code of library. I had to switch to another project for a week or so, then I come back to it. Thanks!


Log in to reply
 

3 out of 5

Suggested Topics

0
Online

11.5k
Users

11.1k
Topics

112.8k
Posts