Now that I know how to blink a LED, it is time to move to slightly more interesting applications of the GPIO interface on the Raspberry Pi. I have a few Arduino modules in and around the house monitoring the climate and various other measures. They are all battery operated and send their information to a relay that forwards all data to Thingsspeak.
My current relay module consists of an Arduino Uno with an Ethershield, connected over i2c to another Arduino pro mini. The second Arduino is connected to a RFM12b module and uses JeeLib to receive data from the sensing modules. Would it not be nice to receive that data on a slightly more powerful platform and be able to do more with it than just forwarding it elsewhere…
I decided to give the rfm12b-linux kernel driver a try, as it explicitly supports the JeeLib format. I followed the instructions from rbi-source without problems. After changing the board type (RFM12B_BOARD) and group (RFM12B_DEFAULT_GROUP_ID) in rfm12b_config.h
, the module compiled without problems. However, it would initially not load, showing errors in the dmesg
output.
Following some suggestions here and here, I used rasps-config to disable the SPI, I2C and the Device Tree. After that, it did load and dmesg
showed
[ 478.278166] rfm12b: added RFM12(B) transceiver rfm12b.0.1
[ 478.278391] rfm12b : driver loaded.
I compiled the example applications and used this
pi@hackpi:~/rfm12b-linux/examples/bin $ sudo ./rfm12b_read successfully opened /dev/rfm12b.0.1 as fd 3, entering read loop... Fri Apr 29 20:07:50 2016 32 bytes read 4 0 0 0 115 24 0 0 87 14 109 64 102 230 11 65 41 44 124 68 0 0 192 127 0 0 192 127 115 162 189 253 Fri Apr 29 20:08:14 2016 32 bytes read 2 0 0 0 59 77 2 0 122 233 110 64 210 225 148 65 0 0 192 127 0 0 192 127 0 0 192 127 93 112 175 32
showing two messages from two modules. I recognise the pattern as
typedef struct payload_t { unsigned long id; unsigned long counter; float value1; float value2; float value3; float value4; float value5; unsigned long crc; };
belonging to the lm35 and bpm085 modules that are sending their data approximately every minute.
Hi,
Great write-up! Can you tell me if this still works with the latest raspbian? I’m trying to get it to work but am running into problems and was wondering if there is any hope, except for updating the rfm12b kernel module….
I have not tested this recently, so cannot tell.