Envoyer une notification sur son téléphone - Niveau facile
Il est assez courant qu'avoir une carte équipée d'un capteur (température, niveau d'eau, ouverture de porte) et que l'on souhaite recevoir sur son téléphone une notification quand un événement se produit. Pour ce faire, il nous faut une carte connectée à internet. Le module ESP8266/32 s'impose pour un projet aussi simple.
Nous allons mettre ce scénario en pratique dans un exemple concret : Nous allons lire la température et envoyer une notification en cas de risque de verglas donc lorsque celle-ci passe en dessous de 3°
Premier montage
Complément : Matériel nécessaire
Une carte ESP8266 ou ESP32. J'utiliserai une Wemos D1 mini pour cet exemple
Un capteur de température DHT22 que l'on trouve seul ou sur carte (ici sur amazon). On peut même le trouver sous forme de shield pour la wemos D1 mini ce qui élimine tout processus de câblage. Ce module est très précis et est parfaitement supporté par MicroPython.
Une breadboard et des fils... et une connexion Wifi !
Pour la notification, nous utiliserons le service en ligne gratuit pushbullet (il faut créer un compte) qui est simple mais très efficace. Il faudra installer sur son smartphone l'application pushbullet (iOS ou android) pour recevoir les notifications.
Méthode : Le montage
Pour le montage, rien de plus élémentaire : On connecte le module DHT22 sur le 3,3V de la carte Wemos (attention, elle fonctionne sur 3,3V et non 5V. Mettre 5V sur ses broches d'entrées-sorties va l'endommager). On connecte la broche de sortie du DHT22 sur la broche D5 de la wemos (par exemple), et le GND sur le GND de la carte.
Méthode : Le code
Le code est pratiquement immédiat car la librairie python gérant le capteur DHT22 est intégrée à la distribution que nous avons installée.
import dht
import machine
import time
d = dht.DHT22(machine.Pin(14))
while True:
d.measure()
print("Temp (C): ",d.temperature())
print("Hum (%) : ",d.humidity())
time.sleep(10)
Complément : Brochage du Wemos D1
Si le code se passe de commentaires, il est nécessaire de préciser l'usage de Pin(14) alors que le capteur est branché sur la broche D5 ! C'est nouveau pour nous car sur CircuitPython, la librairie board masque cette difficulté de traduction de nom des broches. Ici, c'est à nous de savoir que la broche D5 de la Wemos correspond sur l'esp8266 au GPIO14. La commande Pin attend le numéro de broche de l'ESP. Voici un tableau pour s'y retrouver avec le Wemos D1 mini. On y lit bien que D5 correspond à Pin(14).
Broche Wemos | Fonction | Pin sur l'ESP8266 |
---|---|---|
TX | UART Transmit | TXD |
RX | UART Receive | RXD |
A0 | Entrée analogique (max 3.3V) | A0 |
D0 | IO | GPIO16 |
D1 | IO, SCL(I2C) | GPIO5 |
D2 | IO,SDA(I2C) | GPIO4 |
D3 | IO, 10k Pull-Up | GPIO0 |
D4 | IO, 10k Pull-Up, LED intégrée | GPIO2 |
D5 | IO, SCK(SPI) | GPIO14 |
D6 | IO, MISO(SPI) | GPIO12 |
D7 | IO, MOSI(SPI) | GPIO13 |
D8 | IO, 10K Pull-Down, SS(SPI) | GPIO15 |
G | Ground | GND |
5V | 5V (USB) | absent |
3.3V | 3,3V | 3.3V |
RST | Reset | RST |
Pousser une notification via pushbullet
Pour cette partie, vous devrez disposer d'un compte pushbullet (gratuit) et avoir installé l'application pushbullet sur votre téléphone (iOS ou android).
Une fois connecté sur votre espace personnel pushbullet, sous l'onglet Settings / Account, vous devrez récupérer votre jeton d'accès en cliquant sur Create Access Token. Vous obtiendrez une clé API qu'il faudra copier et coller dans votre programme dans la variable API_KEY
Méthode : Le programme
Voici le programme. Il contient le code pour la connexion Wifi. Si dans le paramétrage de MicroPython, vous avez réalisé la connexion dans le boot.py, inutile de vous embarasser de ce code, supprimez-le. Si la connexion n'est pas faite, complétez simplement les paramètres Wifi.
Modifiez la variable API_KEY
avec le jeton d'accès obtenu depuis le site de pushbullet.
import dht
import machine
import time
import network # Si connexion dans ce script
import sys
import json
import urequests
# Connexion Wifi
# Supprimer cette partie si elle est
# faite automatiquement au demarrage de la carte
# dans le boot.py
############################
# Debut configuration Wifi #
############################
WIFI_SSID = 'MON_SSID'
WIFI_PASSWORD = 'MON_PASSWD'
# turn off the WiFi Access Point
ap_if = network.WLAN(network.AP_IF)
ap_if.active(False)
# connect the device to the WiFi network
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
# wait until the device is connected to the WiFi network
MAX_ATTEMPTS = 20
attempt_count = 0
while not wifi.isconnected() and attempt_count < MAX_ATTEMPTS:
attempt_count += 1
time.sleep(1)
if attempt_count == MAX_ATTEMPTS:
print('could not connect to the WiFi network')
sys.exit()
################################
# fin de la configuration Wifi #
################################
# Configuration Pushbullet
PB_URL = "https://api.pushbullet.com/v2/pushes"
titre = "Pushbullet"
corps = "Alerte verglas"
API_KEY = "MON_JETON_D_ACCES_A_COMPLETER"
data_sent = {"type": "note", "title": titre, "body": corps}
pb_headers = {
'Authorization': 'Bearer ' + API_KEY,
'Content-Type': 'application/json'
}
d = dht.DHT22(machine.Pin(14)) # Capteur sur D5
notified = False
while True:
d.measure()
temp = d.temperature()
print(temp)
if temp < 3 and not notified:
print ("Alerte verglas")
# Envoi de la notification
r = urequests.post(PB_URL, data=json.dumps(data_sent), headers=pb_headers)
if r.status_code==200:
print("Envoi de la notification reussi")
# Desarmement des notifications
notified = True
else:
print("Echec de l'envoi")
print(r.reason)
if temp > 15 :
# Rearmement des notifications
notified = False
time.sleep(10)
Complément :
L'envoi de la notification se fait via la librairie urequest - intégrée en standard à Micropython - qui permet de faire une requête http. Il est intéressant d'exploiter la variable de retour r
puisque
r.status
donnera l'état de la requête (200 = succès)r.reason
donnera s'il y a lieu un message d'erreur
Et voilà, vous avez à présent un objet connecté doté d'un capteur, qui peut vous envoyer des alertes personnalisées sur votre smartphone... et le tout pour moins de 10€ !! Les champs d'application sont très vastes : détection d'ouverture de porte, détecteur de fumée intelligent, alarme, capteur d'arrosage de plantes, détection d’inondation etc... tout dépendra du capteur que vous connecterez à la carte. Le code pour la notification, lui, restera identique.
Texte légal : Lien avec le programme SNT
Ce tutoriel s'inscrit totalement dans le cadre du programme SNT dans la partie Objet connecté, dans le paragraphe données et information :« Dans les systèmes informatiques embarqués, l'information provient soit des IHM soit des capteurs, pour contrôler automatiquement ou manuellement le fonctionnement physique par des actionneurs et transmettre des informations aux utilisateurs. Le flux d'informations à travers les IHM permet ainsi une interaction continue entre l'homme et la machine. »