Streaming de données de capteurs par WiFi avec Raspberry Pi Pico W

Raspberry Pi Pico W connecté à un ADXL343

L'une des meilleures utilisations du Raspberry Pi Pico W concerne sa capacité à servir une page web.

Cela signifie que vous pouvez l'utiliser pour surveiller les données des capteurs à partir de votre téléphone, à condition que vous soyez à portée de WiFi.

Ce projet fournira une base simple sur la façon dont vous pouvez surveiller les données d'accélération et également créer un dé numérique, qui est activé lorsque vous touchez le capteur ADXL343.

Vidéo

Pièces nécessaires

  • Planche à pain
  • Câbles de liaison

Qu'est-ce que l'ADXL343 ?

L'ADXL343 d'Analog Devices fait suite à son prédécesseur, l'ADXL345.

Le capteur peut mesurer trois axes de mesure et dispose de quatre réglages de sensibilité, +-2g, +-4g, +-8g ou +-16g. La plage inférieure donne plus de résolution pour les mouvements lents, la plage supérieure est bonne pour le suivi à grande vitesse.

L'ADXL343 dispose également d'une bibliothèque CircuitPython que nous pouvons utiliser dans MicroPython, ce qui facilite grandement le démarrage.

Pour réaliser ce projet, vous devez avoir les connecteurs soudés sur l'ADXL343 ainsi que sur le Pico W.

Connexion de l'ADXL343 au Pico W

Il y a quatre broches que vous devez connecter au Raspberry Pi.

Connectez le VIN à une Sortie 3,3 V sur votre Raspberry Pi Pico W ;

Connectez le GND à une broche de terre sur votre Pico W ;

Connectez le SDA pour GPIO0;

Connectez le SCL pour GPIO1.

Flashing du firmware MicroPython pour le Raspberry Pi Pico W

Tout d'abord, vous devrez flasher le firmware MicroPython sur le Pico W, si ce n'est pas déjà fait.

Vous pouvez le télécharger ici.

Ensuite, appuyez sur le bouton BOOTSEL et maintenez-le enfoncé, puis branchez votre Pico à votre ordinateur. Vous devriez voir apparaître un nouveau lecteur. Copiez le fichier .UF2 que vous avez téléchargé sur ce disque.

Configurer Thonny pour le Raspberry Pi Pico W

Ouvrez Thonny. Si vous ne l'avez pas téléchargé, Obtenez-le ici.

Réglez l'interprète sur MicroPython (Raspberry Pi Pico) en bas à gauche de la fenêtre de l'IDE Thonny.

Copier les bibliothèques sur le Pico W

Téléchargez les bibliothèques et les fichiers ici depuis notre dépôt Github.

Vous pouvez télécharger un fichier ZIP en allant sur ce lien et en cliquant sur le " vert ".Code"et cliquez sur Télécharger ZIP.

Une fois téléchargé, décompressez-le dans un endroit dont vous vous souviendrez.

Ensuite, dans votre IDE Thonny, cliquez sur Vue > Fichiers pour voir votre système de fichiers et celui du Pico W.

Naviguez vers les fichiers dézippés et allez dans le dossier MicroPython > II Pico W Sensor Server. Copiez tout sur votre Pico W en faisant un clic droit sur chaque élément et en cliquant sur "Télécharger vers /".

Modifier le code

Afin de permettre à la Raspberry Pi Pico de se connecter à votre réseau WiFi, vous devez ouvrir le logiciel secrets.py et modifier le ssid et pwde la valeur du mot de passe. Saisissez le SSID (nom) de votre réseau dans le premier champ et le mot de passe dans le second. Sauvegardez le fichier.

Le site index.html est la page web qui sera servie. La ligne "<p>X AccX | Y AccY | Z AccZ</p>" et <p>Résultat DiceVal</p> seront remplacées par les données du capteur lors de l'exécution du projet.

Connectez votre Raspberry Pi Pico au WiFi

Le site main.py c'est là que l'action se passe.

Ces lignes le connectent à votre WiFi. N'oubliez pas de changer la chaîne dans rp2.country si votre pays n'est pas l'Allemagne (DE).


# Définir le pays pour éviter d'éventuelles erreurs
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Si vous avez besoin de désactiver le mode économie d'énergie
# wlan.config(pm = 0xa11140)

# Voir l'adresse MAC dans l'OTP de la puce sans fil
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Autres éléments à interroger
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Chargement des données de connexion à partir d'un fichier différent pour des raisons de sécurité
ssid = secrets['ssid']
pw = secrets['pw']

wlan.connect(ssid, pw)

La LED embarquée clignote trois fois si la connexion WiFi a réussi, grâce à ces lignes de code. Elle imprimera également un message et votre adresse IP qui peut être consultée dans Thonny. Cette adresse IP est utile pour accéder au serveur par la suite.

   led = machine.Pin('LED', machine.Pin.OUT)
    for i in range(wlan.status()) :
        led.on()
        time.sleep(0.2)
        led.off()
        time.sleep(0.2)
    print('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

S'il y a une erreur, la DEL clignote en fonction de la valeur du code d'erreur.

Signification des erreurs

  • 0 = Lien en panne
  • 1 = Liaison avec un lien
  • 2 = Link NoIp
  • 3 = Link Up
  • -1 = échec de la liaison
  • -2 = Lien NoNet
  • -3 = Link BadAuth

Connectez le Pico W à l'ADXL343

Cette ligne initialise un objet I2C :

# Initialiser I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(carte.GP1, carte.GP0)

Ensuite, ces deux lignes créent l'accéléromètre et permettent la détection du tap (pour la lecture des dés).

# Créer un objet Accéléromètre
accéléromètre = adafruit_adxl34x.ADXL343(i2c)

accelerometer.enable_tap_detection()

Temps pour exécuter le code

Pour exécuter le code, appuyez sur le bouton Run dans Thonny, qui est le bouton avec une icône de lecture dans un bouton vert sur la barre d'outils supérieure.

Ensuite, connectez-vous à l'adresse IP de votre Raspberry Pi Pico W. Si le shell de Thonny est ouvert, vous pouvez l'afficher. Sinon, vous pouvez vous connecter à votre routeur et trouver l'adresse IP du Pico W.

Le Pico W exécute un serveur HTTP avec une connexion socket et il écoute les connexions, définies ici :

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

Lorsque vous vous connecterez à l'adresse IP de votre Pico W, il déclenchera ce code qui rafraîchira index.html avec les dernières données toutes les secondes.

   cl, addr = s.accept()
        print('Client connecté de', addr)
        cl_file = cl.makefile('rwb', 0)
        while True :
            ligne = cl_file.readline()
            if not line ou line == b'\r\n' :
                break
            
        response = get_html('index.html')
        data = accelerometer.acceleration
        tapé = accéléromètre.événements['tap']
        response = response.replace('AccX', str(data[0]))
        response = response.replace('AccY', str(data[1]))
        response = response.replace('AccZ', str(data[2]))
        if tapped :
            dice_val = str(random.randint(1,6))
        response = response.replace('DiceVal', dice_val)
        
        cl.send('HTTP/1.0 200 OK\r\nContent-type : text/html\r\r\n\r\n')
        cl.send(réponse)
        cl.close()
main.py remplace les valeurs par la lecture actuelle lorsque vous vous connectez au serveur du Pico W.

Comme vous pouvez le voir, il remplace AccX, AccY et AccZ par les données de votre capteur.

Si le capteur est touché, il imprime un nombre entier aléatoire de 1 à 6 dans la chaîne "DiceVal" de la page HTML.

Quelle est la prochaine étape ?

Ce tutoriel représente une façon simple de transmettre des données de capteur à une page Web.

En fait, c'est le code que vous pouvez utiliser pour d'autres capteurs également.

La méthodologie reste la même. Vous devez trouver les bibliothèques correctes pour vos capteurs, puis modifier les fichiers main.py et index.html afin qu'ils puissent obtenir les données des capteurs et transmettre les bonnes valeurs à la page Web.

Il existe de nombreux autres projets dans lesquels vous pouvez vous lancer, comme un projet de capteur de température et d'humidité avec un DHT22 ou un BME688, ou un capteur de luminosité avec une résistance lumineuse.

1 commentaire

  1. Ken Anderson sur juillet 15, 2022 à 7:24

    Ce serait bien d'utiliser les fonctionnalités du HTML5 pour que nous puissions voir comment le HTML5 est fait.

Laissez un commentaire