Einführung
In diesem Artikel werde ich Ihnen erklären, wie Sie das AtomTag-Dosimeter über das Bluegiga BLED112 Bluetooth-Modul mit dem Raspberry PI verbinden, um die Messergebnisse an den People Monitoring- Dienst zu übertragen .AtomTag - Bluetooth Low Energy Dosimeter für Smartphone und Tablet mit Geigerzähler SBM-20. Das Gerät sendet an den Server: Dosisleistung, statistischer Fehler und Batterieladung. Am Ende des Artikels werden wir sehen, wie die Messwerte des Dosimeters mit Wetterereignissen zusammenhängen.(narodmon.ru) — SaaS ( , ) (, , ., , , ), - () .
Generic Attribute Profile (GATT)
Das AtomTag-Dosimeter unterstützt das GATT-Profil. In der Bluetooth-Terminologie besteht ein Profil aus einer Reihe von Funktionen, die für ein bestimmtes Bluetooth-Gerät verfügbar sind.Das GATT-Profil definiert die hierarchische Struktur der Datenspeicherung. Die Struktur ist in der Abbildung dargestellt: Ein
Dienst ist ein Container, der mehrere Attribute enthält, die als Merkmale bezeichnet werden. Alle Dienste haben eindeutige Kennungen UUID und HANDLE. Das Dosimeter verfügt beispielsweise über zwei Dienste:1. Ein Dienst für den Benutzer, der die Merkmale zum Lesen der Messergebnisse und zum Aufzeichnen der Benutzereinstellungen (Tonalarmeinstellungen) enthält.2.Ein Dienst, der Merkmale zum Speichern der Werkseinstellungen enthält: Kalibrierungsfaktoren, Gerätename usw.Merkmal - besteht aus:1. Werten (normalerweise nicht mehr als 20 Bytes).2. Deskriptor - hier werden der Zweck des Merkmals, die Art der gespeicherten Daten sowie die Einstellungen des Merkmals beschrieben.3. Eindeutige Kennung UUID und HANDLE.Die Daten, die uns interessieren: Die Anzahl der registrierten Impulse und die Batterieladung werden genau in den Eigenschaften gespeichert.BLED112
Das Modul ist ein USB-CDC-Gerät, das im System als / dev / ttyACM0 definiert ist und keine Installation von Treibern auf Raspbian Jessie Lite mit Kernel-Version 4.4 erfordert. Der Datenaustausch mit dem Modul erfolgt ebenfalls wie bei einer seriellen Schnittstelle. Das Austauschprotokoll ist binär. Wir werden den Protokollparser nicht selbst schreiben, weil Es gibt ziemlich viele Befehle für dieses Modul und das SDK in C wird vom Hersteller übernommen. Ein Link zum SDK befindet sich am Ende des Artikels.Himbeer-PI-Software
SDK:
1. cmd_defs.c, cmd_defs.h
2. apitypes.h
3. commands.c
4. uart.c, uart.c
API callback-based. commands.c -«» . SDK 2 , : . , 2 . 2 .
:
1. /dev/ttyACM0
2. Bluetooth
api ble_cmd_system_reset();
3. ble_cmd_gap_connect_direct()
4. , HANDL’
ble_cmd_attclient_read_by_group_type()
5. ble_evt_attclient_procedure_completed
ble_cmd_attclient_find_information().
6. ble_evt_attclient_find_information_found
HANDL’ Client Characteristic Configuration Descriptor (CCCD).
7. ble_evt_attclient_procedure_completed
. HANDLE CCCD . , «notifications enabled» CCCD
ble_cmd_attclient_attribute_write()
. Nach dem Trennen vom Gerät wird der Wert dieses Handles zurückgesetzt.8. Wenn Sie nun die Werte der Eigenschaften des Geräts ändern, wird ein Ereignis ausgelöst ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg)
. Sie können ein Merkmal von einem anderen durch den Parameter unterscheiden: Definieren Sie die Struktur des Wertes des Messmerkmals:msg->atthandle.
typedef struct __attribute__((__packed__)){
uint8 status_flags;
float dose;
float doserate_search;
uint16 pulses_last2sec;
uint8 battery;
uint8 temperature;
} atomtag_measurement_t;
atomtag_measurement_t measurement_char;
Da die Bytereihenfolge im Wert der Messcharakteristik Little Endian ist, reicht es aus, alle diese Bytes in eine gepackte Struktur zu kopieren:memcpy((uint8 *)&measurement_char, msg->value.data, msg->value.len);
Die Dosisleistung wird über einen Zeitraum von 6 Minuten berechnet. Wir werden nicht mehr als einmal alle 6 Minuten Zeugnisse an den narodmon.ru-Server senden. Zusätzlich zur Dosisleistung senden wir eine Batterieladung und einen statistischen Fehler. Alle Berechnungen finden im Rückruf ble_evt_attclient_attribute_value()
in der Datei statt. Die main.c.
Messwerte werden mit dem TCP-Protokoll an Port 8283 narodmon.ru gesendet. Die Antwort vom Server wird nicht überprüft. Textprotokoll:#00:00:00:00:00:00\n
#R1#10.5#err = 10%, batt = 100%\n
##
Zuerst kommt die MAC-Adresse des Geräts (6 Bytes). In der Quelle wird zum Beispiel die MAC-Adresse eingegeben, vergessen Sie nicht, sie zu ändern! Wenn 10,5 die Dosisleistung in μR / h ist, ist err der statistische Fehler.All dies wurde mit gcc zusammengestellt:gcc -std=gnu99 -lm main.c cmd_def.c commands.c uart.c web.c -o narodmon-bin
Damit das Programm nach dem Laden des Betriebssystems automatisch gestartet wird, habe ich der Datei rc.local vor dem Beenden von 0 die folgenden Zeilen hinzugefügt:cd /
./home/pi/narodmon/narodmon-bin /dev/ttyACM0 5c:31:3e:da:e8:9c
5c: 31: 3e: da: e8: 9c - Adresse des Bluetooth-Geräts, die ermittelt werden kann, wenn Sie dieses Programm mit dem Scan-Parameter ausführen:./narodmon-bin /dev/ttyACM0 scan
Ergebnisse
Nach ein paar Tagen Betriebszeit des Geräts erschienen interessante Dinge in den Diagrammen. Hier können Sie sehen, wie sich die Dosisleistung während des Schneefalls geändert hat. Am 11. November um ~ 17: 00 ... 18: 00 Uhr hörte der eisige Regen auf und es begann zu schneien. Mit zunehmender Dicke der Schneedecke nahm die durchschnittliche Dosisleistung ab. Das Dosimeter wird in einer Höhe von 2 Metern über dem Boden installiert.Die Abnahme der Dosisleistung erklärt sich aus der Tatsache, dass die Schneeschicht die natürliche Gammastrahlung an der Erdoberfläche teilweise abschirmt. Die Schneeschicht blockiert auch den Zugang von Radongas zur Oberfläche, deren Tochterprodukte mit einem herkömmlichen Dosimeter nachgewiesen werden können.Jetzt können wir die Dicke des Schnees abschätzen :) Damals fielen ungefähr 8-10 Zentimeter Schnee. Luftaufnahmen werden weltweit praktiziert, um die Schneedicke in Gebieten zu bestimmen, in denen sich Wasserkraftwerke befinden, um zu verstehen, welche Art von Überschwemmungen im Frühjahr zu erwarten sind. Nur dort werden Gammaspektrometer mit Szintillationsdetektoren wegen ihrer höheren Empfindlichkeit eingesetzt.Ein ähnliches Bild ist bei den anderen Dosimetern des Volksüberwachungsdienstes zu beobachten, obwohl nicht alle so oft Daten liefern und nicht klar ist, welche Algorithmen zur Berechnung der Dosisleistung dort verwendet werden.Das Programm kann durch Hinzufügen eines Puffers geändert werden, in dem Dosimeterwerte gespeichert werden, wenn keine Internetverbindung besteht. Mit der People's Monitoring-API können Sie Messwerte rückwirkend senden. Es lohnt sich auch, Himbeer-Pi an die unterbrechungsfreie Stromversorgung anzuschließen. Trotz der Einfachheit des Designs war es möglich, eine Betriebszeit von etwa 30 Tagen zu erreichen. Das Dosimeter auf der Karte der nationalen Überwachung finden Sie hier. Bitte nicht treten - ich bin neu in Linux.
Referenzen
1. AtomTag-Dosimeter2. Dokumentation zu SDK und Bluegiga BLED1123. Personenüberwachungsdienst4. Bluetooth LE, Spezifikationen5. Quellcode des
Programms für Raspberry PI6. Personenüberwachungsüberwachung Android-Anwendung