Inhoudsopgave:

Seeed IoTea LoRa-oplossing (update 1811): 5 stappen
Seeed IoTea LoRa-oplossing (update 1811): 5 stappen

Video: Seeed IoTea LoRa-oplossing (update 1811): 5 stappen

Video: Seeed IoTea LoRa-oplossing (update 1811): 5 stappen
Video: Seeed IoTea Lora Solution 2024, Juli-
Anonim
Seeed IoTea LoRa-oplossing (update 1811)
Seeed IoTea LoRa-oplossing (update 1811)

Internet+ is inmiddels een populair concept. Deze keer probeerden we internet plus landbouw om theetuin te laten groeien uit internetthee.

Stap 1: Dingen die in dit project worden gebruikt

Hardware onderdelen

  • Grove - Kooldioxidesensor (MH-Z16)
  • Grove - Digitale lichtsensor
  • Grove - Stofsensor (PPD42NS)
  • Grove - Zuurstofsensor (ME2-O2-Ф20)
  • Bodemvocht- en temperatuursensor
  • LoRa LoRaWAN Gateway - 868MHz Kit met Raspberry Pi 3
  • Grove - Temperatuur&Humi&Barometer Sensor (BME280)

Software-apps en online services

Microsoft Visual Studio 2015

Stap 2: Verhaal

Op de Mengding-berg ten noordoosten van Ya'an, Sichuan, loopt de bergrug van west naar oost in een zee van groen. Dit is een bekend gezicht voor de 36-jarige Deng, een van de weinige Mengding-theemakers van zijn generatie, met een plantage van 50 mu (= 3,3 hectare) op 1100 meter boven zeeniveau. Deng komt uit een familie van theemakers, maar het voortzetten van de familie-erfenis is geen gemakkelijke taak. “Onze theesoorten worden op grote hoogte in een biologische omgeving verbouwd om de uitstekende kwaliteit te garanderen. Maar tegelijkertijd is de groeidichtheid laag, zijn de kosten hoog en is de knop ongelijkmatig, waardoor het moeilijk is om thee te oogsten. Dat is de reden waarom thee uit de hoge bergen normaal gesproken kleine oogsten zijn en hun waarden niet worden weerspiegeld op de markt. De afgelopen twee jaar heeft Deng geprobeerd de consument bewust te maken van thee uit de hoge bergen om hun waarde te promoten. En toen hij Fan ontmoette, die op zoek was naar een plantage om de IoTea-technologie van Seeed te implementeren, werd een perfecte match gemaakt voor een oplossing.

Stap 3: Hardwareverbinding

De hardware van dit project kan worden opgesplitst in 4 delen: Power, Sensors, Node en Gateway. In het volgende artikel wordt stap voor stap uitgelegd hoe u het kunt voltooien.

Vermogensdeel

Power Part bevat voornamelijk een zonnepaneel en een lithiumbatterij, als je dit project alleen voor demonstratie bouwt, kun je ze negeren. Of u kunt de vorige tutorial volgen om node power te installeren.

Sensoren Onderdeel

In Sensors Part hebben we vanwege de vele sensoren een weerstation gebruikt en ook een acrylbeugel gemaakt om ze te installeren.

Afbeelding
Afbeelding

Zoals je op de afbeelding hierboven ziet, zit de digitale lichtsensor altijd bovenaan, zodat deze informatie over de verlichting kan verzamelen. De sensoren die warmte zullen genereren, worden in het midden van de acrylbeugel geïnstalleerd, zoals O2-sensor, stofsensor en CO2-sensor. Eindelijk, temperatuur- en vochtigheidssensor aan de onderkant van de acrylbeugel.

Bovendien wordt de bodemtemperatuur- en vochtigheidssensor alleen in de grond geïnstalleerd. Knooppuntdeel

Afbeelding
Afbeelding

Node Part is een Seeeduino LoRaWan die in een waterdichte doos is geïnstalleerd en via waterverbindingen is aangesloten op stroom en sensoren. Onder hen, stofsensor aansluiten op digitale pin D3 van LoRaWan, CO2-sensor aansluiten op pin D4 & D5, bodemsensor aansluiten op pin D6 & D7, O2-sensor aansluiten op analoge pin A1 en lichtsensor & barometersensor aansluiten op I2C-poort.

OPMERKING: Er moet een weerstand van 10k worden toegevoegd tussen de blauwe (data) kabel van de bodemsensor en de rode (Vcc) kabel.

Seeeduino LoRaWan verzamelt af en toe sensorwaarde en stuurt deze via LoRa naar Gateway. Het gegevensformaat zoals hieronder:

{

[0], /* Luchttemperatuur(℃) */ [1], /* Luchtvochtigheid(%) */ [2], /* Hoogte(m) hoge byte */ [3], /* Hoogte(m) lage byte */ [4], /* CO2-concentratie (PPM) hoge byte */ [5], /* CO2-concentratie (PPM) lage byte */ [6], /* Stofconcentratie (pcs/0.01cf) hoge byte */ [7], /* Stofconcentratie (pcs/0.01cf) laag byte */ [8], /* Lichtintensiteit (lux) hoog byte */ [9], /* Lichtintensiteit (lux) laag byte */ [10], /* O2-concentratie (%) */ [11], /* Bodemtemperatuur (℃) */ [12], /* Bodemvochtigheid (%) */ [13], /* Accuspanning (V) */ [14] /* Sensorfoutcode */ }

Elke bit in de sensorfoutcodebyte heeft een andere betekenis, zoals hieronder:

{

bit0: 1; /* Barometersensorfout */ bit1: 1; /* CO2-sensorfout */ bit2: 1; /* Stofsensorfout */ bit3: 1; /* Lichtsensorfout */ bit4: 1; /* O2-sensorfout */ bit5: 1; /* Bodemsensorfout */ gereserveerd: 2; /* Gereserveerd */ }

Gateway-onderdeel:

Afbeelding
Afbeelding

Gateway Part is een Raspberry Pi die de Gateway-module RHF0M301-868 en PRI 2 Bridge RHF4T002 heeft aangesloten, deze in een waterdichte doos heeft geïnstalleerd en via waterverbindingen op stroom en USB-camera heeft aangesloten. Omdat het gespecialiseerde firmware gebruikt, volg je Seeed Wiki om het te configureren.

Stap 4: Softwareprogrammering

Als Hardware Connection kan Software Programming ook worden gesplitst, het kan worden gesplitst in 3 delen: Node, Gateway en Website.

Knooppuntdeel

De meeste stuurprogramma's die Node Part nodig heeft, bevinden zich al in de map origin_driver. De volgende bibliotheken moeten handmatig worden geïnstalleerd:

Adafruit_ASFcore

Omdat het project ingewikkeld is, raden we u aan Microsoft Visual Studio te gebruiken in plaats van Arduino IDE. Een plug-in genaamd Visual Micro kan u helpen een Arduino-project te bouwen met behulp van Visual Studio, klik hier voor meer informatie.

Voor een betere leesbaarheid en onderhoudbaarheid gebruiken we dit keer Object-Oriented Programming. Het klassendiagram van dit project ziet er als volgt uit:

Afbeelding
Afbeelding

Voor die sensoren die al een OOP-stuurprogramma hebben, hebben we het opnieuw verpakt om dit project aan te passen, voor anderen hebben we hun stuurprogramma's herschreven met behulp van OOP. De Sensor-klasse in de middleware-laag wordt gebruikt om interfaces van echte sensoren te verenigen. Een barometersensor kan bijvoorbeeld tegelijkertijd temperatuur, vochtigheid en hoogte verzamelen, dus het heeft 3 interfaces om temperatuur, vochtigheid en hoogte te verkrijgen. Maar ze hebben een verschillende methodenaam, waardoor het programma voor het verkrijgen van sensorwaarde ingewikkelder wordt, net als dit:

barometer->getTemperature();

barometer->getHumidity(); barometer->getAltitude(); // … else_sensor->getSomeValue(); // …

Maar met OOP ziet het er als volgt uit:

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

}

We hebben ook een Application-klasse ingepakt, het implementeert de IApplication-interface, de setup() en loop()-methode in IoTea.ino kan de setup() en loop()-methode in het Application-object aanroepen.

OPMERKING: USB Serial wordt ALLEEN gebruikt om fouten op te sporen. Geef na het debuggen commentaar op de initialisatiecode in de setup()-methode.

Gateway-onderdeel:

Het Python-programma van Gateway Part in de thuismap wordt gebruikt om elk uur foto's te maken en deze naar Amazon S3 Server te uploaden. Zorg ervoor dat fswebcam al op uw Raspberry Pi is geïnstalleerd voordat u het gebruikt:

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

Als u foto's wilt uploaden, configureert u uw AWS door de volgende stappen te volgen. Installeer eerst AWS SDK en AWS CLI op uw Raspberry Pi met behulp van deze opdrachten:

sudo pip installeer boto3

sudo pip install awscli

en voer vervolgens AWS CLI uit:

sudo aws configureren

Configureer uw AWS-toegangssleutel-ID, AWS-geheime toegangs-ID en standaardregionaam.

Als u uw foto's niet wilt uploaden, kunt u AWS-configuratiestappen en commentaarcodes over uploaden in photo.py overslaan. Om dit programma uit te voeren na elke keer opstarten van Raspberry Pi, kun je een bestandsnaamfoto maken in /etc/init.d en de volgende code erin schrijven.

#!/bin/bash

# /etc/init.d/photo ### BEGIN INIT INFO # Biedt: seeed_photo # Vereist-Start: $remote_fs $syslog # Vereist-Stop: $remote_fs $syslog # Standaard-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Korte beschrijving: foto's maken initscript # Beschrijving: Deze service wordt gebruikt om het maken van foto's te beheren ### END INIT INFO geval "$1" in start) echo "Begin met het nemen van foto" /home/rxhf/photo.py &;; stop) echo "Stop met het maken van foto" kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }');; *) echo "Gebruik: servicefoto start|stop" exit 1;; esac uitgang 0

uitvoeringsmachtiging instellen

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 /home/rxhf/photo.py

en test het

sudo /etc/init.d/photo start

Als er geen probleem is, stop het dan en voeg het toe aan de opstarttoepassing

sudo /etc/init.d/fotostop

sudo update-rc.d foto standaardinstellingen

OPMERKING: Als je de gateway wilt opstarten na het opstarten van de Raspberry Pi, voeg dan gateway-startcodes in Seeed Wiki toe aan /etc/rc.local, laat het er als volgt uitzien:

#!/bin/sh -e

# # rc.local # # Dit script wordt uitgevoerd aan het einde van elk runlevel voor meerdere gebruikers. # Zorg ervoor dat het script "0" verlaat bij succes of een andere # waarde bij een fout. # # Om dit script in of uit te schakelen, verandert u gewoon de # uitvoeringsbits. # # Dit script doet standaard niets. # Druk het IP-adres af _IP=$(hostnaam -I) || waar als ["$_IP"]; dan printf "Mijn IP-adres is %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

Website

We hebben de website op CentOS 7 geïmplementeerd. De volgende stappen laten u zien hoe u deze kunt implementeren.

Stap 1. Installeer Python3

sudo yum -y installeer epel-release

sudo yum -y installeer python36

Stap 2. Installeer Python pip en virtuele omgeving

wget

sudo python36 get-pip.py sudo pip install virtualenv

Setp 3. Kloon onze website vanuit GitHub

sudo yum -y install git

git kloon

Stap 4. Creëer en activeer virtuele omgeving

virtualenv -p python36 iotea-hb

cd iotea-hb bron bin/activeren

Stap 5. Installeer afhankelijke bibliotheken

pip installeer pymysql

pip install dbutils pip install flask pip install websocket-client pip install cofigparser

Stap 6. Database maken

sudo yum -y installeer mariadb mariabd-server

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

en gebruik vervolgens iotea_hb.sql om een tabel te maken.

Stap 7. Maak db.ini aan en schrijf deze codes erin

[db]

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

verander het pad van 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")

Stap 8. Wijzig poort in app.py en start de website:

# in app.py

#app.run(debug=True, port=6000) app.run(debug=True, port=8080)

# in terminal

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

bezoek nu 127.0.0.1:8080 in uw webbrowser, u kunt de website zien, maar realtime gegevens worden niet weergegeven.

Stap 9. Loriot-gegevens ophalen

Open een andere terminal, voer de virtuele omgeving opnieuw in en start de loriot-app:

cd iotea-hb

bron bin/activeer gunicorn loriot:app

Wacht even, u ziet de gegevens op de website, of u kunt wss wijzigen in loriot.py:

# in loriot.py

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

ws = create_connection()

Stap 5: Bediening

U kunt onze websites bezoeken om realtime gegevens te bekijken:

  • in Ya'an
  • Voor demonstratie:

Aanbevolen: