Python para Desenvolvimento de Agentes para ESP32 e ESP8266

Veremos como instalar e dar os primeiros passos para iniciar o desenvolvimento de agentes usando MicroPython para ESP32 e ESP8266
https://computerworld.com.br/2019/09/22/python-para-iniciantes-e-gratuito-microsoft-lanca-tutorial-no-youtube/

Você sabia que pode desenvolver seus agentes para ESP32 e ESP8266 usando outra linguagem que não seja C e C++? Nada contra C, C++ ou qualquer outra linguagem, afinal de contas, linguagem é uma questão, muitas vezes, pessoal. Queremos apenas te mostrar que existem outras opções e quanto mais opções, melhor para nós!

Tenho que admitir, quando descobri que poderia usar Python para criar meus agentes, fiquei muito feliz. Sempre os desenvolvi em C, usando a Arduino IDE, mas o estilo nada orientado a objetos do C sempre me deixou um pouco reticente. Então, comecei a criar meus agente usando C++ com o PlatformIO só que, não sei se vocês concordam, sempre achei um pouco burocrático. Minha preocupação inicial, assim que vi o MicroPython era a de qualquer desenvolvedor: o ambiente é estável? Não consome muita memória? Posso fazer tudo o que faço em C em MicroPython? Terei a vasta quantidade de bibliotecas que tenho para C?

Faremos uma série de postagens que vão te responder a essas perguntas e ajudar a iniciar no desenvolvimento de agentes para ESP32 e ESP8266 usando MicroPython. Vamos iniciar nossa brincadeira fazendo um overview do que é o MicroPython, histórico e como instalá-lo em um ESP32 DevKit V1 (ESP32) e em um NodeMCU Lolin (ESP8266). Vamos nessa?

História

Sabe de quem foi a brilhante ideia de criar uma versão da linguagem Python para rodar em dispositivos embarcados? O nome dele é Damien George, um físico teórico da Universidade de Cambridge. Damien estava construindo seus robôs e queria uma forma simples e pouco burocrática de criar seus agentes. Seria algo como apenas copiar e colar poucas linhas de código e já ver o resultado na prática (Fonte: Wired). Damien, então, criou um financiamento no Kickstarter em 2013 e este financiamento não resultou apenas em um port do Python, como também em uma placa chamada Pyboard, que executa nativamente o MicroPython!

Mas, como assim, apenas copiar e colar linhas de código no dispositivo embarcado e tudo bem? Bom, com MicroPython, as coisas funcionam de uma forma um pouco diferente do que nós estamos acostumados com a Arduino IDE. Nesta última, nós criamos nosso agente em C, pedimos para a IDE compilar e transferimos o binário resultante para o dispositivo. Com MicroPython, a coisa é diferente. Nós “instalamos” no dispositivo o binário que contém o ambiente do MicroPyhon, que inclui o interpretador e diversas bibliotecas padrão.

Com o MicroPython instalado, podemos conectar no dispositivo através de uma porta USB, como no caso de um ESP32 DevKit V1, e executar comandos Python através do REPL! REPL? Calma, vamos explicar tudo. Ah! Também podemos copiar nossos arquivos .py para o dispositivo e executá-los de lá. Isso mesmo, é assim mesmo, bem simples.

Pyboard versão 2.

Um Python Magrinho

Bom, ao mesmo tempo que te deixei super alegre por poder usar Python para programar para ESP32/ESP8266, também preciso te dar um leve banho de água fria. Mas é só um banho bem leve mesmo, tá? Nada desanimador. O problema é que, assim como o nome sugere, o MicroPython não implementa todas as bibliotecas disponíveis em sua irmã mais velha. Faz todo sentido, correto? O Python, completo, foi feito para executar em computadores mais “parrudos”, sem muitas restrições de memória, espaço e processamento.

Já no caso de uma microcontroladora, temos processadores muito menos capazes e memória limitadíssima. Portanto, não faria sentido portar todo o Python para um ambiente tão limitado como esse, concorda? Por este motivo, você não encontrará todas as bibliotecas que tem costume de usar em Python. Aliás, as bibliotecas são outras, com outro nome, uso diferente e etc. Contudo, aos poucos, vamos descobrindo essas bibliotecas e aprendendo a usá-las no dia a dia.

 

Preparando o Terreno

Vamos deixar de tanta conversa e colocar as mãos na massa? Claro! Só que precisamos, antes de tudo, verificar se você tem todas as ferramentas necessárias para realizar esta instalação. Aqui estão elas:

  1. esptool
  2. Binário do MicroPython
  3. Drivers do ESP32/ESP8266
  4. ESP32 ou ESP8266

 

Instalando o esptool

O esptool é uma ferramenta escrita em Python e desenvolvida pela Espressif, criadora dos chips ESP32 e ESP8266, que nos permitirá instalar o MicroPython nestes dois microprocesadores. Trata-se de uma ferramenta de linha de comando mas que é bem fácil de ser usada, não precisa torcer o nariz! 🙂

Como eu disse, o esptool foi desenvolvida em Python e pode ser instalada através do pip. Caso você esteja usando Linux, boas notícias. A esmagadora, senão todas, distribuições Linux embarcam um interpretador Python. Caso você use MacOS, também está com sorte: você já tem o Python disponível também. Ah! O esptool funciona tanto com o Python 2.7 como com as versões 3.X.

Opa! Você usa Windows 10? Não se preocupe, você só precisa de um passo a mais, que é instalar o Python. Sugiro que não instale o Python que se encontra na Microsoft Store. Tive diversos problemas ao usar o Python distribuido por lá e, atualmente, prefiro baixar a versão de instalação do próprio site do Python em https://www.python.org/downloads/. Após a instalação, sugiro que você também instale o Windows Terminal, que utilizaremos para executar o esptool através do PowerShell.

Agora, independente do sistema operacional que esteja executando, abra um terminal (no Windows, use o PowerShell pelo bem de sua saúde mental) e execute:

pip install esptool

Binário do MicroPython

Essa parte é fácil! Baixe a versão mais atual do binário do MicroPython no site http://micropython.org/download/. Para nosso propósito, precisaremos de dois arquivos: um para instalar no ESP32 e outro para instalar no ESP8266. Isso, são dois binários diferentes, específicos para cada plataforma. Na página do link acima, role-a até encontrar Espressif ESP-based boards, onde você encontrará um link para baixar o firmware para cada plataforma. Hoje, 08 de agosto de 2020, temos a versão 1.12 e os links diretos para os binários são:

ESP8266: http://micropython.org/resources/firmware/esp8266-20191220-v1.12.bin

ESP32: http://micropython.org/resources/firmware/esp32-idf3-20191220-v1.12.bin

 

Drivers

Caso você já tenha um ESP32 DevKit V1 ou um NodeMCU Lolin, já deve ter percebido que ambos possuem uma entrada USB. Basta, então, plugar o cabo USB nele e no PC que já estará tudo funcionando? É possível que sim, mas, caso não funcione de primeira, isto significa que você deverá instalar os drivers que permitirão seu sistema operacional conversar com esses dispositivos.

Observação: Caso você tenha comprado um dispositivo diferente do ESP32 DevKit V1 ou do NodeMCU Lolin, é possível que o driver também seja outro. Você precisará consultar o vendedor ou o fabricante para identificar qual driver precisará instalar.

Bom, qual driver devo instalar, então? Depende da versão do NodeMCU Lolin que você tiver em mãos. Observe a imagem abaixo (gentilmente roubada do site da RoboCore, obrigado pessoal!). Na esquerda, temos o Lolin na versão 2, que precisará dos driver CP210x. Esses drivers podem ser obtidos neste link. Escolha a versão específica do seu sistema operacional e instale-o.

Agora, caso você tenha o Lolin V3 em diante, precisará dos drivers CH340G. Baixe-o diretamente no site da fabricante neste link. E no caso do ESP32? Pode ficar tranquilo, o driver CP210X funciona tanto para o Lolin como o ESP32!

ESP32 ou ESP8266

Já tem um ESP32 ou um ESP8266 em mãos? Caso não tenha, você precisará comprar um (ou mais)! O ideal, neste momento de aprendizado, é comprar as placas de desenvolvimento, pois elas facilitam MUITO o uso do ESP32. Os dois que mais costumo comprar são o ESP32 DevKit V1 e o NodeMCU Lolin v3.

Ah! Você quer usar diretamente o ESP32, sem uma placa de desenvolvimento? Bom, meu caro, minha única pergunta é: você entende de eletrônica? Se a resposta for não, esqueça, compre a placa de desenvolvimento. Caso responda sim, ótimo! Vai ser uma diversão e tanto pra você, mas aqui não vamos entrar nesses detalhes. Sugiro que pesquise no Google.

https://randomnerdtutorials.com/esp32-esp8266-thermostat-web-server/

 

Os dois sites que costumo usar para comprar minhas peças são Mercado Livre e Aliexpress, sendo que esses microchips são muito mais baratos se comprados na China. Costumo pedir lotes de 10 chips na China, pois vale muito mais a pena.

Instalação

Pronto! Temos todos os pré-requisitos, o que fazemos? Vamos lá. Seja no Windows, Linux ou Mac, você precisará de um Terminal. Amigos usuários do Windows (eu também sou), abram o Windows Terminal (Lembram? Instalem!) usando o PowerShell (CMD não, por favor). Aos demais, vocês tem várias opções de terminal à disposição, escolha a que mais gosta.

Conecte o ESP32/ESP8266 ao seu computador através da porta USB. Ao fazer isto, seu sistema operacional criará uma porta de comunicação com esse dispositivo. O nome desta porta e sua localização dependerá do sistema operacional. No caso do Linux/Mac, a porta estará no diretório /dev/ e pode ter, por exemplo, o nome ttyUSB0. Este nome depende do driver que você precisou instalar. O driver CP210x normalmente cria um arquivo com o nome ttyUSB0 ou ttyUSBtoUART

No caso do Windows, a porta será COM1, COM2, COM3… na minha máquina, por exemplo, ela sempre está na COM3.

Caso você tenha instalado o driver CH340G, o nome da porta será algo como ch.*. Em ambos os casos, você precisa saber exatamente qual a porta, pois a utilizaremos com o esptool. Por falar nele, vamos aprender agora como limpar a memória do dispositivo?

Limpando a memória

Vamos começar “zerando” a memória flash do dispositivo, para evitar que qualquer lixo que tenha ficado por lá nos atrapalhe. Isso é fácil de ser feito, basta usar o comando abaixo, lembrando de substituir o /dev/ttyUSB0 com a porta correta.

Exemplo no Linux ou Mac:

esptool.py --port /dev/ttyUSB0 erase_flash

Exemplo no Windows:

esptool.exe --port COM3 erase_flash

Resultado da execução do esptool para limpar a memória flash.
Upload

Para realizar o upload do binário do MicroPython para a microcontroladora, é necessário que você esteja no mesmo diretório onde se encontram os binários que baixamos nos passos anteriores. Para o ESP32, no Terminal, use o comando a seguir:

esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

Já para o ESP8266, use o comando abaixo (para mais detalhes, acesse esse link):

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20191220-v1.12.bin

Caso o upload não seja feito e você veja eternamente a mensagem “Connecting…”, é possível que você precise colocar seu ESP32 em modo de boot. Assim que você executar o comando acima, aperte o botão BOOT que se encontra ao lado da porta USB na placa. Em algumas placas, será necessário apertar este botão sempre que for fazer o envio de um novo firmware.

 

Resultado do upload do MicroPython para um ESP32.

 

Todos esses passos estão detalhados na documentação do MicroPython, nos links abaixo.

ESP8266: https://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
ESP32: https://docs.micropython.org/en/latest/esp32/tutorial/intro.html

Prompt do Python

Tudo pronto! Vamos executar nosso primeiro script Python na controladora? Bom, para conseguirmos conectar na microcontroladora, precisamos de um aplicação de terminal própria para isso. Para os usuários do Windows e do Linux, a melhor opção, em minha opinião, é o PuTTy. No Linux, caso você não goste do PuTTy, pode também tentar o Picocom. Já para os usuários do Mac, é possível usar o aplicativo Screen, que não precisa ser instalado, pois toda instalação do MacOS já o tem. 

Vamos começar com o PuTTy? A imagem abaixo é a tela do PuTTy em minha máquina. Nesta tela, você precisa ter atenção com três campos: Serial line, Speed e Connection type. Para o campo Serial line, coloque o nome da porta (conforme discutimos nas seções anteriores), enquanto em Speed use o valor 115200 (pode ser alterado, mas este valor funciona na grande maioria dos casos). Por último, marque a opção Serial em Connection Type.

Conexão com o PuTTy.

Já no Mac, você precisa ir no terminal e digitar o comando screen /dev/<porta> 115200. Pronto! Agora você está conectado no dispositivo e verá uma linha de comando que chamamos de REPL (Repeat Evaluate Print Loop). Agora, você pode simplesmente programar em Python! Tudo que você escrever no REPL deve ser algo do Python, ou seja, você pode user ifwhile… Ah! Pode importar as bibliotecas também! Basta fazer igualzinho a como faria em um script Python comum.

Agora, vai lá e digita print(“Hello World”) e me diz o que apareceu! 🙂 

Conclusão

Neste artigo, vimos o que o MicroPython e um pouco de sua história. Passamos pelos pré-requisitos e todos os passos para instalar o MicroPython tanto em um NodeMCU Lolin como em um ESP32 DevKit V1. Nos próximos artigos vamos nos aprofundar, cada vez mais, nesse ambiente, mostrando como usar várias bibliotecas, como evitar os erros mais comuns e diversas dicas!