5 minute(s) de lecture

PybStickC3 Je viens de recevoir gracieusement une nouvelle version de la PYBSTICK cette fois à base d’un ESP32-C3, donc elle embarque le WIFI et le bluetooth en plus d’une led RGB au centre, deux boutons poussoirs et des entrées/sorties habituelles sous forme de deux rangées de 13 pins. Cette carte made in France est disponible à l’achat dans le shop de MC Hobby Avec l’ESP32 il est donc possible de programmer la carte en micro-python et d’adapter facilement des projets qui ont besoin du wifi ou du bluetooth. Une très belle présentation de cette carte fait l’objet d’un article complet sur le site Arduiblog que j’encourage à lire pour la configuration.

Je vais m’attarder ici à présenter simplement la configuration du wifi ou du bluetooth en micro-python sous Thonny.

hello world

RGBLed.py

Nous allons dans un premier temps écrire une petite bibliotèque qui va contrôler la LED RGB. Ouvrez un nouveau fichier sous Thonny, copiez-collez le code ci-dessous et sauvegardez-le sur la carte avec comme nom RGBLed.py

#file: RGBLed.py
from machine import Pin
import time
from apa106 import APA106

class RGB_led:
    def __init__(self):
        ''' constructeur '''
        self.on = False #on/off status
        self.rgb_led = Pin(8, Pin.OUT)
        self.ap = APA106(self.rgb_led, 1)
        self.off()
        
    def off(self):
        ''' off led '''
        self.ap[0] = (0, 0, 0) # set the led to RGB
        self.ap.write()
        self.on = False
        
    def color(self, rgb=(64,64,64)):
        ''' switch on led to color rgb '''
        self.ap[0] = rgb # set the led to RGB
        self.ap.write()
        self.on = True
        
    def blink(self, rgb=(64,64,64)):
        ''' switch on/off led to color rgb/off '''
        if self.on:
            self.off()
        else:
            self.ap[0] = rgb # set the led to RGB
            self.on = True
        self.ap.write()

Cette classe va permettre :

  • d’éteindre la led: RGB_led.off(),
  • de la colorer: RGB_led.color(rgb)
  • ou de la faire clignoter avec une certaine couleur RGB_led.blink(rgb)

boot.py

le boot.py est exécuté à chaque boot de la carte: c’est ici qu’on va gérer une connexion WIFI ou un serveur BLE Bluetooth à lancer.

# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()

import time, network
from RGBLed import RGB_led

#wifi setup switch off
station = network.WLAN(network.STA_IF)
station.active(False)

#RGB led setup
led = RGB_led()
led.color((0,0,64)) #blue color

time.sleep(1)

pour le moment on demande à la carte de désactiver le WIFI et de colorier la led en bleue pendant au moins 1 seconde.

main.py

Pour finir, on va modifier le main.py de la carte de cette façon (annule et remplace le main.py existant)

#file: main.py
print()
print('-----------------------')
print('Hello PYBSTICK26-ESP-C3')
print('-----------------------')

# Display connection details
if station.isconnected():
    print("Connected!")
    print("My IP Address:", station.ifconfig()[0])
    led.color((64,0,0)) #green color
else:
    print("connection to wifi failed!")
    led.color((0,54,0)) #red color

Ce petit programme va allumer la led en vert si elle est connectée à un réseau WIFI, sinon elle s’allume en rouge. En rebootant la carte depuis Thonny (cliquez en bas à droite sur MicroPython (ESP32) -> Micropython(ESP32) et elle reboote), la led va s’allumer en bleue pendant 1 seconde puis afficher quelques informations dans le terminal et virer au rouge: normal on a demandé dans le boot d’etteindre le WIFI.

WIFI

Modifions maintenant le boot.py de cette façon afin d’activer le WIFI au boot, et de se connecter à votre réseau. Modifez les deux variables WIFI_SSID et WIFI_PASSWORD avec les noms et mot de passe de connexion à votre wifi. Si l’écriture du code wifi en dur dans le programme vous donne de l’urticaire, il faudra envisager un mécanisme de cryptage avec la bibliothèque binascii.a2b_base64 disponible en micro-python. Je souhaite ici juste donner les bases simples sans alourdir le code.

# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()

############################
# Connexion Wifi
############################
WIFI_SSID = "NOM DE MON RESEAU"
WIFI_PASSWORD = "MON PASSWORD"
MAX_ITERATION = 20

import time, network
from RGBLed import RGB_led

#RGB led setup
led = RGB_led()
led.color((0,0,64)) #blue color

#wifi setup
station = network.WLAN(network.STA_IF)
station.active(True)

print("Scanning for WiFi networks, please wait...")
authmodes = ['Open', 'WEP', 'WPA-PSK' 'WPA2-PSK4', 'WPA/WPA2-PSK']
for (ssid, bssid, channel, RSSI, authmode, hidden) in station.scan():
  print("* {:s}".format(ssid))

#try to connect to WiFi
nb_iteration=0
while not station.isconnected():
    # Try to connect to WiFi access point
    print("Connecting...")
    try:
        station.connect(WIFI_SSID, WIFI_PASSWORD)
    except:
        pass
    nb_iteration+=1
    if (nb_iteration==MAX_ITERATION):
        break
    time.sleep(0.5)
    led.blink((0,0,64))

led.color((0,0,64)) #blue color

Un boot va commencer par scanner tous les réseaux WIFI et tenter de se connecter au vôtre en faisant clignoter la led en bleu. Il y a 20 tentatives de connexions max. Si vous vous trompez dans le nom du réseau ou du password, le boot rend la main au bout de 20 tentatives. C’est tout à fait normal d’avoir quelques tentatives de connexion qui échouent: le WIFI prend un peu de temps pour donner son autorisation. Ensuite le programme main.py reprend la main et va allumer la led en vert s’il a réussi à se connecter au WIFI (en affichant votre adresse IP), sinon elle sera rouge avec les messages d’erreur qui vont bien dans le temrinal.

prochaine étape qui fera l’objet d’un article dédié: faire une nouvelle version de ma petite station météo connectée qui va lire les données météorologique d’une API Web ainsi que les données d’un capteur de température et humidité DHT22

bluetooth

Pour activer le bluetooth c’est complexe à mettre en oeuvre, je vais uniquement montrer comment faire pour installer un serveur BLE bluetooth et un client avec les exemples que j’ai trouvé dans la documentation officielle micro-python.

bilbiotèque aioble

Cette documentation encourage fortement à utiliser la bibliotèque aioble. Pour installer cette blibliothèque sur la carte il faut créer un dossier /aioble et y créer tous les fichiers qui figurent dans le dossier aioble du lien Github ci-dessus.

  • Pour créer un dossier sur la carte depuis Thonny: cliquez sur “Ouvrir”, choisisez “Appareil Micropython” et vous devriez voir au dessus de la taille(octets) un petit menu avec 3 barres horizontales (il est bien planqué …): cliquez dessus et ensuite sur “Nouveau dossier…”
  • une fois le dossier créé, cliquez ensuite sur le gros + vert, copier/coller un des programmes python du répertoire aioble du github, et sauvegardez le fichier sur l’appareil micropython avec exactement le même nom que sur github: recommencez pour tous les 9 programmes.

test client/Serveur

Vous pouvez ensuite prendre l’exemple de la simulation d’un capteur de température temp_sensor.py. Si avec votre téléphone vous scannez les signaux bluetooth (j’utilise l’application android Serial Bluetooth Terminal) vous deviez voir le “mpy-tmp” qui est activé.

Pour le client il faut recopier le programme temp_client.py mais sur une autre carte !

Voilà cette bibliothèque permet d’activer simplement un serveur BLE sur la carte, et de créer le client qu’il faudra exécuter sur une autre carte.