Keiko Hardware LoRa
Die Keiko Hardware basierend auf ESP32 / LoRa.
Allgemeiner Systemaufbau
Siehe https://git.hack-hro.de/hackhro/keiko/keiko-webapplication für den Gesamtaufbau des Keiko Projektes.
CAD
TODO
Schaltplan
TODO
ESP32 Firmware
Es gibt drei unterschiedliche Firmware Versionen in firmware/
-
sensorBox
läuft auf den Boxen zur RFID Messung -
server
ist der Empfänger der via USB an den Webserver angeschlossen wird
Zum Bauen und Flashen installiere PlattformIO, üblicherweise als Plugin für Visual Studio Code. Die Konfiguration liegt in der entsprechenden plattformio.ini
soweit fertig. Rechts im Explorer Menü zeigt die Erweiterungen die entsprechenden Quick Access Funktionen für Build und Upload an. Abhängigkeiten werden dann nachgeladen.
LoRa Wireless Kommunikation
Wenn die Box eine Information übertragen möchte, schickt sie einfach ein LoRa Paket. Die LoRa Parameter sind festgelegt auf:
-
Frequenz
868.0
MHz -
Spreadingfaktor
SF8
-
Coding Rate
4/5
Es wird zur Kommunikation die RadioHead Libary genutzt.
Adressierung
Die Pakete haben gegeben durch die RadioHead Lib immer einen Absender und einen Empfänger. Auf Empfangsseite wird üblicherweise auf die eigene Adresse gefiltert und andere Pakete werden verworfen. Ein ACK bezieht sich aktuell nicht auf eine konkrete Nachricht, sondern wird explizit zustandslos an die entsprechende Adresse zurück geschickt.
-
Die Adressen der
sensorBox
en sind fest in der Firmware hinterlegt. Sie werden jenen konkret genutzten ESP32 Mac Adressen / ID zugeordnet welche in dem aktuellen System verbaut sind. - Der
server
, also der USB Empfänger für die Station hat immer die feste Adresse10
. AllesensorBox
en haben als Übertragungsziel also immer die10
.
Die Adresstabelle ist in der Firmware unter dem Stichwort esp_ids
zu finden. Wenn nicht definiert wird als Fallback auf die ID 0xff
/ 255
zurück gegriffen.
Aufbau des Payloads
Der Payload ist immer 32 Bytes lang. Es gibt unterschiedliche Pakettypen.
0x01
| Paket Typ RFID
Wird übertragen wenn ein Transponder detektiert wurde.
T | S | PAD1 | MSID | RFID | CECKS | VD | CI | TIME | MS | PAD2 | unused |
0 | 1 | 2 3 | 4 5 6 7 | 8 9 10 11 12 13 14 15 | 16 17 | 18 | 19 | 20 21 22 23 | 24 25 | 26 27 | 28 29 30 31 |
-
T
- Type des Paketes, für RFID Paket0x01
-
S
- Box Nummer des Senders, z.B0x02
für Box 2 -
PAD1
- Padding / Platzhalter ohne Inhalt -
MSID
- Message ID, zufällige ID des Paketes (notwendig für ACK) -
RFID
- Die RFID mit 64 Bit im LE Format. Bespiel:['0xF3', '0xF6', '0x7B', '0x0', '0x30', '0x0', '0x0', '0x0']
für den Transponder30007bf6f3
-
CRC
- die Checksumme aus dem RFID System -
VD
- Valid, ob der RFID korrekt erkannt wurde nach Meinung des RFID Empfängers -
CI
- Contest ID, ungenutzt -
TIME
- Zeitpunkt des Events als Unix Zeitstempel im LE Format -
MS
- Millisekunden des Zeitpunkt des Eventes -
PAD2
- Padding / Platzhalter ohne Inhalt - Anschließend wird mit
0x00
auf 32 Byte aufgefüllt
0x02
| Paket Typ ENV
Daten der Umweltsensoren. Das Paket wird in regelmäßigen Abständen versendet, wobei für den Zeitpunkt der Aussendung ein Offset basierend auf der Nummer der Box gewählt wird um Kollisionen zu vermeiden.
T | S | PAD1 | TIME | MS | TEMP | HUMID | PRESS | unused |
0 | 1 | 2 3 | 4 5 6 7 | 8 9 | 10 11 | 12 13 | 14 15 | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-
T
- Type des Paketes, für ENV Paket0x02
-
S
- Box Nummer des Senders, z.B0x02
für Box 2 -
PAD1
- Padding / Platzhalter ohne Inhalt -
TIME
- Zeitpunkt des Events als Unix Zeitstempel im LE Format -
MS
- Millisekunden des Zeitpunkt des Eventes -
TEMP
- Temperatur in 0.1°C schritten. Also300
für 30°C -
HUMID
- Luftfeuchtigkeit in 0.1%. Also600
für 60% -
PRESS
- Luftdruck in hPa
0x03
| Paket Typ TELE
Telemetriedaten des laufenden Systems.
T | S | PAD1 | TIME | MS | RFSQS | RFQS | DAQS | LOOPT | ACKMISS | unused |
0 | 1 | 2 3 | 4 5 6 7 | 8 9 | 10 11 | 12 13 | 14 15 | 16 17 | 18 19 20 21 | 22 23 24 25 26 27 28 29 30 31 |
-
T
- Type des Paketes, für TELE Paket0x03
-
S
- Box Nummer des Senders, z.B0x02
für Box 2 -
PAD1
- Padding / Platzhalter ohne Inhalt -
TIME
- Zeitpunkt der Messung als Unix Zeitstempel im LE Format -
MS
- Millisekunden des Zeitpunkt des Eventes -
RFSQS
- Ereignisse in der RFID Queue zum Startzeitpunkt -
RFQS
- Ereignisse in der RFID Queue (üblicherweise im FRAM gespeicher) -
DAQS
- Ereignisse in der Daten Queue zum Startzeitpunkt (üblicherweise im Memory) -
LOOPT
- Maximaler durchlauf einer Loop -
ACKMISS
- Anzahl nicht erhaltener ACKs
0x04
| Paket Typ RANGE
Pakete für Reichweitentests.
T | S | PAD1 | TIME | MS | SF | TX | unused |
0 | 1 | 2 3 | 4 5 6 7 | 8 9 | 10 | 11 | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-
T
- Type des Paketes, für RANGE Paket0x04
-
S
- Box Nummer des Senders, z.B0x02
für Box 2 -
PAD1
- Padding / Platzhalter ohne Inhalt -
TIME
- Zeitpunkt der Messung als Unix Zeitstempel im LE Format -
MS
- Millisekunden des Zeitpunkt des Eventes -
SF
- Spreading Factor der Aussendung -
TX
- Sendeleistung der Aussendung
0x15
| Paket Typ ACK
Paket zur Empfangsbestätigung. Wird zurück gesendet, wenn ein Paket des Types RFID erhalten wird. Erst nach erhalt der Bestätigung wird die Messung in der Box verworfen. Das Paket ist zustandlos.
T | P1| P2 | unused |
0 | 1 | 2 3 | 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-
T
- Type des Paketes, für RANGE Paket0x15
-
P1
- Padding / Platzhalter ohne Inhalt -
P2
- Padding / Platzhalter ohne Inhalt