Skip to content
Snippets Groups Projects
Name Last commit Last update
firmware
schematic/electronics
README.md

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 sensorBoxen 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 Adresse 10. Alle sensorBoxen haben als Übertragungsziel also immer die 10.

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 Paket 0x01
  • S - Box Nummer des Senders, z.B 0x02 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 Transponder 30007bf6f3
  • 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 Paket 0x02
  • S - Box Nummer des Senders, z.B 0x02 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. Also 300 für 30°C
  • HUMID - Luftfeuchtigkeit in 0.1%. Also 600 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 Paket 0x03
  • S - Box Nummer des Senders, z.B 0x02 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 Paket 0x04
  • S - Box Nummer des Senders, z.B 0x02 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 Paket 0x15
  • P1 - Padding / Platzhalter ohne Inhalt
  • P2 - Padding / Platzhalter ohne Inhalt