Inhaltsverzeichnis:

Seeed IoTea LoRa-Lösung (Update 1811) - Gunook
Seeed IoTea LoRa-Lösung (Update 1811) - Gunook

Video: Seeed IoTea LoRa-Lösung (Update 1811) - Gunook

Video: Seeed IoTea LoRa-Lösung (Update 1811) - Gunook
Video: Seeed IoTea Lora Solution 2024, November
Anonim
Seeed IoTea LoRa-Lösung (Update 1811)
Seeed IoTea LoRa-Lösung (Update 1811)

Internet+ ist mittlerweile ein beliebtes Konzept. Dieses Mal haben wir versucht, das Internet plus Landwirtschaft zu nutzen, um aus dem Teegarten den Internet-Tee wachsen zu lassen.

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

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 50mu (=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.“Seit zwei Jahren versucht Deng, die Verbraucher für Hochgebirgstee zu sensibilisieren, um ihren 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.

Schritt 3: Hardwareverbindung

Die Hardware dieses Projekts kann in 4 Teile aufgeteilt werden: Power, Sensors, Node und Gateway. Der folgende Artikel zeigt Ihnen, wie Sie es Schritt für Schritt durchführen.

Leistungsteil

Power Part enthält hauptsächlich ein Solarpanel und eine Lithiumbatterie. Wenn Sie dieses Projekt nur zur Demonstration erstellen, können Sie sie ignorieren. Oder Sie können das vorherige Tutorial befolgen, um die Knotenstromversorgung zu installieren.

Sensoren Teil

Im Sensorteil haben wir aufgrund der vielen Sensoren eine Wetterstation verwendet und auch eine Acrylhalterung hergestellt, um sie zu installieren.

Bild
Bild

Wie Sie im Bild oben sehen, befindet sich der Digital Light Sensor immer oben, damit er Beleuchtungsinformationen sammeln kann. Die Sensoren, die Wärme erzeugen, sind in der Mitte der Acrylhalterung installiert, wie z. B. O2-Sensor, Staubsensor und CO2-Sensor. Endlich Temperatur- und Feuchtigkeitssensor an der Unterseite der Acrylhalterung.

Außerdem wird der Bodentemperatur- und Feuchtigkeitssensor allein im Boden installiert. Knotenteil

Bild
Bild

Node Part ist ein Seeeduino LoRaWan, der in einer wasserdichten Box installiert ist und über Wasserverbindungen mit Strom und Sensoren verbunden ist. Unter ihnen verbinden sich der Staubsensor mit dem digitalen Pin D3 von LoRaWan, der CO2-Sensor mit den Pins D4 und D5, der Bodensensor mit den Pins D6 und D7, der O2-Sensor mit dem analogen Pin A1 und der Lichtsensor und der Barometersensor mit dem I2C-Port.

HINWEIS: Ein 10k Widerstand sollte zwischen dem blauen (Daten) Kabel des Bodensensors und dem roten (Vcc) Kabel hinzugefügt werden.

Seeeduino LoRaWan sammelt ab und zu Sensorwerte und sendet sie über LoRa an das Gateway. Das Datenformat wie folgt:

{

[0], /* Lufttemperatur(℃) */ [1], /* Luftfeuchtigkeit(%) */ [2], /* Höhe(m) High Byte */ [3], /* Höhe(m) Low Byte */ [4], /* CO2-Konzentration (PPM) High Byte */ [5], /* CO2-Konzentration (PPM) Low Byte */ [6], /* Staubkonzentration (Stk/0,01 cf) High Byte */ [7], /* Staubkonzentration (Stk/0.01cf) Low Byte */ [8], /* Lichtintensität (Lux) High Byte */ [9], /* Lichtintensität (Lux) Low Byte */ [10], /* O2-Konzentration (%) */ [11], /* Bodentemperatur (℃) */ [12], /* Bodenfeuchtigkeit (%) */ [13], /* Batteriespannung (V) */ [14] /* Sensorfehlercode */ }

Jedes Bit im Sensorfehlercode-Byte hat eine unterschiedliche Bedeutung, genau wie unten:

{

bit0: 1; /* Barometersensorfehler */ bit1: 1; /* CO2-Sensorfehler */ bit2: 1; /* Staubsensorfehler */ bit3: 1; /* Lichtsensorfehler */ bit4: 1; /* O2-Sensorfehler */ bit5: 1; /* Bodensensorfehler */ reserviert: 2; /* Reserviert */ }

Gateway-Teil

Bild
Bild

Gateway-Teil ist ein Raspberry Pi, der das Gateway-Modul RHF0M301-868 und die PRI 2 Bridge RHF4T002 eingesteckt hat, es in einer wasserdichten Box installiert und über Wasserverbindungen mit Strom und USB-Kamera verbunden ist. Da es spezielle Firmware verwendet, folgen Sie bitte Seeed Wiki, um es zu konfigurieren.

Schritt 4: Softwareprogrammierung

Als Hardwareverbindung kann auch die Softwareprogrammierung aufgeteilt werden, sie kann in 3 Teile aufgeteilt werden: Knoten, Gateway und Website.

Knotenteil

Die meisten Treiber, die für Node Part erforderlich sind, sind bereits im Ordner origin_driver enthalten. Die folgenden Bibliotheken müssen manuell installiert werden:

Adafruit_ASFcore

Da das Projekt kompliziert ist, empfehlen wir Ihnen, Microsoft Visual Studio anstelle von Arduino IDE zu verwenden. Ein Plugin namens Visual Micro kann Ihnen helfen, ein Arduino-Projekt mithilfe von Visual Studio zu erstellen. Klicken Sie hier, um weitere Informationen zu erhalten.

Zur besseren Lesbarkeit und Wartbarkeit verwenden wir diesmal objektorientierte Programmierung. Das Klassendiagramm dieses Projekts sieht wie folgt aus:

Bild
Bild

Für diese Sensoren haben wir bereits einen OOP-Treiber, wir haben ihn neu gepackt, um dieses Projekt anzupassen, für andere haben wir ihre Treiber mit OOP neu geschrieben. Die Sensorklasse im Middleware-Layer wird verwendet, um die Schnittstellen realer Sensoren zu vereinheitlichen, beispielsweise kann ein Barometersensor gleichzeitig Temperatur, Luftfeuchtigkeit und Höhe erfassen, sodass er über 3 Schnittstellen zur Erfassung von Temperatur, Luftfeuchtigkeit und Höhe verfügt. Aber sie haben einen unterschiedlichen Methodennamen, der das Programm zum Erfassen von Sensorwerten komplizierter macht, genau wie folgt:

Barometer->getTemperature();

Barometer->getHumidity(); Barometer->getAltitude(); // … anderer_sensor->getSomeValue(); // …

Aber mit OOP sieht es so aus:

for (auto i = 0; i getValue();

}

Wir haben auch eine Application-Klasse gepackt, sie implementiert die IApplication-Schnittstelle, die setup()- und loop()-Methode in IoTea.ino kann die setup()- und die loop()-Methode im Application-Objekt aufrufen.

HINWEIS: USB Serial wird NUR zum Debuggen verwendet. Kommentieren Sie nach dem Debuggen den Initialisierungscode in der setup()-Methode.

Gateway-Teil

Das Python-Programm von Gateway Part im Home-Ordner wird verwendet, um Fotos aufzunehmen und sie stündlich auf den Amazon S3-Server hochzuladen. Stellen Sie vor der Verwendung sicher, dass fswebcam bereits auf Ihrem Raspberry Pi installiert ist:

sudo apt-get update && sudo apt-get install fswebcam

Wenn Sie Fotos hochladen möchten, konfigurieren Sie Ihre AWS, indem Sie die folgenden Schritte ausführen. Installieren Sie zunächst AWS SDK und AWS CLI auf Ihrem Raspberry Pi, indem Sie die folgenden Befehle verwenden:

sudo pip installieren boto3

sudo pip install awscli

und führen Sie dann AWS CLI aus:

sudo aws konfigurieren

Konfigurieren Sie Ihre AWS Access Key ID, AWS Secret Access ID und den Standardregionsnamen.

Wenn Sie Ihre Fotos nicht hochladen möchten, können Sie AWS-Konfigurationsschritte überspringen und Codes zum Hochladen in photo.py kommentieren. Um dieses Programm jedes Mal nach dem Booten des Raspberry Pi auszuführen, können Sie einen Dateinamen photo in /etc/init.d erstellen und den folgenden Code hineinschreiben.

#!/bin/bash

# /etc/init.d/photo ### BEGIN INIT INFO # Liefert: seeed_photo # Erforderlicher-Start: $remote_fs $syslog # Erforderlicher-Stopp: $remote_fs $syslog # Standard-Start: 2 3 4 5 # Standard-Stop: 0 1 6 # Kurzbeschreibung: Fotoaufnahme-Initskript # Beschreibung: Dieser Dienst wird verwendet, um die Fotoaufnahme zu verwalten ### END INIT INFO Fall "$1" in start) echo "Fotoaufnahme starten" /home/rxhf/photo.py &;; stop) echo "Stoppt das Fotografieren" kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }');; *) echo "Verwendung: Dienstfoto start|stop" exit 1;; esac-Ausgang 0

Ausführungsberechtigung festlegen

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 /home/rxhf/photo.py

und teste es

sudo /etc/init.d/photo start

Wenn kein Problem auftritt, stoppen Sie es und fügen Sie es der Startanwendung hinzu

sudo /etc/init.d/fotostopp

sudo update-rc.d Foto-Standardeinstellungen

HINWEIS: Wenn Sie das Gateway nach dem Booten des Raspberry Pi starten möchten, fügen Sie Gateway-Startcodes im Seeed-Wiki zu /etc/rc.local hinzu, lassen Sie es so aussehen:

#!/bin/sh -e

# # rc.local # # Dieses Skript wird am Ende jedes Multiuser-Runlevels ausgeführt. # Stellen Sie sicher, dass das Skript bei Erfolg "0" beendet oder bei einem Fehler einen anderen Wert # verlässt. # # Um dieses Skript zu aktivieren oder zu deaktivieren, ändern Sie einfach die # Ausführungsbits. # # Standardmäßig macht dieses Skript nichts. # IP-Adresse ausgeben _IP=$(hostname -I) || true if ["$_IP"]; then printf "Meine IP-Adresse ist %s\n" "$_IP" fi cd /home/rxhf/loriot/1.0.2 sudo systemctl stop pktfwd sudo gwrst wget https://cn1.loriot.io/home/gwsw/loriot -risinghf-r… -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io exit 0

Webseite

Wir haben die Website auf CentOS 7 bereitgestellt. Die folgenden Schritte zeigen Ihnen, wie Sie es bereitstellen.

Schritt 1. Python3 installieren

sudo yum -y epel-release installieren

sudo yum -y installiere python36

Schritt 2. Python pip und virtuelle Umgebung installieren

wget

sudo python36 get-pip.py sudo pip install virtualenv

Setp 3. Klonen Sie unsere Website von GitHub

sudo yum -y installiere git

git-Klon

Schritt 4. Virtuelle Umgebung erstellen und aktivieren

virtualenv -p python36 iotea-hb

cd iotea-hb source bin/aktiviere

Schritt 5. Abhängige Bibliotheken installieren

pip install pymysql

pip install dbutils pip installflakon pip install websocket-client pip install cofigparser

Schritt 6. Datenbank erstellen

sudo yum -y installiere mariadb mariabd-server

sudo systemctl enable mariadb sudo systemctl start mariadb mysql -uroot -p

und verwenden Sie dann iotea_hb.sql, um eine Tabelle zu erstellen.

Schritt 7. Erstellen Sie db.ini und schreiben Sie diese Codes hinein

[db]

db_port = 3306 db_user = root db_host = localhost db_pass = db_name = iotea

Ändern Sie den Pfad von db.ini in db.py

# in db.py

#cf.read("/data/www/python3_iotea_hb/iotea/conf/db.ini") cf.read("/home//iotea-hb/db.ini")

Schritt 8. Ändern Sie den Port in app.py und starten Sie die Website:

# in app.py

#app.run(debug=Wahr, Port=6000) app.run(debug=Wahr, Port=8080)

# im Terminal

pip install gunicorn gunicorn -w 5 -b 0.0.0.0:8080 app:app

Besuchen Sie jetzt 127.0.0.1:8080 in Ihrem Webbrowser, Sie können die Website sehen, aber Echtzeitdaten werden nicht angezeigt.

Schritt 9. Loriot-Daten abrufen

Öffnen Sie ein anderes Terminal, geben Sie die virtuelle Umgebung erneut ein und starten Sie die Loriot-App:

cd iotea-hb

source bin/aktiviere gunicorn loriot:app

Warten Sie eine Weile, Sie sehen die Daten auf der Website oder Sie können wss in loriot.py ändern:

# in loriot.py

#ws = create_connection("wss://cn1.loriot.io/app?token=vnwEuwAAAA1jbjEubG9yaW90LmlvRpscoh9Uq1L7K1zbrcBz6w==")

ws = create_connection()

Schritt 5: Betrieb

Sie können unsere Websites besuchen, um Echtzeitdaten anzuzeigen:

  • In Ya'an
  • Zur Demonstration

Empfohlen: