Le 8 $ Raspberry Pi Pico W est une merveilleuse petite planche. Pendant la pénurie mondiale de puces, il a bouché un trou assez grand en forme de Raspberry Pi dans le Inventaire Raspberry Pi et a fourni aux créateurs une plate-forme IoT (Internet des objets) peu coûteuse et facile à utiliser. Bien sûr, ce n’est pas le premier microcontrôleur connecté à Internet (nous pouvons discuter de cet honneur dans les commentaires) mais pour beaucoup Tarte aux framboises fans, c’était leur premier pas dans le monde merveilleux des microcontrôleurs.
Alors que le Raspberry Pi exécute un système d’exploitation Linux complet, le Raspberry Pi Pico W s’appuie sur un micrologiciel pour fournir une couche sur laquelle nous pouvons écrire notre code. MicroPython est l’un des langages officiellement pris en charge et a connu de nombreuses améliorations pour s’adapter au Raspberry Pi Pico. Une amélioration a été l’inclusion d’urequests (micro requêtes) qui permettent à notre Pico W d’envoyer et de recevoir des requêtes HTTP.
Dans ce guide pratique, nous allons utiliser urequests avec ntfy.sh, un service et une application gratuits pour les appareils Android et Apple qui peuvent intercepter les messages des appareils IoT et les afficher sur votre appareil. Nous allons l’utiliser pour envoyer des alertes à notre téléphone portable Android, alertes déclenchées par un capteur PIR (Passive Infrared) qui détecte les mouvements dans une pièce.
Ntfy.sh est un service remarquablement efficace et simple. Au lieu d’installer un module Python/MicroPython spécifique, il fonctionne avec les requêtes d’envoi de messages depuis le Raspberry Pi Pico W en utilisant un sujet spécifique (très similaire au fonctionnement de MQTT). Notre appareil Android/iOS est abonné à ce sujet et reçoit les notifications du Pico W.
Nous sommes limités à l’envoi de texte sur le Raspberry Pi Pico W, mais ce projet peut également être utilisé avec les SBC Raspberry Pi et la caméra officielle Raspberry Pi pour envoyer des images (ou toute autre forme de pièce jointe) lorsqu’un événement se produit. Dites si un oiseau se nourrit de votre mangeoire à oiseaux ou si quelqu’un se trouve dans votre jardin. Pour un exemple sur la façon d’utiliser des images avec ntfy.sh, jetez un œil à notre comment utiliser les dictionnaires Didacticiel.
Construire le circuit
Le circuit de ce projet est incroyablement simple, volontairement. Il n’y a que trois connexions entre le capteur PIR et le Raspberry Pi Pico.
Couleur du fil | Framboise Pi Pico | PIR |
Rouge | 5V (VBUS) | VCC |
Jaune | GPIO16 | DEHORS |
Noir | GND | GND |
Connectez les fils entre le Pico et le capteur PIR avant de continuer.
Codage du projet
1. Installer ntfy.sh pour votre appareil Android/iOS.
2. Ouvrez l’application et cliquez sur + pour créer un nouvel abonnement.
3. Créez un nouveau sujet et cliquez sur S’abonner. Nous avons choisi d’utiliser le test. Créez un sujet qui vous est personnel. Notez également que les sujets peuvent ne pas être protégés par mot de passe, n’envoyez donc pas de données sensibles.
4. Laissez l’application ouverte sur votre appareil.
Passons maintenant au codage du Raspberry Pi Pico W.
5. 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 firmware UF2 et à configurer Thonny. Le reste est facultatif.
6. Ouvrir Thonny et cliquez sur le bouton Arrêter pour rafraîchir la connexion. Cela garantit que Python Shell est ouvert et fonctionne correctement.
7. Créez un nouveau fichier vierge.
8. Importez le module réseau, puis importez les urequests, en le renommant en requêtes. Le module réseau permet à notre Pico W de se connecter à Internet. Urequests est une version MicroPython du module de requêtes de Python que nous utiliserons pour envoyer un message depuis le Pico W. Urequests est désormais préinstallé sur la dernière version du firmware UF2.
import network
import urequests as requests
9. Importez la fonction de veille à partir de l’heure et épinglez depuis la machine. La fonction sleep sera utilisée pour ajouter une pause au code du projet. Le module machine contient des fonctions et des classes qui permettent à notre code de contrôler et de lire les broches GPIO.
from time import sleep
from machine import Pin
dix. Créez un objet, pir, et utilisez-le pour créer une connexion à la broche de sortie PIR du GPIO 16. La broche doit être définie comme entrée, et nous devons tirer la broche GPIO vers le haut (3 V) afin que lorsque le PIR est déclenché, le signal tire la broche vers le bas.
pir = Pin(16, Pin.IN, Pin.PULL_UP)
11. Créez un objet, wlan, pour représenter la connexion Wi-Fi, puis activez le Wi-Fi et connectez-vous à votre point d’accès Wi-Fi.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
12. Ajoutez un délai de trois secondes après avoir établi la connexion Wi-Fi. Ce n’est pas strictement nécessaire, le processus de connexion est un « bloqueur », ce qui signifie qu’il doit être terminé avant de pouvoir passer à cette ligne. Mais nous avons eu plus de chance de nous connecter lorsqu’il y a une pause que sans.
sleep(3)
13. Imprimez l’état de la connexion Wi-Fi. Vrai signifie que nous sommes connectés, Faux signifie que nous ne le sommes pas.
print(wlan.isconnected())
14. Créez une boucle while True et utilisez-la pour imprimer l’état actuel de la broche PIR GPIO. Nous avons défini la broche comme étant haute (tirée vers le haut) dans notre code, la valeur doit donc être 1.
while True:
print(pir.value())
15. Créez une instruction conditionnelle qui vérifie si le capteur PIR a été déclenché.Le déclenchement du capteur forcera la broche GPIO connectée à la broche de sortie du capteur à passer au niveau bas (0) et notre code recherche ce changement.
if pir.value() == 0:
16. Utilisez des requêtes pour publier un message sur ntfy. Notez que nous devons spécifier le nom du sujet, dans notre cas https://ntfy.sh/th-test, dans le cadre de l’argument de la fonction. L’argument suivant, data, est le message que l’utilisateur verra.
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
17. À l’intérieur de la demande, spécifiez des « en-têtes » qui incluent un titre pour la notification. Une priorité (5 étant la priorité la plus élevée) et des tags, qui permettent d’ajouter un emoji gyrophare.
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
18. Imprimez un message sur le shell Python. Ceci est uniquement à des fins de débogage.
print("Movement detected, notification sent")
19. Ajouter une autre condition qui utilise simplement pass pour laisser le code boucler.
else:
pass
20. Ajoutez un délai au code, à l’intérieur de la boucle while True, mais en dehors des tests conditionnels. Ce délai peut être de 10 secondes ou heures. Tout dépend de la fréquence à laquelle vous souhaitez être alerté.
sleep(10)
21. Enregistrez le code sur le Raspberry Pi Pico sous alarm.py et cliquez sur Exécuter pour démarrer. Si vous souhaitez que ce code s’exécute automatiquement au démarrage du Pico W, enregistrez le fichier sous main.py. MicroPython est configuré pour exécuter main.py chaque fois que la carte est sous tension.
22. Placez votre main devant le capteur pour déclencher l’alerte.
23. Votre appareil Android/iOS recevra une notification.
Liste complète des codes
import network
import urequests as requests
from time import sleep
from machine import Pin
pir = Pin(16, Pin.IN, Pin.PULL_UP)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
sleep(3)
print(wlan.isconnected())
while True:
print(pir.value())
if pir.value() == 0:
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
print("Movement detected, notification sent")
else:
pass
sleep(10)