rboard - Cheap relay/radio/arduino board ~$10
-
Cool, this one is also interesting!
-
Cool, this one is also interesting!
@gadu said:
Cool, this one is also interesting!
I agree... I placed an order with them last and it arrived yesterday. I bought a few items including a couple more Mini Rboards, but I also bought what you linked. Not sure what I will do with it, but at that price I couldn't say no. :-)
-
ive had an rboard in production with mysensors for 6 months or so.... it hasnt missed a beat and caused me absolutely no issues!!!
-
@gregl I wanted to try mine, but it seems it doesn't commute, have you a test script ?
When I send the order:
echo "9;0;1;1;2;1" >> /dev/ttyUSB0I see on the debug:
read: 0-0-9 s=0,c=1,t=2,pt=0,l=1:1 send: 9-9-0-0 s=0,c=1,t=2,pt=0,l=1,st=ok:1 Incoming change for sensor:0, New status: 1But I don't hear the relay commute nor mesure a conductivity on the relay limits.
any hint ?
-
You may not have enough power to drive the relay...five it at least 6v
. ...or the Wong pin in your sketch.
-
@gregl right this was linked to a powering issue.
:~$ echo "9;1;1;1;2;1" >> /dev/ttyUSB0 :~$ echo "9;1;1;1;2;0" >> /dev/ttyUSB0what is strange is that it is the sensor 1 and not the 0, but the way the demo code is you have to do that...
digitalWrite(message.sensor-1+RELAY_1,@hek sending a message would be good in http://www.mysensors.org/download/serial_api_14 in § serial communication example, it is missing...
-
Sorry about bumping an old thread...
I am using one of these boards to make a relay and temp sensor. I am trying to use Gregl's example that is linked here and stored on Codebender. For the record, here it is:
//This is Motion/Door & Temp Sensor with Relay //Hardware is Mini RBoard ftp://imall.iteadstudio.com/Mainboard/IM140704001_mini_Rboard/SCH_IM140704001_MiniRboard.pdf // #include <MySensor.h> #include <SPI.h> #include <DallasTemperature.h> #include <OneWire.h> char sketch_name[] = "Multi Sensor"; char sketch_ver[] = "2014.11.15r1"; #define MySensorTESTBED 0 #if MySensorTESTBED == 1 #define CLIENT_ID 9 // Sets MYSensors client id #define RADIO_CH 96 // Sets MYSensors to use Radio Channel 96 #define RELAY 4 // Set 4 for mini rboard #define TRIGGER 3 // On Mini Rboard there is D3 (Interupt 1) available on the RX Module pins #endif #if MySensorTESTBED == 0 #define CLIENT_ID AUTO // Sets MYSensors client id #define RADIO_CH 76 // Sets MYSensors to use Radio Channel #define RELAY 4 // Set 4 for mini rboard #define TRIGGER 3 // On Mini Rboard there is D3 (Interupt 1) available on the RX Module pins #endif //Temp Sensor bits #define ONE_WIRE_BUS 14 // Pin where dallas sensor is connected - on Rboard this is A0(D14) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DallasSensors(&oneWire); float lastTemperature ; #define CHILD_ID_T1 3 //CHILD ID for relay //Relay Output bits #define RELAY_ON 0 // GPIO value to write to turn on attached relay #define RELAY_OFF 1 // GPIO value to write to turn off attached relay #define CHILD_ID_R1 1 //CHILD ID for relay //Trigger Sensor Bits #define CHILD_ID_S1 2 //CHILD ID for Reed/Motion sensor boolean lastTripped = 0; MySensor gw; MyMessage triggerMsg(CHILD_ID_S1,V_TRIPPED); MyMessage relayMsg(CHILD_ID_R1,V_LIGHT); MyMessage tempMsg(CHILD_ID_T1,V_TEMP); void setup() { // Startup OneWire Temp Sensors DallasSensors.begin(); // Initialize library and add callback for incoming messages gw.begin(incomingMessage, CLIENT_ID , false,AUTO,RF24_PA_MAX,RADIO_CH,RF24_250KBPS); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo(sketch_name, sketch_ver); // Register all sensors to gw (they will be created as child devices) gw.present(CHILD_ID_R1, S_LIGHT); gw.present(CHILD_ID_T1, S_TEMP); gw.present(CHILD_ID_S1, S_MOTION); // Then set relay pins in output mode pinMode(RELAY, OUTPUT); pinMode(TRIGGER,INPUT_PULLUP); //Ensure relay is off digitalWrite(RELAY,RELAY_OFF); //turn relay off } void loop() { // Alway process incoming messages whenever possible gw.process(); // Check for motion change value boolean tripped = digitalRead(TRIGGER) == HIGH; if (lastTripped != tripped ) { gw.send(triggerMsg.set(tripped?"1":"0")); // Send new state and request ack back Serial.println("Tripped"); lastTripped=tripped; } // Fetch temperatures from Dallas sensors DallasSensors.requestTemperatures(); float tempC = DallasSensors.getTempCByIndex(1); // Only send data if temperature has changed and no error if (lastTemperature != tempC && tempC != -127.00) { // Send in the new temperature gw.send(tempMsg.set(tempC,1)); lastTemperature=tempC; } } void incomingMessage(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type==V_LIGHT && !(message.isAck()) ) { // look for messages for the relay and that are not ACK messages // Change relay state digitalWrite(RELAY, message.getBool()?RELAY_ON:RELAY_OFF); Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }Just as the code stands, when I try to compile it, I get an error. First I got one because the Mysensors library had the last letter 's' missing, but even after I make that correction I can't get it to compile. This is the error that I get:
Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "Arduino Duemilanove or Diecimila, ATmega328P"
WARNING: Spurious .ci folder in 'MySensors' library
WARNING: Spurious .mystools folder in 'MySensors' library
In file included from C:\Users\Dean\Documents\Arduino\testingagain\testingagain.ino:7:0:C:\Users\Dean\Documents\Arduino\libraries\MySensors/MySensors.h:405:2: error: #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
#error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
^
Multiple libraries were found for "MySensors.h"
Used: C:\Users\Dean\Documents\Arduino\libraries\MySensors
Not used: C:\Users\Dean\Documents\Arduino\libraries\MySensors-2.3.1
Multiple libraries were found for "DallasTemperature.h"
Used: C:\Users\Dean\Documents\Arduino\libraries\DallasTemperature
Not used: C:\Users\Dean\Documents\Arduino\libraries\MAX31850_DallasTemp
exit status 1
Error compiling for board Arduino Duemilanove or Diecimila.This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.I really don't know where to go to from here, because all I have done is tried to compile a working sketch so it should work, shouldn't it?
Keen to hear back from someone who knows a lot more about this stuff than me! Thanks
-
Sorry about bumping an old thread...
I am using one of these boards to make a relay and temp sensor. I am trying to use Gregl's example that is linked here and stored on Codebender. For the record, here it is:
//This is Motion/Door & Temp Sensor with Relay //Hardware is Mini RBoard ftp://imall.iteadstudio.com/Mainboard/IM140704001_mini_Rboard/SCH_IM140704001_MiniRboard.pdf // #include <MySensor.h> #include <SPI.h> #include <DallasTemperature.h> #include <OneWire.h> char sketch_name[] = "Multi Sensor"; char sketch_ver[] = "2014.11.15r1"; #define MySensorTESTBED 0 #if MySensorTESTBED == 1 #define CLIENT_ID 9 // Sets MYSensors client id #define RADIO_CH 96 // Sets MYSensors to use Radio Channel 96 #define RELAY 4 // Set 4 for mini rboard #define TRIGGER 3 // On Mini Rboard there is D3 (Interupt 1) available on the RX Module pins #endif #if MySensorTESTBED == 0 #define CLIENT_ID AUTO // Sets MYSensors client id #define RADIO_CH 76 // Sets MYSensors to use Radio Channel #define RELAY 4 // Set 4 for mini rboard #define TRIGGER 3 // On Mini Rboard there is D3 (Interupt 1) available on the RX Module pins #endif //Temp Sensor bits #define ONE_WIRE_BUS 14 // Pin where dallas sensor is connected - on Rboard this is A0(D14) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DallasSensors(&oneWire); float lastTemperature ; #define CHILD_ID_T1 3 //CHILD ID for relay //Relay Output bits #define RELAY_ON 0 // GPIO value to write to turn on attached relay #define RELAY_OFF 1 // GPIO value to write to turn off attached relay #define CHILD_ID_R1 1 //CHILD ID for relay //Trigger Sensor Bits #define CHILD_ID_S1 2 //CHILD ID for Reed/Motion sensor boolean lastTripped = 0; MySensor gw; MyMessage triggerMsg(CHILD_ID_S1,V_TRIPPED); MyMessage relayMsg(CHILD_ID_R1,V_LIGHT); MyMessage tempMsg(CHILD_ID_T1,V_TEMP); void setup() { // Startup OneWire Temp Sensors DallasSensors.begin(); // Initialize library and add callback for incoming messages gw.begin(incomingMessage, CLIENT_ID , false,AUTO,RF24_PA_MAX,RADIO_CH,RF24_250KBPS); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo(sketch_name, sketch_ver); // Register all sensors to gw (they will be created as child devices) gw.present(CHILD_ID_R1, S_LIGHT); gw.present(CHILD_ID_T1, S_TEMP); gw.present(CHILD_ID_S1, S_MOTION); // Then set relay pins in output mode pinMode(RELAY, OUTPUT); pinMode(TRIGGER,INPUT_PULLUP); //Ensure relay is off digitalWrite(RELAY,RELAY_OFF); //turn relay off } void loop() { // Alway process incoming messages whenever possible gw.process(); // Check for motion change value boolean tripped = digitalRead(TRIGGER) == HIGH; if (lastTripped != tripped ) { gw.send(triggerMsg.set(tripped?"1":"0")); // Send new state and request ack back Serial.println("Tripped"); lastTripped=tripped; } // Fetch temperatures from Dallas sensors DallasSensors.requestTemperatures(); float tempC = DallasSensors.getTempCByIndex(1); // Only send data if temperature has changed and no error if (lastTemperature != tempC && tempC != -127.00) { // Send in the new temperature gw.send(tempMsg.set(tempC,1)); lastTemperature=tempC; } } void incomingMessage(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type==V_LIGHT && !(message.isAck()) ) { // look for messages for the relay and that are not ACK messages // Change relay state digitalWrite(RELAY, message.getBool()?RELAY_ON:RELAY_OFF); Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }Just as the code stands, when I try to compile it, I get an error. First I got one because the Mysensors library had the last letter 's' missing, but even after I make that correction I can't get it to compile. This is the error that I get:
Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "Arduino Duemilanove or Diecimila, ATmega328P"
WARNING: Spurious .ci folder in 'MySensors' library
WARNING: Spurious .mystools folder in 'MySensors' library
In file included from C:\Users\Dean\Documents\Arduino\testingagain\testingagain.ino:7:0:C:\Users\Dean\Documents\Arduino\libraries\MySensors/MySensors.h:405:2: error: #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
#error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
^
Multiple libraries were found for "MySensors.h"
Used: C:\Users\Dean\Documents\Arduino\libraries\MySensors
Not used: C:\Users\Dean\Documents\Arduino\libraries\MySensors-2.3.1
Multiple libraries were found for "DallasTemperature.h"
Used: C:\Users\Dean\Documents\Arduino\libraries\DallasTemperature
Not used: C:\Users\Dean\Documents\Arduino\libraries\MAX31850_DallasTemp
exit status 1
Error compiling for board Arduino Duemilanove or Diecimila.This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.I really don't know where to go to from here, because all I have done is tried to compile a working sketch so it should work, shouldn't it?
Keen to hear back from someone who knows a lot more about this stuff than me! Thanks
@homer that sketch was made for MySensors 1.x and needs to be converted to work for MySensors 2.x.
Followthe guide at https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x to convert it.Alternatively, remove MySensors 2 and install MySensors 1 instead.
-
@homer that sketch was made for MySensors 1.x and needs to be converted to work for MySensors 2.x.
Followthe guide at https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x to convert it.Alternatively, remove MySensors 2 and install MySensors 1 instead.
@mfalkvidd said in rboard - Cheap relay/radio/arduino board ~$10:
@homer that sketch was made for MySensors 1.x and needs to be converted to work for MySensors 2.x.
Followthe guide at https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x to convert it.Alternatively, remove MySensors 2 and install MySensors 1 instead.
Thanks mate! I was thinking something like that might be the case, but I didn't know for sure.
Thank you so much for pointing me in the right direction!!
-
Could you share the sketch? Perhaps others will learn from it too?
-
@alowhum said in rboard - Cheap relay/radio/arduino board ~$10:
Could you share the sketch? Perhaps others will learn from it too?
Great idea! :relaxed:
Here it is
// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 #include <SPI.h> #include <MySensors.h> #include <DallasTemperature.h> #include <OneWire.h> // Setup Relay bits #define RELAY_PIN 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 1 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay // Setup Temperature bits #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No #define ONE_WIRE_BUS 14 // Pin where dallase sensor is connected #define MAX_ATTACHED_DS18B20 16 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. float lastTemperature[MAX_ATTACHED_DS18B20]; int numSensors = 0; bool receivedConfig = false; bool metric = true; // Initialize temperature message MyMessage tempMsg(0, V_TEMP); void before() { for (int sensor = 1, pin = RELAY_PIN; sensor <= NUMBER_OF_RELAYS; sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor) ? RELAY_ON : RELAY_OFF); } // Startup up the OneWire library sensors.begin(); } void setup() { // requestTemperatures() will not block current thread sensors.setWaitForConversion(false); } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Temp and Relay", "1.0"); // Fetch the number of attached temperature sensors numSensors = sensors.getDeviceCount(); // Present all sensors to controller for (int i = 0; i < numSensors && i < MAX_ATTACHED_DS18B20; i++) { present(i, S_TEMP); for (int sensor = 1, pin = RELAY_PIN; sensor <= NUMBER_OF_RELAYS; sensor++, pin++) { // Register all sensors to gw (they will be created as child devices) present(sensor, S_BINARY); } } } void loop() { // Fetch temperatures from Dallas sensors sensors.requestTemperatures(); // query conversion time and sleep until conversion completed int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) wait(conversionTime); // Read temperatures and send them to controller for (int i = 0; i < numSensors && i < MAX_ATTACHED_DS18B20; i++) { // Fetch and round temperature to one decimal float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric ? sensors.getTempCByIndex(i) : sensors.getTempFByIndex(i)) * 10.)) / 10.; // Only send data if temperature has changed and no error #if COMPARE_TEMP == 1 if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) { #else if (temperature != -127.00 && temperature != 85.00) { #endif // Send in the new temperature send(tempMsg.setSensor(i).set(temperature, 1)); // Save new temperatures for next compare lastTemperature[i] = temperature; } } wait(SLEEP_TIME); } void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type == V_STATUS) { // Change relay state digitalWrite(message.sensor - 1 + RELAY_PIN, message.getBool() ? RELAY_ON : RELAY_OFF); // Store state in eeprom saveState(message.sensor, message.getBool()); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }