Diffuser des données de capteurs par WiFi avec votre Raspberry Pi Pico W

Tutoriel Raspberry Pi Pico W pour le streaming des données de capteurs

Avez-vous déjà voulu diffuser des données de capteurs avec votre Raspberry Pi Pico W ?

L'une des meilleures utilisations du Raspberry Pi Pico W est 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 tant que vous êtes à 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 créer un dé numérique, qui est activé lorsque vous appuyez sur le capteur ADXL343.

Raspberry Pi Pico W connecté à un ADXL343

Vidéo

Pièces nécessaires

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.

Vous devrez souder les connecteurs sur l'ADXL343 ainsi que sur le Pico W pour pouvoir transmettre des données de capteur en continu avec votre 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).


# Set country to avoid possible errors
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)

# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Load login data from different file for safety reasons
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 :

# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.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).

# Create Accelerometer object
accelerometer = 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 connected from', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\r\n':
                break
            
        response = get_html('index.html')
        data = accelerometer.acceleration
        tapped = accelerometer.events['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\n\r\n')
        cl.send(response)
        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 présente une manière simple de transmettre des données de capteurs vers une page web avec votre Raspberry Pi Pico W.

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.

Vous pouvez vous lancer dans de nombreux autres projets, tels qu'un capteur de température et d'humidité ou un projet de qualité de l'air avec un DHT22 ou un DHT22. BME688ou un capteur de luminosité avec une résistance lumineuse.

7 commentaires

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

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

  2. Terry Young sur septembre 24, 2022 à 6:47 pm

    Les données pourraient-elles simplement être diffusées sous la forme d'une chaîne de caractères sur un port TCP/UDP plutôt qu'au format d'une page Web, de sorte qu'elles puissent être lues par un autre ordinateur (pour fabriquer des jauges ou autre chose) ?
    quelque chose comme
    192.168.1.24:9060
    AccX, 7.923, AccY, 1.093, AccZ, -5.452
    AccX, 6.423, AccY, 1.241, AccZ, -8.769

  3. Ingo sur janvier 10, 2023 à 9:11 pm

    Mal angenommen man hätte einen Pico W, der in einer Dauerschleife läuft und Messwerte erfasst ; wie können diese Messwerte von einem anderen Pico W über WLAN abgefragt werden ?
    Dans votre exemple de code, le Pico W a besoin d'un peu plus d'aide s'il utilise du HTML. En ce qui me concerne, j'ai utilisé des outils tels qu'une application
    "getvaluefromotherpico(192.178.2.44, variablename)" - sprich er soll immer in seiner Schleife laufen und die per WLAN angefragten Anfragen nebenher bedienen, z.B. per Interrupt.
    Wie wäre sowas möglich ?

    Besten Dank und Gruß
    Ingo

    • raspi berry sur février 4, 2023 à 11:51 am

      L'autre Pico peut être utilisé dans une autre situation, et les tâches à accomplir par l'API REST du premier Pico peuvent être exécutées ?
      Je comprends que le problème n'est pas entièrement résolu ?

      Si le projet est un projet commun, nous pouvons devenir des experts en conseil technique 🙂 ...

  4. Luis sur janvier 11, 2023 à 3:30 pm

    cómo puedo mandar esos datos a thinspeak

  5. Eddi Baars sur mars 18, 2023 à 1:02 pm

    guten Tag, ich habe dasselbe Problem. Avec curl ou wget, cela ne fonctionne pas. Je voudrais que les messages du Pico soient affichés sur mon Raspi4 et, plus tard, qu'ils soient présentés sous forme graphique et sous forme de statistiques. ? ??

  6. andrew sur juillet 19, 2023 à 10:31 pm

    pas de module nommé network si on ajoute le module netwrk de thonny il se plaint alors de l'absence de module nommé socket lol

Laissez un commentaire