Para quem gosta de Python e IOT, tem agora o MicroPython que é juntar os dois mundos.

Neste posto vou mostrar como usar o ESP32 e o MicroPython para começar a fazer coisas interessantes.

Para começar, vamos colocar MicroPython num ESP32 e piscar o LED interno da placa.

Mais informações e uma referência rápida do MicroPython no ESP32

http://docs.micropython.org/en/latest/esp32/quickref.html

Colocar MicroPython no ESP32

Para isto, precisam de ter o utilitário esptool.py . Podem ir buscar aqui:

espressif/esptool
ESP8266 and ESP32 serial bootloader utility. Contribute to espressif/esptool development by creating an account on GitHub.

Existem várias versões do MicroPython. Para o que precisamos, vamos efetuar o download da versão genérica. Temos 2 opções:

  • Versão 3.x com suporte de LAN e PPP, mas não Bluetooth
  • Versão 4.x com Bluetooth, mas sem LAN e PPP

Para já, que não vamos usar o Bluetooth, podem tirar (à altura da escrita deste post), a versão esp32-idf3-20191220-v1.12.bin

Mais informações sobre as versões existentes para ESP32, com  ou sem SPIRAM, vejam a página

MicroPython - Python for microcontrollers
MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.

Se for a primeira vez que estão a colocar MicroPython na placa, é necessário remover a memória flash (assumindo que a placa está em ttyUSB0)

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
feiticeir0@nightcrawler ~ $ esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py v2.1
Connecting........___
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 3.8s
Hard resetting...

Seguidamente, colocar o novo firmware:

feiticeir0@nightcrawler ~/Downloads $ esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin 
esptool.py v2.1
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1247280 bytes to 787794...
Wrote 1247280 bytes (787794 compressed) at 0x00001000 in 69.6 seconds (effective 143.5 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...
feiticeir0@nightcrawler ~/Downloads $ 

Tudo a correr bem, já têm o MicroPython a executar no vosso ESP32.

Mais informações podem consultar aqui

http://docs.micropython.org/en/latest/esp32/tutorial/intro.html#esp32-intro

MicroPython

Para executar o nosso primeiro código MicroPython, vamos ligar-nos á placa. Assim que nos ligar-mos, iremos ser presenciados com a REPL (Python Prompt).

Para ligar, precisamos de um cabo USB e ligar a placa e ao PC numa porta USB disponivel.

Vamos lá ligar, via minicom

minicom /dev/ttyUSB0

Pressionando <enter>, deverão ter uma prompt

Welcome to minicom 2.7

OPTIONS: I18n 
Compiled on Oct  5 2019, 16:48:25.
Port /dev/ttyUSB0, 23:42:48

Press CTRL-A Z for help on special keys


>>> 

Uma vez na prompt, podemos escrever um programa de Python como no interpretador

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

Piscar um LED usando o MicroPython

Nota: os >>> são do interpretador e os .... são os espaços que ele coloca automaticamente quando dentro do ciclo while. Para sair do while, basta irem dando <enter> até que o LED começe a Piscar (e a vossa consola pareça encravada - o que não está. Para terminar, basta pressionar Ctrl+C.

E aqui está o resultado:

O MycroPython não funciona como um Arduino no que toca à execução de código. Se desligarem o ESP32 e voltarem a ligar, o programa que criaram não é executado - aliás, ele não existe.

O MicroPython possuiu um pequeno sistema de ficheiros para onde podemos copiar ficheiros.

Aqui fica um exemplo, com um pequeno aplicativo da Adafruit, o ampy:

feiticeir0@nightcrawler ~ $ ampy -p /dev/ttyUSB0 ls
listar conteúdo do ESP32

No arranque, ele executa 2 scripts – boot.py e main.py pela ordem  aqui escrita. Se existir o boot.py, é executado primeiro e  posteriormente o main.py.

Assim, se querem algum script em execução, devem colocar o código em boot.py ou main.py.

Para executar o código em cima no arranque e sempre que se ligar e  desligar o Wemos, devemos colocar num ficheiro chamado boot.py ou  main.py e copiar para o Wemos.

vi main.py
import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
while True:
	led.value(1)
	time.sleep(1)
	led.value(0)
	time.sleep(1)

Copiar o main.py para o Wemos ESP32 Oled

ampy -p /dev/ttyUSB0 put main.py

Agora, desliguem o ESP32 e voltem a ligar e vão ver que o LED começa a piscar.

E é tudo. Ficaram com uma ideia de como funciona o MicroPython no ESP32. Claro que há muito para descobrir e com o passar do tempo, o MicroPython vai-se tornando mais e mais poderoso e com suporte a mais funções.

Sabiam que o ESP32 tem um sensor HALL ? Podem usar MicroPython para ler o valor, e podem também saber a temperatura do ESP32... Existem muitas coisas que poderão descobrir na documentação.

Boa programação