Sommario:

Seeed IoTea LoRa Solution (Aggiornamento 1811): 5 passaggi
Seeed IoTea LoRa Solution (Aggiornamento 1811): 5 passaggi

Video: Seeed IoTea LoRa Solution (Aggiornamento 1811): 5 passaggi

Video: Seeed IoTea LoRa Solution (Aggiornamento 1811): 5 passaggi
Video: High Density 2022 2024, Luglio
Anonim
Seeed IoTea LoRa Solution (Aggiornamento 1811)
Seeed IoTea LoRa Solution (Aggiornamento 1811)

Internet+ è un concetto popolare ora. Questa volta abbiamo provato Internet e l'agricoltura per far crescere il tè nel giardino di Internet.

Passaggio 1: cose utilizzate in questo progetto

Componenti hardware

  • Grove - Sensore di anidride carbonica (MH-Z16)
  • Grove - Sensore di luce digitale
  • Grove - Sensore di polvere (PPD42NS)
  • Grove - Sensore di ossigeno (ME2-O2-Ф20)
  • Sensore di umidità e temperatura del suolo
  • LoRa LoRaWAN Gateway - Kit 868MHz con Raspberry Pi 3
  • Grove - Sensore Temp&Humi&Barometro (BME280)

App software e servizi online

Microsoft Visual Studio 2015

Fase 2: Storia

Sul monte Mengding a nord-est di Ya'an, nel Sichuan, la cresta della montagna corre da ovest a est in un mare di verde. Questo è uno spettacolo molto familiare per il 36enne Deng, uno dei pochissimi produttori di tè Mengding della sua generazione, con una piantagione di 50 mu (= 3,3 ettari) situata a 1100 m sul livello del mare. Deng proviene da una famiglia di produttori di tè, ma portare avanti l'eredità di famiglia non è un compito facile. “I nostri tè sono coltivati ad alta quota in un ambiente biologico per garantirne l'eccellente qualità. Ma allo stesso tempo, la densità di crescita è bassa, il costo è alto e il germogliamento è irregolare, rendendo il tè difficile da raccogliere. Ecco perché i tè di alta montagna sono normalmente raccolti piccoli e i loro valori non si riflettono sul mercato. Negli ultimi due anni, Deng ha cercato di sensibilizzare i consumatori sul tè di alta montagna per promuoverne il valore. E quando ha incontrato Fan, che stava cercando una piantagione per implementare la tecnologia IoTea di Seeed, è stata creata una soluzione perfetta.

Passaggio 3: connessione hardware

L'hardware di questo progetto può essere suddiviso in 4 parti: Potenza, Sensori, Nodo e Gateway. Il seguente articolo ti mostrerà come completarlo passo dopo passo.

Parte di potenza

Power Part contiene principalmente un pannello solare e una batteria al litio, se costruisci questo progetto solo per dimostrazione, puoi ignorarli. Oppure puoi seguire il tutorial precedente per installare la potenza del nodo.

Sensori Parte

Nella parte Sensori, a causa dei numerosi sensori, abbiamo utilizzato una stazione meteorologica e realizzato anche una staffa in acrilico per installarli.

Immagine
Immagine

Come vedete nell'immagine sopra, Digital Light Sensor sempre in alto, in modo che possa raccogliere informazioni sull'illuminazione. I sensori che genereranno calore sono installati al centro della staffa in acrilico, come il sensore O2, il sensore polvere e il sensore CO2. Infine, sensore di temperatura e umidità nella parte inferiore della staffa in acrilico.

Inoltre, il sensore di temperatura e umidità del suolo è installato da solo nel terreno. Parte del nodo

Immagine
Immagine

Node Part è un Seeeduino LoRaWan che installato in una scatola impermeabile, si collega all'alimentazione e ai sensori tramite giunti idrici. Tra questi, il sensore della polvere si collega al pin digitale D3 di LoRaWan, il sensore di CO2 si collega ai pin D4 e D5, il sensore del suolo si collega ai pin D6 e D7, il sensore O2 si collega al pin analogico A1 e il sensore di luce e il sensore barometro si collegano alla porta I2C.

NOTA: è necessario aggiungere un resistore da 10k tra il cavo blu (dati) e il cavo rosso (Vcc) del sensore del suolo.

Seeeduino LoRaWan raccoglie i valori dei sensori di tanto in tanto e li invia al Gateway tramite LoRa. Il formato dei dati come di seguito:

{

[0], /* Temperatura dell'aria (℃) */ [1], /* Umidità dell'aria (%) */ [2], /* Altitudine (m) byte alto */ [3], /* Altitudine (m) byte basso */ [4], /* Concentrazione CO2 (PPM) byte alto */ [5], /* Concentrazione CO2 (PPM) byte basso */ [6], /* Concentrazione polvere (pz/0.01cf) byte alto */ [7], /* Concentrazione polvere (pz/0.01cf) low byte */ [8], /* Intensità luminosa (lux) high byte */ [9], /* Intensità luminosa (lux) low byte */ [10], /* Concentrazione O2 (%) */ [11], /* Temperatura del suolo (℃) */ [12], /* Umidità del suolo (%) */ [13], /* Tensione della batteria (V) */ [14] /* Codice errore sensore */ }

Ogni bit nel byte del codice di errore del sensore ha un significato diverso, proprio come di seguito:

{

bit0: 1; /* Errore sensore barometro */ bit1: 1; /* Errore sensore CO2 */ bit2: 1; /* Errore sensore polvere */ bit3: 1; /* Errore sensore di luce */ bit4: 1; /* Errore sensore O2 */ bit5: 1; /* Errore sensore suolo */ riservato: 2; /* Riservato */ }

Parte gateway

Immagine
Immagine

Gateway Part è un Raspberry Pi che ha collegato il modulo Gateway RHF0M301–868 e PRI 2 Bridge RHF4T002, installato in una scatola impermeabile e collegato all'alimentazione e alla fotocamera USB tramite giunti idrici. Poiché utilizza un firmware specializzato, segui Seeed Wiki per configurarlo.

Fase 4: Programmazione del software

Come connessione hardware, anche la programmazione software può essere suddivisa, può essere suddivisa in 3 parti: nodo, gateway e sito Web.

Parte del nodo

La maggior parte dei driver richiesti da Node Part sono già contenuti nella cartella origin_driver. Le librerie seguenti devono essere installate manualmente:

Adafruit_ASFcore

Poiché il progetto è complicato, ti consigliamo di utilizzare Microsoft Visual Studio invece di Arduino IDE. Un plug-in chiamato Visual Micro può aiutarti a creare un progetto Arduino utilizzando Visual Studio, fai clic qui per ulteriori informazioni.

Per una migliore leggibilità e manutenibilità, questa volta utilizziamo la programmazione orientata agli oggetti. Il diagramma delle classi di questo progetto è simile al seguente:

Immagine
Immagine

Per quei sensori che hanno già un driver OOP, lo abbiamo riconfezionato per adattare questo progetto, per altri, abbiamo riscritto i loro driver usando OOP. La classe Sensor nel livello middleware viene utilizzata per unificare le interfacce di sensori reali, ad esempio un sensore barometro può raccogliere contemporaneamente temperatura, umidità e altitudine, quindi ha 3 interfacce per acquisire temperatura, umidità e altitudine. Ma hanno un nome di metodo diverso, che renderà più complicato il programma di acquisizione del valore dei sensori, proprio come questo:

barometro->getTemperature();

barometro->getHumidity(); barometro->getAltitude(); // … altro_sensore->getSomeValue(); // …

Ma usando OOP, sembra così:

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

}

Abbiamo anche confezionato una classe Application, implementa l'interfaccia IApplication, il metodo setup() e loop() in IoTea.ino può chiamare il metodo setup() e loop() nell'oggetto Application.

NOTA: USB Seriale viene utilizzato SOLO per il debug. Dopo il debug, commentare è inizializzare il codice nel metodo setup().

Parte gateway

Il programma Python di Gateway Part nella cartella home viene utilizzato per scattare foto e caricarle sul server Amazon S3 ogni ora. Prima di usarlo, assicurati che fswebcam sia già installato nel tuo Raspberry Pi:

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

Se desideri caricare foto, configura il tuo AWS seguendo i passaggi. Innanzitutto, installa AWS SDK e AWS CLI sul tuo Raspberry Pi utilizzando questi comandi:

sudo pip install boto3

sudo pip install awscli

e quindi, esegui AWS CLI:

sudo aws configure

Configura l'ID della chiave di accesso AWS, l'ID di accesso segreto AWS e il nome della regione predefinita.

Se non ti piace caricare le tue foto, puoi saltare i passaggi di configurazione di AWS e commentare i codici sul caricamento in photo.py. Per eseguire questo programma dopo aver avviato ogni volta Raspberry Pi, puoi creare una foto con il nome del file in /etc/init.d e scriverci il codice seguente.

#!/bin/bash

# /etc/init.d/photo ### BEGIN INIT INFO # Fornisce: seeed_photo # Avvio richiesto: $remote_fs $syslog # Stop richiesto: $fs_remoto $syslog # Avvio predefinito: 2 3 4 5 # Stop predefinito: 0 1 6 # Descrizione breve: initscript per scattare foto # Descrizione: Questo servizio viene utilizzato per gestire lo scatto di foto ### END INIT INFO case "$1" in start) echo "Inizia a scattare foto" /home/rxhf/photo.py &;; stop) echo "Smetti di scattare foto" kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }');; *) echo "Utilizzo: start|stop foto servizio" exit 1;; esac uscita 0

impostare il permesso di esecuzione

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 /home/rxhf/photo.py

e provalo

sudo /etc/init.d/photo start

Se non ci sono problemi, fermalo e aggiungilo all'applicazione di avvio

sudo /etc/init.d/photo stop

sudo update-rc.d impostazioni predefinite foto

NOTA: se si desidera avviare il gateway dopo l'avvio di Raspberry Pi, aggiungere i codici di avvio del gateway in Seeed Wiki a /etc/rc.local, in modo che assomigli a:

#!/bin/sh -e

# # rc.local # # Questo script viene eseguito alla fine di ogni runlevel multiutente. # Assicurati che lo script "uscirà da 0" in caso di successo o qualsiasi altro # valore in caso di errore. # # Per abilitare o disabilitare questo script basta cambiare i # bit di esecuzione. # # Di default questo script non fa nulla. # Stampa l'indirizzo IP _IP=$(hostname -I) || vero se ["$_IP"]; quindi printf "Il mio indirizzo IP è %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

Sito web

Abbiamo distribuito il sito Web su CentOS 7. I seguenti passaggi ti mostreranno come eseguire la distribuzione.

Passaggio 1. Installa Python3

sudo yum -y install epel-release

sudo yum -y install python36

Passaggio 2. Installa Python pip e ambiente virtuale

wget

sudo python36 get-pip.py sudo pip install virtualenv

Setp 3. Clona il nostro sito Web da GitHub

sudo yum -y install git

git clone

Passaggio 4. Crea e attiva l'ambiente virtuale

virtualenv -p python36 iotea-hb

cd iotea-hb source bin/activate

Passaggio 5. Installa le librerie dipendenti

pip install pymysql

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

Passaggio 6. Crea database

sudo yum -y install mariadb mariabd-server

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

e poi usa iotea_hb.sql per creare una tabella.

Passaggio 7. Crea db.ini e scrivici questi codici

[db]

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

cambia il percorso di 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")

Passaggio 8. Cambia porta in app.py e avvia il sito Web:

# in app.py

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

# nel terminale

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

ora visita 127.0.0.1:8080 nel tuo browser web, puoi vedere il sito web, ma i dati in tempo reale non vengono visualizzati.

Passaggio 9. Ottieni i dati di Loriot

Apri un altro terminale, rientra nell'ambiente virtuale e avvia l'app loriot:

cd iotea-hb

source bin/activate gunicorn loriot: app

Aspetta un po', vedrai i dati visualizzati nel sito web, oppure puoi cambiare wss in loriot.py:

# in loriot.py

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

ws = create_connection()

Passaggio 5: operazione

Puoi visitare i nostri siti Web per visualizzare i dati in tempo reale:

  • a Ya'an
  • Per dimostrazione

Consigliato: