Ziel dieses Projekts ist es, eine Open-Source-Hardware/Software-Plattform für die schnelle und kostengünstige Entwicklung von Lorawan-Sensorknoten bereitzustellen. Es besteht aus einem Arduino Pro Mini-Modul, einem LORA RMF95W-Kommunikationsmodul, einem Buck DC-DC-Wandler und einigen Komponenten, um die Verbindung zu verschiedenen Sensoren zu vereinfachen.

Laden Sie das Repository herunter und aktualisieren Sie Submodules:
$ git clone https://github.com/AngelJMC/agriot-sensor-node.git
$ cd agriot-sensor-node
$ git submodule update --init --recursive
.
├── docs # Documentation files
├── firmware # FW source code (Visual Studio Code)
├── hardware # HW design files (Kicad)
Wenn Sie den Quellcode ändern oder Ihre Geräte programmieren möchten, wird dringend empfohlen, Visual Studio Code und das Platformio -Plugin zu verwenden. Öffnen Sie einfach das Verzeichnis "Firmware" mit Visual Studio -Code und das gesamte Projekt ist für die Verwendung bereit.
Sie müssen eine neue .cpp -Datei erstellen, in der Sie die Kommunikationsroutinen mit dem Sensor implementieren. Wenn Sie das folgende Schema verwenden, müssen Sie nur die Kommunikation mit dem Sensor hinzufügen. Die Funktion Sensors_Update () wird regelmäßig ausgeführt und sobald die Sensorakquisition abgeschlossen ist, werden die Daten von der Lorawan -Kommunikationsschicht gesendet.
#ifdef SENS_SENSORNAME
#include "protocol.h"
#include "sensors.h"
#include <CayenneLPP.h>
/* Schedule sensore measurement every this senconds */
#define SENSOR_INTERVAL (5*60) //seconds
static osjob_t sensjob;
CayenneLPP lpp(51);
static void sensors_update( osjob_t* j ) {
os_avoidSleep();
/*TO-BE Implemented -- Read sensor*/
float t = readYourSensor();
/* Update Data Frame using Cayennne Library */
lpp.reset();
lpp.addTemperature(1, t); /*Change according your sensor*/
protocol_updateDataFrame( lpp.getBuffer(), lpp.getSize() );
/* Schedule next sensor reading*/
os_setTimedCallback( &sensjob, os_getTime() + sec2osticks(SENSOR_INTERVAL), sensors_update );
Serial.flush();
os_acceptSleep();
}
void sensors_init( ) {
/*TO-BE Implemented -- Init sensor*/
initYourSensor();
/*Schedule the first sensor reading*/
os_setTimedCallback(&sensjob, os_getTime() + sec2osticks(10), sensors_update);
}
#endif
Um den Code für diesen neuen Sensor zu kompilieren, müssen Sie die Konfigurationsdatei platformio.ini eine neue Build -Umgebung hinzufügen.
[env:pro8MHzatmega328_SENSORNAME]
platform = atmelavr
board = pro8MHzatmega328
framework = arduino
build_flags = -DSENS_SENSORNAME
Jetzt können Sie die Build -Umgebung aus dem Visual Studio -Code auswählen.
Die Gerätekonfiguration erfolgt über die im Gerät implementierte Befehlszeilenschnittstelle (CLI).
Schließen Sie zunächst Ihr Gerät mit dem Arduino -Serienmonitor über USB an. Da der Arduino Pro Mini keinen On-Board-FTDI-Chip hat, müssen Sie einen USB-TTL-Adapter verwenden. Legen Sie den Baudrate auf 9600 ein und öffnen Sie den seriellen Port, um eine Verbindung herzustellen. WICHTIG: Um den Stromverbrauch des Geräts zu verringern, ist die serielle Schnittstelle nach dem Einschalten des Geräts nur 10 Minuten verfügbar.
| Kommando -ID | Typ | Beschreibung |
|---|---|---|
| D | R | Deveui - Eindeutige Gerätekennung. |
| E | R/w | Appeui - Eindeutige Kennung der Anwendung. |
| K | R/w | APPKEY - Wird in OTAA verwendet, um Sitzungsschlüssel zu generieren. |
Um die Standard -Over -Air -Aktivierung (OTAA) zu verwenden, müssen Sie Ihr Gerät mit seinem Gerät EUI registrieren
Das Gerät EUI ist eine eindeutige Adresse des ATMEGA328P -Mikrocontroller. Um dies abzurufen, geben Sie die serielle Konsole ein:
D
Gehen Sie zum Netzwerk von Dingen und öffnen Sie die Anwendung, zu der Sie ein Gerät hinzufügen möchten, und klicken Sie auf Register -Gerät.

Nachdem wir das Gerät registriert haben, können wir die Verbindung von unserem Gerät selbst aktivieren. Aktivierung bedeutet, dass das Gerät den generierten App -Schlüssel zum Aushandeln von Sitzungsschlüssel zur weiteren Kommunikation verwendet.
Gehen Sie zu Geräteübersicht und kopieren Sie die 8-Byte-Anwendung EUI. Jetzt müssen Sie den Befehl "e" mit dem Wert senden, der über den seriellen Port des Geräts erhalten wird:
E: 70B3D57ED0038147
Wiederholen Sie den gleichen Vorgang, um den 16 -Byte -Anwendungsschlüssel zu senden:
K: 7B4F7BC85D064898DB39214D7607440E
Starten Sie nun das Gerät neu und registrieren Sie sich automatisch am Netzwerk.

Sitzungsschlüssel werden nicht im nichtflüchtigen Speicher gespeichert, sodass sie jedes Mal neu verhandelt werden, wenn das Gerät eingeschaltet wird. Dieses Verhalten ist nicht das am besten geeignete und wird in zukünftigen Versionen überprüft.
Erhalten Sie hier die Gerbers für die PCB -Herstellung.
| Name | Anmount | Beschreibung |
|---|---|---|
| Arduino Pro Mini | 1 | Pro Mini Armega328p 3,3V 8 MHz |
| RFM95W | 1 | RFM95W 868-915MHz Lora SX1276 Transceiver |
| DC-DC-Buck | 1 | 3,3 V fester Ausgang, Eingang 5V-24 V. |
| Widerstand 2.2k | 1 | 2,2K SMD -Widerstand 0805 |
| Widerstand 4.7k | 3 | 4,7K SMD -Widerstand 0805 |
| Kondensator 4.7 UF/6.3 V | 1 | 4.7 UF SMD -Kondensator 0805 |
| SMD führte | 1 | LED SMD 0850 |
| Dip schalten | 1 | Schalter 4 Pin Metal SMD |
| Schraubenklemme 01x03 | 2 | 3p - Tonhöhe 3,5/3,96 mm Schraubanterminal Blockanschluss |
| Schraubenklemme 01x02 | 1 | 2p - Tonhöhe 3,5/3,96 mm Schraubanterminal Blockanschluss |
| Connector U.FL-R-SMT | 1 | Connector U.FL-R-SMT |
| Antenne 3DBI RP-SMA | 1 | Antenne 3DBI RP-SMA-Anschluss + 21 cm SMA männlich/U.Fl-Zopfkabel |

