Les vacances sont là et c’est maintenant le moment idéal pour dépoussiérer les jeux de société pour s’amuser en famille. Mais nous avons un problème. Où sont les dés ? Qu’il s’agisse d’un dé à six faces pour le monopole ou d’un D20 prêt à porter un coup critique, les dés disparaissent.
Dans ce tutoriel, nous allons créer notre propre dé numérique en apprenant à connecter un écran OLED, un SSD1306, à un Framboise Pi Pico via l’interface I2C. Nous déclencherons un lancer de dés en appuyant sur un bouton et, après une courte animation, le lancer s’affichera à l’écran. Pour activer cela, nous allons installer une bibliothèque MicroPython via l’éditeur Thonny et apprendre à l’utiliser pour écrire du texte à l’écran.
L’écran OLED utilise le protocole I2C pour s’interfacer avec le Raspberry Pi Pico. Ce qui signifie que nous n’avons besoin que
Connectez un écran et un bouton OLED au Raspberry Pi Pico
Utilisez le schéma de câblage suivant pour connecter l’écran OLED et le bouton-poussoir au Raspberry Pi Pico.
1. Connectez le GND de l’écran à n’importe quel GND sur le Pico (fil noir).
2. Connectez VCC à 3V3 sur le Pico (fil rouge).
3. Connectez SCK / SCL à I2C0 SCL (GP1, broche physique 2, fil jaune).
4. Connectez SDA à I2C0 SDA (GP0, broche physique 1, fil orange).
5. Connectez le bouton poussoir à la planche à pain.
6. Connectez une jambe du bouton à n’importe quel GND (fil noir), puis connectez la jambe diagonalement opposée à GP28 (Broche physique 34, fil violet).
sept. Connectez votre Raspberry Pi Pico à votre ordinateur et ouvrez l’application Thonny.
Avec le matériel connecté et Thonny ouvert, nous devons maintenant installer une bibliothèque pour que Python puisse communiquer avec l’écran.
8. Cliquez sur Outils > Gérer les packages pour ouvrir le gestionnaire de packages de Thonny pour les bibliothèques Python.
9. Tapez « ssd1306 » dans la barre de recherche et cliquez sur « Rechercher sur PyPI ».
dix. Cliquez sur « micropython-ssd1306 » dans les résultats renvoyés, puis cliquez sur Installer. Cela copiera la bibliothèque dans un dossier, lib sur le Pico.
11. Cliquez sur Fermer pour revenir à l’interface principale.
Programmer un écran OLED sur Raspberry Pi Pico
Pour écrire une seule ligne de texte sur l’écran OLED, nous n’avons besoin que de six lignes de MicroPython.
1. Depuis la bibliothèque de la machine, importer les classes Pin et I2C. Ceux-ci servent à communiquer avec l’écran OLED, rattaché au GPIO du Pico.
from machine import Pin, I2C
2. Importer la bibliothèque d’écrans OLED.
from ssd1306 import SSD1306_I2C
3. Importez randint depuis la bibliothèque aléatoire. Randint est utilisé pour générer des entiers aléatoires (nombres) qui seront utilisés pour nos dés.
from random import randint
4. Importez la bibliothèque de temps.
import time
5. Créer un objet, i2c, qui stocke le canal I2C utilisé, en l’occurrence zéro, les broches SDA et SCL auxquelles nous sommes connectés, et enfin la fréquence à laquelle nous nous connectons à l’écran OLED.
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
6. Créer un objet, oled, qui servira à communiquer avec l’écran OLED. Il a trois arguments : la largeur et la hauteur de l’écran (128 x 32 pixels) et les détails de la connexion I2C. Modifiez la hauteur et la largeur de l’écran pour qu’elles correspondent à votre écran, nous avons utilisé un écran 128 x 32 de 0,96 pouces.
oled = SSD1306_I2C(128, 32, i2c)
sept. Créez un objet, bouton, pour connecter le bouton poussoir à notre code. Nous sommes connectés via GP28, et la broche est une entrée. Nous devons tirer la broche vers le haut, de sorte que, lorsque nous appuyons sur le bouton, elle connecte la broche à GND, tirant efficacement la broche vers le bas et déclenchant un changement d’état.
button = Pin(28, Pin.IN, Pin.PULL_UP)
8. Créez une boucle pour exécuter constamment le code.
while True:
9. Ajouter un test conditionnel pour vérifier l’état actuel du bouton qui lancera les dés. Si le bouton est enfoncé, l’état passera de 1 (Vrai) à 0 (Faux).
if button.value() == 0:
dix. Effacer l’écran OLED de n’importe quel texte.
oled.fill(0)
oled.show()
11. Insérez une boucle for qui sera itérée dix fois. Cette boucle affichera dix nombres choisis au hasard et les placera à des positions aléatoires.
for i in range(10):
12. Écrivez un nombre choisi au hasard, entre 1 et 100, à une position aléatoire sur l’écran. En utilisant une position x (largeur) choisie au hasard (0, 126) et une position y (hauteur) aléatoire (0,24), nous créons un fouillis animé de nombres pour éblouir l’utilisateur et donner l’impression que le Pico pense à de nombreux nombres.
oled.text(str(randint(1,100)),randint(0,126),randint(0,24))
oled.show()
13. Ajoutez un court délai, puis effacez l’écran. Cela donnera à l’animation une impression de nombres brouillés apparaissant sur l’écran. Si nous n’effaçons pas l’écran, il est possible que nous ne voyions pas clairement le jet de dés.
time.sleep(0.2)
oled.fill(0)
oled.show()
14. Créez une variable appelée roll et stockez-y un nombre choisi au hasard entre 1 et 6. Si vous jouez à un jeu qui nécessite une valeur plus élevée, par exemple Donjons et Dragons, remplacez le 6 par la valeur souhaitée.
roll = randint(1,6)
15. Écrivez la variable de roulis sur l’écran OLED. Nous devons convertir l’entier en une chaîne str() afin qu’il puisse être affiché à l’écran. Les deux valeurs, 64 et 16 sont la position (x, y) sur l’écran. Nous les avons placés au centre de notre écran 128 x 32. Pour un écran 128 x 64, remplacez-les par 64, 32.
oled.text(str(roll), 64, 16)
oled.show()
16. Imprimez la valeur de la variable roll dans le shell Python. Ce n’est pas une étape essentielle, mais elle est utile pour déboguer tout problème de connexion avec l’écran OLED.
print(roll)
17. Ajouter une pause de 10 secondes pour garder la valeur de lancer de dés sur l’écran. Puis effacez l’écran il est donc prêt pour le prochain lancer.
time.sleep(0.2)
oled.fill(0)
oled.show()
18. Créez une condition else et ajoutez des lignes pour écrire une instruction à l’utilisateur sur l’écran OLED. Nous avons deux lignes à écrire à l’écran. Le premier commence en haut à gauche (0,0) mais le second doit reculer de 16 lignes pour rester lisible.
else:
oled.text("Press to", 0, 0)
oled.text("roll dice",0, 16)
oled.show()
19. Enregistrez le code sous dice.py sur votre Raspberry Pi Pico et cliquez sur Exécuter pour démarrer le code.
Liste complète des codes
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from random import randint
import time
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)
oled = SSD1306_I2C(128, 32, i2c)
button = Pin(28, Pin.IN, Pin.PULL_UP)
while True:
if button.value() == 0:
oled.fill(0)
oled.show()
for i in range(10):
oled.text(str(randint(1,100)),randint(0,126),randint(0,24))
oled.show()
time.sleep(0.2)
oled.fill(0)
oled.show()
roll = randint(1,6)
oled.text(str(roll), 64, 16)
oled.show()
print(roll)
time.sleep(10)
oled.fill(0)
oled.show()
else:
oled.text("Press to", 0, 0)
oled.text("roll dice",0, 16)
oled.show()