Avançar para o conteúdo principal
ESP32 - Micropython

Para aqueles que andam no mundo da Internet das Coisas o micro controlador ESP8266 já deve ser um conhecido, para quem nunca ouviu falar aconselho a experimentar, pois desenvolver dispositivos que tenham que ser ligados a uma rede Wi-Fi nunca foi tão simples.

Então se o ESP8266 é assim tão bom porque é que eu estou aqui a falar do ESP32… bem este super micro controlador… sim super porque conta 2 cores de 240MHz dentro de um microprocessador Tensilica Xtensa de 32 bit Ultra Low Power, 448KiB de ROM para funções internas e de arranque, 520KiB de SRAM para colocarmos o nosso código e por fim a cereja no topo do bolo é o facto ser constituído por  2 módulos de conectividade um Bluetooth Low Energy e Wi-Fi 802.11/b/g/n/e/i, comparando com o ESP8266 tem o módulo BLE a mais, tem muito mais memória e muito mais processamento,e não esquecendo que os 2 cores permitem agora executar código em paralelo, coisa que raramente acontece nos micro controladores comuns de baixo custo, sim este ESP32 custa por volta de 6 euros e pode ser adquirido em http://aliexpress.com.

Na imagem abaixo podemos visualizar a arquitectura do ESP32



Agora que já conhecemos a “Máquina”, voltamo-nos para o tema desta edição em que queremos correr o Sistema Operativo MicroPython dentro do nosso ESP32.

Para aqueles que ainda estão de boca aberta por ter conhecido o ESP32 então não fiquem céticos, porque é mesmo possível correr on sistema operativo e ainda executar código Python directamente numa prompt Python dentro do ESP32.

O que vou aprender neste tutorial 

  • A Instalar Ferramentas necessários para carregar o Sistema operativo para o ESP32
  • A Instalar drivers para o computador comunicar com o ESP32 através do controlador USB-Serial CP21XX que acompanha a placa de desenvolvimento que vamos utilizar.
  • Carregar o binário com o Micropython para dentro do ESP32
  • Aceder à consola Python que está a correr dentro do micro controlador
  • Carregar bibliotecas para serem utilizadas dentro do Sistema Operativo
  • Escrever texto para ser mostrado no display OLED SSD1306  que vem incluído na placa.

O que preciso para este tutorial
  • Placa de desenvolvimento Lolin Wemos ESP32 com display OLED
  • Cabo USB
  • Computador 

Existem dezenas de versões de placas de desenvolvimento que incluem o ESP32, no nosso tutorial vamos utilizar uma desenvolvida pela LOLIN/WEMOS que inclui um display OLED SSD1306.

Existem diversas formas de instalar o MicroPython, está é uma das formas mais rápidas de carregar o Sistema Operativo e interagir com display OLED. 

Eu vou estar a utilizar Python 2.7 e um Macbook Pro com o High Sierra, sobre outros sistemas operativos vou deixar alguns pontos para terem como pesquisar.


Passo 1: Ligar a placa ao computador e determinar o número da porta

Neste passo vamos ligar a placa ao nosso computador utilizando um cabo micro USB.  

Aqui um utilizador menos experiente pode ter algumas dificuldades em perceber se tudo está instalado correctamente, mas não desespere porque vou deixar aqui algumas dicas para verificar se está tudo instalado.
Como qualquer dispositivo que ligamos ao nosso computador, este precisa de software adicional para conseguir comunicar com o nosso sistema operativo, seja ele Windows, Mac OS, Linux ou outro. Este tipo de software denomina-se de Driver, ao longo dos tempos os fabricantes tem consolidado com os desenvolveres de sistemas operativos uma forma de incluir os controladores directamente no sistema operativo ou pelo menos o sistema operativo saber onde ir descarregar o driver à internet, sem que utilizador se preocupe com isso, denominamos esses dispositivos de Plug and Play. Bem não é o caso do nosso pequeno ESP32, aqui temos que ir descarregar o driver directamente do site do fabricante, coisa que aconselho sempre ao contrário de drivers que podemos encontrar noutros locais, o do fabricante será decerto o menos propicio a dar problemas. (Utilizadores Linux não deverão necessitar de drivers)
Bom o nosso instinto passa por ir directamente ao google pesquisar “driver wemos lolin esp32…”,  esta não é de todo a melhor forma, devemos perceber que a placa de desenvolvimento é constituída por outros controladores que não o nosso ESP32, e se olharmos com atenção vamos ver outros componentes, e perto da porta USB temos um que diz Sililabs CP2102, este é o controlador responsável pela comunicação USB-Serial com o nosso ESP32, isto porque os micro controladores na sua maioria só entendem comunicação serial.
Dica: Aconselho o leitor pesquisar sempre um pouco sobre alguns componentes que se destacam numa placa com o fim de perceber a sua funcionalidade.
Para instalar o driver vamos ao site da Silicon Labs e basta  descarregar o driver indicado para o nosso sistema operativo. 
Depois de instalado podemos verificar a instalação, numa máquina Linux ou MacOS podemos executar o comando ls /dev/{tty,cu}.* e no Windows podemos abrir o Gestor de Dispositivos e procurar por dispositivos com o nome COMX, ex. COM3.
Agora que já temos uma porta associada ao nosso ESP32 podemos preparar o software necessário para interagir com ele e atualizar o firmware.
Passo 2: Preparação do ambiente de desenvolvimento
Python 
Se ainda não tem o Python instalado no seu computador, é necessário instalar, eu pessoalmente utilizo o Python 2.7 mas se quiser instalar o 3.x penso que não deve existir problema. 
Para a instalação do Python basta ir ao site oficial https://www.python.org e fazer o download correspondente ao seu sistema operativo e seguir as instruções lá indicadas.
Pip 
O Pip é utilizado para instalar novos módulos no Python, nas instalações mais recentes do Python o mesmo já vem incluído. No entanto, caso não esteja instalado pode seguir este tutorial https://pip.pypa.io/en/stable/installing/ .
Dica: o comando pip está relacionado com a versão do Python por isso numa máquina com diferentes versões do Python para utilizar a versão Python 2.7 o comando será pip2.7. Para utilizar apenas o comando pip deve garantir a versão por defeito do Python, pode confirmar a versão executando pip  --version
Esptool 
Esta ferramenta é recomendada para instalar o novo firmware no ESP32 ou em qual outro chip da familia ESP.
Para fazer a instalação do mesmo vamos utilizar o pip
# pip install esptool
Se já tiver uma versão antiga pode atualizar o mesmo com o comando 
# pip install esptool --upgrade

Ampy 
O Ampy  permite transferir ficheiros do nosso sistema local de ficheiros para dentro do ESP32. Eu utilizo a versão da Adafruit e pode ser facilmente instalado utilizando o pip.
# pip install adafruit-ampy

Terminal de acesso
Para nos ligarmos à consola do ESP32, que nos vai dar acesso à uma prompt Python vamos necessitar de um terminal. Para utilizadores MacOS ou Linux não é necessário porque já possuem comandos para se ligar a um terminal serial, nomeadamente o comando screen, utilizadores Windows podem fazer o download do PuTTY a partir do site official www.putty.org

Passo 3: Carregar o binário do MicroPython para o ESP32

O binário com o MicroPython para o ESP32 pode ser descarregado no link   https://micropython.org/download#esp32 e guardado numa localização conhecida.
Vamos agora abrir a linha de comandos, caso seja Windows o utilizador deve ir para a pasta onde está o Python instalado, ex: C:\Python27\Scripts. No Linux ou MacOS o python, pip, esptool e ampy  são agora um comandos de sistema e podem ser chamados independentemente da directoria.
Teste de ligação  
Podemos utilizar o comando esptool.py para verificar a ligação com o ESP32, a forma mais simples de o fazer é pedindo informações relacionadas com a identificação da flash.
Portas em MacOS, por norma a porta tem o nome /dev/cu.SLAB_USBtoUART, caso não aconteça utilize o comando ls /dev/{tty,cu}.* para listar todas as portas

# esptool.py --port /dev/cu.SLAB_USBtoUART flash_id

Comando em Linux ou Windows
# esptool.py --port nome_da_porta flash_id

Para sabermos o nome da porta em Windows vamos ao Gestor de Dispositivos e procuramos por COM_X ex: COM3, numa maquina linux podemos executar o comando ls /dev/{tty,cu}.* que nós lista as portas associadas ao dispositivos conectados atualmente ao computador.
Um resultado bem sucedido deve devolver um resultado semelhante ao abaixo demonstrado: 

Apagar a Flash 
Antes de carregarmos o novo binário devemos garantir que não fica lá nada que nos possa consumir espaço desnecessário, para isso utilizamos o comando
# esptool.py --port nome_da_porta erase_flash

O resultado do comando deve ser algo idêntico ao abaixo demonstrado: 


Carregar no binário

Finalmente estamos no passo final, para gravarmos o binário que contêm o MicroPython utilizamos o comando abaixo descrito, alterando o nome da porta para a que foi atribuída ao ESP32, e a localização do ficheiro apontando para o local onde o utilizador guardou o download do ficheiro .bin.

# esptool.py --chip esp32 --port nome_da_porta write_flash -z 0x1000 localização_do_ficheiro.bin

Este processo pode e vai demorar alguns segundos por isso não cancele o processo nem deve remover o ESP32 abruptamente.
O resultado do comando deve ser algo idêntico ao abaixo demonstrado: 

Verificação e utilização da instalação

Numa maquina Linux ou MacOS para nos ligarmos ao terminal Serial do ESP32 podemos utilizar o comando:
# screen nome_da_porta 115200
Ao abrir a ligação carregamos no enter e a magia acontece ficamos na prompt interativa do Python com os famosos >>>.
A partir daqui podemos escrever código que ele é executado, por exemplo: 




Parte BRUTALLL :)

Bem, o objectivo deste tutorial  finaliza com o acesso ao prompt do Python, no entanto já que estamos com a inspiração no pico máximo e completamente delirantes com o ESP32, este que até trás um display OLED mesmo a pedir para receber um belo Hello World, fica aqui a explicação de como podemos carregar Bibliotecas extra para serem utilizadas no nosso código e como enviar texto para o display.
Carregamento da biblioteca para o display OLED SSD1306

Eu utilizo a biblioteca da  Adafruit  ssd1306.py, pode ser facilmente descarregada em  https://github.com/adafruit/micropython-adafruit-ssd1306, descompacte o zip e guarde o ficheiro  ssd1306.py numa  localização conhecida.








Vamos então carregar o biblioteca para dentro do nosso ESP32 utilizando o comando 

# ampy --port nome_da_porta --baud 115200 put localização_do_ficheiro_ssd1306.py

Importante: para enviar dados para o ESP32 devem fechar todas as ligações abertas para o mesmo.

Dica: se estiver a utilizar uma maquina Windows deve estar no diretório Scripts dentro da pasta da instalação do Python, em Linux ou MacOS o comando pode ser invocado em qualquer directoria.


O resultado do comando deve ser algo idêntico ao abaixo demonstrado: 
Terminado o envio voltamos a ligar-nos ao nosso ESP32  utilizando o comando screen em maquinas Linux ou MacOS ou o PuTTY em maquinas windows.
Acesso à prompt Python vamos fazer algum código que nos vais listar os ficheiros gravados na memória do ESP32.
>>> import os
>>> os.listdir()

O resultado do comando deve ser algo idêntico ao abaixo demonstrado: 


Confirmada a existência da biblioteca ssd1306 vamos ao que interessa e fazer código para enviar texto para o nosso lcd OLED.

Primeiro importamos as bibliotecas machine que nos dá acesso ao GPIOS e aos protocolos de Hardware do ESP32 e a ssd1306 que nos oferece um conjunto de funções de alto nível para interagirmos com o display OLED
>>> import machine, ssd1306

O passo seguinte é ativar o protocolo I2C para comunicar com o display, pela documentação percebemos que este está ligado ao pino 4 SCL e ao pino 5 SDA

>>> i2c = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5))

Agora que já temos o I2C vamos criar uma variável que vai referenciar o nosso display, a biblioteca  ssd1306 já tem uma função que nos devolve uma instância/referência para o OLED.

>>> oled = ssd1306.SSD1306_I2C(128, 64, i2c)

Quase a terminar limpamos todo o texto que possa estar em preparação

>>> oled.fill(0)

Começamos a preparar o texto que queremos 

>>> oled.text('MicroPython para', 0, 0)
>>> oled.text(‘a revista', 0, 10)
>>> oled.text('PROGRAMAR', 0, 20)

Finalmente mandamos mostrar esse texto fazendo com que a magia aconteça, a partir daqui é a loucura .

>>> oled.show()

O resultado deve ser algo idêntico ao demonstrado na imagem a abaixo 

Espero que este artigo vos tenha sido util e qualquer duvida estão perfeitamente à vontade para perguntar.
Um Grande Abraço e boa PROGRAMAÇÃO
Se gostas deste tipo de informação junta-te a nós: Movimento Maker Portugal, no Facebook





Comentários

Mensagens populares deste blogue

3 Formas de configurar o Wi-Fi no ESP8266

3 Formas de  configurar o Wi-Fi no ESP8266 O nosso famoso ESP8266 veio para ficar, cada vez mais este microcontrolador é utilizado para desenvolver dispositivos fantásticos, é verdade que o ESP pode ser utilizado como um simples MCU , mas é a sua capacidade de se ligar a uma rede Wi-Fi, faz dele a escolha perfeita no que toca dipositivos IoT . Este artigo tem foco em três diferentes soluções que permitem programar o ESP de forma a que este se consiga ligar a uma rede Wi-Fi. É sabido que da primeira vez que o ESP é energizado este tem de conhecer ou vir a conhecer o SSID e a Password configurada no Access Point ao qual o queremos conectar de forma a fazer para da rede e ter acesso à Internet se assim for necessário. Vamos então ver como implementar as três soluções, analisar cada uma delas e ponderar os prós e contras e cada uma delas. Passemos ao caso mais simples, ao qual denomino de “Hard Coded” , esta é a forma mais utilizada por quem começa a utilizar

Mosquitto MQTT - Como Apagar todas as Mensagem Retain

Olá malta, hoje venho partilhar convosco algo que pode dar muito jeito quando andamos a testar cenários em que temos mensagens MQTT Retained . Um mensagem com a Flag Retain fica guardada no Broker MQTT até que seja subscrita por outra . Uma solução rápida para eliminar a mensagem Retain será publicar no mesmo tópico uma mensagem vazia , no entanto se tivermos muitos tópicos com mensagens Retain pode dar muito trabalho por isso uma forma simples será eliminar a base de dados do Mosquitto e todas as mensagem Retain são perdidas. Este cenário pode parecer uma pouco Brute Force mas se pensar-mos bem, assim que os nossos sensores/atuadores se ligarem novamente ao Broker MQTT vão publicar novamente a mensagem Retain que realmente interessa :) Procedimento sudo service mosquitto stop sudo rm /var/lib/mosquitto/ mosquitto.db sudo service mosquitto start DONE.... Espero ter ajudado :) Grande Abraço

Instalação do SQLPLUS da ORACLE em LINUX

Bom dia a todos Hoje vou explicar como podemos instalar o SQLPLUS da Oracle em sistemas Linux que utilizem gestão de pacotes RPM, entre eles CENTOS, FEDORA etc.. O SQLPLUS é uma excelente ferramenta de administração de SGDB da Oracle e apresenta-se sob o formato de linha de comandos o que permite aos Administradores de Base de Dados um maior poder sobre o SGDB. Antes de mais é necessário ter uma conta Oracle, esta pode ser feita atraves de um registo no site e é totalmente gratuito. Após termos conta devemos ir à secção de Download -> Databases -> Oracle Instant Client URL:   http://www.oracle.com/technetwork/indexes/downloads/index.html É apresentada uma lista sistemas operativos suportados e no nosso caso vamos escolher    Instant Client for Linux x86-64   para versões 64 Bits Ao escolhermos o Sistema Operativo a Oracle mostra-nos todas aplicações de Cliente para as diversas versões de Base de dados. A ultima versão é a 12 no entanto devemos fazer o downl