Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Et automatisk system for innsamling av informasjon som brukes på teplantasje. Det er en del av intelligent landbruksinformasjonsinnsamling.
Trinn 1: Ting som brukes i dette prosjektet
Maskinvarekomponenter
- Grove - Karbondioksidsensor (MH -Z16)
- Grove - Digital lyssensor
- Grove - støvsensor (PPD42NS)
- Grove-oksygensensor (ME2-O2-Ф20)
- Jordfuktighet og temperatursensor
- LoRa LoRaWAN Gateway - 868MHz sett med Raspberry Pi 3
- Grove - Temp & Humi & Barometersensor (BME280)
Programvare -apper og online -tjenester
Microsoft Visual Studio 2015
Trinn 2: Historie
Smart landbruk skal bruke Internet of Things -teknologien på tradisjonelt landbruk, ved hjelp av sensorer og programvare for å kontrollere landbruksproduksjonen via mobile eller datamaskinplattformer, noe som gjør tradisjonelt landbruk mer "smart".
På Mengding -fjellet nordøst for Ya’an, Sichuan, går fjellryggen vest til øst i et grønt hav. Dette er et mest kjent syn for 36 år gamle Deng, en av de få Mengding-te-skaperne i sin generasjon, med en plantasje på 50 mu (= 3,3 hektar) på 1100 meters havnivå. Deng kommer fra en familie av tekokere, men det er ikke en lett oppgave å videreføre arven etter familien. “Teene våre dyrkes i stor høyde i et organisk miljø for å sikre sin utmerkede kvalitet. Men samtidig er veksttettheten lav, kostnadene høye og spirende er ujevn, noe som gjør te vanskelig å høste. Derfor er te på høyfjell normalt små høstinger og verdiene deres gjenspeiles ikke på markedet. I de siste to årene har Deng prøvd å øke forbrukernes bevissthet om te for å fremme verdien. Og da han møtte Fan, som var på utkikk etter en plantasje for å implementere Seeeds IoTea -teknologi, ble det gjort en perfekt match for en løsning. Seeed IoTea-løsningen tar sikte på å hjelpe tebønder med å bedre håndtere plantasjer uten å endre tradisjonell te-dyrking, og presentere miljødata i sanntid fra plantasjene på en åpen plattform.
IoTea består av sensorer, noder og gateways og samler data i sanntid om faktorer som kan påvirke teens kvalitet under dyrking og produksjonsprosesser, inkludert temperatur og fuktighet, CO2, O2, PM og lyseksponering. Dataene samles inn av sensorene, sendes av nodene til gatewayen og til slutt til skyen, og gjøres tilgjengelig for sluttkunder på en webside.
Trinn 3: Maskinvaretilkobling
Trinn 1: Gateway -tilkobling
Gatewayen installeres separat i en eske. Med tanke på varmespredningsproblemet har vi lagt til 2 vifter. Den ene er for Raspberry Pi's varmespredning, den andre er for intern og ekstern luftsirkulasjon. Gateway -boksen er plassert hjemme hos en bonde, så vi trenger ikke å vurdere strømproblemet.
Trinn 2: Node -tilkobling
Noden er terminal for dataene, og alle de originale dataene er hentet herfra. Det er 6 sensorer koblet til noden. I tillegg til jordfuktighets- og temperatursensoren setter vi andre sensorer inne i lamellboksen.
Noden er plassert i en vanntett boks. For å få en bedre tilkobling til noden, lager vi et adapterkort. Til slutt vil vi gi nedlastingslenken til dette brettskjemaet. Som vist nedenfor er sensorens kabler koblet til adapterkortet gjennom rekkeklemmer. Vi bruker 3 MOS -rør (SI2301) til å bygge bryterkretser for å kontrollere av og på sensorer og vifte. Viften brukes til å kjøle seg ned. Vi har en temperatursensor (DS18B20) montert på brettet. Den kan fortelle oss den interne temperaturen på boksen, og deretter bestemmer mikrokontrolleren om den skal slå på viften. Vi bruker flere motstander for å lage en spenningsdelerkrets for å måle bly-syre batterispenning. Til slutt reserverer vi 3 IIC -grensesnitt og seriell port på kortet for senere utvidelse og feilsøking.
La oss snakke om nodens strømforsyningsproblem. Noden plasseres tilfeldig i teplantasje, så tradisjonell strømforsyningsmetode er ikke lenger aktuelt. Det er en god idé å bruke en solenergiløsning. Det finnes mange løsninger på markedet for tiden. Vi kan velge en av dem som dekker våre behov. Det er 3 deler i løsningen vi valgte: solcellepanel, solcellelader og blybatteri. For å fange solenergien bedre, legger vi solcellepanel på toppen av braketten og justerer vinkelen for å sikre at den vender mot solen. Vi plasserte solar charge controller i den samme boksen med node. Fordi det ikke er ekstra plass inne i esken, måtte vi finne en ny vanntett boks for å plassere blybatteriet.
Trinn 4: Programvarekonfigurasjon
Node
I denne delen vil vi introdusere hovedsakelig programvarekonfigurasjon av node.
DataFormat
Data lastet opp av noden til gatewayen:
usignert char Lora_data [15] = {0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
Betydningen av hver databit:
Lora_data [0] : Lufttemperatur, ℃
Lora_data [1]: Luftfuktighet, %
Lora_data [2]: Høyde over åtte, m
Lora_data [3]: Lav høyde åtte
Lora_data [4]: CO2 -konsentrasjon høy åtte, ppm
Lora_data [5]: CO2 -konsentrasjon lav åtte
Lora_data [6] : Støvkonsentrasjon høy åtte, stk/0.01cf
Lora_data [7]: Støvkonsentrasjon lav åtte
Lora_data [8]: Lysintensitet høy åtte, lux
Lora_data [9]: Lysintensitet lav åtte
Lora_data [10]: O2 -konsentrasjon, % (rådata delt på 1000)
Lora_data [11] : Jordtemperatur, ℃
Lora_data [12]: Jordfuktighet, %
Lora_data [13] : Batterispenning, v
Lora_data [14]: Feilkode for sensorer
Feil kode:
Lora_data [14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]
Betydningen av hver bit:
bit 0: 1 ---- Temp & Humi & Barometer Sensor (BME280) feil
bit 1: 1 ---- Karbondioksidsensor (MH-Z16) feil
bit 2: 1 ---- Støvføler (PPD42NS) feil
bit 3: 1 ---- Digital lyssensorfeil
bit 4: 1 ---- Oksygensensor (ME2-O2-Ф20) feil
bit 5: 1 ---- Feil i jordfuktighet og temperatursensor
bit 6: Reservert
bit 7: Reservert
Vi har laget en Error_code_transform.exe, åpnet den og tast inn feilkode i heksadesimal, du vil raskt vite hvilken sensor som er feil. Nedlastingskoblingen er på slutten av denne artikkelen.
Parameterjustering: a) Dataoverføringssyklus
// seeedtea.ino
#defineinterval_time 600 // second
Denne parameteren kan varieres for å endre dataoverføringssyklusen. I hver syklus tar datainnsamling omtrent 1 minutt. Så det anbefales ikke å endre denne verdien til mindre enn 60 sekunder.
b) Oppvarmingstid for støvføler
//seeedtea.ino
#definePreheat_time 30000 // DustSensor warm-up time, milliseond //Dust_other.cpp #definesampletime_ms 30000 // samplingtime30s
c) Spenningskoeffisient
//POWER_Ctrl.cpp
#defineBattery_coefficient 0.159864 // ADC value × Battery_coefficient = battery_voltage #defineSolar_coefficient 0.22559 // ADC value × Solar_coefficient = solar_voltage
Disse to parameterne beregnes basert på spenningsdelerkretsen.
d) Vifteåpningstemperaturterskel
//POWER_Ctrl.cpp
#defineFan_start_temp 45 // temperaturgrense #defineFan_start_light 500 // lysintensitet
Når den faktiske temperaturen overskrider terskelen, vil viften begynne å kjøle seg ned.
e) Initialiseringsparameter for O2 -sensor
//Oksygen.cpp
#defineO2_prosent 208.00 //20.8%
f) Makrobryter
//seeedtea.ino
#defineLORA_RUN // Etter kommentaren vil Lora initialisering og dataoverføring stoppe #defineSENSOR_RUN // Etter kommentaren slutter eksterne sensorer å fungere //POWER_Ctrl.cpp #defineFAN_ON // Fortesting only, Praktisk applikasjon må kommenteres /**** *** DS18B20 kontrollmodus **********************/ #defineSlower_Mode // Sakte modus for å sammenstille temperaturen. Kommentar ut er rask modus
g) Pin -kartlegging
D2: LED -indikator og ekstern reset -mikrokontroller IIC: SCL og SDA
//Dust_other.h
#defineDust_pin 3 // Støvføler //CO2.cpp #defineCO2_serial Serial1 // bruk hardwareserial port (D0 & D1) //seeedtea.ino #definedataPin 6 // Jorddatapinne #defineclockPin 7 // Jordklokke pin // POWER_Ctrl. h #defineDS18B20_pin 8 // DS18B20 #defineFan_pin 9 // Fan #defineAir_CtrlPin 10 // Kontrollpinne for sensorene plassert i louverbox #defineSoil_CtrlPin 11 // Jordfuktighets- og temperatursensorbryterpinne #defineBattery_pin A2 // Mål batterispenning #define /Mål solcellepanelspenning //Oksygen.h #defineO2_pin A1 // O2 sensor
h) Watchdog timer
Watchdog -timeren brukes til å overvåke systemets driftsstatus. Når systemet kjører unormalt, blir noden tilbakestilt, slik at den kan kjøre kontinuerlig i lang tid.
Biblioteket det skal refereres til:
- Adafruit_SleepyDog.h er lagt til i prosjektet
- Adafruit_ASFcore-master.zip er pakket i prosjektmappen og må legges til manuelt i Arduino IDE.
Relaterte funksjoner:
Aktiver vakthund
int WatchdogSAMD:: enable (int maxPeriodMS, bool isForSleep)
Inngangsparametere:
Int maxPeriodMS: Ventetid i millisekunder. Maksimalt tillatt er 16000 millisekunder.
returverdi:
Int type, returner den faktiske ventetiden
Tilbakestill vakthund
void WatchdogSAMD:: reset ()
Ring denne funksjonen for å tilbakestille vekterhundtimeren, referert til som "å mate hunden." Overskridelse av ventetiden uten tilbakestilling vil føre til at noden starter på nytt.
Stopp vakthund
void WatchdogSAMD:: deaktiver ()
Inngangsport
I denne delen vil vi introdusere hvordan du kobler til Loriot -serveren.
Trinn 1: Registrering av Loriot Server Gateway
a) Ny bruker må registrere en konto først, klikk på registreringsadressen. Fyll inn brukernavn, passord og e -postadresse for å registrere deg. Etter registrering vil en e -post bli sendt til deg. Følg instruksjonene i e -posten for å aktivere.
b) Etter vellykket aktivering, klikk her for å logge på. Standardnivå er "Community Network", den støtter 1 Gateway (RHF2S001) og 10 noder.
c) Skriv inn Dashboard -> Gateway, klikk på Legg til gateway start for å legge til Gateway.
d) Velg Raspberry Pi 3
e) Sett som nedenfor:
- Radio front -end -> RHF2S001 868/915 MHz (SX1257)
- BUSS -> SPI
f) Fyll ut MAC -adressen til RHF2S001, skal være i formatet b8: 27: eb: xx: xx: xx. Og legg også inn Gateway Location -informasjon.
g) Klikk "Registrer Raspberry Pi -gateway" for å fullføre registreringen.
h) Klikk på den registrerte gatewayen for å gå inn på konfigurasjonssiden, bytt “Frekvensplan” manuelt, planen din her avgjøres av typen RHF2S001 -type, tilgjengelig plan er CN470 , CN473 , CN434 , CN780 , EU868. Etter at du har valgt, må du oppdatere siden for å få den nøyaktige kanalen. I denne wikien velger vi EU868.
i) Kjør kommandoen i kittterminalen:
cd /home/rxhf/loriot/1.0.2
sudo systemctl stopp 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.
Trinn 2: Loriot Server Connect Node -enhet
a) Få de tilgjengelige gateway -kanalene
Gjeldende gateway -kanaler kan hentes fra Dashboard -> Gateway -> Your Gateway, du kan se de tilgjengelige kanalene som bildet nedenfor.
b) Seeeduino LoRAWAN GPS (RHF3M076) konfigurasjon
Åpne den serielle skjermen til ArduinoIDE, trykk på kommandoen nedenfor.
ved+kap
For å bekrefte standardkanalen til Seeeduino_LoRAWAN GPS, får du 3 kanaler. Hvis det ikke er noen tilgjengelig kanal, kan du endre kanalene til Seeeduino_LoRAWAN med kommandoen nedenfor.
ved+ch = 0, 868,1
ved+lm = 1, 868,3 ved+lm = 2, 868,5
Deretter kan du bruke at+ch igjen for å sjekke.
c) Legg til Seeeduino_LoRAWAN GPS som en ABP NodeLog i Loriot -serveren, klikk på Dash Board -> Programmer -> SimpleApp. Klikk på Importer ABP , -input under elementene
- DevAddr: Seeeduino_LoRAWAN GPS kommer gjennom "AT+ID" -kommandoen (Merk: Loriot støtter ikke tykktarmskontakt, må fjernes manuelt)
- FCntUp: Setto 1
- FCntDn: Setto 1
- NWKSKEY: Standardverdi 2B7E151628AED2A6ABF7158809CF4F3C
- APPSKEY: Standardverdi 2B7E151628AED2A6ABF7158809CF4F3C
- EUI: DEVEUI, Seeeduino_LoRAWAN GPS kommer gjennom "AT+ID" -kommandoen
Klikk på Importer enhet -knappen for å fullføre enhetsimporten. Velg nå Dashboard-> Applications -> SampleApp, du vil se den nye ABP -noden du nettopp har lagt til.
d) Send data fra Seeeduino_LoRAWAN
MERK FØLGENDE! Dette er bare en test.
Tilbake til seriell monitor av ArduinoIDE, send kommando:
AT+CMSGHEX = "0a 0b 0c 0d 0e"
Gå deretter til Dashboard -> Applications -> SampleApp -> Device, klikk på Node Device EUI eller DevAddr, du finner dataene du nettopp har sendt her.
For detaljer, se denne wikien.
Trinn 5: Nettstedskonstruksjon
Relaterte verktøy
- virtualenv
- Python3
- Gunicorn
- Veileder
- Nginx
- MySQL
Vi bruker CentOS7 som testdistribueringsmiljø
virtualenv
Bruk virtualenv til å bygge et frittstående python3 -produksjonsmiljø
a) installere
pip installere virtualenv
b) opprett et virtuelt python3 -miljø
virtualenv -p python3 iotea
c) start det virtuelle miljøet og skriv inn iotea -katalogen
kildeboks/aktivere
d) eksisterer miljø
deaktivere
Python3
a) installere
yum installer epel-release
yum installer python36
b) installer avhengig bibliotek PyMySQL, DBUtils, Flask, websocket-klient, configparser
pip installer pymysql
pip install dbutils pip install kolbe pip install websocket-client pip install configparser
Gunicorn
a) installer (under Python3 -miljø)
pip installere gunicorn
b) kjør kolbe prosjekt (under iotea prosjektkatalog)
gunicorn -w 5 -b 0.0.0.0:5000 app: app
c) kjør websocket-clint for å få loriot-data
gunicorn loriot: ca.
d) se Gunicorn -prosess -treet
pstree -ap | grep gunicorn
Veileder
a) installer (rotbruker)
pip install veileder
b) generer konfigurasjonsfiler
echo_supervisord_conf> /etc/supervisord.conf
c) opprett en katalog og innfør en katalogkonfigurasjon
mkdir -p /etc/supervisor/conf.d
Rediger /etc/supervisord.conf og endre filfeltet under [inkludere] på slutten av filen.
Vær oppmerksom på at du må fjerne ';' foran disse to linjene, som er kommentarfeltet.
[inkludere]
Filer = /etc/supervisor/conf.d/*.conf
Betyr å introdusere /etc/supervisor/conf.d/. Følgende konfigurasjonsfil brukes som prosesskonfigurasjonsfil (overvåket av veilederen).
d) innkommende konfigurasjon (under iotea -katalogen)
cp iotea.conf /etc/supervisor/conf.d/
cp loriot.conf /etc/supervisor/conf.d/
e) åpen iotea -servering
superviosrctl last inn #reload konfigurasjonsfilen
superviosrctl start loriot #open loriot data mottak superviosrctl start iotea #åpne iotea kolbe applikasjonen
f) andre vanlige operasjoner
supervisorctl reload # last inn konfigurasjonsfilen på nytt
supervisorctl oppdater supervisorctl start xxx supervisorctl stopp xxx supervisorctl status xxx supervisorctl hjelp # vis mer kommando
Nginx
a) installere
yum installere -y nginx
b) konfigurasjon
cp NginxIotea.conf /etc/nginx/conf.d/
c) start Nginx
systemctl starter nginx.service
MySQL
a) relaterte parametere
bruker = 'root'
passwd = '1234' db = 'iotea' port = 3306
b) fil
iotea_iotea.sql
c) konfigurasjonsfil
db.ini