This work was done to see how small, and secondarily power-efficient, an Arduino/LoRa solution can be, as a preparation for education and measurements in the field.
I used a clone (Adafruit Feather 32u4 RFM95), that is software-wise fully compatible with an Arduino and supported by Arduino IDE, including uploading of software, but has slightly more I/O.
The bottom protoboard is just to protect the pins on the Feather board. The blue wire is necessary for LoRa to work at all. The red wire carries the data from the temperature sensor.
To get support for LoRa I used TinyLoRa (ABP only), and to support the temperature sensor I used OneWire and Arduino_Temperature_Control_Library. Data was sent in Cayenne LPP format using CayenneLPP.
It works quite well. 50% of the Flash remains and only a small portion of the RAM is used.
The antenna is a half-wave (17 cm) wire, that surprisingly worked as well as a proper antenna.
I got the following results in terms of current draw with 60 second intervals and sleep in between. Note that the board was powered via USB without a battery connected. If powered with 3V3 directly the current draw during sleep could potentially be much lower. No LED was lit except for 1 second during sending.
- Sleep: 0.2 mA
- Awake: 4 mA
- Preparing for LoRa transmission: 10 mA
- Transmission peak: 130 mA for 70 ms
Measurements were made with an Otii and a home-made USB break-out cable. Overall it spent 7 seconds somehow awake, that could be shortened a bit due to explicit delays. Checking temperature every minute is of course unnecessarily often in real use.
As a graph over time (x: 1 / 4000 seconds, y: Ampere):
I used Sensative Yggio as IoT platform and Abiro IoT for visualizing the data.
Update 2021-01-25: It now communicates with The Things Network instead via a Pycom Pygate, and from there it sends data to myDevices Cayenne as well as Abiro IoT. As TTN parses Cayenne LPP data to JSON, both services get prepared data.
The data is jumpy due to forced temperature changes.