Newbie Problem! Get Started with NRF24L01+
-
Good news! The gateway is now working :)
I changed the dallas temperature to relay actuator and, yes, it's now working!
Bad news is I still don't know what went wrong with my temperature sensor.
I'll investigate on it soon.This is the gateway output:
0;0;3;0;14;Gateway startup complete. 0;0;3;0;9;read: 2-2-0 s=255,c=0,t=18,pt=0,l=5:1.4.1 2;255;0;0;18;1.4.1 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=6,pt=1,l=1:0 2;255;3;0;6;0 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=11,pt=0,l=5:Relay 2;255;3;0;11;Relay 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=12,pt=0,l=3:1.0 2;255;3;0;12;1.0 0;0;3;0;9;read: 2-2-0 s=1,c=0,t=3,pt=0,l=5:1.4.1 2;1;0;0;3;1.4.1This is the relay output:
repeater started, id 2 send: 2-2-0-0 s=255,c=0,t=18,pt=0,l=5,st=ok:1.4.1 send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0 send: 2-2-0-0 s=255,c=3,t=11,pt=0,l=5,st=ok:Relay send: 2-2-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0 send: 2-2-0-0 s=1,c=0,t=3,pt=0,l=5,st=ok:1.4.1I just need to test it.
Since I'll be using a gsm to control the relay. Can you help me on what to send to the relay to turn it on/off? -
@fakeJake , I' m glad it worked with relay sketch.
Regarding the temperature, try to move the sensor to other arduino pin. Pin 2 & 3 are used by interrupts and may not play nice with gw.sleep depending on the lib used.
To send a message to the relay , you need a controller connected to the GW, either via USB or ethernet. You can also simulate it by entering the message on the Serial monitor.
The protocol is described here http://www.mysensors.org/download/serial_api_14
-
I tried entering message on the serial monitor of the gateway but still no luck.
This is the closest thing that I did to tell the relay to turn the light on.Gateway output after I enter "2;0;1;1;2;1;" to the Serial monitor:
0;0;3;0;14;Gateway startup complete. 0;0;3;0;9;read: 2-2-0 s=255,c=0,t=17,pt=0,l=5:1.4.1 2;255;0;0;17;1.4.1 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=6,pt=1,l=1:0 2;255;3;0;6;0 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=11,pt=0,l=5:Relay 2;255;3;0;11;Relay 0;0;3;0;9;read: 2-2-0 s=255,c=3,t=12,pt=0,l=3:1.0 2;255;3;0;12;1.0 0;0;3;0;9;read: 2-2-0 s=1,c=0,t=3,pt=0,l=5:1.4.1 2;1;0;0;3;1.4.1 0;0;3;0;9;send: 0-0-2-2 s=0,c=1,t=2,pt=0,l=1,st=ok:1 0;0;3;0;9;read: 2-2-0 s=0,c=1,t=2,pt=0,l=1:1 2;0;1;1;2;1Relay output after "2;0;1;1;2;1;" :
sensor started, id 2 send: 2-2-0-0 s=255,c=0,t=17,pt=0,l=5,st=ok:1.4.1 send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0 send: 2-2-0-0 s=255,c=3,t=11,pt=0,l=5,st=ok:Relay send: 2-2-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0 send: 2-2-0-0 s=1,c=0,t=3,pt=0,l=5,st=ok:1.4.1 read: 0-0-2 s=0,c=1,t=2,pt=0,l=1:1 send: 2-2-0-0 s=0,c=1,t=2,pt=0,l=1,st=ok:1 Incoming change for sensor:0, New status: 1Still it doesn't turn on the light
-
Maybe you can you connect the node also in a USB port, and open a serial monitor for it? You would see if it is receiving the message correctly.
-
Maybe you can you connect the node also in a USB port, and open a serial monitor for it? You would see if it is receiving the message correctly.
@rvendrame Sorry I forgot to include that, I edited the post
-
Can we see your sensor's sketch?
-
I just changed the gw.begin();
// Example sketch showing how to control physical relays. // This example will remember relay state even after power failure. #include <MySensor.h> #include <SPI.h> #define RELAY_1 3 // 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 MySensor gw; void setup() { // Initialize library and add callback for incoming messages gw.begin(incomingMessage, 2); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Relay", "1.0"); // Fetch relay status for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Register all sensors to gw (they will be created as child devices) gw.present(sensor, S_LIGHT); // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF); } } void loop() { // Alway process incoming messages whenever possible gw.process(); } void incomingMessage(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type==V_LIGHT) { // Change relay state digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF); // Store state in eeprom gw.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()); } } -
@fakeJake said:
> Incoming change for sensor:0Means your are asking to activate relay 'zero'.
digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);So digital pin will be 0 - 1 + RELAY_1 = 0 - 1 + 3 = 2
Conclusion: Try activating relay 1 instead 0. ;-)
-
@fakeJake said:
> Incoming change for sensor:0Means your are asking to activate relay 'zero'.
digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);So digital pin will be 0 - 1 + RELAY_1 = 0 - 1 + 3 = 2
Conclusion: Try activating relay 1 instead 0. ;-)
@rvendrame The light is still not turning on :sweat:
I even change it to "2;257;1;1;2;1" just incase 255 is the message.sensor but it still prints "2;1;1;1;2;1" so I there's no problem there.sensor started, id 2 send: 2-2-0-0 s=255,c=0,t=17,pt=0,l=5,st=ok:1.4.1 send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0 send: 2-2-0-0 s=255,c=3,t=11,pt=0,l=5,st=ok:Relay send: 2-2-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0 send: 2-2-0-0 s=1,c=0,t=3,pt=0,l=5,st=ok:1.4.1 read: 0-0-2 s=1,c=1,t=2,pt=0,l=1:1 send: 2-2-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:1 Incoming change for sensor:1, New status: 1 -
how the relay is connected to arduino pin 3? Is there a transistor in between?
-
@rvendrame No transistor. I just followed MySensors: Build Relay Actuator. I directly connected the 5v, gnd and signal to the arduino.
-
Do you have a standalone relay, or a arduino relay board, like this picture?
http://www.mysensors.org/relay/relayModule.pngThe board contains a transistor. Some boards also have a 'hi-low' switch, if yours have it, you may try to play with it.
The arduino output is max of 40ma and will eventually burn or not operate correctly if connected directly to a relay. You must have a transistor in between.
Make sure you relay board contains at least this circuit: http://www.electroschematics.com/8975/arduino-control-relay/
-
Do you have a standalone relay, or a arduino relay board, like this picture?
http://www.mysensors.org/relay/relayModule.pngThe board contains a transistor. Some boards also have a 'hi-low' switch, if yours have it, you may try to play with it.
The arduino output is max of 40ma and will eventually burn or not operate correctly if connected directly to a relay. You must have a transistor in between.
Make sure you relay board contains at least this circuit: http://www.electroschematics.com/8975/arduino-control-relay/
@rvendrame My relay is more like this http://www.elecdesignworks.com/images/stories/virtuemart/product/img_62112.jpg
Thank you for your reference.
It has a transistor. I hope it's ok to use. I have tested it by following an instructable. -
Do you have a standalone relay, or a arduino relay board, like this picture?
http://www.mysensors.org/relay/relayModule.pngThe board contains a transistor. Some boards also have a 'hi-low' switch, if yours have it, you may try to play with it.
The arduino output is max of 40ma and will eventually burn or not operate correctly if connected directly to a relay. You must have a transistor in between.
Make sure you relay board contains at least this circuit: http://www.electroschematics.com/8975/arduino-control-relay/
@rvendrame You know what. I'm really thankful for you help and I'm really sorry for dragging you with me. I can turn the light on now. I just have to print "2;1;1;1;2;0;" instead of "2;1;1;1;2;1".
I will check if I will encounter any problem because of my relay module.
Again, thank you so much for your help. And I'm really sorry. -
Just swap the 0 & 1 here:
#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 relayand it will obey as you expect. Some relays boards have inverted input (Zero/GND is ON and VCC is OFF) ;-)
I'm glad it worked.
-
Is there a way to receive only the last state of the sensors/actuators in the serial?
instead of:
0;0;3;0;9;read: 2-2-0 s=1,c=1,t=2,pt=2,l=2:1 0;0;3;0;9;send: 0-0-2-2 s=1,c=1,t=2,pt=2,l=2,st=ok:1 2;1;1;0;2;1it only print the "2;1;1;0;2;1" on the serial
-
I placed if statement in serial function inside MyGateway.cpp
where 0 is the gateway addressvoid MyGateway::serial(MyMessage &msg) { if (msg.sender != 0); serial(PSTR("%d;%d;%d;%d;%d;%s\n"),msg.sender, msg.sensor, mGetCommand(msg), mGetAck(msg), msg.type, msg.getString(convBuf)); }Still it doesnt work.
Heres the format:
msg.sender = GATEWAY_ADDRESS; msg.destination = destination; msg.sensor = sensor; msg.type = type; mSetCommand(msg,command); mSetRequestAck(msg,ack?1:0); mSetAck(msg,false); if (command == C_STREAM) msg.set(bvalue, blen); else msg.set(value);