Beau temps avec Raspberry Pi Pico, MicroPython et Visual Studio Code

developer facebook social graph


Il continue avec le voyage à travers Pico-Land. Alors que l'EDI Python Thonny a été discuté dans le dernier épisode, les épisodes actuels et à venir se concentrent sur le développement de Visual Studio Code pour Pico sous Python et C ou C ++.

L'EDI Thonny convient pour débuter avec le langage de programmation Python ou MicroPython ainsi que pour des expériences avec le Raspberry Pi Pico. C'est pourquoi ma suggestion dans l'épisode précédent était un peu irrespectueuse que Thonny ne puisse pas gagner un pot de fleurs avec des développeurs (semi) professionnels. Après tout, c'est un terrain de jeu idéal.

Cependant, un IDE simple ne s'adapte pas à des projets plus importants avec un code plus complexe et plusieurs participants. Les développeurs ont besoin d'outils pour la gestion du code source, d'options de test plus sophistiquées et d'une gestion efficace des ressources telles que les bibliothèques, par exemple.

Ingrédients logiciels requis

Mais d'où l'obtenir et ne pas voler? Les développeurs Python plus exigeants ont besoin de quatre choses pour développer des applications pour le Raspberry Pi Pico sur un hôte Linux, macOS ou Windows, où seuls les systèmes d'exploitation 64 bits sont possibles:

  • la version actuelle du SDK Python,
  • Visual Studio Code (VS Code) en tant qu'environnement de programmation modulaire (voir cet article de blog),
  • Node.js et
  • pour VS Code, une extension appelée Pico-Go. Ceci est un dérivé de l'extension PyMakr de Pycom.

À propos: les propriétaires d'un ordinateur avec Apple Silicon peuvent s'attendre à ce que tous les outils soient également disponibles sous un système basé sur M1.

Autre bonne nouvelle: les applications mentionnées sont disponibles gratuitement.

Pico-Go

Pour l'installation du combo, le développeur de Pico-Go, Chris Wood, fournit déjà une documentation détaillée en anglais son site web. Par conséquent, à ce stade, seulement un résumé approximatif des références pertinentes:

Si tous les packages affichés sont prêts à fonctionner, l'extension Pico-Go de Chris Wood peut être installée dans VS Code.

L'extension Pico-Go aide au développement MicroPython pour le Raspberry Pi Pico sous Visual Studio Code

L'extension Pico-Go aide au développement MicroPython pour le Raspberry Pi Pico sous Visual Studio Code

Le plaisir commence

Tout d'abord, il est conseillé de créer un dossier pour les projets Python, ouvrez-le sous VS Code, avec Ctrl + Maj + p (Windows, Linux) respectivement Commande + Maj + p (Mac) pour charger la palette de commandes dans la commande Pico-Go | Configurer le projet à exécuter via palette. Cela signifie que la complétion de code et la vérification de la syntaxe (Lint) peuvent être utilisées, entre autres.

Dès que les utilisateurs connectent un Raspberry Pi Pico au système hôte, Pico-Go le reconnaît et en informe l'EDI via la barre d'état inférieure.

Désormais, les développeurs peuvent utiliser VS Code pour créer un fichier programme (extension .py) pour y insérer le code source MicroPython. Le programme fini peut être téléchargé à partir du Cours-Exécutez la commande (barre d'état VS Code inférieure!) Sur le Pico, ou utilisez Télécharger Copiez-le sur la carte, après quoi le Pico effectue une réinitialisation, puis le programme démarre automatiquement. Important: avant de télécharger un fichier programme, les développeurs doivent le convertir en main.py renommé, car sinon le Pico abandonnera simplement le programme sans y prêter attention.

Le projet d'exemple "Heise Wetter"

Après avoir installé et configuré le Pico-Go avec succès, il est temps de passer au sujet réel, un projet intégré pour le Pico. Avec l'aide du capteur BME280, une petite station météo doit être créée qui mesure périodiquement la température, l'humidité et la pression atmosphérique.

Le capteur météo BME280 forme le cœur du circuit

Le capteur météo BME280 forme le cœur du circuit

Idée de base: Le Pico est utilisé pour accéder au capteur BME280, qui est responsable de l'enregistrement des valeurs mesurées pour la température, l'humidité et la pression atmosphérique. La station météo affiche les valeurs correspondantes sur l'écran du SSD1306. En même temps, il existe une règle codée sur le «climat» actuel. Si les valeurs sont dans la plage confortable, le programme active la LED verte. Si l'humidité et la température dépassent votre propre zone de confort, la LED rouge s'allume. Si les valeurs se situent entre les deux, l'application le signale via la LED jaune. Cette règle est codée comme une fonction distincte et peut être adaptée en conséquence. La durée entre les requêtes (TEMPS DE SOMMEIL est configurable).

L'écran OLE bon marché avec une résolution de 128 x 64 pixels est suffisant pour l'objectif prévu

L'écran OLE bon marché avec une résolution de 128 x 64 pixels est suffisant pour l'objectif prévu

Incidemment, placer un doigt sur le BME280 peut provoquer une forte augmentation de la température et de l'humidité. À cet égard, la règle climatique peut être testée manuellement.

Matériel BoM (nomenclature)

Pour le projet, nous avons besoin de la liste de pièces suivante:

  • Raspberry Pi Pico: env. 5 euros
  • Deux rangées de 20 broches d'en-tête: env. 0,50 euros
  • Planche à pain pour 3,50 euros
  • Câble pour connecter le Pico Micro-USB à l'interface USB de l'hôte: env. 3 euros
  • Une LED rouge, une jaune et une verte chacune: env. 0,30 euros
  • 3 résistances (par exemple 120 ohms, 150 ohms ou 220 ohms): env. 0,10 euros
  • Carte de dérivation Bosch Sensortec BME280 avec bus I2C: env. 6 euros
  • Écran OLED SSD1306 avec 128×64 pixels et bus I2C: env. 6 euros
  • 14 connexions fil de liaison mâle à mâle: env. 5 euros par pack de 120

Total: env. 29 euros

Si vous frappez les suspects habituels en Chine, vous pouvez réduire encore davantage le prix d'achat.

Le circuit

Sur le schéma de circuit dessiné avec Fritzing, l'écran OLED SSD1306 avec une résolution de 128×68 pixels est affiché en bas à droite et le capteur environnemental BME280 en haut à droite. Les deux sont connectés au bus I2C du Pico, SDA est sur la broche 6 (= GPIO 4) et SCL sur la broche 7 (= GPIO 5). GPIO signifie General Purpose IO.

Le circuit de la station météo sous forme de diagramme de Fritzing

Le circuit de la station météo sous forme de diagramme de Fritzing

Attention: les broches physiques n'ont aucune relation directe avec leur désignation logique. La broche physique 6 correspond par exemple à la broche logique GPIO 4, la broche physique 25 à la broche logique GPIO 19. Dans les applications pour le Pico ou une autre carte Raspberry Pi, les noms logiques sont généralement signifiés.

  • Les composants sont alimentés par le Pico avec 3,3 V via sa sortie Vcc (broche 36) et l'un des différents ports GND (dans le schéma: broche 38).
  • La broche 25 (rouge), la broche 26 (jaune) et la broche 27 (verte) sont fournies pour connecter les LED via une résistance de 150 ohms chacune. Cela correspond aux ports GPIO 19, 20 et 21.

La disposition des broches du Pico. Attention: les broches logiques ne sont pas les mêmes que les broches physiques

La disposition des broches du Pico. Attention: les broches logiques ne sont pas les mêmes que les broches physiques

Sur ce, tout ce qui est essentiel sur le circuit a déjà été dit.

La programmation

Passons au logiciel. Dans la première étape, un pilote pour l'écran OLED SSD1306 est requis. Stefan Lehmann du Kunststoff-Zentrum Leipzig l'a déjà mis en œuvre. Le conducteur est accessible via son Page Github importer.

Pour le contrôle du BME280 de Bosch, j'ai examiné de près quelques exemples d'implémentations et les ai codés comme modèle pour mon propre pilote. À cette fin, Bosch Sensortec fournit un document utile sur le capteur sur son site Internet à l'élimination.

En plus de la température (en degrés Celsius) et de l'humidité (en pourcentage), le capteur mesure également la pression de l'air (en mbar ou HectoPascal). Si vous pouvez vous passer de la mesure de l'humidité, vous devriez utiliser la variante moins chère BMP280. Ce capteur peut parfois être acheté sur Internet pour moins d'un euro.

J'ai fourni le code sur une page Github afin que personne n'ait à taper laborieusement dans l'exemple de programme ou à le couper avec un copier-coller. Voici le lien pour le référentiel GitHub.

Dans ce qui suit, quelques fragments importants sont principalement discutés, qui sont utiles pour la compréhension.

Certaines bibliothèques sont nécessaires à la mise en œuvre du programme, la plupart à partir des SDK Pico ou Micropython. Comme déjà mentionné, la bibliothèque de contrôle de l'affichage OLED se trouve sur GitHub.

à partir de la broche d'importation de la machine, I2C    # Nous avons besoin de la broche et de l'I2C du Pico
depuis micropython import const
depuis ustruct import unpack comme unp
à partir de l'importation ssd1306 SSD1306_I2C # Module pour SSD1306
import utime # Bibliothèques à deux temps
temps d'importation

La fonction est utilisée pour décider si le temps est bon, mauvais ou moyen état (). Celui-ci contient sa propre règle que chacun peut changer pour lui-même:

# - État ----------------------
COND_RED = 1 # Mauvais climat
COND_GREEN = 2 # Conditions climatiques confortables
COND_YELLOW = 3 # Moyen climat
# ----------------------------------

ComfortZoneTemp = (15,25) # Ma zone de confort pour la température est comprise entre 15 et 25 degrés
ComfortZoneHumi = (10,40) # Ma zone de confort pour l'humidité se situe entre 10 et 40%
#
condition def (température, humidité, pression):
niceTemperature = temperature> = ComfortZoneTemp (0) et température <= ComfortZoneTemp (1)
niceHumidity = humidité> = ComfortZoneHumi (0) et humidité <= ComfortZoneHumi (1)
si niceHumidity et niceTemperature:
retourne COND_GREEN
elif (niceHumidity! = niceTemperature): # XOR
retour COND_YELLOW
autre:
retour COND_RED
L'application initialise le bus I2C pour accéder au BME280 et au SSD1306: #

L'application initialise le bus I2C pour accéder au BME280 et au SSD1306:

sda = Pin (4) # BME280 et SSD1306 sont connectés aux GPIO 4 et 5
scl = broche (5)
i2c = I2C (0, sda = sda, scl = scl, freq = 400000) # bus I2C 0
i2c_addr_bme = 0x76 # Je suppose que le BME280 est à 0x76

Les voyants sont situés sur les ports GPIO 19, 20, 21:

GreenLED  = Pin (21, Pin.OUT) # LED verte sur GPIO 21
YellowLED = Pin (20, Pin.OUT) # LED jaune sur GPIO 20
RedLED = Pin (19, Pin.OUT) # rouge LED sur GPIO 19

La variable TEMPS DE SOMMEIL définit le temps entre deux mesures:

SLEEPTIME = 5

Derrière la classe BMX280 le pilote du capteur environnemental est masqué. Leur constructeur effectue un certain nombre d'initialisations. La méthode intéresse principalement les utilisateurs mesurer ()car il renvoie la pression, l'humidité et la température.

classe BMX280:
# Les membres de données primaires et les constantes sont utilisés dans le constructeur
def __init __ (soi, i2c, i2c_addr_bme)
mesure def (auto)
# ... diverses méthodes auxiliaires ...

Le logiciel principal recherche d'abord les capteurs et les actionneurs sur le bus I2C – en option, car cela dépend de l'affectation de la variable booléenne déboguer.

si débogage:
print (`` J'ai découvert des composants sur le bus I2C aux adresses suivantes: '')
périphériques = i2c.scan ()
si appareils:
pour i dans les appareils:
imprimer (hex (i))
utime.sleep_ms (2000)

S'applique debug == Vrai, l'écran est émis sur le terminal de l'IDE à d'autres points.

L'application initialise ensuite les pilotes pour SSD1306 (classe SSD1306_I2C) et BME280 ou BMP280 (classe BMX280).

Dans la boucle principale, le code se lit mesurer () les valeurs météorologiques, active la LED rouge, verte ou jaune en fonction des valeurs mesurées et affiche les valeurs sur l'écran OLED. Après une période d'attente, le passage au prochain tour de mesure suit:

oled = SSD1306_I2C (128,64, i2c)
bme = BMX280 (i2c = i2c, i2c_addr_bme = i2c_addr_bme)

oled.fill (0)
oled.show ()

# BOUCLE PRINCIPALE #
tandis que Vrai:
température, humidité, pression = bme.measure ()
# ......................
currentState = condition (température, humidité, pression)
si currentState == COND_GREEN:
GreenLED.valeur (1)
YellowLED.value (0)
RedLED.value (0)
si débogage:
print ("Climat agréable")
elif currentState == COND_YELLOW:
GreenLED.value (0)
YellowLED.value (1)
RedLED.value (0)
si débogage:
imprimer ("OK")
elif currentState == COND_RED:
GreenLED.value (0)
YellowLED.value (0)
RedLED.valeur (1)
si débogage:
print ("Climat déplaisant")
# ......................
oled.fill (0)
oled.text ("Heise Wetter", 5, 10)
# Sortie formatée avec 7 chiffres avec 2 décimales
oled.text (str (& # 39;% 7.2f & # 39;% température) + "degrés", 5.20)
oled.text (str (& # 39;% 7.2f & # 39;% humidité) + "%", 5.30)
oled.text (str (& # 39;% 7,2f & # 39;% pression) + "HPa", 5,40)
# Et maintenant révélez
oled.show ()
utime.sleep (SLEEPTIME) # Veille jusqu'à la prochaine mesure

La configuration expérimentale terminée et fonctionnelle ressemble à ceci:

Le projet fini dans une structure prototype

Le projet fini dans une structure prototype

Conclusion

L'exemple de projet a donné un premier aperçu de la programmation MicroPython du Pico sous Visual Studio Code. Un problème qui est encore évident à l'heure actuelle est le manque de modules pour contrôler certains composants, en particulier les cartes de dérivation et les capteurs plus complexes. Étant donné que le Pico est encore très nouveau, cela est susceptible de changer dans les prochains mois, créant un écosystème aussi large que c'est le cas avec Arduino, Espressif (ESP32, ESP8266), les ordinateurs monocarte Raspberry Pi, Adafruit, Sparkfun et ST La microélectronique est déjà le cas.

Il existe bien sûr différentes options d'optimisation pour l'exemple illustré, telles que:

  • Le programme ne se soucie pas de l'efficacité énergétique. Si vous souhaitez exploiter une station météo indépendamment du réseau électrique, vous pouvez, par exemple, utiliser les différentes options de couchage du Pico et les composants utilisés.
  • Le circuit peut être encore étendu, par exemple en ajoutant des capteurs pour la détection des orages, de la pluie, de l'humidité du sol, de la qualité de l'air, de la poussière fine et du CO2-Fardeau.
  • En plus du BME280, il existe de nombreuses alternatives qui peuvent être utilisées pour les mesures météorologiques, par exemple le DHT22.
  • Certaines cartes de dérivation pour BME280 ou SSD1306 utilisent le bus SPI au lieu du bus I2C, ce qui nécessite un câblage différent.
  • Des écrans autres que le SSD1306 monochrome seraient également envisageables, tels que des écrans avec une résolution plus élevée et / ou des couleurs multiples, à condition qu'un logiciel pilote approprié soit disponible ou ait été développé en interne.
  • Au lieu du BME280, le nouveau capteur BME680 pourrait également être utilisé, mais cela a un impact sur le prix. Dans ce cas, les coûts sont d'environ 20 euros. De plus, je n'ai pas encore découvert de pilote pour cela. L'avantage du BME680 serait le calcul de la qualité de l'air.

Les lecteurs intéressés ont encore suffisamment d'occasions de se défouler.

L'objectif de cet article était MicroPython. Au fait, CircuitPython (développé par Adafruit) existe également comme alternative, mais nous ne continuerons pas à en parler, car les différences conceptuelles sont plutôt marginales. Le prochain épisode concerne la programmation en C ou C ++.

D'ici là, amusez-vous à faire des photos.



Source link

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *