PicoHat

Je vous ai déjà parlé en Février du Raspberry Pico, une carte de développement puissante et compacte est proposée par la fondation Raspberry à moins de 5€. Mais je ronchonnais un peu parce que les concepteurs n’ont pas jugé utile d’inscrire les numéros de ports au dessus de la carte (malheureusement, c’est de plus en plus courant avec les cartes de ce format).

Le Raspberry Pico sur une breadboard

Bien sûr, une carte légère et compacte est plutôt pratique si vous souhaitez l’intégrer dans un boitier ou que vous construisez un drone. Mais dans le cadre d’une utilisation pédagogique classique un format légèrement plus grand (de type Raspberry Pi ou Arduino Uno) est nettement plus confortable.

Heureusement, il existe maintenant de nombreuses cartes d’extensions (shield) compatibles avec le Raspberry Pico. J’ai choisi de tester la carte PicoHat de MCHobby parce que le nom des ports est clairement indiqué, que son format reste relativement réduit et qu’elle offre de nouvelles possibilités (HAT Raspberry, connecteur UEXT, Grove, Qwiic/StemmaQT, bouton Reset…).

Ce n’est pas un article sponsorisé puisque j’ai acheté le PicoHat et le Raspberry Pico comme n’importe quel client. Mais Dominique Meurisse et sa femme (qui gèrent la boutique MCHobby) sont des amis et ils soutiennent régulièrement mon travail en m’envoyant gratuitement des produits. Je commence donc ce test avec un apriori positif, cependant je n’ai reçu aucunes instructions de leurs part et si quelque chose me déplait, je n’hésiterai pas à en parler.

Détails de la carte PicoHat

La carte PicoHat est vendue en kit, les connecteurs sont fourni, il suffit simplement d’ajouté un Raspberry Pico (vendu séparément). Si vous possédez un fer à souder et un peu d’expérience, ça ne devrait pas poser de problème. De plus ça permet personnaliser en fonction de vos besoin.

La carte PicoHat en kit

J’ai choisi d’utiliser des connecteurs femelles pour accéder au GPIO et de souder directement le Raspberry Pico au shield PicoHat. J’aurais pu utiliser plutôt les connecteurs males/femelles (ce qui permettrait de retirer le Raspberry Pico), mais cela gênerait l’utilisation des HAT Raspberry (il faudrait dans ce cas ajouter une extension GPIO 40 broches). Mais, compte tenu du prix vraiment réduit du Pico (3,50€), je me suis dit que ce n’est peut être pas si grave d’en « sacrifier » un exemplaire (bien sûr, ce choix vous appartient).

J’ai aussi modélisé un support (pour éviter de rayer mon bureau) et comme d’habitude, vous trouverez le fichier STL sur Thingiverse.

La carte PicoHat soudée et avec un support imprimé en 3D

Test de la carte

J’ai commencé par mettre à jour le fimware du Raspberry Pico avec Thonny (j’explique la procédure dans l’article de février).

Mise à jour du Raspberry Pico (avec Thonny)

Connecteurs classiques (males ou femelles)

Ensuite, j’ai utilisé un petit module Feu tricolore (branché directement sur la carte). Ah, quel plaisir de savoir instantanément dans quel connecteurs je branche mon module (ou mes fils). Bon, j’arrête d’en parler, parce que vous allez finir par penser que je radote…

Module feu tricolore sur la carte PicoHat

Vous pouvez aussi fabriquer vous-même un feu tricolore avec un peu de fil, quelques résistances et quelques LED (les fichiers STL sont disponibles sur Thingiverse) ou simplement reproduire le schéma suivant sur une breadboard (il n’y a pas encore de composant Pi-Hat pour fritzing).

Schéma de branchement du feu tricolore (avec le Raspberry Pico)

Voilà le code correspondant :

# Appel des bibliothèques
from machine import Pin
import time
# Définition des éléments reliés aux ports du Pico
ledRouge = Pin(18, Pin.OUT)
ledOrange = Pin(19, Pin.OUT)
ledVerte = Pin(20, Pin.OUT)
# Boucle infinie
while True:
  # Feu vert
  ledRouge.value(0)
  ledOrange.value(0)
  ledVerte.value(1)
  # Attends 5 secondes 
  time.sleep(5)
  # Feu orange
  ledRouge.value(0)
  ledOrange.value(1)
  ledVerte.value(0)
  # Attends 1 seconde
  time.sleep(1)
  # Feu rouge
  ledRouge.value(1)
  ledOrange.value(0)
  ledVerte.value(0)
  # Attends 5 secondes
  time.sleep(5)

Comme d’habitude, n’hésitez pas à tester, modifier et améliorer ce programme. Vous pouvez bien sûr, utiliser d’autres ports, il faudra simplement en tenir compte dans le code.

Connecteur GROVE (GP8 et GP9)

En sachant que le connecteur Grove est relié aux GP8 et GP9, il est très facile d’utiliser les modules de base (LED, buzzer, bouton poussoir, potentiomètre…).

Module Grove LED sur la carte PicoHat

Voilà par exemple comment faire clignoter une LED.

from machine import Pin
import time
led = Pin(9, Pin.OUT)
while True:
  led.value(1)
  time.sleep(1)
  led.value(0)
  time.sleep(1)

Et ensuite faire varier sa luminosité.

from machine import Pin, PWM
import time
ledPWM = PWM(Pin(9))
while True:
  #incrémentation de 0 à 65026
  for lum in range(0, 65026):
    ledPWM.duty_u16(lum)
    time.sleep(0.0001)
  #décrémentation de 65025 à 0
  for lum in range(65025, -1, -1):
    ledPWM.duty_u16(lum)
    time.sleep(0.0001)

Connecteur GROVE I2C

Il est également possible d’activer le bus I2C(0) puisse qu’il utilise lui aussi les GP8 et GP9 (oui, ce n’est pas un hasard). Il existe de nombreux modules compatibles, mais je vais me contenter d’un afficheur LCD 1602 Grove. Pour permettre au Raspberry Pico de dialoguer avec un module I2C, il faut installer la bibliothèque correspondante. Rendez-vous à l’adresse suivante et téléchargez le fichier LCD1602.py (en faisant un clic droit sur le bouton de la barre du haut et en sélectionnant Enregistrer le contenu lié sous…

Téléchargement de la bibliothèque lcd1602.py

Ouvrez le fichier LCD1602.py avec Thonny (Fichier-Ouvrir…) , connectez le Raspberry Pico. Si un script est en cours d’exécution arrêtez-le en cliquant sur le bouton rouge Stop. Allez dans Fichier-Enregistrer sous…, sélectionnez Raspberry Pi Pico, inscrivez le nom du fichier (lcd1602.py) et cliquez sur OK.

Installation de la bibliothèque lcd1602.py dans le Raspberry Pico

Vous pouvez maintenant ouvrir et modifier le fichier main.py. Si vous possédez la version monochrome de l’afficheur Grove-16×2 LCD, testez le code ci-dessous (qui affiche toutes les secondes la température de la pièce).

from lcd1602 import LCD1602
from machine import I2C,Pin,ADC
from time import sleep
i2c = I2C(0,scl=Pin(9), sda=Pin(8), freq=400000)
d = LCD1602(i2c, 2, 16)
sleep(1)
 
while True:
  # Calcul de la température
  adc = ADC(ADC.CORE_TEMP)
  vadc = adc.read_u16() * 3.3 / 65535
  temp = int (27 - (vadc - 0.706) / 0.001721)

  # Affichage du texte
  d.home()
  d.print('Salut Arduiblog')
  d.setCursor(0, 1)
  d.print('Temperature : ')
  d.print(str(temp))
  sleep(1)

Si vous avez la chance de posséder l’afficheur Grove-LCD RGB, vous pouvez en plus modifier la couleur de l’affichage en fonction de la température. Utilisez donc plutôt le code ci-dessous.

from lcd1602 import LCD1602_RGB
from machine import I2C,Pin,ADC
from time import sleep
i2c = I2C(0,scl=Pin(9), sda=Pin(8), freq=400000)
d = LCD1602_RGB(i2c, 2, 16)
sleep(1)
 
while True:
  # Calcul de la température
  adc = ADC(ADC.CORE_TEMP)
  vadc = adc.read_u16() * 3.3 / 65535
  temp = int (27 - (vadc - 0.706) / 0.001721)
  # Modification de la couleur
  if temp < 19 :
    d.set_rgb(0, 0, 10)
  elif temp < 25 :
    d.set_rgb(25, 25, 10)
  else :
    d.set_rgb(25, 0, 0)
  # Affichage du texte
  d.home()
  d.print('Salut Arduiblog')
  d.setCursor(0, 1)
  d.print('Temperature : ')
  d.print(str(temp))
  sleep(1)

L’affichage fonctionne très bien mais la température indiquée n’est pas correcte.

Afficheur LCD Grove sur la carte PicoHat

En mesurant avec un voltmètre, la tension entre les bornes GND et 3V3, je devrais logiquement obtenir 3,3V. Pourtant j’obtiens seulement 2,26 V. La différence semble minime, mais cela suffit à fausser la mesure de température.

Contrôle de la tension de la carte PicoHat

Pour résoudre le problème modifiez simplement cette ligne

vadc = adc.read_u16() * 3.3 / 65535

En remplaçant la valeur 3.3 par la tension mesurée au voltmètre.

vadc = adc.read_u16() * 3.26 / 65535

Je ne connais pas la température exacte de mon bureau (mes 2 autres thermomètres qui indiquent 23,6° et 24,8°) mais il me semble maintenant que la température mesurée est quand même beaucoup plus plausible.

Correction de la température avec la carte PicoHat

Et les autres connecteurs, alors ?

Je n’ai pas testé les connecteurs UEXT et Qwiic/StemmaQT parce que je ne possède pas de périphériques compatibles.

En ce qui concerne la partie Hat (qui donne son nom à la carte), j’en parlerai dans mon prochain article. Il faudra encore un peu de patience, mais vous ne serez pas déçu parce que je testerai une toute nouvelle carte Hat. Elle a été conçue en étroite collaboration avec l’un des plus grands spécialistes Français de la Framboise…

Conclusion

J’aime beaucoup cette carte, elle est beaucoup plus agréable à utiliser que le Pico seul, pour un peu plus de 10 € (PicoHat + Pico) vous obtenez une carte de développement vraiment très pratique. C’est une très bonne idée de proposer une carte presque sans composants (seulement les connecteurs et un bouton), puisque cela permet de maintenir un prix très bas. J’aurais quand même bien aimé quelques connecteurs Grove supplémentaires ainsi que 2 ou 3 connecteurs pour servomoteurs (quitte à augmenter un peu la taille et le prix de la carte). Mais ce sera peut être pour une prochaine version ?

Sources et liens utiles


3 réflexions sur “PicoHat

Laisser un commentaire