RS485/RS232/Serial transport class for mysensors.org
-
@radekzm
OK, what I did:
on one Arduino nano I have this sketch
https://github.com/mysensors/Arduino/blob/development/libraries/MySensors/examples/GatewaySerialRS485/GatewaySerialRS485.ino
on second arduino nano I have conbined two sketches:
https://github.com/mysensors/Arduino/blob/development/libraries/MySensors/examples/DistanceSensor/DistanceSensor.ino
and
https://github.com/mysensors/Arduino/blob/development/libraries/MySensors/examples/MotionSensorRS485/MotionSensorRS485.ino
and the results is:/** * 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-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/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 * * 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 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 #include <SPI.h> #include <MySensor.h> #include <NewPing.h> #define CHILD_ID 1 #define TRIGGER_PIN 5 // Arduino pin tied to trigger pin on the ultrasonic sensor. #define ECHO_PIN 6 // Arduino pin tied to echo pin on the ultrasonic sensor. #define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds) NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. MyMessage msg(CHILD_ID, V_DISTANCE); int lastDist; boolean metric = true; void setup() { metric = getConfig().isMetric; } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Distance Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_DISTANCE); } void loop() { int dist = metric?sonar.ping_cm():sonar.ping_in(); Serial.print("Ping: "); Serial.print(dist); // Convert ping time to distance in cm and print result (0 = outside set distance range) Serial.println(metric?" cm":" in"); if (dist != lastDist) { send(msg.set(dist)); lastDist = dist; } sleep(SLEEP_TIME); }On serial port (/dev/ttyUSB0) Controller (first nano) I see:
0;255;3;0;9;Starting gateway (RSNGA-, 2.0.0-beta)
0;255;3;0;9;Radio init successful.
0;255;3;0;14;Gateway startup complete.
0;255;3;0;9;Init complete, id=0, parent=0, distance=0on serial port(/dev/ttyUSB1) in node is see:
...
Ping: 33 cm
Ping: 34 cm
Ping: 34 cm
Ping: 33 cm
Ping: 33 cm
Ping: 33 cm
Ping: 5 cm
Ping: 91 cm
Ping: 88 cm
Ping: 89 cm
......But I expect to see some message on controller. What can I check? Do you see and mistakes ?
-
Hi,
I am new in mysensors and arduino however I already use domoticz with mysensors and rflink.
Everything is working fine however now I plan to renovate my house and I would like to put wire connection using max485 and arduino. Problem is that it is now working :( I have tried 1.5.4 version and also development branch. It seems that signal is not getting to gateway. I nothing see on arduino gateway except of initalization gateway. I have started to use two nano but I also tried combination nano and mega without success. I would be very appreciate if someone who done it could more describe how to make that it works.
I tried https://arduino-info.wikispaces.com/SoftwareSerialRS485Example and it works fine.
I use for nano combination pins 2 (de/re), 8 (ro),9(di) -
Hi,
I am new in mysensors and arduino however I already use domoticz with mysensors and rflink.
Everything is working fine however now I plan to renovate my house and I would like to put wire connection using max485 and arduino. Problem is that it is now working :( I have tried 1.5.4 version and also development branch. It seems that signal is not getting to gateway. I nothing see on arduino gateway except of initalization gateway. I have started to use two nano but I also tried combination nano and mega without success. I would be very appreciate if someone who done it could more describe how to make that it works.
I tried https://arduino-info.wikispaces.com/SoftwareSerialRS485Example and it works fine.
I use for nano combination pins 2 (de/re), 8 (ro),9(di) -
@m26872
I'm sorry and promises to improve :)@Mariusz
In my case the solution was in MyConfig.h file (in my case C:\Program Files (x86)\Arduino\libraries\MySensors):-
Disable function MY_DISABLED_SERIAL
commenting lines 49
// #define MY_DISABLED_SERIAL -
Disable function MY_DEBUG
commenting lines 36
//#define MY_DEBUG -
Correct connection is on my pictures enclosed in the above comment
Board | Transmit | Receive | PWM Unusable
Arduino Uno | 9 | 8 | 10 <----- Form https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html .... (& other ATMEGA328)
Arduino Leonardo | 5 | 13 | (none)
Arduino Mega | 46 | 48 | 44, 45DE and RE -> Pin 2
RO -> Pin 8
DI -> Pin 9-
To check the hardware and connections run the "Example Program" from https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
-
Use development branch
-
-
Hi everyone !
I needed a wired solution for my several nodes.
Here is the serial rs485/rs232 wired network transport for mysensors.
https://github.com/leodesigner/mysensors-serial-transport
It is based on the Majenko ICSC serial library.
Can you please test it? It is a beta version - but it is working for me.
(However, I am still waiting for my rs485 boards to arrive)
You can find more technical information at
http://sourceforge.net/p/arduino-icsc/wiki/RS-485/To use it, you have to:
- Put SerialTransport.cpp and SerialTransport.h to folder/directory/path SerialTransport in your library.
- Add #include <SerialTransport.h> to your .ino sketch
- Replace transport class with:
MyTransportSerial transport(Serial,0,-1); // serial port, node, dePin (-1 disabled)
Please let me know about bugs and how it is working for you.
@LeoDesigner
Hi, I am trying to do almost the same, but I would like to use softwareSerial instead of altsoft. The reason why I would do this is that i can barely fit the arduino nano inside my case, and an additional rs485 module would not fit and that I have 8 nodes connected on the softwareserial . I have tested software serial on arduino and it seems to work fine up to 15meters, I also adjusted the baudrate to 9600 since my node does not send out/receive large amount of data. I read that you did some work on software serial and were wondering if you could take a look at this thread. -
Is there any how-to's on this transport class as far as the hardware goes? How does it work with multiple nodes? Is it like a ring pattern? or do all the nodes have to have a dedicated connection to the gateway.
-
Is it possible, to built a esp8266 wifi gateway and communicate GW to node with rs485?
In altsoft esp8266 is not decleared, so i can't use it out of the box.Btw: I tested my_rs485 with nano as GW and Pro Mini as node, and it worked great. Thank you :)
-
@hausinger if you know about coding..
- plain C lib for esp8266, it can be adapted to work with Arduino Esp: https://github.com/plieningerweb/esp8266-software-uart
- or use stock arduino esp8266 software serial lib (https://github.com/plerup/espsoftwareserial), and inspire yourself from lib above, and code your CE pin management..
-
How about adding the following define to use the Serial1/2 on Mega. I have not tested yet but assuming the AltSoftSerial lib has the same interface/functionality it should work.
#define MY_RS485_SERIAL Serial1diff --git a/core/MyTransportRS485.cpp b/core/MyTransportRS485.cpp index 814f721..ea35c9e 100644 --- a/core/MyTransportRS485.cpp +++ b/core/MyTransportRS485.cpp @@ -92,7 +92,11 @@ unsigned char _recSender; unsigned char _recCS; unsigned char _recCalcCS; +#if defined(MY_RS485_SERIAL) +HardwareSerial& _dev = MY_RS485_SERIAL; +#else AltSoftSerial _dev; +#endif unsigned char _nodeId; -
@hek Thanks for the quick response. I'm looking for some direction (this might not be the right forum).
I want to create a node to control my Itho Ecofan ventilation box. I now have a working program (thanks to the help of Rogier Reedijk The nodo now uses a CC1101 transceiver to control the box and thus uses the SPI bus. I'm looking for some direction to use this transmitter as part of my sensor network so I can control it from my Domoticz. Hope you can give me some directions how to proceed.