rboard - Cheap relay/radio/arduino board ~$10


  • Hero Member

    I realise quite a few are building your own PCB's and i admit i really enjoyed the process of designing and producing my first "mysensors" pcb ... but when you find prebuild boards like this for such little money then its hard to ignore...

    So i bought 2 of these today
    http://imall.iteadstudio.com/im140704001.html

    I plan to use one for my garage door controller...the other not sure yet ๐Ÿ˜‰



  • Nice price. How much for shipping?


  • Hero Member

    @jendrush

    About $4 to Australia... I think my last order only took about a week....I was amazed!
    I'll try remember to post back when it arrives.


  • Hero Member

    Nice find. Please let us now how they perform.


  • Hero Member

    Finally got the email they are on the way....will report in when ive tested them,


  • Hero Member

    And they just arrived... 6days ..not too bad!

    Now to test!


  • Hero Member

    Well that was easy....
    Loaded up the RelayActuator sketch, changed the relay pin to 4.
    It joined Vera as it should, and after providing it a 5V powersource the relay clicks on and off as commanded!


  • Hero Member

    Now loaded up the Garage Door sketch , choosing A0 for the switch and D4 for the relay and again works straight away!

    I note they also have a header for 433Mhz module and according to the schematic, the pads could be used for 5v,GND, and D3 - so could be used for another sensor such as Dallas temp....or ultrasonic/IR..anything!

    Great buy for $10

    ftp://imall.iteadstudio.com/Mainboard/IM140704001_mini_Rboard/SCH_IM140704001_MiniRboard.pdf


  • Hero Member

    Good price but a pity you still need an external 5 Volts supply...


  • Hero Member

    Yep no getting away from the need for power! A mains version would be great, but although it only adds a few $ in electronics, getting all the approvals adds $$$. But for DIY'ers adding a phone powersupply is cheap and reasonably compact.


  • Hero Member

    Yeah it seems like a really nice board but it could have had access to a few more digital pins on the board.
    Is it really only A0 and D3 that can be accessed other then the relay?


  • Hero Member

    @korttoma said:

    Yeah it seems like a really nice board but it could have had access to a few more digital pins on the board.
    Is it really only A0 and D3 that can be accessed other then the relay?

    Looks like. Surprising that folks don't at least put a few more pins on solderable holes on boards like this, where you could put a pin or solder a wire - seems easy and takes little space.



  • Hey! my first post ๐Ÿ™‚

    I read about these boards here a week or so ago, and order one to play with! Just waiting on my Vera to arrive and I'm gonna start playing ๐Ÿ™‚



  • it is possible to add hardware button to the setup and control the relay.


  • Admin

    @derrij

    Yes, here in an example:

    https://codebender.cc/sketch:47534


  • Mod

    @hek there's no code visible on android.....


  • Admin

    @Yveaux

    I can see it on my chrome/android.

    Update: The stock browser also works.


  • Mod

    @hek now it is working... Did you change anything?


  • Admin

    @Yveaux

    Nope.



  • Which board do I choose when uploading a sketch to this?



  • @Homer said:

    Which board do I choose when uploading a sketch to this?

    It's all good, I found a website which stated what it was compatible with So I'm moving on ๐Ÿ™‚

    Now I am just trying to work out how to connect a switch to the A0 pin. There are two pins so is the switch just bridging the two? Sorry, I really am trying to learn this stuff.



  • Ok, looks like I am slowly getting there ๐Ÿ™‚

    fyi I tried playing around with the above sketch, but it's a no go as Codebender tells me <Bounce2.h> is missing.


  • Admin

    @Homer

    The link above has been updated to point the MySensors codebender location (where Bounce2 is available).



  • @hek said:

    The link above has been updated to point the MySensors codebender location (where Bounce2 is available).

    Thanks mate. I'll give it ago again soon.


  • Hero Member

    I used one of these boards for a multi sensor recently.... Temp/Motion and Relay actuator.

    Turns out to be a very tidy solution !

    I'm using the A0 pins connected to a ds18b20 . This is really cute in that the sensor is connected in parasite mode meaning i only need two wires. To do this all you need to do is join pin 1 and 3 to GND and the middle signal wire goes to the A0 ( which is used as D14 ). The rboard also has a 10k resistor from the A0 connection to 3.3v. It works just fine!!

    Then for the PIR, im using the readily available RF433 connections to provide D3, 3.3v and GND. The cute trick here is that even though these PIR's are designed for 5v, they run great on 3,3 v too...you just need to connect it differently! See in the photo where the yellow wire which is the 3.3 v vcc supply connects on the PIR sensor.. Genius!!!

    See here for background on this:
    http://techgurka.blogspot.com.au/2013/05/cheap-pyroelectric-infrared-pir-motion.html

    Do this, feed it 5v ( as relay needs 5v) and you have a tidy little multisensor.

    Here's some pics:
    IMG_20141116_205548.jpg IMG_20141116_205649.jpg IMG_20141116_205633.jpg

    full sketch here https://codebender.cc/sketch:61919


  • Hero Member

    @gregl I've now my rboard, but I have no Foca, so I used my programmer I matched against the pins on the board.

    I choose mini pro 3V3 in the arduino ide but impossible to sync .... is there something I am missing ?

    Also, do you change something on initialization as for the 4 switch version ?

    thanks,


  • Hero Member

    Hi @epierre - I do have a foca and i program as Nano with Atmega328.

    What do you mean "change something on initialization as for the 4 switch version" ?? iirc i also just programmed that as a Nano. is this what you mean??

    Cheers,
    Greg


  • Hero Member

    @gregl so there is no way to program it without a foca ? ;-(

    I meant about the gw initialization, for the 4 switch rboard you used other parameters, so my wuestion was wether I could use it with default values or extra values.


  • Hero Member

    @epierre - you dont need the foca programmer... any programmer should work as long as you wire correctly - you could even use another arduino.
    http://www.instructables.com/id/Arduino-Examples-2-Use-an-Arduino-as-a-FTDI-Progr/

    • make sure you only feed it 3.3v via the programming socket...!

    For the 4 relay board the CE/CS pins are wired differently to the defaults used by MySensors sketches (9,10) , so you need to tell mysensors library to use (8,9) as this is how they are wired on the Rboard - see the doco ftp://imall.iteadstudio.com/IM120618001_RBoard/DS_IM120618001_RBoard.pdf


  • Hero Member

    @gregl nope, I tried and it failed... this is why I asked. One pin is missing, another has another use... I've ordered the foca and I will see.

    Regarding your PIR Wiring on the picture, you added a 1DS80 right ? I mistakenly thought it was the yellow one ...


  • Hero Member

    @epierre - ill see if i can get it to program with another arduino...i dont think there is anything special about the foca....

    so the PIR is wired as such that the VCC provided by the rboard mini ( 3.3) connects to a jumper pin and supplies the PIR module there.... then the PIR quite happliy operates on 3.3!

    The ds18b20 is connected to the "A0" pin headers hidden under the radio - i just bent them over. On the ds18b20 connect pin 1 and 3 to GND and pin 2 to the A0 ... easy!!


  • Hero Member

    @epierre Hello,

    I received the foca and ... RX and TX have to be inverted (RX to TX, and TX to RX), the answer is so simple...

    @hek a suggestion, would there be a knowledge management section about wiring a special platform to use mysensors ? I think about the Mega or the iboard ? that would be very useful, rather than going through many forum pages ?



  • Woohoo! After stuffing around with a sketch for my Ethernet Gateway that was never complete to begin with, I have got that working and then made my first sensor using this board!!! L-)



  • I've decided to try and do a little more with this board. I initially programmed it to only operate the relay on and off to activate the garage door opener, but it's time for me to push myself lol and do more ๐Ÿ™‚

    The problem with how I have it now, is that my Vera 3 doesn't know if the door is open or closed. I was going to add a tilt sensor to the board and have that mounted to the actual door, which I think would mean that it could send a message reporting if it is closed or not. But then I started thinking about the example above which included a switch.

    So using the relay and the switch to operate the garage door, would that then work to keep Vera 3 in the loop as to whether or not the door is open or closed?

    If I don't get a response soon, I'll just build it and see what happens ๐Ÿ™‚

    Thanks in advance for everyones help! I have already learnt a lot from this site ๐Ÿ™‚


  • Hero Member

    Hi Dean,

    Rather than use a tilt sensor and mount the mini rboard to the moving door, why not just use a reed switch? then you can mount the rboard next to your door controller and run cheap speaker wire to a reed switch and the magnet attached to the moving door..

    Here is a sketch i use for my garage door using reed switch
    https://codebender.cc/sketch:44296



  • Thanks for the tips @gregl!

    I am trying to see if I can build this with the sensors that I have, so I can keep my wife happy. So far I am not doing a very good job lol

    One of my problems is not knowing which pin is what on this board. I see that you stated above that A0 is D14; how do you find this out?

    The other thing I was wondering about is this: If I set up this sensor and garage door to only ever open/close using either my controller sending the message or me pressing a button, then do I even need a reed switch to determine what state the door is in? Can the sketch keep count of the state?

    I like your suggested sketch above; in fact I like both examples, and would like to merge the two. The one above with the motion sensor- I don't need that bit, but I like having a temp sensor. What I would like to do is have the temp sensor and instead of the motion sensor I have a switch. Does that sound possible?

    My wife has given me the rest of the night off, so I'll see what I can come up with ๐Ÿ™‚



  • I just worked out where you get the info regarding what pin is what ๐Ÿ™‚ you have a link in the sketch ๐Ÿ™‚



  • lol scratch that last comment.... I have been looking at that PDF and I have no idea how the A0 pin is D14.



  • Ok what I have done is uploaded the sketch that is exampled above which has the temp sensor. Instead of the motion sensor, I will use a switch, and I'll connect the two wires to the 433 module spot; one wire to GND, and the other to DATA. I am hoping that this will mean that when the switch is activated it will operate.

    Gonna go test ๐Ÿ™‚



  • lol I ended up with a board that now malfunctions sometimes ๐Ÿ™‚ For some reason the relay began to turn on and off repeatedly, then it stopped working altogether, and now it seems to be working as it should... when my son was running past me the other day which lead to the board falling on the ground, it must have fixed whatever the problem is! In any case, I won't be using that relay for anything too important. I have it in my garage now; it opens and closes the garage door, has a motion sensor and tells me if someone goes into the garage, and it is also sending me the temperature outside. I am happy ๐Ÿ™‚

    So now I want to use another one of these boards to turn a light on, but I want to also have a separate switch which will operate through the board. So basically I am going to use the Garagedoor sketch mentioned above, which is the same as the "Relay with button actuator". I understand what pins I need to assign, but I am a little confused as to how I need to wire up the switch. Am I just completing a circuit, or am I supplying power as the trigger?


  • Hero Member

    What voltage are you giving the board?
    I think i recall having an issue when i was giving it just 5v... i think at 6/7v the issue went away....


  • Hero Member

    @Dean So let me get this straight,, You are using that board to "opens and closes the garage door, has a motion sensor and tells me if someone goes into the garage, and it is also sending me the temperature outside . I am happy ...." and you don't consider that contrary to "I won't be using that relay for anything too important." ?

    Did I understand you correctly?



  • @gregl thanks for your suggestion, that thought actually did come to mind when I was trying to troubleshoot what was going on. I had been using 4 AA batteries to power it, and they had been used for quite some time, so I ended up locating an old mobile phone charger and used that to power it. The board has been working reliably every since, but I am reluctant to use the board for anything important.

    @ServiceXp yes you heard me right ๐Ÿ™‚ the board is currently doing all those things, but I'm not depending on it. My wife is home all the time, so if for some reason the relay decides to open the garage, she will hear it and close out back up. It is my first sensor, and even though it hasn't come together as well as all of you, in still proud of myself for building it, and even though it's reliability is debatable, I like the idea of keeping it running at this stage because it gives me a smile every time I open the Vera dashboard ๐Ÿ™‚

    So can anyone give me a little hand with how the actual switch part is supposed to work? Thanks in advance ๐Ÿ™‚


  • Hero Member

    @Dean Does the build make it difficult to swap out the rboard, and demote that temperamental rboard to say controlling a light? For me, I consider the garage door to be one of those more important functions.. ๐Ÿ™‚

    You will wire one side of the switch to the pin you want to use on the rboard and the other side to GND. When you initialize the pin, you need to use INPUT_PULLUP eg: pinMode(buttonPin, INPUT_PULLUP)

    http://arduino.cc/en/Reference/pinMode

    Hope that helps...



  • @ServiceXp said:

    @Dean Does the build make it difficult to swap out the rboard, and demote that temperamental rboard to say controlling a light? For me, I consider the garage door to be one of those more important functions.. ๐Ÿ™‚

    You will wire one side of the switch to the pin you want to use on the rboard and the other switch to GND. When you initialize the pin, you need to use INPUT_PULLUP eg: pinMode(buttonPin, INPUT_PULLUP)

    http://arduino.cc/en/Reference/pinMode

    Hope that helps...

    Hi @ServiceXp , that is the exact info I was after! Thank you very much ๐Ÿ™‚

    At present the build is just the board, radio and motion sensor all just wired up and sitting above the lightswitch in the garage. For me it was kind of a test to see if I could do this. Like I said, my wife is home all the time so there is no way the garage door will open without someone knowing. If the board keeps working as it is presently, then I'll feel more confident in using the board again somewhere else. But so far it is working very well, which I am very pleased about ๐Ÿ™‚ But you're right, keeping a garage secure is something that is usually pretty important, the other thing is that there is no internal access into our home, so between that and my wife being home, personally I am ok with the present arrangement.

    Thanks again for your help!



  • Cool, this one is also interesting!

    http://imall.iteadstudio.com/im120618001.html



  • @gadu said:

    Cool, this one is also interesting!

    http://imall.iteadstudio.com/im120618001.html

    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. ๐Ÿ™‚


  • Hero Member

    ive had an rboard in production with mysensors for 6 months or so.... it hasnt missed a beat and caused me absolutely no issues!!!


  • Hero Member

    @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/ttyUSB0
    

    I 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: 1
    

    But I don't hear the relay commute nor mesure a conductivity on the relay limits.

    any hint ?


  • Hero Member

    You may not have enough power to drive the relay...five it at least 6v

    . ...or the Wong pin in your sketch.


  • Hero Member

    @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/ttyUSB0
    

    what 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


  • Mod

    @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!!



  • I just wanted to say that I managed to upload a sketch and I have it working!

    I attempted to change the code so it was compatible but I gave that up and decided to merge two sketches. It was good fun, and I enjoyed learning!


  • Plugin Developer

    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! โ˜บ

    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());
      }
    }
    

Log in to reply
 

Suggested Topics

  • 87
  • 5
  • 7
  • 5
  • 7
  • 8

59
Online

11.4k
Users

11.1k
Topics

112.6k
Posts