- Installation du kit SDK de périphérique AWS IOT pour Python sur Raspberry Pi:
- Schéma:
- Programmation de votre Raspberry Pi:
- Test du programme python via la fenêtre Shell:
- Travail:
Raspberry Pi a toujours été le premier choix pour développer des applications basées sur l'IoT si un certain niveau de calcul est impliqué. Avec la flexibilité de python et la forte communauté de développeurs, il est très facile de collecter, d'enregistrer, d'analyser ou de signaler un ensemble de données à l'aide du Pi. Dans ce didacticiel, nous allons apprendre à combiner la puissance de Raspberry Pi avec le service Amazon AWS pour publier des données en ligne sur Internet.
Dans ce didacticiel, nous utiliserons le capteur DHT11 pour lire la valeur de température et d'humidité, puis nous nous connecterons au service AWS IOT et mettrons à jour les valeurs du capteur à l'aide du kit SDK AWS IOT. Ces données peuvent ensuite être visualisées dans la console Amazon IOT pour nous assurer que les données sont publiées sur Internet.
Vous pouvez également utiliser AWS Elastic Search Service pour récupérer ces valeurs de capteur et les stocker dans une base de données, puis utiliser le service Kibana Dashboard pour visualiser les données du capteur sous forme de graphique tracé net. Assez intéressant? !!! Alors, commençons…
Conditions préalables:
Ce didacticiel suppose que vous avez déjà créé votre compte AWS gratuit et que vous connaissez les principes de base du service AWS IoT, comme la création d'un objet, un certificat, une stratégie et la publication de valeurs en l'utilisant. Sinon, lisez le tutoriel ci-dessous.
- Premiers pas avec Amazon AWS IOT avec MQTT.fx
Cela suppose également que vous savez comment interfacer un capteur LCD et DHT11 avec Raspberry Pi et que les bibliothèques pour faire de même sont déjà installées sur votre Pi. Sinon, suivez le didacticiel ci-dessous.
- Interfaçage DHT11 avec Raspberry Pi
À la fin du didacticiel ci-dessus, vous auriez créé un objet sur AWS-IOT et vous devriez également avoir l'adresse du courtier pour votre objet ainsi que les certificats nécessaires pour accéder à votre objet. Nous supposons également que votre Raspberry pi est déjà configuré avec un système d'exploitation et connecté à Internet. Avec ceux-ci en place, procédons au didacticiel. Si vous êtes nouveau sur Raspberry Pi, passez d'abord par Premiers pas avec Raspberry pi.
Installation du kit SDK de périphérique AWS IOT pour Python sur Raspberry Pi:
Pour utiliser le service AWS sur Pi, nous pouvons installer l'un des deux SDK. L'un est le SDK JavaScript qui utilise JavaScript comme langage de programmation et l'autre est le SDK Python qui utilise évidemment le python comme langage de programmation. Ici, nous choisissons Python comme SDK car nous sommes un peu plus à l'aise avec Python qu'avec JavaScript.
Les informations complètes sur AWS IOT SDK sont disponibles sur sa page GitHub.
Étape 1: Pour installer le SDK sur votre Pi, ouvrez le terminal en tapant la commande suivante
git clone
Étape 2: Cela devrait avoir installé le répertoire aws sur votre Pi, accédez-y maintenant à l'aide de la commande suivante.
cd aws - iot -device- sdk -python
Étape 3: Dans le répertoire, installez le fichier d'installation en utilisant la ligne ci-dessous
installation de python setup.py
Schéma:
Côté matériel, nous avons un Raspberry Pi connecté à un capteur DHT11 et à un écran LCD. Le DHT11 est utilisé pour obtenir la valeur de la température et de l'humidité et l'écran LCD est utilisé pour afficher les valeurs et les informations de débogage. Le schéma de circuit correspondant est illustré ci-dessous.
Le capteur LCD et DHT11 fonctionne avec une alimentation + 5V, nous utilisons donc les broches 5V du Raspberry Pi pour alimenter les deux. Une résistance de rappel de valeur 1k est utilisée sur la broche de sortie du capteur DHT11, si vous utilisez un module, vous pouvez éviter cette résistance.
Un potentiomètre de 10k est ajouté à la broche Vee de l'écran LCD pour contrôler le niveau de contraste de l'écran LCD. A part cela, toutes les connexions sont assez simples. Mais notez les broches GPIO que vous utilisez pour connecter les broches car nous en aurons besoin dans notre programme. Le tableau ci-dessous devrait vous permettre de déterminer les numéros de broches GPIO.
Utilisez le tableau et effectuez vos connexions selon le schéma électrique. J'ai utilisé une maquette et des fils de cavalier pour faire mes connexions. Depuis que j'ai utilisé un module, je l'ai connecté directement à Raspberry Pi. Mon matériel ressemblait à ceci ci-dessous
Programmation de votre Raspberry Pi:
Dans notre programme python, nous devons lire la valeur de la température et de l'humidité, l'afficher sur l'écran LCD et également publier les deux valeurs sur l'objet Amazon IOT que nous avons déjà créé dans le didacticiel précédent. Assurez-vous donc que vous avez créé la chose et que vous disposez des trois fichiers clés et de l'adresse du courtier de la chose que vous avez créée.
Dans notre programme python, nous devons lier les trois fichiers clés afin que Raspberry Pi puisse avoir accès pour publier des valeurs sur notre chose. Copiez donc les trois fichiers clés et collez-les sur le bureau de votre Raspberry pi car nous aurons besoin de leur adresse de chemin dans notre programme.
Le programme python complet peut être trouvé au bas de cette page, vous pouvez utiliser le programme après avoir modifié l'adresse du courtier et les répertoires de chemin en fonction de la chose que vous avez créée. Plus loin, j'ai expliqué le code dans de petits extraits.
Nous commençons par importer les bibliothèques nécessaires à notre projet. Les trois bibliothèques principales sont AWS SDK, LCD Library et DHT Library, assurez-vous d'avoir installé les trois sur votre Pi. La bibliothèque d' heure et de date / heure sera installée par défaut.
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient #Import from AWS-IoT Library import time # Pour créer un délai à partir de la date d' importation datetime , datetime #Pour obtenir la date et l'heure importer Adafruit_CharLCD as LCD #Importer la bibliothèque LCD importer Adafruit_DHT #Import DHT Library for sensor
Dans la ligne suivante, nous devons fournir les détails de la chose comme l'adresse du courtier, le nom du client et le chemin d'accès au certificat et aux fichiers de clé. Ici, j'ai utilisé le nom du client comme new_Client, vous pouvez utiliser le même nom ou n'importe quel nom de votre choix. L'adresse du courtier doit être remplacée par l'adresse de l'objet que vous avez créé et le répertoire du chemin doit également être modifié en fonction de votre objet. En dehors de ces 2 choses, vous n'avez rien à changer dans les lignes suivantes.
myMQTTClient = AWSIoTMQTTClient ("nouveau_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ESP32_Trancements" certificats "/ home / pi / Desktop / ESP32_Thing Certificats / private.pem.key", "/ home / pi / Desktop / ESP32_Thing Certificats / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Infinite offline Publish queueing myMQTTClient. configureDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec
Ensuite, nous devons spécifier les détails des broches de notre connexion. Le numéro de broche GPIO de chaque broche est attribué à son nom respectif. Ici, nous avons utilisé le capteur DHT sur la broche 17 et l'écran LCD en mode 4 bits. Le code pour le même est indiqué ci-dessous
sensor_name = Adafruit_DHT.DHT11 # nous utilisons le capteur DHT11 sensor_pin = 17 # Le capteur est connecté à GPIO17 sur Pi lcd_rs = 7 #RS de l'écran LCD est connecté à GPIO 7 sur PI lcd_en = 8 #EN de l'écran LCD est connecté à GPIO 8 sur PI lcd_d4 = 25 # D4 de l'écran LCD est connecté à GPIO 25 sur PI lcd_d5 = 24 # D5 de l'écran LCD est connecté à GPIO 24 sur PI lcd_d6 = 23 # D6 de l'écran LCD est connecté à GPIO 23 sur PI lcd_d7 = 18 # D7 de L'écran LCD est connecté au GPIO 18 sur PI lcd_backlight = 0 #LED n'est pas connecté, nous attribuons donc à 0
Ensuite, nous initialisons l'écran LCD et affichons un petit message d'introduction sur l'écran LCD. Après cela, nous essaierons de nous connecter à l'objet AWS en utilisant l'adresse du courtier et les fichiers de clé saisis ci-dessus. Si la connexion réussit, l'écran LCD affichera « Connected to AWS thing » ou il essaiera pendant 10 secondes et en cas d'échec, il affichera un message d'erreur. Si vous recevez un message d'erreur, assurez-vous que vous avez créé l'objet avec succès et que vous l'avez lié correctement avec le code. Vous pouvez toujours revenir au didacticiel précédent pour voir si vous avez correctement créé l'objet dans AWS.
if time.time () <connection_time: #try connection to AWS for 10 seconds myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection success!" lcd.message ('Connected to \ n AWS thing') #if connected else: print "Error: Vérifiez vos détails AWS dans le programme" lcd.message ('Error: \ nInvalid details') #si non connecté
Une fois la connexion établie avec succès, nous entrons dans la boucle while infinie pour publier la valeur du temps, de la température et de l'humidité en tant que charge utile. La charge utile ici doit toujours être une chaîne au format JSON. Donc d'abord, nous lisons la date et l'heure actuelles et l'enregistrons dans une variable en utilisant les lignes ci-dessous
now = datetime.utcnow () #get date et heure current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #get l'heure actuelle au format chaîne
Ensuite, nous lisons les valeurs d'humidité et de température du capteur DHT11 et les affichons sur un écran LCD. L'humidité et la température variables maintiendront respectivement la valeur d'humidité et de température
humidité, température = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor
et enregistrer les valeurs respectives dans les variables de température et d'humidité
lcd.clear () # Effacer l' écran LCD lcd.message ('Temp =%.1f C'% temperature) # Afficher la valeur de la température lcd.message ('\ nHum =%.1f %%'% humidité) #Affichage la valeur de Humidity time.sleep (2) # Attendez 2 sec puis mettez à jour les valeurs
Comme indiqué précédemment, la charge utile doit être sous la forme d'une chaîne avec des accolades autour d'elle, nous ajoutons la valeur de la date, de l'heure, de la température et de l'humidité après avoir converti la variable en chaînes comme indiqué ci-dessous.
#prepare the payload au format de chaîne payload = '{"timestamp": "' + current_time + '", "temperature":' + str (temperature) + ', "humidité":' + str (humidité) + '}'
Enfin, une fois que la charge utile est prête, nous devons la publier sur le client MQTT. Cela peut être fait à l'aide de la commande myMQTTclient.publish . Lors de la publication sur un objet, nous devons également lui donner un nom, ici je l'ai nommé DHT11 / data mais vous pouvez le nommer comme vous le souhaitez. Mais assurez-vous de vous souvenir du nom car nous devrons nous abonner à notre truc pour voir les données.
Test du programme python via la fenêtre Shell:
Une fois le programme prêt, lancez-le en utilisant votre choix. J'ai utilisé l'IDE Python pour lancer le programme sur la fenêtre shell. Si tout va bien, vous devriez obtenir une connexion de message réussie et toute la charge utile devrait être affichée dans la fenêtre. Vous pouvez vérifier si les valeurs de température et d'humidité sont lues correctement. La charge utile sera mise à jour toutes les 5 secondes. La fenêtre shell ressemblera à ceci ci-dessous
Si vous rencontrez un problème, assurez-vous d'avoir fourni les détails de clé corrects et l'adresse du courtier, vérifiez également que si l'objet peut être connecté à l'aide du logiciel MQTT.fx. Si le shell affiche le succès de la connexion du client MQTT et s'y bloque, cela signifie que le capteur DHT11 ne répond pas, vérifiez si vous vous êtes connecté à la bonne broche et que le capteur est fonctionnel.
Travail:
Une fois que vous lancez le programme et que vous obtenez les détails ci-dessus dans la fenêtre shell, cela signifie que le programme répond correctement et que les valeurs sont téléchargées sur le serveur Amazon AWS. Vous pouvez également remarquer l'écran LCD pour vérifier s'il indique Publié sur AWS-IoT toutes les 5 secondes, comme indiqué ci-dessous.
Nous pouvons entrer dans l'application MQTT.fx et nous abonner à la rubrique DHT11 / data . Ensuite, nous devrions être en mesure d'obtenir toutes les données publiées par le Raspberry Pi. Ces données seront également mises à jour toutes les 5 secondes; votre écran MQTT ressemblera à ceci ci-dessous
Comme vous pouvez le voir, la charge utile est reçue sur le logiciel MQTT comme surligné en bleu. Vous pouvez également regarder la vidéo ci-dessous pour savoir comment fonctionne le projet. Puisque maintenant nous avons nos données sur Internet, nous pouvons les utiliser avec d'autres outils fournis par Amazon comme Elastic search et Lambda pour enregistrer les données dans une base de données ou les visualiser ensuite sur un graphique. Il y a beaucoup plus d'applications, basées sur la façon dont nous devons tirer profit des données.
J'espère que vous avez compris le didacticiel et que vous avez aimé construire quelque chose de similaire, si vous rencontrez un problème pour le faire, postez-le dans la section des commentaires ci-dessous ou utilisez les forums pour obtenir de l'aide technique.