Manual
do
Maker
.
com
O esp-idf pode ser instalado no Windows, Mac e Linux. Se deseja utilizar o esp-idf no Windows, baixe esse instalador e proceda como lhe for orientado. Nesse artigo vou mostrar como configurar o ESP-IDF no Linux e ambos os sistemas estarão hábeis a seguir com o próximo artigo, onde será fundamental ter o ESP-IDF instalado.
Trata-se do SDK para ESP, mas nesse caso eles chamam de "ESPressif IoT Development Framework". Para quem não sabe o que é SDK, trata-se do Software Development Kit. Ou seja, a mesma coisa com outro nome.
Desenvolver para uma plataforma diferente da nativa (por exemplo, criar um programa para Raspberry a partir do computador x86) se chama cross-compiling - ou, compilação cruzada. Existem diversos tipos de compilação, só que nem encontro mais entre os quase 1.000 artigos. Mas vou dar algumas referências:
Ambiente de compilação para Raspberry com Raspbian
Compilar módulo do kernel para Raspberry
Cross-compile para Omega - compilação cruzada para MIPS.
Programar nativamente remotamente - Usando o X forwarding para programar uma RPi.
No Linux também é simples configurar, mas alguns passos adicionais são necessários, como por exemplo, a instalação dos seguintes pacotes (considerando qualquer variante do Debian, incluindo Ubuntu). O procedimento descrito é baseado na documentação oficial.
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
É bom estar com uma distribuição Linux bem atualizada, ao menos que ofereça a versão >= 3.5 do cmake. Se quiser confirmar a versão antes de proceder com a instalação dos pacotes supracitados, use:
apt list cmake
Estou usando o Linux Mint 20.1 Ulyssa (que é um Ubuntu mal disfarçado), que tem a versão 3.16.3, já bem superior ao 3.5.
A versão de Python deve ser >= 3.6. Verifique com:
python --version
Deve ser um link simbólico para a versão 3 em seu sistema. No Mint 20.1 a versão é a 3.8.5.
Se ainda não o fez, será necessário também garantir o acesso às portas seriais pelo usuário. O tradicional comando a seguir será o suficiente. Refaça o login e, em última instância, reinicie o sistema.
usermod -a -G dialout $USER
Para fazer a comunicação serial sem a IDE do Arduino, podemos usar diversos programas diferentes, como GTKTerm, Cutecom e PuTTY (que serve também para SSH). Para linha de comando podemos usar Telnet, screen, cu etc. Um exemplo com screen:
screen /dev/ttyUSB0 115200
Para sair da tela, Ctrl-A + . O screen prende a porta serial e a sessão pode ser restabelecida posteriormente. Porém, se sair do screen sem finalizar a comunicação, a porta serial ficará presa e não será possível fazer upload para o dispositivo.
O sistema estando pronto para receber o ESP-IDF, podemos então iniciar o processo. Clone o repositório para o home do usuário. Já descrevi esse processo em outro artigo, mas sequer o encontro. Façamos novamente:
cd
mkdir esp
cd esp
git clone --recursive https://github.com/espressif/esp-idf.git
Não é um "pacotinho". Vai levar um tempo, dependendo da velocidade de sua conexão.
Essa clonagem resultará no diretório esp-idf.
Será necessário instalar também o toolchain, que é o conjunto de ferramentas para compilação, debugging etc. Dentro do diretório recém-clonado tem o script shell install.sh, que deverá ser executado tão logo o conteúdo tenha sido clonado.
cd esp-idf
./install.sh
O processo deverá ser tranquilo, o script fará tudo. Um diretório extra será criado "fora" do diretório esp, que é o ~/.espressif - um diretório oculto.
Quando o processo terminar, podemos executar o script export.sh para configurar o ambiente de compilação.
Estando dentro do diretório ~/esp/esp-idf, digite:
. ./export.sh
Repare que tem um espaço entre o primeiro e segundo ponto.
Podemos também criar um alias para facilitar a execução do comando em um próximo boot. Por exemplo, adicionando a linha sugerida na documentação em um arquivo qualquer que inicie com o perfil do usuário. Costumo colocar em ~/.bashrc. A linha do alias ficou assim:
alias get_idf='. $HOME/esp/esp-idf/export.sh'
Agora reabra o terminal ou faça:
source ~/.bashrc
E o alias estará disponível, digitando get_idf para fazer o export automaticamente. Nesse ponto terminamos de configurar o ESP-IDF.
Agora podemos pegar um exemplo do ESP-IDF para usar como skeletron para nossos projetos. Inicie fazendo um mero teste com o hello_world:
cd
cd esp
get_idf
cp -r $IDF_PATH/examples/get-started/hello_world .
Isso é para o caso de querer iniciar um projeto praticamente vazio, mas outros projetos dos exemplos podem ser usados como base para novos projetos.
Conecte o dispositivo ao computador e certifique-se de que a porta serial está disponível. Agora entre no diretório recém copiado e configure o projeto com menuconfig.
cd ~/esp/hello_world
idf.py menuconfig
Claro que tem outras formas de chegar ao diretório, fazer a cópia etc.
Abrindo o menuconfig podemos definir velocidade do processador, credenciais WiFi etc. Em Serial Flasher Config definimos (por exemplo) a velocidade da comunicação serial para o monitor, quando executarmos idf.py monitor para monitorar a execução. Em Component Config temos opções relacionadas à calibração do ADC, servidor HTTP, OTA, ethernet e muito mais. Como normalmente uso a API do Arduino para programar o ESP32, nunca abordei o uso do ESP-IDF a fundo, mas já mostrei como configurar o ESP-IDF em algum outro artigo. Em breve haveremos de utilizar alguns recursos específicos, por isso resolvi escrever primeiramente essa referência.
Para compilar o hello_world, simplesmente apertamos Esc para sair e confirmamos o salvamento da configuração padrão. Agora podemos compilar o firmware simplesmente digitando:
idf.py build
Tendo compilado, podemos fazer o upload de duas maneiras:
Das duas opções, me parece particularmente óbvio que rodar idf.py -p PORTA flash é o mais simples.
Em uma saída normal do upload devemos ter ao final da mensagem as linhas:
Leaving...
Hard resetting via RTS pin...
Done
O monitor do próprio ESP-IDF nos fornece uma conexão serial, bastando usar:
idf.py -p /dev/ttyUSBO monitor
No meu caso, /dev/ttyUSB0 é a porta serial no Linux (que poderia ser /dev/ttyACM0 e em ambos os casos, invés de 0 poderia ser outro número, conforme as circunstâncias). Para sair do monitor, usa-se Ctrl+]. Podemos também combinar flashing e monitoramento passando ambos na mesma linha (flash monitor).
Podemos usar qualquer projeto dos exemplos como base, até para ajudar a cortar caminho. Usando o ESP-IDF não desfrutamos da simplicidade de incluir bibliotecas disponíveis através da IDE do Arduino. O projeto é em C e o arquivo principal está no diretório main, dentro do exemplo que for utilizado como base. No caso do hello_world, o arquivo principal é main/hello_world.c. No menu ESP32 do blog você encontra todas as referências relacionadas aos recursos nativos do ESP-IDF, caso deseje desenvolver sem usar a API do Arduino. De qualquer modo, será fundamental ter o ESP-IDF configurado, para o próximo artigo relacionado.
Por enquanto não se preocupe com o nome de projeto, posteriormente veremos como renomear um esqueleto e compatibilizar a estrutura para um novo projeto. O importante nesse artigo era configurar o ESP-IDF adequadamente.
Por enquanto ficamos nesse ponto. No próximo artigo vamos à parte divertida, usando a placa T-Internet-PoE. Já para o próximo artigo teremos vídeo e mostrarei superficialmente o menuconfig, se me lembrar de colocar no roteiro.
Aproveite para se inscrever em nosso canal Dobitaobyte no Youtube e clique no sininho para receber notificações.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.