Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Ein automatisches Informationserfassungssystem für Teeplantagen. Es ist Teil einer intelligenten landwirtschaftlichen Informationssammlung.
Schritt 1: Dinge, die in diesem Projekt verwendet werden
Hardware-Komponenten
- Grove - Kohlendioxidsensor (MH-Z16)
- Grove - Digitaler Lichtsensor
- Grove - Staubsensor(PPD42NS)
- Grove - Sauerstoffsensor (ME2-O2-Ф20)
- Bodenfeuchte- und Temperatursensor
- LoRa LoRaWAN Gateway - 868MHz Kit mit Raspberry Pi 3
- Grove - Temperatur-, Humi- und Barometersensor (BME280)
Software-Apps und Online-Dienste
Microsoft Visual Studio 2015
Schritt 2: Geschichte
Smart Agriculture soll die Technologie des Internets der Dinge auf die traditionelle Landwirtschaft anwenden, indem Sensoren und Software verwendet werden, um die landwirtschaftliche Produktion über mobile oder Computerplattformen zu steuern und die traditionelle Landwirtschaft „intelligenter“zu machen.
Auf dem Mengding Mountain nordöstlich von Ya’an, Sichuan, verläuft der Bergrücken von Westen nach Osten in einem grünen Meer. Dies ist ein vertrauter Anblick für den 36-jährigen Deng, einer der ganz wenigen Mengding-Teehersteller seiner Generation, mit einer Plantage von 50 mu (=3,3 Hektar) auf 1100 m über dem Meeresspiegel. Deng stammt aus einer Familie von Teebereitern, aber das Familienerbe weiterzuführen ist keine leichte Aufgabe. „Unsere Tees werden in großer Höhe in einer biologischen Umgebung angebaut, um ihre hervorragende Qualität zu gewährleisten. Gleichzeitig ist die Wachstumsdichte jedoch gering, die Kosten hoch und die Knospung ist ungleichmäßig, was die Ernte des Tees erschwert. Deshalb sind Hochgebirgstees normalerweise kleine Ernten und ihre Werte spiegeln sich nicht auf dem Markt wider.“In den letzten zwei Jahren hat Deng versucht, das Bewusstsein der Verbraucher für Hochgebirgstee zu schärfen, um deren Wert zu fördern. Und als er Fan traf, der nach einer Plantage suchte, um die IoTea-Technologie von Seeed zu implementieren, war eine perfekte Lösung gefunden. Die Seeed IoTea-Lösung soll Teebauern helfen, Plantagen besser zu verwalten, ohne die traditionellen Praktiken des Teeanbaus zu ändern, und Echtzeit-Umweltdaten von den Plantagen auf einer offenen Plattform präsentieren.
Bestehend aus Sensoren, Knoten und Gateways, sammelt IoTea Echtzeitdaten von Faktoren, die die Qualität des Tees während des Anbaus und Produktionsprozesses beeinflussen können, einschließlich Temperatur und Feuchtigkeit, CO2, O2, PM und Lichteinwirkung. Die Daten werden von den Sensoren gesammelt, von den Nodes an das Gateway und schließlich in die Cloud gesendet und den Endkunden auf einer Webseite zugänglich gemacht.
Schritt 3: Hardwareverbindung
Schritt 1: Gateway-Verbindung
Das Gateway wird separat in einer Box installiert. In Anbetracht des Wärmeableitungsproblems haben wir 2 Lüfter hinzugefügt. Einer dient der Wärmeableitung des Raspberry Pi, der andere dient der internen und externen Luftzirkulation. Die Gateway-Box befindet sich in einem Bauernhaus, sodass wir ihr Stromversorgungsproblem nicht berücksichtigen müssen.
Schritt 2: Knotenverbindung
Der Knoten ist das Terminal der Daten, und alle Originaldaten werden von hier erhalten. An den Knoten sind 6 Sensoren angeschlossen. Zusätzlich zum Bodenfeuchtigkeits- und Temperatursensor haben wir weitere Sensoren in die Lamellenbox eingebaut.
Der Knoten ist in einer wasserdichten Box platziert. Um eine bessere Verbindung zum Knoten zu haben, stellen wir eine Adapterplatine her. Als letztes werden wir den Download-Link für den Schaltplan dieses Boards bereitstellen. Wie unten gezeigt, werden die Kabel der Sensoren über Klemmenblöcke in die Adapterplatine eingesteckt. Wir verwenden 3 MOS-Röhren (SI2301), um Schaltkreise zu bauen, um das Ein- und Ausschalten von Sensoren und Lüftern zu steuern. Lüfter wird zum Abkühlen verwendet. Wir haben einen Temperatursensor (DS18B20) auf der Platine montiert. Es kann uns die Innentemperatur der Box mitteilen, und dann entscheidet der Mikrocontroller, ob der Lüfter eingeschaltet wird. Wir verwenden mehrere Widerstände, um eine Spannungsteilerschaltung zu erstellen, um die Spannung der Blei-Säure-Batterie zu messen. Schließlich reservieren wir 3 IIC-Schnittstellen und einen seriellen Port auf dem Board für spätere Erweiterungen und Debugging.
Lassen Sie uns über das Stromversorgungsproblem des Knotens sprechen. Der Knoten wird zufällig in einer Teeplantage platziert, sodass die traditionelle Stromversorgungsmethode nicht mehr anwendbar ist. Der Einsatz einer Solarstromlösung ist eine gute Idee. Es gibt derzeit viele Lösungen auf dem Markt. Wir können eine davon auswählen, die unseren Bedürfnissen entspricht. Die von uns gewählte Lösung besteht aus 3 Teilen: Solarpanel, Solarladeregler und Blei-Säure-Batterie. Um die Sonnenenergie besser einzufangen, setzen wir das Solarpanel oben auf die Halterung und passen den Winkel so an, dass es der Sonne zugewandt ist. Wir haben den Solarladeregler in die gleiche Box mit dem Knoten gelegt. Da in der Box kein zusätzlicher Platz vorhanden ist, mussten wir eine neue wasserdichte Box finden, um die Blei-Säure-Batterie zu platzieren.
Schritt 4: Softwarekonfiguration
Knoten
In diesem Abschnitt stellen wir die hauptsächlich Softwarekonfiguration von node vor.
Datei Format
Vom Knoten zum Gateway hochgeladene Daten:
unsigned char Lora_data[15] ={0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
Bedeutung jedes Datenbits:
Lora_data[0] :Lufttemperatur, Lora_data[1]: Luftfeuchtigkeit, %
Lora_data[2]:Höhe acht, m
Lora_data[3]:Höhe niedrig acht
Lora_data[4]: CO2-Konzentration hoch acht, ppm
Lora_data[5]: CO2-Konzentration niedrig acht
Lora_data[6]: Staubkonzentration hoch acht, Stück/0,01 cf
Lora_data[7]: Staubkonzentration niedrig acht
Lora_data[8]: Lichtintensität hoch acht, Lux
Lora_data[9]: Lichtintensität niedrig acht
Lora_data[10]: O2-Konzentration, % (Rohdaten dividiert durch 1000)
Lora_data[11] :Bodentemperatur, ℃
Lora_data[12]:Bodenfeuchtigkeit, %
Lora_data[13]: Batteriespannung, v
Lora_data[14] :Sensorfehlercode
Fehlercode:
Lora_data[14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
Bedeutung jedes Bits:
Bit 0: 1----Fehler Temperatur-, Humi- und Barometersensor (BME280)
Bit 1: 1---- Kohlendioxidsensor (MH-Z16) Fehler
Bit 2: 1---- Staubsensor(PPD42NS)Fehler
Bit 3: 1---- Digitaler Lichtsensorfehler
Bit 4: 1---- Sauerstoffsensor (ME2-O2-Ф20) Fehler
Bit 5: 1---- Fehler Bodenfeuchte- und Temperatursensor
Bit 6: Reserviert
Bit 7: Reserviert
Wir haben eine Error_code_transform.exe erstellt, öffnen sie und geben den Fehlercode in hexadezimal ein, Sie werden schnell wissen, welcher Sensor ein Fehler ist. Download-Link befindet sich am Ende dieses Artikels.
Parametrierung: a) Datenübertragungszyklus
// seeedtea.ino
#defineinterval_time 600 //Sekunde
Dieser Parameter kann variiert werden, um den Datenübertragungszyklus zu ändern. In jedem Zyklus dauert die Datenerfassung ca. 1 Minute. Es wird daher nicht empfohlen, diesen Wert auf weniger als 60 Sekunden zu ändern.
b) Aufwärmzeit des Staubsensors
//seeedtea.ino
#definePreheat_time 30000 //DustSensor Aufwärmzeit, Millisekunden //Dust_other.cpp #definesampletime_ms 30000 //samplingtime30s
c)Spannungskoeffizient
//POWER_Ctrl.cpp
#defineBattery_coefficient 0.159864 //ADC-Wert× Battery_coefficient = Batterie_Spannung #defineSolar_coefficient 0.22559 //ADC-Wert × Solar_coefficient = solar_voltage
Diese beiden Parameter werden basierend auf der Spannungsteilerschaltung berechnet.
d) Temperaturschwelle beim Öffnen des Lüfters
//POWER_Ctrl.cpp
#defineFan_start_temp 45 //Temperaturschwelle #defineFan_start_light 500 //Lichtintensität
Wenn die tatsächliche Temperatur den Schwellenwert überschreitet, beginnt der Lüfter abzukühlen.
e)O2-Sensor-Initialisierungsparameter
//Sauerstoff.cpp
#defineO2_percentage 208,00 //20,8%
f) Makroschalter
//seeedtea.ino
#defineLORA_RUN //Nach dem Kommentar wird die Lora-Initialisierung und die Datenübertragung gestoppt #defineSENSOR_RUN //Nach dem Kommentar funktionieren die externen Sensoren nicht mehr //POWER_Ctrl.cpp #defineFAN_ON //Nur Fortesting, praktische Anwendung muss auskommentiert werden /**** ***DS18B20 Steuermodus **********************/ #defineSlower_Mode // Langsamer Modus um die Temperatur zu erhalten. Auskommentieren ist der schnelle Modus
g)Pin-Zuordnung
D2: LED-Anzeige und externer Reset-MikrocontrollerIIC: SCL und SDA
//Dust_other.h
#defineDust_pin 3 //Staubsensor //CO2.cpp #defineCO2_serial Serial1 //Verwenden Sie den seriellen Hardware-Port (D0 & D1) //seeedtea.ino #definedataPin 6 //Bodendaten-Pin #defineclockPin 7 //Bodentaktgeber-Pin //POWER_Ctrl. h #defineDS18B20_pin 8 //DS18B20 #defineFan_pin 9 //Fan #defineAir_CtrlPin 10 // Steuerstift für die Sensoren in der Lamellenbox #defineSoil_CtrlPin 11 // Bodenfeuchte- und Temperatursensor-Schalterstift #defineBattery_pin A2 // Batteriespannung messen #defineSolar_pin A3 / /Solarpanelspannung messen //Oxygen.h #defineO2_pin A1 //O2-Sensor
h) Watchdog-Timer
Der Watchdog-Timer wird verwendet, um den Betriebsstatus des Systems zu überwachen. Wenn das System abnormal läuft, wird der Knoten zurückgesetzt, sodass er lange Zeit kontinuierlich ausgeführt werden kann.
Die zu referenzierende Bibliothek:
- Adafruit_SleepyDog.h wurde dem Projekt hinzugefügt
- Adafruit_ASFcore-master.zip ist im Projektordner gepackt und muss manuell zur Arduino IDE hinzugefügt werden.
Zugehörige Funktionen:
Watchdog aktivieren
int WatchdogSAMD::enable(int maxPeriodMS, bool isForSleep)
Eingabeparameter:
Int maxPeriodMS: Wartezeit in Millisekunden. Der maximal zulässige Wert beträgt 16000 Millisekunden.
Rückgabewert:
Int type, gibt die tatsächliche Wartezeit zurück
Watchdog zurücksetzen
void WatchdogSAMD::reset()
Rufen Sie diese Funktion auf, um den Watchdog-Timer zurückzusetzen, der als "Füttern des Hundes" bezeichnet wird. Wird die Wartezeit ohne Reset überschritten, wird der Knoten neu gestartet.
Wachhund stoppen
void WatchdogSAMD::disable()
Tor
In diesem Abschnitt stellen wir Ihnen vor, wie Sie sich mit dem Loriot-Server verbinden.
Schritt 1: Loriot Server Gateway-Registrierung
a) Neue Benutzer müssen zuerst ein Konto registrieren, klicken Sie auf die Registrierungsadresse. Geben Sie Benutzername, Passwort und E-Mail-Adresse ein, um sich zu registrieren. Nach der Registrierung wird Ihnen eine E-Mail zugesandt, bitte folgen Sie den Anweisungen in der E-Mail zur Aktivierung.
b) Klicken Sie nach erfolgreicher Aktivierung hier, um sich anzumelden. Die Standardstufe ist „Community Network“, sie unterstützt 1 Gateway (RHF2S001) und 10 Knoten.
c) Geben Sie Dashboard -> Gateway ein und klicken Sie auf Gateway hinzufügen starten, um Gateway hinzuzufügen.
d) Wählen Sie Raspberry Pi 3
e) Stellen Sie wie folgt ein:
- Funkfrontend -> RHF2S001 868/915 MHz (SX1257)
- BUS -> SPI
f) Geben Sie die MAC-Adresse Ihres RHF2S001 ein, sollte das Format b8:27:eb:xx:xx:xx haben. Geben Sie außerdem Informationen zum Gateway-Standort ein.
g) Klicken Sie auf „Raspberry Pi-Gateway registrieren“, um die Registrierung abzuschließen.
h) Klicken Sie auf das registrierte Gateway, um die Konfigurationsseite aufzurufen, schalten Sie manuell auf „Frequenzplan“um. Ihr Tarif hier wird durch den Typ Ihres RHF2S001-Typs bestimmt. Der verfügbare Tarif ist CN470,CN473, CN434,CN780,EU868, nach der Auswahl aktualisieren Sie bitte die Seite um den genauen Kanal zu erhalten. In diesem Wiki wählen wir EU868.
i) Führen Sie den Befehl im Putty-Terminal aus:
cd /home/rxhf/loriot/1.0.2
sudo systemctl stop pktfwd sudo gwrst wget > -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io
j) Finish gateway registration. You will see the gateway is Connected now. Next is to register node.
Schritt 2: Loriot Server Connect Node-Gerät
a) Holen Sie sich die verfügbaren Gateway-Kanäle
Aktuelle Gateway-Kanäle können von Dashboard -> Gateway -> Your Gateway abgerufen werden. Sie können die verfügbaren Kanäle wie im Bild unten sehen.
b) Seeeduino LoRAWAN GPS (RHF3M076) Konfiguration
Öffnen Sie den seriellen Monitor von ArduinoIDE, tippen Sie auf den folgenden Befehl.
at+ch
Um den Standardkanal Ihres Seeeduino_LoRAWAN GPS zu bestätigen, erhalten Sie 3 Kanäle. Wenn kein Kanal verfügbar ist, können Sie die Kanäle von Seeeduino_LoRAWAN mit dem folgenden Befehl ändern.
at+ch=0, 868.1
at+ch=1, 868,3 at+ch=2, 868,5
Dann können Sie wieder mit at+ch prüfen.
c) Fügen Sie Seeeduino_LoRAWAN GPS als ABP NodeLog im Loriot-Server hinzu, klicken Sie auf Dashboard -> Anwendungen -> SimpleApp. Klicken Sie auf ABP importieren ,Eingabe unter den Elementen
- DevAddr: Seeeduino_LoRAWAN GPS get through"AT+ID"-Befehl (Hinweis: Loriot unterstützt keinen Doppelpunkt-Connector, muss manuell entfernt werden)
- FCntUp:Setto 1
- FCntDn:Einstellung 1
- NWKSKEY:Standardwert 2B7E151628AED2A6ABF7158809CF4F3C
- APPSKEY:Standardwert 2B7E151628AED2A6ABF7158809CF4F3C
- EUI:DEVEUI, Seeeduino_LoRAWAN GPS erhalten den Befehl "AT+ID"
Klicken Sie auf die Schaltfläche Gerät importieren, um den Geräteimport abzuschließen. Wählen Sie nun Dashboard -> Anwendungen -> SampleApp, Sie sehen den neuen ABP-Knoten, den Sie gerade hinzugefügt haben.
d) Daten von Seeeduino_LoRAWAN senden
BEACHTUNG! Dies ist nur ein Test.
Zurück zum seriellen Monitor von ArduinoIDE, Befehl senden:
AT+CMSGHEX="0a 0b 0c 0d 0e"
Gehen Sie dann zu Dashboard -> Anwendungen -> SampleApp -> Device, klicken Sie auf die Node Device EUI oder DevAddr, Sie finden die soeben gesendeten Daten hier.
Details finden Sie in diesem Wiki.
Schritt 5: Website-Erstellung
Zugehörige Tools
- virtuelle Umgebung
- Python3
- Gunicorn
- Aufsicht
- Nginx
- MySQL
Wir verwenden CentOS7 als Testumgebung für die Bereitstellung
virtuelle Umgebung
Verwenden Sie virtualenv, um eine eigenständige Python3-Produktionsumgebung zu erstellen
a) installieren
pip installieren virtualenv
b) Erstellen Sie eine virtuelle Python3-Umgebung
virtualenv -p python3 iotea
c) Starten Sie die virtuelle Umgebung und geben Sie das iotea-Verzeichnis ein
Quell-Bin/aktivieren
d) existierende Umgebung
deaktivieren
Python3
a) installieren
yum installiere epel-release
yum installiere python36
b) abhängige Bibliothek PyMySQL, DBUtils, Flask, websocket-client, configparser installieren
pip install pymysql
pip install dbutils pip installflakon pip install websocket-client pip install configparser
Gunicorn
a) installieren (unter Python3-Umgebung)
pip installiere gunicorn
b) Fläschchenprojekt ausführen (im iotea-Projektverzeichnis)
gunicorn -w 5 -b 0.0.0.0:5000 app:app
c) Führen Sie websocket-clint aus, um Loriot-Daten zu erhalten
Gunicorn Loriot: App
d) Gunicorn-Prozessbaum anzeigen
pstree -ap|grep gunicorn
Aufsicht
a) installieren (root-Benutzer)
pip install Supervisor
b) Konfigurationsdateien generieren
echo_supervisord_conf > /etc/supervisord.conf
c) Erstellen Sie ein Verzeichnis und führen Sie eine Verzeichniskonfiguration ein
mkdir -p /etc/supervisor/conf.d
Bearbeiten Sie /etc/supervisord.conf und ändern Sie das Dateifeld unter [include] am Ende der Datei.
Beachten Sie, dass Sie das ';' vor diesen beiden Zeilen steht das Kommentarzeichen.
[enthalten]
Dateien = /etc/supervisor/conf.d/*.conf
Bedeutet, /etc/supervisor/conf.d/ einzuführen. Die folgende Konfigurationsdatei wird als Prozesskonfigurationsdatei verwendet (vom Supervisor überwacht).
d) eingehende Konfiguration (im iotea-Verzeichnis)
cp iotea.conf /etc/supervisor/conf.d/
cp loriot.conf /etc/supervisor/conf.d/
e) offenes iotea servieren
superviosrctl reload #reload the configuration file
superviosrctl starte loriot #öffne loriot datenempfang superviosrctl starte iotea #öffne die iotea-flaschenanwendung
f) andere gemeinsame Operationen
Supervisorctl reload # Laden Sie die Konfigurationsdatei neu
Supervisorctl update Supervisorctl Start xxx Supervisorctl Stopp xxx Supervisorctl Status xxx Supervisorctl Hilfe # Mehr Befehl anzeigen
Nginx
a) installieren
yum install -y nginx
b) Konfiguration
cp NginxIotea.conf /etc/nginx/conf.d/
c) Nginx starten
systemctl starte nginx.service
MySQL
a) zugehörige Parameter
user='root'
passwd='1234' db='iotea' port=3306
b) Datei
iotea_iotea.sql
c) Konfigurationsdatei
db.ini