LoraWanDustSensor: Difference between revisions
No edit summary |
No edit summary |
||
Line 32: | Line 32: | ||
== Software == | == Software == | ||
=== Common === | |||
==== Packet format ==== | |||
Packets transferred over LoRa contain: | |||
* id for forwarding towards luftdaten (esp-XXXX number): 6 bytes | |||
* PM10 value, probably encoded in units of 0.1 ug/m3: 2 bytes | |||
* PM2.5 value, probably encoded in units of 0.1 ug/m3: 2 bytes | |||
* temperature, encoded in units of 0.1 deg C: 2 bytes | |||
* pressure, encoded in units of 0.1 hPa, 2 bytes | |||
* relative humidity, encoded in units of 0.1%, 2 bytes | |||
Not present value is 0xFFFF. Total: 16 bytes | |||
Would be nice to use Cayenne for this, but I don't know if Cayenne has an id for particulate matter. | |||
=== Node === | === Node === | ||
To compile the code, platformio is used, probably with the following libraries: | To compile the code, platformio is used, probably with the following libraries: |
Revision as of 17:34, 31 March 2019
Project LoRaWAN dust Sensor | |
---|---|
350px | |
LoRaWAN airborne particulate matter sensor | |
Status | Initializing |
Contact | bertrik |
Last Update | 2019-03-31 |
The plan
The plan is to create a system consisting of:
- a sensor that measures airborne particulate matter and sends the measurement data using LoRa/TheThingsNetwork to a central location.
- a backend that collects the data from TTN and forwards it to luftdaten.info
This has been done before by other people, but can't find any really good examples:
- source code location is obscure, I will publish all source code on github and put up documentation on this wiki
- payload format is non-standard, I'd like to use something relatively universal and standard, so I think I will try to use the Cayenne LPP format.
Sensors join the network using OTAA (instead of ABP), that way I try to minimize the setup of each individual node.
So I'd like to just re-invent the wheel properly this time.
Hardware
The node is based on Arduino. The sensor will be an SDS-011, just like in the luftdaten project.
I will take a glance at how this sensor is being "driven" in this project, e.g. typical on-off times, averaging, etc.
- 145 second cycle time
To do the LoRa stuff, I will probably use an ESP32 with an RFM95 built in. The ESP32 is already very similar to the ESP8266 currently used in the luftdaten project.
Software
Common
Packet format
Packets transferred over LoRa contain:
- id for forwarding towards luftdaten (esp-XXXX number): 6 bytes
- PM10 value, probably encoded in units of 0.1 ug/m3: 2 bytes
- PM2.5 value, probably encoded in units of 0.1 ug/m3: 2 bytes
- temperature, encoded in units of 0.1 deg C: 2 bytes
- pressure, encoded in units of 0.1 hPa, 2 bytes
- relative humidity, encoded in units of 0.1%, 2 bytes
Not present value is 0xFFFF. Total: 16 bytes
Would be nice to use Cayenne for this, but I don't know if Cayenne has an id for particulate matter.
Node
To compile the code, platformio is used, probably with the following libraries:
Data forwarding
I will use a Java program to subscribe to this MQTT stream, decode the telemetry packets and forward them to luftdaten. There is no storage of measurement data in the Java application.
I've already developed some Java code that publishes the measurement values towards luftdaten.info. Also I've developed code before to subscribe to the TTN MQTT stream.