Soil Humidity and Apple Homekit
To decide whether watering the garden
Things used in this project
Adafruit RFM69 breakout ×1
Adafruit Feather M0 RFM69 ×1
DFRobot Capacitive Soil sensor ×1
Software apps and online services
StoryTo watering the garden, when away could be difficult. And, to know, whether the plants needs water too.
So, I want to know, what the soil humidity is, to decide to water the garden. (see my other projects to identify the water level in my cistern too).
After messing around with Wifi and BLE I use 433 MHz connection for better coverage. The sensor itself stands on the ground between plants (many obstacles and signal reflections).
The sensor unit is battery powered, the sensor measure in a 30 minutes interval, then go into deep sleep mode.
The minimum voltage of RFM69 and SAMD21 is 1, 8 V. (Over winter season, after 4 months - the battery capacity stands at 77 %, measured 3, 79 Volt, that's great). The mcu and the battery is covered in a IP66 case.
Using the sensor outside, it's a good idea to select a capacitive sensor for measuring soil humidity like the "DFRobot Soil Moisture".
The whole sensor device could be like this:
My brigde based on a Raspberry Pi Zero W and the RFM69 breakout board.
The RFM69 breadboard using the following Pins:
Vin to Raspberry Pi 3.3V
GND to Raspberry Pi Ground
RFM G0 to Raspberry Pi GPIO #24
RFM RST to Raspberry Pi GPIO #25
RFM CLK to Raspberry Pi SCLK = GPIO #11
RFM MISO to Raspberry Pi MISO = GPIO #9
RFM MOSI to Raspberry Pi MOSI = GPIO #10
RFM CS to Raspberry Pi CS1 = GPIO #7
It's a good idea to use a external antenna for better signal coverage.
At least, with a distance of 10 meters - through thick walls, plants and over obstacles i got rssi of 65.
Against the default CPython adafruit driver, I use DIO 0 interrupt to detect incoming data. See my project page on GitHub, how the bridge work.
The sensor unit send the data in a json-like format to the HAP-Python bridge. You can change that in your own way, but you need to customize that on both side - see the mcu c++ code and GitHub project page.
checking incoming data with:
sudo grep "Transceiver" </var/log/syslog -a
For watering I use cistern water and a immersion pump. To know how much water is left, I made a second sensor - see "Water level and Apple Homekit".
measuring, transmitting, deep sleep
modified RTCZero.hC/C++ Download
modified RTCZero driver to prevent timer freeze
modifed RTCZero.cppC/C++ Download
modifed RTCZero driver to prevent timer freeze