Table des matières:

Solution Seeed IoTea LoRa (Mise à jour 1811) : 5 étapes
Solution Seeed IoTea LoRa (Mise à jour 1811) : 5 étapes

Vidéo: Solution Seeed IoTea LoRa (Mise à jour 1811) : 5 étapes

Vidéo: Solution Seeed IoTea LoRa (Mise à jour 1811) : 5 étapes
Vidéo: Высокая плотность 2022 2024, Novembre
Anonim
Solution Seeed IoTea LoRa (Mise à jour 1811)
Solution Seeed IoTea LoRa (Mise à jour 1811)

Internet+ est un concept populaire maintenant. Cette fois, nous avons essayé Internet et l'agriculture pour faire pousser le thé Internet dans le jardin de thé.

Étape 1: Éléments utilisés dans ce projet

Composants matériels

  • Grove - Capteur de dioxyde de carbone (MH-Z16)
  • Grove - Capteur de lumière numérique
  • Grove - Capteur de poussière (PPD42NS)
  • Grove - Capteur d'oxygène (ME2-O2-Ф20)
  • Capteur d'humidité et de température du sol
  • Passerelle LoRa LoRaWAN - Kit 868MHz avec Raspberry Pi 3
  • Grove - Capteur de température et d'humidité et de baromètre (BME280)

Applications logicielles et services en ligne

Microsoft Visual Studio 2015

Étape 2: Histoire

Sur la montagne Mengding, au nord-est de Ya'an, dans le Sichuan, la crête de la montagne s'étend d'ouest en est dans une mer de verdure. C'est un spectacle des plus familiers pour Deng, 36 ans, l'un des très rares théiers Mengding de sa génération, avec une plantation de 50mu (=3,3 hectares) située à 1100m d'altitude. Deng vient d'une famille de théiers, mais perpétuer l'héritage familial n'est pas une tâche facile. « Nos thés sont cultivés en haute altitude dans un environnement biologique pour garantir leur excellente qualité. Mais en même temps, la densité de croissance est faible, le coût est élevé et le bourgeonnement est inégal, ce qui rend le thé difficile à récolter. C'est pourquoi les thés de haute montagne sont normalement de petites récoltes et leurs valeurs ne sont pas reflétées sur le marché. » Depuis deux ans, Deng essaie de sensibiliser les consommateurs au thé de haute montagne pour promouvoir leur valeur. Et lorsqu'il a rencontré Fan, qui cherchait une plantation pour mettre en œuvre la technologie IoTea de Seeed, une solution idéale a été trouvée.

Étape 3: connexion matérielle

Le matériel de ce projet peut être divisé en 4 parties: alimentation, capteurs, nœud et passerelle. L'article suivant vous montrera comment le compléter étape par étape.

Partie puissance

Power Part contient principalement un panneau solaire et une batterie au lithium, si vous construisez simplement ce projet pour la démonstration, vous pouvez les ignorer. Ou vous pouvez suivre le didacticiel précédent pour installer l'alimentation du nœud.

Pièce de capteurs

Dans la partie Capteurs, en raison du grand nombre de capteurs, nous avons utilisé une station météo et avons également fabriqué un support en acrylique pour les installer.

Image
Image

Comme vous le voyez sur l'image ci-dessus, le capteur de lumière numérique est toujours au-dessus, afin qu'il puisse collecter des informations sur l'éclairage. Les capteurs qui généreront de la chaleur sont installés au milieu du support en acrylique, tels que le capteur O2, le capteur de poussière et le capteur de CO2. Enfin, capteur de température et d'humidité au bas du support en acrylique.

De plus, le capteur de température et d'humidité du sol est installé seul dans le sol. Partie de nœud

Image
Image

Node Part est un Seeeduino LoRaWan qui est installé dans un boîtier étanche, il se connecte à l'alimentation et aux capteurs via des joints d'eau. Parmi eux, le capteur de poussière se connecte à la broche numérique D3 de LoRaWan, le capteur de CO2 se connecte aux broches D4 et D5, le capteur de sol se connecte aux broches D6 et D7, le capteur O2 se connecte à la broche analogique A1 et le capteur de lumière et le capteur baromètre se connectent au port I2C.

REMARQUE: Une résistance de 10 k doit être ajoutée entre le câble bleu (données) du capteur de sol et le câble rouge (Vcc).

Seeeduino LoRaWan collecte la valeur des capteurs de temps en temps et les envoie à Gateway via LoRa. Le format de données comme ci-dessous:

{

[0], /* Température de l'air (℃) */ [1], /* Humidité de l'air (%) */ [2], /* Altitude (m) octet de poids fort */ [3], /* Altitude (m) octet bas */ [4], /* concentration en CO2 (PPM) octet haut */ [5], /* concentration en CO2 (PPM) octet bas */ [6], /* concentration en poussières (pcs/0.01cf) octet haut */ [7], /* Concentration de poussière (pcs/0.01cf) octet bas */ [8], /* Intensité lumineuse (lux) octet haut */ [9], /* Intensité lumineuse (lux) octet bas */ [10], /* Concentration en O2 (%) */ [11], /* Température du sol (℃) */ [12], /* Humidité du sol (%) */ [13], /* Tension de la batterie (V) */ [14] /* Code d'erreur du capteur */ }

Chaque bit dans l'octet du code d'erreur du capteur a une signification différente, comme ci-dessous:

{

bit0: 1; /* Erreur de capteur de baromètre */ bit1: 1; /* Erreur de capteur de CO2 */ bit2: 1; /* Erreur de capteur de poussière */ bit3: 1; /* Erreur du capteur de lumière */ bit4: 1; /* Erreur de capteur O2 */ bit5: 1; /* Erreur de capteur de sol */ réservé: 2; /* Réservé */ }

Partie passerelle

Image
Image

Gateway Part est un Raspberry Pi qui a branché le module Gateway RHF0M301-868 et le pont PRI 2 RHF4T002, il est installé dans un boîtier étanche et se connecte à l'alimentation et à la caméra USB via des joints d'eau. Comme il utilise un micrologiciel spécialisé, veuillez suivre Seeed Wiki pour le configurer.

Étape 4: Programmation du logiciel

En tant que connexion matérielle, la programmation logicielle peut également être divisée, elle peut être divisée en 3 parties: nœud, passerelle et site Web.

Partie de nœud

La plupart des pilotes requis par Node Part sont déjà contenus dans le dossier origin_driver. Les bibliothèques suivantes doivent être installées manuellement:

Adafruit_ASFcore

Parce que le projet est compliqué, nous vous recommandons d'utiliser Microsoft Visual Studio au lieu d'Arduino IDE. Un plugin appelé Visual Micro peut vous aider à construire un projet Arduino en utilisant Visual Studio, cliquez ici pour plus d'informations.

Pour une meilleure lisibilité et maintenabilité, nous utilisons cette fois la programmation orientée objet. Le diagramme de classe de ce projet ressemble à ci-dessous:

Image
Image

Pour les capteurs qui ont déjà un pilote OOP, nous l'avons reconditionné pour adapter ce projet, pour d'autres, nous avons réécrit leurs pilotes en utilisant la POO. La classe Sensor dans la couche middleware est utilisée pour unifier les interfaces de capteurs réels, par exemple, un capteur de baromètre peut collecter la température, l'humidité et l'altitude en même temps, il dispose donc de 3 interfaces pour acquérir la température, l'humidité et l'altitude. Mais ils ont un nom de méthode différent, ce qui compliquera le programme d'acquisition de la valeur des capteurs, comme ceci:

baromètre->getTemperature();

baromètre->getHumidity(); baromètre->getAltitude(); // … other_sensor->getSomeValue(); // …

Mais en utilisant la POO, cela ressemble à ceci:

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

}

Nous avons également emballé une classe Application, elle implémente l'interface IApplication, les méthodes setup() et loop() dans IoTea.ino peuvent appeler les méthodes setup() et loop() dans l'objet Application.

REMARQUE: la série USB est utilisée UNIQUEMENT pour le débogage. Après le débogage, veuillez commenter son code d'initialisation dans la méthode setup().

Partie passerelle

Le programme Python de Gateway Part dans le dossier d'accueil est utilisé pour prendre des photos et les télécharger sur Amazon S3 Server toutes les heures. Avant de l'utiliser, assurez-vous que fswebcam est déjà installé dans votre Raspberry Pi:

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

Si vous souhaitez télécharger des photos, configurez votre AWS en suivant les étapes. Tout d'abord, installez AWS SDK et AWS CLI sur votre Raspberry Pi à l'aide de ces commandes:

sudo pip installer boto3

sudo pip installer awscli

puis, exécutez l'AWS CLI:

sudo aws configurer

Configurez votre AWS Access Key ID, votre AWS Secret Access ID et votre nom de région par défaut.

Si vous n'aimez pas télécharger vos photos, vous pouvez ignorer les étapes de configuration AWS et les codes de commentaire sur le téléchargement dans photo.py. Pour exécuter ce programme après avoir démarré Raspberry Pi à chaque fois, vous pouvez créer une photo de nom de fichier dans /etc/init.d et y écrire le code suivant.

#!/bin/bash

# /etc/init.d/photo ### BEGIN INIT INFO # Fournit: seeed_photo # Démarrage obligatoire: $remote_fs $syslog # Arrêt obligatoire: $remote_fs $syslog # Démarrage par défaut: 2 3 4 5 # Arrêt par défaut: 0 1 6 # Description courte: initscript de prise de photo # Description: Ce service est utilisé pour gérer la prise de photo ### END INIT INFO case "$1" dans start) echo "Commencer à prendre une photo" /home/rxhf/photo.py &;; stop) echo "Arrêter de prendre une photo" kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }');; *) echo "Utilisation: service photo start|stop" exit 1;; esac sortie 0

définir l'autorisation d'exécution

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 /home/rxhf/photo.py

et le tester

sudo /etc/init.d/photo start

S'il n'y a pas de problème, arrêtez-le et ajoutez-le à l'application de démarrage

sudo /etc/init.d/photo stop

sudo update-rc.d photo par défaut

REMARQUE: si vous souhaitez démarrer la passerelle après le démarrage de Raspberry Pi, ajoutez les codes de démarrage de la passerelle dans Seeed Wiki à /etc/rc.local, cela ressemble à:

#!/bin/sh -e

# # rc.local # # Ce script est exécuté à la fin de chaque niveau d'exécution multi-utilisateur. # Assurez-vous que le script "quittera 0" en cas de succès ou toute autre valeur # en cas d'erreur. # # Afin d'activer ou de désactiver ce script, changez simplement les # bits d'exécution. # # Par défaut, ce script ne fait rien. # Affiche l'adresse IP _IP=$(hostname -I) || true if ["$_IP"]; puis printf "Mon adresse IP est %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 sortie 0

Site Internet

Nous avons déployé le site Web sur CentOS 7. Les étapes suivantes vous montreront comment procéder au déploiement.

Étape 1. Installez Python3

sudo yum -y install epel-release

sudo miam -y installer python36

Étape 2. Installez le pip Python et l'environnement virtuel

wget

sudo python36 get-pip.py sudo pip installer virtualenv

Étape 3. Cloner notre site Web à partir de GitHub

sudo miam -y installer git

git clone

Étape 4. Créer et activer l'environnement virtuel

virtualenv -p python36 iotea-hb

cd iotea-hb source bin/activer

Étape 5. Installer les bibliothèques dépendantes

pip installer pymysql

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

Étape 6. Créer une base de données

sudo yum -y installer mariadb mariabd-server

sudo systemctl activer mariadb sudo systemctl démarrer mariadb mysql -uroot -p

puis utilisez iotea_hb.sql pour créer une table.

Étape 7. Créez db.ini et écrivez-y ces codes

[db]

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

changer le chemin de db.ini dans db.py

# dans db.py

#cf.read("/data/www/python3_iotea_hb/iotea/conf/db.ini") cf.read("/home//iotea-hb/db.ini")

Étape 8. Changez de port dans app.py et démarrez le site Web:

# dans app.py

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

# dans la borne

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

visitez maintenant 127.0.0.1:8080 dans votre navigateur Web, vous pouvez voir le site Web, mais les données en temps réel ne sont pas affichées.

Étape 9. Obtenez les données Loriot

Ouvrez un autre terminal, entrez à nouveau dans l'environnement virtuel et démarrez l'application Loriot:

cd iotea-hb

source bin/activer gunicorn loriot:app

Attendez un moment, vous verrez les données affichées sur le site Web, ou vous pouvez modifier wss dans loriot.py:

# dans loriot.py

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

ws = créer_connexion()

Étape 5: Opération

Vous pouvez visiter nos sites Web pour consulter les données en temps réel:

  • A Ya'an
  • Pour la démonstration

Conseillé: