Newbie Problem! Get Started with NRF24L01+
-
@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); -
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));
Note the ; after the 0) which should not belong there..
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login