Cuprins:

Soluție Loeed LoRa IoTea: 5 pași
Soluție Loeed LoRa IoTea: 5 pași

Video: Soluție Loeed LoRa IoTea: 5 pași

Video: Soluție Loeed LoRa IoTea: 5 pași
Video: Oricât de singuri ne-am simți, suntem și rămânem interconectați - Niculina Gheorghiță - Magic Life 2024, Iulie
Anonim
Seeed LoRa IoTea Solution
Seeed LoRa IoTea Solution

Un sistem automat de colectare a informațiilor aplicat plantației de ceai. Face parte din colectarea inteligentă a informațiilor agricole.

Pasul 1: Lucruri utilizate în acest proiect

Componente hardware

  • Grove - Senzor de dioxid de carbon (MH-Z16)
  • Grove - senzor digital de lumină
  • Grove - Senzor de praf (PPD42NS)
  • Grove - Senzor de oxigen (ME2-O2-Ф20)
  • Senzor de umiditate și temperatură a solului
  • LoRa LoRaWAN Gateway - Kit 868MHz cu Raspberry Pi 3
  • Grove - Senzor de temp & Humi și barometru (BME280)

Aplicații software și servicii online

Microsoft Visual Studio 2015

Pasul 2: Poveste

Agricultura inteligentă este de a aplica tehnologia Internetului obiectelor agriculturii tradiționale, folosind senzori și software pentru a controla producția agricolă prin intermediul platformelor mobile sau computerizate, făcând agricultura tradițională mai „inteligentă”.

Pe muntele Mengding la nord-est de Ya’an, Sichuan, creasta montană se îndreaptă spre vest spre est, într-o mare verde. Aceasta este o priveliște familiară pentru Deng, în vârstă de 36 de ani, unul dintre puținii producători de ceai Mengding din generația sa, cu o plantație de 50mu (= 3,3 hectare) situată la 1100m nivel deasupra mării. Deng provine dintr-o familie de producători de ceai, dar continuarea moștenirii familiei nu este o sarcină ușoară. „Ceaiurile noastre sunt cultivate la mare altitudine într-un mediu organic pentru a asigura calitatea sa excelentă. Dar, în același timp, densitatea de creștere este scăzută, costul este ridicat și înmugurirea este inegală, ceea ce face ca ceaiul să fie greu de recoltat. De aceea, ceaiurile de munte sunt în mod normal recolte mici, iar valorile lor nu se reflectă pe piață. În ultimii doi ani, Deng a încercat să sensibilizeze consumatorii cu privire la ceaiul de munte pentru a le promova valoarea. Și când l-a întâlnit pe Fan, care căuta o plantație pentru a implementa tehnologia IoTea a lui Seeed, s-a făcut o potrivire perfectă pentru o soluție. Soluția Seeed IoTea își propune să ajute fermierii de ceai să gestioneze mai bine plantațiile fără a modifica practicile tradiționale de cultivare a ceaiului și să prezinte date de mediu în timp real din plantații pe o platformă deschisă.

Compus din senzori, noduri și gateway-uri, IoTea colectează date în timp real ale factorilor care pot afecta calitatea ceaiului în timpul cultivării și proceselor de producție, inclusiv temperatura și umiditatea, CO2, O2, PM și expunerea la lumină. Datele sunt colectate de senzori, trimise de noduri către gateway și în cele din urmă către cloud și sunt accesibile clienților finali pe o pagină web.

Pasul 3: Conexiune hardware

Pasul 1: conexiune gateway

Gateway-ul este instalat separat într-o cutie. Având în vedere problema disipării căldurii, am adăugat 2 ventilatoare. Una este pentru disiparea căldurii Raspberry Pi, cealaltă este pentru circulația aerului intern și extern. Cutia de intrare este plasată în casa unui fermier, deci nu este nevoie să luăm în considerare problema alimentării sale.

Imagine
Imagine

Pasul 2: Conexiune nod

Nodul este terminalul datelor, iar toate datele originale sunt obținute de aici. Există 6 senzori conectați la nod. În plus față de senzorul de umiditate și temperatură a solului, punem alți senzori în cutia de ferestre.

Imagine
Imagine
Imagine
Imagine

Nodul este plasat într-o cutie impermeabilă. Pentru a avea o conexiune mai bună la nod, realizăm o placă de adaptor. În cele din urmă, vom furniza linkul de descărcare a schemei acestei plăci. Așa cum se arată mai jos, cablurile senzorilor sunt conectate la placa adaptorului prin blocuri de borne. Folosim 3 tuburi MOS (SI2301) pentru a construi circuite de comutare pentru a controla pornirea și oprirea senzorilor și a ventilatorului. Ventilatorul este folosit pentru a se răci. Avem un senzor de temperatură (DS18B20) montat pe placă. Ne poate spune temperatura internă a cutiei și apoi microcontrolerul decide dacă porniți ventilatorul. Folosim mai multe rezistențe pentru a realiza un circuit divizor de tensiune pentru a măsura tensiunea bateriei plumb-acid. În cele din urmă, rezervăm 3 interfețe IIC și port serial pe placă pentru extindere și depanare ulterioară.

Imagine
Imagine

Să vorbim despre problema alimentării cu energie a nodului. Nodul este plasat în plantația de ceai la întâmplare, astfel încât metoda tradițională de alimentare nu mai este aplicabilă. Utilizarea unei soluții de energie solară este o idee bună. Există multe soluții oferite pe piață în prezent. Putem selecta una dintre ele care să răspundă nevoilor noastre. Există 3 părți în soluția pe care am ales-o: panou solar, regulator de încărcare solară și baterie cu plumb acid. Pentru a capta mai bine energia solară, punem panoul solar pe partea superioară a suportului și ajustăm unghiul acestuia pentru a ne asigura că este orientat spre soare. Am plasat controlerul de încărcare solară în aceeași cutie cu nod. Deoarece nu există spațiu suplimentar în interiorul cutiei, a trebuit să găsim o nouă cutie impermeabilă pentru a plasa bateria cu plumb acid.

Imagine
Imagine
Imagine
Imagine
Imagine
Imagine

Pasul 4: Configurarea software-ului

Nodul

În această secțiune, vom introduce în principal configurația software a nodului.

DataFormat

Date încărcate de nod către gateway:

unsigned char Lora_data [15] = {0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};

Înțelesul fiecărui bit de date:

Lora_data [0] temperature Temperatura aerului, ℃

Lora_data [1] humidity Umiditatea aerului,%

Lora_data [2] : Altitudine mare opt, m

Lora_data [3] : Altitudine scăzută opt

Lora_data [4] concentration Concentrație de CO2 ridicată opt, ppm

Lora_data [5] concentration Concentrație de CO2 scăzută opt

Lora_data [6] : Concentrație de praf mare opt, bucăți / 0,01cf

Lora_data [7] : Concentrație de praf scăzută opt

Lora_data [8] : Intensitate luminoasă mare opt, lux

Lora_data [9] intensity Intensitatea luminii scăzută opt

Lora_data [10] concentration Concentrație de O2,% (date brute împărțite la 1000)

Lora_data [11] : Temperatura solului, ℃

Lora_data [12] : Umiditatea solului,%

Lora_data [13] voltage Tensiunea bateriei, v

Lora_data [14] code Cod de eroare al senzorilor

Cod de eroare:

Lora_data [14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]

Înțelesul fiecărui bit:

bit 0: 1 ---- Eroare senzor Temp & Humi & Barometer (BME280)

bit 1: 1 ---- Eroare senzor dioxid de carbon (MH-Z16)

bit 2: 1 ---- Eroare senzor de praf (PPD42NS)

bit 3: 1 ---- Eroare senzor digital de lumină

bit 4: 1 ---- Eroare senzor oxigen (ME2-O2-Ф20)

bit 5: 1 ---- Umiditatea solului și eroarea senzorului de temperatură

bit 6: Rezervat

bit 7: Rezervat

Am făcut un Error_code_transform.exe, îl deschidem și introducem codul de eroare în hexazecimal, veți ști rapid ce senzor este eroare. Linkul de descărcare se află la sfârșitul acestui articol.

Reglarea parametrilor: a) Ciclul de transmitere a datelor

// seeedtea.ino

#defineinterval_time 600 // secundă

Acest parametru poate fi modificat pentru a modifica ciclul de transmisie a datelor. În fiecare ciclu, achiziția de date durează aproximativ 1 minut. Deci, nu este recomandat să modificați această valoare la mai puțin de 60 de secunde.

b) Timp de încălzire a senzorului de praf

//seeedtea.ino

#definePreheat_time 30000 // DustSensor timp de încălzire, miliseond //Dust_other.cpp #definesampletime_ms 30000 // samplingtime30s

c) Coeficientul de tensiune

//POWER_Ctrl.cpp

#defineBattery_coefficient 0.159864 // Valoarea ADC × Battery_coefficient = battery_voltage #defineSolar_coefficient 0.22559 // ADC value × Solar_coefficient = solar_voltage

Acești doi parametri sunt calculați pe baza circuitului divizor de tensiune.

d) Pragul temperaturii de deschidere a ventilatorului

//POWER_Ctrl.cpp

#defineFan_start_temp 45 // temperaturaethreshold #defineFan_start_light 500 // intensitatea luminii

Când temperatura reală depășește pragul, ventilatorul va începe să se răcească.

e) Parametru de inițializare a senzorului O2

//Oxygen.cpp

# defineO2_percentage 208.00 //20.8%

f) Comutator macro

//seeedtea.ino

. *** Mod de control DS18B20 ********************** / #defineSlower_Mode // Mod lent cu temperatura. Comentariul este modul rapid

g) Maparea pinilor

D2: indicator LED și microcontroler extern de resetare IIC: SCL și SDA

//Dust_other.h

#defineDust_pin 3 // Senzor de praf //CO2.cpp # defineCO2_serial Serial1 // utilizează hardwareserial port (D0 & D1) //seeedtea.ino #definedataPin 6 // Solul de date pin #defineclockPin 7 // Solul ceas pin // POWER_Ctrl. h # defineDS18B20_pin 8 // DS18B20 #defineFan_pin 9 // Fan #defineAir_CtrlPin 10 // Pin de control pentru senzorii amplasați în fereastră #defineSoil_CtrlPin 11 // Umiditatea solului și pinul comutatorului senzorului de temperatură #defineBattery_pin A2 // Măsurați tensiunea bateriei #defineSolar_pin A3 / / Măsurați tensiunea panoului solar //Oxygen.h # defineO2_pin A1 // O2 senzor

h) Cronometru de supraveghere

Cronometrul câinelui de pază este utilizat pentru a monitoriza starea de funcționare a sistemului. Când sistemul funcționează anormal, nodul va fi resetat, astfel încât să poată rula continuu pentru o lungă perioadă de timp.

Biblioteca la care se face referire:

  • Adafruit_SleepyDog.h a fost adăugat la proiect
  • Adafruit_ASFcore-master.zip este ambalat în folderul proiectului și trebuie adăugat manual la Arduino IDE.

Funcții conexe:

Activați câinele de pază

int WatchdogSAMD:: enable (int maxPeriodMS, bool isForSleep)

Parametrii de intrare:

Int maxPeriodMS: Timp de așteptare în milisecunde. Maximul permis este de 16000 de milisecunde.

valoare returnată:

Tipul Int, returnează timpul efectiv de așteptare

Resetați câinele de pază

void WatchdogSAMD:: reset ()

Apelați această funcție pentru a reseta cronometrul câinelui de pază, denumit „hrănirea câinelui”. Depășirea timpului de așteptare fără resetare va determina repornirea nodului.

Oprește câinele de pază

void WatchdogSAMD:: disable ()

Gateway

În această secțiune vom introduce cum să vă conectați la serverul Loriot.

Pasul 1: Înregistrare Loriot Server Gateway

a) Noul utilizator trebuie mai întâi să înregistreze un cont, faceți clic pe adresa de înregistrare. Completați Numele de utilizator, Parola și adresa de e-mail pentru a vă înregistra, după înregistrare vă va fi trimis un e-mail, vă rugăm să urmați instrucțiunile din e-mail pentru a activa.

b) După activarea cu succes, faceți clic aici pentru a vă conecta. Nivelul implicit este „Rețea comunitară”, acesta acceptă 1 Gateway (RHF2S001) și 10 noduri.

c) Introduceți tabloul de bord -> Gateway, faceți clic pe Add Gateway start pentru a adăuga Gateway.

d) Selectați Raspberry Pi 3

e) Setați după cum urmează:

  • Front-end radio -> RHF2S001 868/915 MHz (SX1257)
  • BUS -> SPI

f) Completați adresa MAC a RHF2S001, trebuie să fie în format b8: 27: eb: xx: xx: xx. Și, de asemenea, introduceți informații despre locația gateway-ului.

g) Faceți clic pe „Înregistrați gateway-ul Raspberry Pi” pentru a finaliza înregistrarea.

Imagine
Imagine

h) Faceți clic pe gateway-ul înregistrat pentru a intra în pagina de configurare, comutați manual „Planul de frecvență”, planul dvs. aici este decis de tipul tipului dvs. RHF2S001, planul disponibil este CN470 , CN473 , CN434 , CN780 , EU868, după selectare vă rugăm să reîmprospătați pagina pentru a obține canalul exact. În acest wiki alegem EU868.

i) Rulați comanda în terminalul de chit :

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.

Imagine
Imagine

Pasul 2: dispozitivul Loriot Server Connect Node

a) Obțineți canalele gateway disponibile

Canalele gateway-ului curent pot fi obținute de la Tabloul de bord -> Gateway -> Gateway-ul dvs., puteți vedea canalele disponibile ca în imaginea de mai jos.

Imagine
Imagine

b) Configurare GPS Seeeduino LoRAWAN (RHF3M076)

Deschideți monitorul serial al ArduinoIDE, atingeți comanda de mai jos.

la + ch

Pentru a confirma canalul implicit al GPS-ului dvs. Seeeduino_LoRAWAN, veți primi 3 canale. Dacă nu există un canal disponibil, puteți schimba canalele Seeeduino_LoRAWAN prin comanda de mai jos.

la + ch = 0, 868,1

la + ch = 1, 868,3 la + ch = 2, 868,5

Apoi puteți utiliza din nou la + ch pentru a verifica.

c) Adăugați GPS Seeeduino_LoRAWAN ca ABP NodeLog în serverul Loriot, Faceți clic pe Dash Board -> Aplicații -> SimpleApp. Faceți clic pe Import ABP , input de sub elemente

  • DevAddr: Seeeduino_LoRAWAN GPS trece prin comanda "AT + ID" (Notă: Loriot nu acceptă conectorul de colon, trebuie să îl eliminați manual)
  • FCntUp : Setto 1
  • FCntDn : Setto 1
  • NWKSKEY : Valoare implicită 2B7E151628AED2A6ABF7158809CF4F3C
  • APPSKEY : Valoare implicită 2B7E151628AED2A6ABF7158809CF4F3C
  • EUI : DEVEUI, Seeeduino_LoRAWAN GPS trece prin comanda „AT + ID”
Imagine
Imagine

Faceți clic pe butonul Import dispozitiv pentru a finaliza importul dispozitivului. Acum alegeți Tablou de bord-> Aplicații -> SampleApp, veți vedea noul nod ABP pe care tocmai l-ați adăugat.

Imagine
Imagine

d) Trimiteți date de la Seeeduino_LoRAWAN

ATENŢIE! Acesta este doar un test.

Înapoi la monitorul serial al ArduinoIDE, trimiteți comanda:

AT + CMSGHEX = "0a 0b 0c 0d 0e"

Apoi accesați Tablou de bord -> Aplicații -> SampleApp -> Dispozitiv, faceți clic pe Node Device EUI sau DevAddr, veți găsi datele pe care tocmai le-ați trimis aici.

Imagine
Imagine

Pentru detalii, vă rugăm să consultați acest wiki.

Pasul 5: Construirea site-ului web

Instrumente conexe

  • virtualenv
  • Python3
  • Gunicorn
  • Supervizor
  • Nginx
  • MySQL

Folosim CentOS7 ca mediu de implementare de testare

virtualenv

Utilizați virtualenv pentru a crea un mediu de producție python3 independent

a) instalați

pip instala virtualenv

b) creați un mediu virtual python3

virtualenv -p python3 iotea

c) porniți mediul virtual și introduceți directorul iotea

coș sursă / activați

d) există mediu

dezactivați

Python3

a) instalați

instalează epel-release

instalează python36

b) instalați biblioteca dependentă PyMySQL, DBUtils, Flask, websocket-client, configparser

pip instalează pymysql

pip install dbutils pip install flask pip install websocket-client pip install configparser

Gunicorn

a) instalați (în mediul Python3)

pip instala gunicorn

b) rulați proiectul balon (sub directorul de proiecte iotea)

gunicorn -w 5 -b 0.0.0.0:5000 app: app

c) rulați websocket-clint pentru a obține date loriot

gunicorn loriot: app

d) vizualizarea arborelui procesului Gunicorn

pstree -ap | grep gunicorn

Supervizor

a) instalați (utilizator root)

supraveghetor instalare pip

b) generați fișiere de configurare

echo_supervisord_conf> /etc/supervisord.conf

c) creați un director și introduceți o configurație de director

mkdir -p /etc/supervisor/conf.d

Editați /etc/supervisord.conf și modificați câmpul de fișiere sub [include] la sfârșitul fișierului.

Rețineți că trebuie să eliminați „;” în fața acestor două rânduri, care este personajul de comentariu.

[include]

Files = /etc/supervisor/conf.d/*.conf

Mijloace pentru a introduce /etc/supervisor/conf.d/. Următorul fișier de configurare este utilizat ca fișier de configurare a procesului (monitorizat de supraveghetor).

d) configurație primită (sub directorul iotea)

cp iotea.conf /etc/supervisor/conf.d/

cp loriot.conf /etc/supervisor/conf.d/

e) deschide iotea serve

superviosrctl reîncarcă #reload fișierul de configurare

superviosrctl start loriot #open loriot data reception superviosrctl start iotea #open the iotea flask application

f) alte operațiuni comune

supervisorctl reîncarcă # reîncarcă fișierul de configurare

supervisorctl update supervorctl start xxx supervisorctl stop xxx supervisorctl status xxx supervisorctl help # view more command

Nginx

a) instalați

instalează -y nginx

b) configurare

cp NginxIotea.conf /etc/nginx/conf.d/

c) porniți Nginx

systemctl pornește nginx.service

MySQL

a) parametrii aferenți

user = 'root'

passwd = '1234' db = 'iotea' port = 3306

b) dosar

iotea_iotea.sql

c) fișier de configurare

db.ini

Recomandat: