Bases utilisation GPIO avec les ESP

GPIO

Il existe une LED onboard sur la GPIO 2 :

>>> from machine import Pin 
>>> led=Pin(2,Pin.OUT)
>>> led.on()
>>> led.off()

Sur une brohce externe, çà donne :

from machine import Timer, Pin 

led=Pin(15, Pin.OUT)

led.on()
led.offf()

PWM

from machine import PWM

pwm=PWM(Pin(15))
pwm.freq(1000)
pwm.duty(1000) # 0-1023
pwm.duty(100)

ADC

https://docs.micropython.org/en/latest/esp32/quickref.html#adc-analog-to-digital-conversion

La mesure analogique est disponible sur les broches 32 à 39 avec MicroPython (noté que l'ESP fournit bien plus de broches ADC que çà...), mais 8 broches ADC, c'est déjà pas mal. Les broches sont en 12 bits (par défaut) configurables. La mesure est renvoyée sur une échelle 0-4095 (=12 bits).

Point particulier : les broches disposent d'un atténuateur / amplificateur de niveau de tension. Par défaut, à 0dB, la mesure se fait sur 0-1V (et pas 3.3V !!). Pour avoir l'échelle en 3.3V, il faut utiliser l'amplification 11dB.

Le constructeur ADC se base sur une broche Pin(xx) où xx est le numéro de la broche GPxx utilisée.

>>> from machine import ADC, Pin
>>> sensor=ADC(Pin(32))
>>> sensor.read() # echelle 0-1v par defaut
0
>>> sensor.read()
3919
>>> sensor.atten(ADC.ATTN_11DB) # pour echelle 0-3.3V
>>> sensor.read()
442
>>> sensor.read()
4095

Note

L'ESP 32 disposent de 2 modules ESP 32, ADC1 et ADC2. Si le wifi est utilisé, alors ADC2 n'est pas utilisable. C'est pourquoi Micropython n'implémente pas ADC2 par défaut. On a donc seulement 4 broches analogiques. Si on a besoin de plus, il est facile d'ajouter un multiplexeur analogique ou bien un module analogique i2C. La limitation est la même en C / Arduino car liée à l'ESP 32 lui-même.

Voir : https://github.com/micropython/micropython/issues/6219

Timer

Timer 0 à 3 disponibles : le constructeur nécessite de fournir un index de timer.

from machine import Timer, Pin 

led=Pin(15, Pin.OUT)

timer=Timer(0)

def loop(timer):
    if led.value():led.off()
    else:led.on()

timer.init(freq=10, callback=loop)

SPI

ESP 8266

Attention, la configuration est un peu spécifique : on ne précise pas les broches et l'indice doit être 1 (0 correspondant à la Flash)

https://docs.micropython.org/en/latest/esp8266/quickref.html?highlight=spi#hardware-spi-bus

>>> sp=SPI(1) # MISO=GPIO12 MOSI=GPIO13 et SCK=GPIO14 - SPI 0 = flash !

ESP 32

https://docs.micropython.org/en/latest/esp32/quickref.html#hardware-spi-bus

RTC

from machine import RTC
rtc.datetime()
rtc=RTC()
rtc.datetime()
(2000, 1, 1, 5, 1, 11, 49, 170430)

RMT

https://docs.micropython.org/en/latest/esp32/quickref.html#rmt

Fonctions spécifiques ESP 32

voir ici : https://docs.micropython.org/en/latest/library/esp32.html

Communication WebREPL

Une chose très intéressante avec les ESP 32 est la possibilité de communiquer en mode interpréteur via le réseau wifi sur lequel il se trouve.

Pour cela, il suffit d'activer le serveur REPL sur l'ESP 32 (intégré par défaut dans la version Micropython des ESP)

>>> import network
>>> wifi=network.WLAN(network.STA_IF)
>>> wifi.isconnected()
False
>>> wifi.active(True)
True
>>> wifi.connect("dlink","")
>>> wifi.isconnected()
True
>>> wifi.ifconfig()
('192.168.0.101', '255.255.255.0', '192.168.0.1', '0.0.0.0')
>>> import webrepl
>>> webrepl.start()
WebREPL daemon started on ws://192.168.0.101:8266
Started webrepl in normal mode
>>> 

On peut mettre çà dans une fonction dans le boot.py aussi.

+/- Configuration

>>> import webrepl_setup
WebREPL daemon auto-start status: enabled

Would you like to (E)nable or (D)isable it running on boot?
(Empty line to quit)
> E
Would you like to change WebREPL password? (y/n) n
No further action required
>>> import webrepl
>>> webrepl.start()
Started webrepl in normal mode
Lien utile :

*https://www.techcoil.com/blog/how-to-setup-micropython-webrepl-on-your-esp32-development-board/

Le client webrepl

C'est une appli web qui utilise websocket :

Installer localement.

Lancer serveur avec n'importe quel serveur de fichier statique de son choix :

php -S 127.0.0.1:8000

Se connecter sur :

http://127.0.0.1:8000/webrepl.html

Le terminal est inactif dans mon cas bien que la connexion semble se faire correctement.