Les plantes d’intérieur ont besoin d’attention et lorsque vous êtes assis à votre bureau en train de travailler, vous oubliez parfois de vous en occuper. Notre patient est « Gary » une succulente Gasteria d’Ikea qui a besoin de très peu de soins, ce qui signifie que j’oublie de l’arroser. Alors, comment le Framboise Pi Pico W m’aider à mieux prendre soin de Gary ?
Les capteurs d’humidité du sol mesurent la conductivité du sol et envoient la valeur au Raspberry Pi Pico W (ou à un autre microcontrôleur) sous forme de tension. Cette tension est lue par une broche GPIO analogique et convertie en une valeur comprise entre 0 et 65535. Plus le nombre est bas, plus le sol est sec. Cela peut ensuite être utilisé comme déclencheur pour envoyer un message.
Dans ce tutoriel, nous apprendrons à prendre une série de lectures de capteurs, à déterminer leur valeur médiane et à l’utiliser pour déterminer si Gary a besoin d’un verre. Gary nous enverra alors un message via un Telegram Bot.
Pour ce projet, vous aurez besoin
Construire le circuit
Le circuit est extrêmement simple. Nous avons un capteur d’humidité du sol connecté à trois broches du GPIO. Les deux premières broches, alimentation 3V3 et GND, fournissent au capteur l’alimentation dont il a besoin.
La troisième broche, Signal, est une broche de sortie qui envoie une valeur au Raspberry Pi Pico. La sortie est une tension que le GPIO correspondant lit comme une valeur comprise entre 0 et 65535. Cette valeur est ensuite utilisée dans le code pour déterminer si la plante a soif.
Le capteur d’humidité du sol se connecte comme suit.
Couleur | Capteur d’humidité du sol | Framboise Pi Pico |
---|---|---|
Rouge | + / CCV | 3V3 (broche physique 36) |
Jaune | S/Signal | GP26 |
Noir | – / GND | N’importe quelle broche Ground / GND |
Configurer un bot de télégramme
Telegram est un service de messagerie instantanée facile à utiliser qui dispose d’un moyen simple et rafraîchissant dans lequel nous pouvons communiquer à partir d’un Raspberry Pi Pico W. À l’aide d’un bot, nous pouvons créer un canal consacré à nos plantes d’intérieur ou même à la sécurité à domicile.
La création d’un Telegram Bot est un processus simple, et heureusement, nous avons The BotFather sous la main pour nous aider.
1. Connectez-vous à votre compte Telegram. Nous avons utilisé le client Windows pour un flux de travail plus facile.
2. Créer une conversation avec BotPère. BotFather est un bot utilisé pour créer et gérer des bots.
3. Créez un nouveau bot à l’aide de la commande /newbot et appuyez sur Entrée. BotFather créera un assistant pour vous guider tout au long du processus de création de bot.
/newbot
4. Notez la clé API, il est nécessaire pour le projet. Sans cela, nous ne pouvons pas communiquer avec le bot en utilisant notre code.
5. Dans Telegram, créez un nouveau chat avec IDBot, demandez votre ID. Notez l’ID.
/getid
Écrire le code
Tout le code du projet est écrit en MicroPython, en utilisant la toute dernière version de MicroPython pour le Raspberry Pi Pico W. Nous utilisons Thonny pour écrire et tester le code directement sur le Raspberry Pi Pico W.
1. Suivez ces étapes pour télécharger la dernière version de MicroPython pour le Raspberry Pi Pico W. Les étapes les plus importantes consistent à télécharger et installer l’image du micrologiciel UF2 et à configurer Thonny. Le reste est facultatif.
2. Ouvrir Thonny et cliquez sur le bouton Arrêter pour rafraîchir la connexion. Cela garantit que Python Shell est ouvert et fonctionne correctement.
3. Créez un nouveau fichier et coller le contenu de ce lien. Enregistrez le fichier sous statistics.py à la racine du Raspberry Pi Pico W. Ce fichier est un module qui contient toutes les fonctions statistiques nécessaires pour sélectionner la valeur médiane dans une liste de données. Le projet a été créé par Roberto Colistete Junior.
4. Créer un nouveau fichier et là-dedans créez quatre objets, SSID, PASSWORD, API et ID.
5. Pour l’objet SSID, attribuez-lui le nom de votre point d’accès / routeur Wi-Fi.
SSID = “YOUR WI-FI AP NAME HERE”
6. Pour le mot de passe, attribuez le mot de passe Wi-Fi.
PASSWORD = “YOUR SECRET PASSWORD”
7. Pour l’API, attribuez la clé API Telegram Bot. Assurez-vous que la clé est à l’intérieur du » « .
API = "YOUR TELEGRAM BOT API KEY"
8. Pour l’ID, attribuez votre ID utilisateur Telegram. Assurez-vous que l’ID est à l’intérieur du » » car cela définira la valeur sous forme de chaîne.
ID = “YOUR USER ID HERE”
9. Enregistrez le fichier sur le Raspberry Pi Pico W sous secrets.py.
SSID = “YOUR WI-FI SSID”
PASSWORD “YOUR WI-FI PASSWORD”
API = “YOUR TELEGRAM BOT API KEY”
ID = “YOUR TELEGRAM USER ID”
dix. Créez un nouveau fichier et importez une série de modules Python.
un. Machine contient les fonctions et les classes nécessaires pour utiliser le GPIO (Pin) et les entrées analogiques (ADC).
b. Temps est utilisé pour ajouter un délai au code.
c. Réseau établit des connexions Wi-Fi.
d. Demandes (micro-requêtes) est une version MicroPython des requêtes utilisées pour envoyer et recevoir des données sur un réseau.
e. Statistiquesun module contenant des fonctions pour effectuer une analyse statistique des données.
F. secretsun module qui contient tous nos détails Wi-Fi et clés API.
from machine import Pin, ADC
import time
import network
import urequests
import statistics
import secrets
11. Créez un objet, un capteur et créez une connexion au capteur d’humidité du sol au GPIO 26. Cet objet définira l’entrée du capteur comme analogique, en utilisant une valeur comprise entre 0 et 65535 pour représenter la conductivité du sol. Plus le nombre est élevé, meilleure est la conductivité.
sensor = ADC(Pin(26))
12. Créez un objet, wlan, et utilisez-le pour vous connecter à votre point d’accès Wi-Fi. La connexion est rendue active, puis en utilisant le SSID et le PASSWORD stockés dans secrets.py, nous nous connectons au point d’accès. Une pause de cinq secondes permet à la connexion de se stabiliser, puis nous imprimons l’état actuel de la connexion. S’il est connecté, nous voyons TRUE, s’il échoue, nous voyons FALSE.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID, secrets.PASSWORD)
time.sleep(5)
print(wlan.isconnected())
13. Créez une liste vide appelée « lectures ». Une liste est également connue sous le nom de tableau et nous l’utilisons pour stocker plusieurs valeurs dans un format facilement lisible.
readings = []
14. Créez la première partie d’une instruction try, except et définissez le code pour qu’il exécute une boucle while True. Try, except est une instruction de gestion des erreurs. Le code essaiera d’exécuter ce qu’il contient, mais s’il y a une exception ou une erreur, il utilisera par défaut une section de code qui s’en occupera.
try:
while True:
15. À l’aide d’une boucle for, collectez cinq lectures du capteur d’humidité du sol et ajoutez chaque lecture à la liste des lectures à des intervalles d’une seconde. Cette section de code lira la broche GPIO connectée au capteur, puis prendra la valeur et la stockera dans la liste. L’impression des lectures est utile pour déboguer tout problème.
for i in range(5):
reading = sensor.read_u16()
readings.append(reading)
print(readings)
time.sleep(1)
16. En dehors de la boucle for, créez un objet, median_value et y stocker la valeur médiane (point médian) de la collection de lectures.
median_value = statistics.median(readings)
17. Utilisez une instruction conditionnelle pour comparer la valeur médiane à une valeur codée en dur. Lors de nos tests, nous avons choisi 400 comme point auquel notre usine de gasteria aurait besoin d’eau. Ajustez cette valeur pour répondre aux besoins de votre plante.
if median_value < 400:
18. Si la plante a besoin d’eau, en utilisant urequests, envoyez un message à Telegram puis imprimez un message au shell Python. Notez que nous utilisons secrets.API pour insérer notre clé API et secrets.ID pour envoyer notre ID utilisateur. Le vrai message est ici sendMessage?text=Gary a soif.
urequests.get("https://api.telegram.org/bot"+secrets.API+"/sendMessage?text=Gary is thirsty&chat_id="+secrets.ID)
print("Message Sent")
19. En utilisant else, la plante détermine qu’elle a assez d’eau et qu’elle n’en a pas besoin pour le moment. Cela déclenche alors un délai d’une heure pour le code.
else:
print("Gary has enough water")
time.sleep(3600)
20. Créez un gestionnaire d’exceptions, conçu pour gérer une erreur du système d’exploitation (pas de connexion Wi-Fi) qui imprime un message sur le shell Python. Les lignes print(“@”*68) créent des bordures décoratives au-dessus et au-dessous du message.
except OSError:
print("@"*68)
print("@ Cannot connect to the Wi-Fi, please check your SSID and PASSWORD @")
print("@"*68)
21. Enregistrez le code sous main.py sur le Raspberry Pi Pico W. Cela forcera le Pico W à charger le code à chaque fois qu’il est rallumé.
22. Redémarrez le Pico W et attendez que vos plantes d’intérieur réclament leur eau !
Liste complète des codes
from machine import Pin, ADC
import time
import network
import urequests
import statistics
import secrets
sensor = ADC(Pin(26))
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID, secrets.PASSWORD)
time.sleep(5)
print(wlan.isconnected())
readings = []
try:
while True:
for i in range(5):
reading = sensor.read_u16()
readings.append(reading)
print(readings)
time.sleep(1)
median_value = statistics.median(readings)
if median_value < 400:
urequests.get("https://api.telegram.org/bot"+secrets.API+"/sendMessage?text=Gary is thirsty&chat_id="+secrets.ID)
print("Message Sent")
else:
print("Gary has enough water")
time.sleep(3600)
except OSError:
print("@"*68)
print("@ Cannot connect to the Wi-Fi, please check your SSID and PASSWORD @")
print("@"*68)