Table of Contents
Laura long range radio
Laura utilises LoRa radios with at least one transmitter on an ATMega or STM32 acting as a sensor and another as a receiver on a Raspberry Pi running as a processor of the sensor readings. The software has been written to support the 868 MHz EU band only.
This project was designed to monitor the humidity of a remote location and as such has been written to support (initially) one of three humidity sensors boards, namely the DHT11, AHT10 and SHT3X.
The tranmitter can be a standard Arduino or compatible else a low power board run from 3 AA cells or equivalent such a Moteino or clone.
A version targeting the STM32 based B-L072Z-WRLAN1 board also exists either powered using libopencm3 or STM32 LL.
The Raspberry Pi has can be any model with a 40 pin header if the recommended LoRa board is used.
ATMega
The ATMega was chosen for simplicity of development and easy availability. The client transmitter code is written in C and doesn't use the Arduino IDE or libraries. It should be easily ported to other processors.
Arduino
For a fixed power installation an Arduino or any clone with a Dragino LoRa Shield or various alternatives for the 868MHz EU frequency band.
Moteino
For the low power prototype a clone of the Moteino is used with a RFM95W radio module.
The ATmega fuse bits have been altered as below to allow the transmitter to operate at a lower voltage than the standard BOR or approx. 2V9. Both the MCU and radio may operate down to about 2V5 or even lower.
Fuses
CLOCK = 8 MHz INTERNAL RC, SPI ENABLED, EESAVE, BOR DISABLED, NO BOOT-LOADER avrdude: safemode: Fuses OK (E:FF, H:D7, L:E2)
Three LIDL NiMH AA batteries in series were used to power a test board with the following outcome. All three batteries had seen a number of years of use previously and were fully charged.
The first message received was on Thursday, 21 October 2021, 14:51:10.
Oct 21 14:50:20 Rx Oct 21 14:51:10 0xFF 0xFF 0x04 0x00 0x37 0x35 0x2E 0x31 0x25 0x32 0x30 0x2E 0x35 0x43 Oct 21 14:51:10 75.1%20.5C Oct 21 14:51:10 RSSI = -47 Oct 21 14:51:10 RxDone
The final message received was on Wednesday, 30 March 2022, 08:43:50.
Mar 20 08:43:47 Rx Mar 20 08:43:50 0xFF 0xFF 0x00 0x00 0x36 0x35 0x2E 0x38 0x25 0x31 0x36 0x2E 0x34 0x43 Mar 20 08:43:50 65.8%16.4C Mar 20 08:43:50 RSSI = -60 Mar 20 08:43:50 RxDone
The duration was 159 days, 17 hours, 52 minutes and 40 seconds,
13,801,960 seconds 230,032 minutes (rounded down) 3833 hours (rounded down) 159 days (rounded down) 22 weeks (rounded down) 43.77% of a common year (365 days)
STM32
This documentation is work-in-progress, but fully operational code can be found below.
libopencm3 (obsolete)
http://hg.kewl.org/pub/LoRa_stm32/
STM32 LL
http://hg.kewl.org/pub/LoRa_stm/
Raspberry Pi
For development both an RPi3 and RPi3 has been tested but any with a 40 pin header will work with a Dragino LoRa/GPS HAT.
Whilst this project only utilises the radio, the GPS can be configured as an accurate time source using this guide.
Software
Software is comprised of two components written in C, the ATMega client transmitter and RPi Linux server which receives messages and may post or publish them elsewhere.
Client
The client transmitter supports three platforms and one of three sensors or no sensor at all.
The platforms are the Arduino UNO, MEGA2560 and Moteino all with the ATMega328 MCU.
Along with any sensor reading transmitted (humidity and temperature) the client will also send the current Vcc voltage level of the processor.
Fetch the code for AVR
hg clone http://hg.kewl.org/pub/LoRa_avr
Build for the target and sensor
Arduino UNO with DHT11
The DHT11 is not an accurate device but is able to measure changes at least.
make -f Makefile.uno SENSOR=DHT11
Arduino UNO without a sensor
Not using a sensor results in only the MCU Vcc being sent. This can be used for range tests when roaming.
make -f Makefile.uno SENSOR=NONE
Arduino MEGA2560 with SHT30
A more accurate device that has not been test extensively.
make -f mega2560.mk SENSOR=SHT3X
Moteino or generic with AHT10
This device may not share an I2C bus but that is not an issue here. Under test it has been very reliable.
make -f moteino.mk SENSOR=AHT10
Program device
make -f Makefile.uno SENSOR=AHT10 program
Server
Receive
The RPi receiver server for Linux listens for messages which are logged and posted to a remote web server for inspection. Later messages will be published to Moquitto MQTT once this component has been written.
The web service code is also included and the purpose here is to allow roaming with a transmitter to evaluate signal range. An Arduino UNO with a power bank may last a few hours but will also require a dummy load for most power banks to stay operational.
Fetch the code
hg clone http://hg.kewl.org/pub/LoRa_test
Install it
make install-all
The service has been written to operate with runit.
Post
The htdocs directory contains a PHP MVC application for posted messages. Example configuration if for NGINX (found in the routes subdirectory).
Schematic
TODO
Software
Client
TWI/I2C error recovery.