Micropython et ESP32
L'environnement de développement Thonny
On peut utiliser Micropython en mode console dans un terminal, mais la programmation avec l'IDE Thonny sera beaucoup plus conviviale.
Il faut tout d'abord installer Micropython sur l'ESP 32, avec un ordinateur sous windows, suiver la procédure décrite sur le site :
UPESY
Après avoir vérifié que Micropython est bien sur L'ESP 32 et installé Thonny, il faut faire quelques réglages simples.
Un voltmètre avec bargraphe
J'utilise une platine ESP32 DEVKIT, mais cela peut fonctionner avec une autre carte ESP32, il faut juste respecter le brochage.
En utilisant la broche IO34 en entrée analogique, on mesure la tension présente et on l'affiche sur l'afficheur OLED.
Le potentiomètre ( 47 Kohms) permet de régler la tension présente sur l'entrée entre 0 et 3,3 V
Cofiguration I2C :
SDA ---> IO21
SCL ---> IO22
Après exécution du programme on affiche bien la tension en chiffres et sur le bargraphe.
Le programme convertit la tension analogique au format texte et l'affiche dans un rectangle. Il créé le bargraphe. La fonction oled.fill_rect dessine un rectangle plein dont la longueur dépend de la mesure.
# voltmètre
# JMD dec 2021
from machine import Pin, ADC, I2C
from time import sleep
import ssd1306
i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
mesure = ADC(Pin(34))
mesure.atten(ADC.ATTN_11DB)
aff = 0
pos = 1
while True:
mesure_value = mesure.read()
#conversion de la mesure en tension
voltage = 0.000816*mesure_value + 0.037822
V=str(round(voltage, 3)) + " V"
# variable affichage pour le baragraph
aff = int(voltage*39)
print (aff)
# Affichage des graphiques
oled.fill(0)
oled.rect(23, 8, 74, 18, 1) # rectangle pour encadrer la tension
oled.text(V, 30, 13) # affichage de la tension
# traçage du baragraph
oled.hline(0, 48, 128, 1)
for n in range(10):
pos = n*13
oled.vline(pos, 44, 8, 1)
oled.text("3",114, 54)
oled.text("2",76, 54)
oled.text("1",38, 54)
oled.text("0",0, 54)
oled.fill_rect(0, 36, aff, 4, 1)
oled.show()
sleep(0.2)
Visualiser le signal
A la manière d'un oscillocope, on peut visualiser le signal, à conditions que la fréquence soit assez basse et l'amplitude ne dépassant pas 3,3 V.
Un générateur sera connecté à la place du potentiomètre.
Le programme utilise la fonction oled.scroll pour balayer l'axe des X.
# Oscillo
#JMD Dec 2021
from machine import Pin, ADC, I2C
from time import sleep
import ssd1306
i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
mesure = ADC(Pin(34))
mesure.atten(ADC.ATTN_11DB)
vmax = 3.4
dotPos_old = int(oled_height/2)
while True:
mesure_value = mesure.read()
voltage = 0.000816*mesure_value + 0.037822
dotPos_new = oled_height-int(voltage/vmax*oled_height)-1
oled.line(0, dotPos_new, 0, dotPos_old, 1)
oled.scroll(1, 0)
oled.line(0, dotPos_new, 0, dotPos_old, 0)
dotPos_old = dotPos_new
oled.show()
Si l'ESP32 peut-être programmé avec l'environnement Arduino, Micropython est une autre alternative. Il existe de nombreuses bibliothèques et le langage Python est un outil puissant.
Pour ce tutoriel vous aurez besoin d'un afficheur OLED I2C compatible ssd1306 et d'un potentiomètre. Nous allons créer un voltmètre avec un bargraphe et visualiser les signaux.