Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Internet+ är ett populärt koncept nu. Den här gången försökte vi Internet plus jordbruk för att få en te -trädgård att växa ut på Internet -teet.
Steg 1: Saker som används i detta projekt
Hårdvarukomponenter
- Grove - koldioxidgivare (MH -Z16)
- Grove - Digital ljussensor
- Grove - Dammsensor (PPD42NS)
- Grove-Oxygen Sensor (ME2-O2-Ф20)
- Jordfuktighet och temperatursensor
- LoRa LoRaWAN Gateway - 868MHz -kit med Raspberry Pi 3
- Grove - Temp & Humi & Barometersensor (BME280)
Programvaruappar och onlinetjänster
Microsoft Visual Studio 2015
Steg 2: Berättelse
På Mengdingberget nordost om Ya’an, Sichuan, löper bergskammen väst mot öst i ett grönt hav. Detta är en mycket bekant syn för 36-åriga Deng, en av de få Mengding-tebryggarna i sin generation, med en plantage på 50mu (= 3,3 hektar) som ligger 1100 m över havet. Deng kommer från en familj av tebryggare, men det är ingen lätt uppgift att fortsätta med arvet från familjen.”Våra teer odlas på hög höjd i en organisk miljö för att säkerställa dess utmärkta kvalitet. Men samtidigt är tillväxttätheten låg, kostnaden hög och spirande är ojämn, vilket gör te svårt att skörda. Det är därför högfjällste är normalt små skördar och deras värderingar återspeglas inte på marknaden.”Under de senaste två åren har Deng försökt öka konsumenternas medvetenhet om högbergste för att främja deras värde. Och när han träffade Fan, som letade efter en plantage för att implementera Seeeds IoTea -teknik, gjordes en perfekt matchning för en lösning.
Steg 3: Maskinvaruanslutning
Hårdvaran för detta projekt kan delas upp i fyra delar: Power, Sensors, Node och Gateway. Följande artikel kommer att visa dig hur du slutför det steg för steg.
Strömdel
Power Part innehåller främst en solpanel och ett litiumbatteri, om du bara bygger det här projektet för demonstration kan du ignorera dem. Eller så kan du följa föregående handledning för att installera nodström.
Sensorer Del
I Sensors Part, på grund av de många sensorerna, använde vi en väderstation och gjorde också en akrylfäste för att installera dem.
Som du ser på bilden ovan, Digital Light Sensor alltid på toppen, så att den kan samla belysningsinformation. Sensorerna som genererar värme installeras i mitten av akrylfästet, till exempel O2 -sensor, dammsensor och CO2 -sensor. Äntligen temperatur- och fuktighetssensor på botten av akrylfästet.
Dessutom är jordtemperatur- och luftfuktighetssensorn installerad ensam i jorden. Noddel
Node Part är en Seeeduino LoRaWan som installeras i en vattentät låda, den ansluts till ström och sensorer via vattenleder. Bland dem kan Dust Sensor ansluta till LoRaWans digitala stift D3, CO2 Sensor ansluta till stift D4 & D5, Jordsensor ansluta till stift D6 & D7, O2 Sensor ansluta till analog stift A1 och Ljussensor & Barometersensor ansluta till I2C -port.
OBS! En 10k motstånd bör läggas till mellan jordsensorns blå (data) kabel och den röda (Vcc) kabeln.
Seeeduino LoRaWan samlar in sensorvärde då och då och skickar dem till Gateway via LoRa. Dataformatet som nedan:
{
[0], /* Lufttemperatur (℃)* /[1], /* Luftfuktighet (%)* /[2], /* Höjd (m) hög byte* /[3], /* Höjd (m) låg byte */[4],/ * CO2 -koncentration (PPM) hög byte */[5],/ * CO2 -koncentration (PPM) låg byte */[6],/ * Dammkoncentration (st/0,01cf) hög byte */[7],/ *Dammkoncentration (st/0,01cf) låg byte */[8],/ *Ljusintensitet (lux) hög byte */[9],/ *Ljusintensitet (lux) låg byte */ [10], /* O2 -koncentration (%)* /[11], /* Jordtemperatur (℃)* /[12], /* Jordfuktighet (%)* /[13], /* Batterispänning (V) */ [14]/ *Sensorfelkod */}
Varje bit i Sensor Error Code -byte har en skillnadsbetydelse, precis som nedan:
{
bit0: 1; / * Barometersensorfel */ bit1: 1; / * CO2 Sensor Error */ bit2: 1; / * Dammsensorfel */ bit3: 1; / * Ljussensorfel */ bit4: 1; / * O2 Sensor Error */ bit5: 1; / * Jordgivarfel */ reserverad: 2; / * Reserverad */}
Gateway -del
Gateway Part är en Raspberry Pi som pluggade Gateway -modulen RHF0M301–868 och PRI 2 Bridge RHF4T002, den installerades i en vattentät låda och ansluts till ström och USB -kamera via vattenleder. Eftersom den använder specialiserad firmware, följ Seeed Wiki för att konfigurera den.
Steg 4: Programvaruprogrammering
Som hårdvaruanslutning kan programvaruprogrammering också delas upp, den kan delas upp i tre delar: Nod, Gateway och webbplats.
Noddel
De flesta drivrutiner som noddel krävs finns redan i mappen origin_driver. Följande bibliotek måste installeras manuellt:
Adafruit_ASFcore
Eftersom projektet är komplicerat rekommenderar vi att du använder Microsoft Visual Studio istället för Arduino IDE. Ett plugin som heter Visual Micro kan hjälpa dig att bygga ett Arduino -projekt med Visual Studio, klicka här för mer information.
För bättre läsbarhet och underhållbarhet använder vi objektorienterad programmering den här gången. Klassdiagrammet för detta projekt ser ut som nedan:
Eftersom de sensorerna redan har OOP -drivrutin, packade vi om den för att anpassa detta projekt, för andra skrev vi om deras drivrutiner med hjälp av OOP. Sensorklassen i mellanvarulager används för att förena gränssnitt för riktiga sensorer, till exempel kan en barometersensor samla temperatur, luftfuktighet och höjd samtidigt, så den har 3 gränssnitt för att förvärva temperatur, luftfuktighet och höjd. Men de har skillnadsmetodnamn, vilket kommer att göra programmet för att förvärva sensorer värde mer komplicerat, precis så här:
barometer-> getTemperature ();
barometer-> getHumidity (); barometer-> getAltitude (); //… another_sensor-> getSomeValue (); //…
Men med OOP ser det ut så här:
för (auto i = 0; i getValue ();
}
Vi packade också en applikationsklass, den implementerar IApplication -gränssnitt, metoden setup () och loop () i IoTea.ino kan anropa setup () och loop () -metoden i Application -objekt.
OBS: USB Serial används ENDAST för att felsöka. Efter felsökning, kommentera att den initierar koden i setup () -metoden.
Gateway -del
Gateway Part's Python -program i hemmappen används för att ta foton och ladda upp dem till Amazon S3 Server varje timme. Innan du använder den, se till att fswebcam redan är installerad i din Raspberry Pi:
sudo apt-get update && sudo apt-get install fswebcam
Om du vill ladda upp foton konfigurerar du din AWS genom att följa stegen. Installera först AWS SDK och AWS CLI till din Raspberry Pi med hjälp av dessa kommandon:
sudo pip installera boto3
sudo pip installera awscli
och kör sedan AWS CLI:
sudo aws konfigurera
Konfigurera ditt AWS Access Key ID, AWS Secret Access ID och Standard regionnamn.
Om du inte gillar att ladda upp dina foton kan du hoppa över AWS -konfigurationssteg och kommentarkoder om uppladdning i photo.py. För att köra detta program efter att ha startat Raspberry Pi varje gång kan du skapa ett filnamnfoto i /etc/init.d och skriva följande kod till det.
#!/bin/bash
#/etc.: 0 1 6 # Kort beskrivning: fotografering initscript # Beskrivning: Denna tjänst används för att hantera fotografering ### END INIT INFO fall "$ 1" i start) echo "Börja ta foto" /home/rxhf/photo.py &;; stop) echo "Sluta ta foto" kill $ (ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{print $ 2}');; *) echo "Användning: service foto start | stopp" avsluta 1;; esac exit 0
ange körningstillstånd
sudo chmod 777 /etc/init.d/photo
sudo chmod 777 /home/rxhf/photo.py
och testa det
sudo /etc/init.d/photo start
Om det inte finns några problem, stoppa det och lägg till det i startprogrammet
sudo /etc/init.d/photo stop
sudo update-rc.d fotoinställningar
OBS: Om du vill starta gateway efter Raspberry Pi -start, lägg till gateway -startkoder i Seeed Wiki till /etc/rc.local, låt det se ut som:
#!/bin/sh -e
# # rc.local # # Detta skript körs i slutet av varje fleranvändarkörnivå. # Se till att skriptet "avslutar 0" vid framgång eller något annat # värde vid fel. # # För att aktivera eller inaktivera detta skript ändrar du bara körningen # bitar. # # Som standard gör detta skript ingenting. # Skriv ut IP -adressen _IP = $ (värdnamn -I) || sant om ["$ _IP"]; printf "Min IP -adress är %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
Hemsida
Vi distribuerade webbplatsen på CentOS 7. Följande steg visar hur du distribuerar.
Steg 1. Installera Python3
sudo yum -y installera epel -release
sudo yum -y installera python36
Steg 2. Installera Python pip och virtuellt miljö
wget
sudo python36 get-pip.py sudo pip installera virtualenv
Setp 3. Klona vår webbplats från GitHub
sudo yum -y installera git
git-klon
Steg 4. Skapa och aktivera virtuellt miljö
virtualenv -p python36 iotea -hb
cd iotea-hb källfack/aktivera
Steg 5. Installera beroende bibliotek
pip installera pymysql
pip installera dbutils pip installera kolven pip install websocket-client pip install cofigparser
Steg 6. Skapa databas
sudo yum -y installera mariadb mariabd -server
sudo systemctl aktivera mariadb sudo systemctl start mariadb mysql -uroot -p
och använd sedan iotea_hb.sql för att skapa en tabell.
Steg 7. Skapa db.ini och skriv dessa koder till den
[db]
db_port = 3306 db_user = root db_host = localhost db_pass = db_name = iotea
ändra db.inis sökväg i db.py
# i db.py
#cf.read ("/data/www/python3_iotea_hb/iotea/conf/db.ini") cf.read ("/home // iotea-hb/db.ini")
Steg 8. Ändra port i app.py och starta webbplatsen:
# i app.py
#app.run (debug = True, port = 6000) app.run (debug = True, port = 8080)
# i terminal
pip installera gunicorn gunicorn -w 5 -b 0.0.0.0:8080 app: app
Besök nu 127.0.0.1:8080 i din webbläsare, du kan se webbplatsen, men data i realtid visas inte.
Steg 9. Skaffa loriot -data
Öppna en annan terminal, ange virtuellt miljö igen och starta loriot -appen:
cd iotea-hb
källkorg/aktivera gunicorn loriot: app
Vänta ett tag, du kommer att se data som visas på webbplatsen, eller så kan du ändra wss i loriot.py:
# i loriot.py
#ws = create_connection ("wss: //cn1.loriot.io/app? token = vnwEuwAAAA1jbjEubG9yaW90LmlvRpscoh9Uq1L7K1zbrcBz6w ==")
ws = create_connection ()
Steg 5: Drift
Du kan besöka våra webbplatser för att se data i realtid:
- I Ya'an
- För demonstration