RFM69 with Binary Switch example requires additional code
-
Hi
I finally managed to try out the MySensors v1.5 library. I mainly was looking for the support of the RFM69 radios because of their better range and low power consumption.
The serial gateway worked like a charm out of the box. But then I struggled to get the binary switch example working. I mostly got an error 'Radio Init Fail'.
Looking into the code I also struggled to see where the code says that this should work with an RFM69 radio, like it does in the Serial Gateway code in "MyTransportNRF24 transport(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL_GW);"
So I eventually copied a whole bunch of lines from the Serial Gateway example and now it is working perfectly.I may have copied too many lines and perhaps there is a much smarterway of solving this but as a feedback of what I tried and what worked, herewith the code I eventually used in my Binary Switch node:
/**- 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.
- DESCRIPTION
- Simple binary switch example
- Connect button or door/window reed switch between
- digitial I/O pin 3 (BUTTON_PIN below) and GND.
- http://www.mysensors.org/build/binary
*/
#include <MySigningNone.h>
#include <MyTransportRFM69.h>
#include <MyHwATMega328.h>
#include <MySigningAtsha204Soft.h>
#include <MySigningAtsha204.h>#include <MySensor.h>
#include <SPI.h>
#include <Bounce2.h>#define CHILD_ID 3
#define BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switchMyTransportRFM69 transport;
// Hardware profile
MyHwATMega328 hw;// Construct MySensors library (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
// To use LEDs blinking, uncomment WITH_LEDS_BLINKING in MyConfig.h
#ifdef WITH_LEDS_BLINKING
MySensor gw(transport, hw /, signer/, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);
#else
MySensor gw(transport, hw /, signer/);
#endifBounce debouncer = Bounce();
int oldValue=-1;// Change to V_LIGHT if you use S_LIGHT in presentation below
MyMessage msg(CHILD_ID,V_TRIPPED);void setup()
{
gw.begin(NULL,3);// Setup the button
pinMode(BUTTON_PIN,INPUT);
// Activate internal pull-up
digitalWrite(BUTTON_PIN,HIGH);// After setting up the button, setup debouncer
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);// Register binary input sensor to gw (they will be created as child devices)
// You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
// If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
gw.present(CHILD_ID, S_DOOR);
}// Check if digital input has changed and send in new value
void loop()
{
debouncer.update();
// Get the update value
int value = debouncer.read();if (value != oldValue) {
// Send in the new value
gw.send(msg.set(value==HIGH ? 1 : 0));
oldValue = value;
}
}I hope this helps somebody and perhaps somebody wants to advise on how to do this much better.
Anyhow, Big Thank You to the guys (@KOLAF,@YVEAUX, @HEK and a bunch of others) who made the effort to extend the library to RFM69. Much appreciated.
-
Excellent, it worked