Utilisez le service Anvil IoT pour collecter les données de votre Raspberry Pi Pico W

Utilisez le service Anvil IoT pour collecter les données de votre Raspberry Pi Pico W

Anvil est un site Web de création d’applications Web qui vient de lancer un nouveau « IoT Toolkit » pour le Raspberry Pi Pico W appelé Pico Uplink. En téléchargeant leur image UF2 (basée sur MicroPython), vous pourrez envoyer des données sur leur site, puis créer votre propre tableau de bord pour afficher les données qui ont été collectées.

Que fais-je?

Tout d’abord, jetez un oeil à leur article de blog d’annonce. Cela vous donnera une bonne indication de la pertinence de leur offre pour ce que vous essayez de faire. Après ça, jetez un oeil à leur page Pico ici.

Vous devrez vous inscrire à Anvil – c’est gratuit pour commencer, mais il y a Plans tarifaires à consulter si vous allez l’utiliser dans la colère.

Les étapes suivantes font partie de leur Guide de démarrage. J’écrirai mes observations au fur et à mesure.

Obtenir le micrologiciel

Une fois que vous avez confirmé votre adresse e-mail, vous devrez télécharger leur firmware UF2 pour le Pico W.

Assurez-vous de télécharger d’abord l’UF2 « complet », puis la version du micrologiciel uniquement après avoir commencé à écrire votre code personnalisé.

Mettez votre Pico W en mode chargeur de démarrage (tirez le câble d’alimentation, appuyez sur BOOTSEL puis rebranchez-le), puis faites glisser le fichier UF2 sur votre « lecteur » Pico.

Fait intéressant, cela vous donne un lecteur PICO_W affichant le code. C’est ainsi que fonctionne CircuitPython, il est donc intéressant de voir cette variante de MicroPython faire cela aussi. Normalement, vous ne pouvez y accéder qu’en utilisant Thonny, mais il semble que vous puissiez accéder aux fichiers via votre explorateur de fichiers. Pour l’instant, nous allons simplement utiliser Thonny et voir comment nous allons !

Maintenant, nous allons utiliser le Éditeur d’enclume pour construire notre « application ». Ceci utilise la version bêta de leur nouvelle version, il sera donc intéressant de voir si cela fonctionne ! ?

Comme indiqué, j’ai créé une application vierge en utilisant le thème Material Design.

J’ai cliqué sur l’icône +, choisi Uplink, puis cliqué sur Enable server Uplink. Cela m’a donné une longue clé de liaison montante. Je l’ai copié et collé dans main.py sur le Pico W pour le conserver en toute sécurité. Plus tard, je pense que je voudrai le mettre dans un fichier de configuration et utiliser un fichier .gitignore pour qu’il soit caché de GitHub.

Pour l’instant, j’ignore les exemples Python, mais cela pourrait être potentiellement déroutant si vous n’utilisez pas Python complet pour voir cela !

Connexion au Wi-Fi et à Anvil

Comme indiqué, j’ai ouvert boot.py et mis mon SSID et mon mot de passe Wi-Fi. (Cela m’a posé un dilemme car mon wi-fi est un peu inégal au bureau !)

Ayant déjà mis ma clé Uplink dans boot.py, je savais que j’étais prêt à partir.

J’ai coupé le courant puis je l’ai réinséré. La LED est devenue fixe puis a clignoté rapidement. C’est, selon les instructions, ce que je cherchais car cela signifie que la connexion wi-fi et l’Anvil Uplink fonctionnent tous les deux.

Si vous souhaitez réexécuter le code dans Thonny, assurez-vous que vous êtes sur main.py lorsque vous appuyez sur F5, car le faire avec boot.py signifie qu’il ne « passe pas à autre chose ».

Créer un bouton d’action

Dans l’éditeur Anvil, j’ai fait glisser un bouton dans la fenêtre principale et lui ai donné le code comme indiqué :

def button_1_click(self, **event_args):
  """This method is called when the button is clicked"""
  anvil.server.call('pico_fn', 18) # Choose any number you like!

J’ai ensuite exécuté l’application Anvil, cliqué sur le bouton sur le côté droit et j’ai vu la LED intégrée du Pico clignoter rapidement ! C’est excitant – clairement le Pico W interroge Anvil d’une manière ou d’une autre pour voir si quelque chose a été cliqué pour activer le code.

Publication de l’application

Je veux cela sur le Web en tant qu’application publique. J’ai cliqué sur Publier, puis j’ai choisi d’obtenir une URL publique. Il m’a donné l’URL, bizarrement et au hasard : https://big-tinted-jump.anvil.app. Apparemment, vous pouvez changer cela en quelque chose d’autre si vous le souhaitez, ce qui est bien.

J’ai ensuite accédé à cette URL publique et, ô surprise, le bouton fait clignoter ma LED Pico W.

Et ensuite ? Affichage des données de l’Internet des objets !

Eh bien, c’est intéressant et simple, mais ce n’est pas vraiment « l’Internet des objets » tel que je le comprends. Pour cela, j’ai besoin de capteurs pour envoyer des données à Anvil, les stocker là-bas et les afficher sur un tableau de bord.

Heureusement, le Pico dispose d’un capteur de température intégré. Maintenant, ce n’est pas génial pour prendre la température de l’air ambiant, mais cela vous donnera une lecture de la température de la planche elle-même. Voici le code :

from machine import ADC

sensor = ADC(4)
conversion_factor = 3.3 / 65535
temp_reading = sensor.read_u16() * conversion_factor
real_temperature = 27 - (temp_reading - 0.706) / 0.001721
print(real_temperature)

Donc, j’ai ajouté cela à mon main.py et il a imprimé 29,85… ce qui est une lecture, ignorant la précision pendant un moment.

Comment faire parvenir cela à Anvil ?

Tout d’abord, dans la base de données par défaut, j’ai créé une nouvelle table appelée temperature_readings avec trois champs : source, temperature_reading et reading_date_time.

Ensuite, j’ai ajouté un nouveau module serveur et écrit une nouvelle fonction basée sur la page Conseils avancés.

@anvil.server.callable
def record_temperature(source, temperature_reading):
  app_tables.temperature_readings.add_row(source=source, temperature_reading=temperature_reading, reading_date_time=datetime.now())

Cela devrait, si j’ai raison, être une fonction qui enregistre dans la nouvelle table tout ce que je lui demande. J’ai inclus la colonne « source » afin de pouvoir stocker plusieurs capteurs de température dans le même tableau. J’espère que c’est l’approche d’écriture!

J’ai ensuite créé un bouton qui appellerait le Pico et lui dirait d’obtenir les données du capteur de température du Pico et de les mettre dans un tableau :

def button_1_click(self, **event_args):
  anvil.server.call('record_visitor')

C’est génial, bien sûr, mais ce que je veux vraiment, c’est que le Pico pousser les données à Anvil, pas le faire « sur demande ».

Donc je pense ce dont j’ai besoin, c’est d’une sorte de planificateur du côté d’Anvil pour sondage le Pico. Voyons, que puis-je trouver avec un rapide Google :

Ah. Tâches planifiées. À la lecture de la page, il est clair que c’est ce que je veux – interroger un capteur à l’aide de la fonctionnalité Uplink. MAIS!

Les tâches planifiées sont disponibles sur le Régime personnel et ci-dessus. 10 £ par mois. Oh. Je suppose que je ne pourrai pas alors ! Tant pis. C’est utile, alors, si vous voulez juste interroger sur demande, mais pas pour collecter des données… Du moins, pas à moins que vous ne payiez.