Desenvolva aplicativos de rede para ESP8266 usando Mongoose no Linux
Nesta página
- Quem é quem
- ESP8266
- Mangusto
- Linux
- NodeMCU
- Conexão com conversor UART-USB externo
- Verificando conexão
- Corrigindo o erro \Acesso negado
Vamos discutir como começar a desenvolver aplicativos de rede para o chip ESP8266 usando o Mongoose Embedded Web Server no Linux. Vou usar o Ubuntu, mas tudo pode ser facilmente adaptado para qualquer distribuição Linux.
Quem é quem
Desde que você começou a ler este artigo, presumo que você conheça Linux, ESP8266 e Mongoose. Portanto, apenas uma breve introdução.
ESP8266
Chip barato com WiFi integrado, desenvolvido pela Expressif. Se você quiser mergulhar em mais detalhes, confira o site oficial.
Mangusto
Mongoose é uma biblioteca multi-protocolo completa com um núcleo de menos de 40kB desenvolvida pela Cesanta. Encontre informações sobre o modo no site da Cesanta.
Linux
Realmente? :-)
Conectando o ESP8266 ao seu computador
Ok, primeiro precisamos conectar o chip ESP8266 ao seu computador. Você pode fazer isso de várias maneiras.
NodeMCU
Se você tiver um módulo NodeMCU, com conversor UART para USB integrado, tudo o que você precisa fazer é conectar o módulo ao computador via USB. BEIJO!
Conexão com conversor UART-USB externo
Se o seu módulo ESP não tiver um conversor UART-USB interno, você precisará de um externo. Existem muitos deles - basta pesquisar no Google.
Selecione um que funcione com Linux (basicamente, a maioria deles) e tenha um pino de 3,3V e lembre-se: a maioria dos conversores UART-USB tem pinos para 3,3V e 5V, mas você não deve conectar o ESP aos pinos de 5V. Este dispositivo não é tolerante à tensão e é possível queimar seu módulo.
Agora conecte (ESP -> Conversor):
VCC -> 3,3V
GND -> GND
RX0 -> TX (não RX)
TX0 -> RX
CH_PD -> 3,3V
Conectando com Arduino
Se você não possui um conversor UART-USB, mas possui um Arduino com pinos de 3,3V, pode usá-lo facilmente para conectar o ESP:
- Conecte o Arduino ao computador via USB
- Conecte o RESET do Arduino ao seu GND: é necessário desabilitar o processador host, pois precisamos apenas do módulo UART-USB
- Conecte o ESP (ESP -> Arduino)
- VCC -> 3,3V
- GND -> GND
- RX0 -> RX0 (não TX)
- TX0 -> TX
- CH_PD -> 3,3V
Verificando conexão
Se sua conexão estiver correta, o ESP deve aparecer como um novo dispositivo tty. Normalmente, NodeMCU e ESP conectados via conversor UART-USB aparecem como /dev/ttyUSBx (x=0, 1, 2 etc) e a versão do Arduino aparece como /dev/ttyACMx (x=0, 1, 2 etc)
Você pode usar o comando dmesg | grep usb para encontrar seu dispositivo.
Por exemplo, após a conexão do NodeMCU você verá algo assim:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0
Como você pode ver, o NodeMCU agora está disponível como /dev/ttyUSB0.
Como verificação final, use qualquer terminal para se conectar a um novo dispositivo; Vou usar o picocom. Este é um terminal leve. No Ubuntu pode ser instalado com:
sudo apt install picocom
Tentando:
picocom /dev/ttyUSB0 -b 115200
Se tudo estiver ok, você deve ver \Terminal pronto na saída do picocom.
Corrigindo o erro Acesso negado
Se o picocom disser \Acesso negado“, isso geralmente significa que o usuário atual não é membro do grupo dialout: no Linux, para acessar as portas seriais, o usuário deve ser um membro deste grupo.
Correr:
sudo usermod -aG docker $USER
comando, saia, entre novamente e tente conectar o ESP novamente. \Acesso negado deve ter desaparecido.
construção de mangusto
Baixe a versão mais recente do Mongoose aqui.
O Mongoose é enviado com um exemplo para ESP8266 e RTOS SDK. Turorial e código de amostra para ele estão localizados aqui.
Observação: o ESP8266 possui duas versões do SDK. O primeiro não é um sistema operacional e o segundo é baseado em RTOS. Neste artigo, usarei o último. Para encontrar as diferenças entre eles, pesquise no Google ou leia esta resposta no fórum oficial.
Para construir o exemplo você tem duas opções:
- Use docker e imagens de docker prontas para uso
- Instale o SDK e a cadeia de ferramentas em seu computador
Usando o Docker
Isso é mais simples e acredito que seja a melhor maneira. As imagens do docker do Cesanta contêm tudo o que você precisa para construir o Mongoose for ESP (e não apenas o Mongoose - qualquer aplicativo ESP). Portanto, você não precisa instalar nada localmente e pode facilmente compartilhar seu código com amigos e colegas para que eles possam construir seu firmware e obter exatamente o mesmo resultado.
O guia de instalação do docker está disponível aqui. Tente, é muito simples, você só precisa adicionar o repositório docker ao seu Linux e instalá-lo como um programa normal com apt.
Depois que o docker estiver instalado, vá para a pasta mongoose/examples/ESP8266_RTOS e execute build.sh
Na primeira janela de encaixe de compilação, será feito o download da imagem necessária. Pode demorar um pouco, dependendo do seu canal de internet. Mas, assim que o build.sh for concluído na pasta ./bin, você encontrará dois arquivos .bin.
Esse é o firmware. Você fez isso!
Usando o SDK local
Se o docker for muito simples para você ou por qualquer motivo você deseja usar ferramentas instaladas localmente, você também pode fazer isso.
É um pouco mais difícil e chato, mas nada muito complicado. Principalmente porque a Cesanta construiu algumas ferramentas para você e você não precisa criá-las a partir do código-fonte.
É assim que funciona:
- Clone ESP RTOS SDK deste repositório. O makefile de exemplo o procura na pasta /opt/ESP8266_RTOS_SDK, portanto, você pode colocar um repositório clonado nessa pasta ou modificar o caminho para ele antes de criar o exemplo (veja abaixo).
- Baixe xtensa-lx106-elf.tar.bz2 desta pasta pública.
- Descompacte o arquivo xtensa-lx106-elf.tar.bz2. Por exemplo, para a pasta /opt:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- Modifique sua variável PATH, por exemplo, se você descompactou a cadeia de ferramentas para a pasta /opt, use o seguinte comando:
export PATH=/opt/xtensa-lx106- elf/bin:PATH
(também recomendo adicionar este comando às suas pastas .bashrc ou .profile, para manter as alterações após a reinicialização do sistema)
Agora execute:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0
E agora, se tudo estiver instalado corretamente, você terá o firmware na pasta ./bin
Você fez de novo!
ESP piscando
Existem muitas ferramentas disponíveis para atualizar o ESP8266. Vamos usar esptool. Para usá-lo, clone este repositório e adicione o caminho para esptool.py em sua variável PATH (isso é opcional e apenas conveniente).
Agora, desconecte o picocom, se ainda estiver conectado (Dica: pressione Ctrl+A; Ctrl+D para sair dele) e execute:
esptool.py --port /dev/ttyUSB0 --baud 230400 \
write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.binNota importante: se o seu módulo não for um NodeMCU, você precisa aterrar o GPIO0 antes de piscar (o aterramento do GPIO0 muda o módulo para o modo intermitente). Depois de piscar, desconecte o GPIO0 do terra e reinicie o ESP.
Se nenhum erro ocorreu, você verá a saída como esta:
Connecting...
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving…Preparar! Agora o dispositivo é atualizado com o seu firmware.
primeiros resultados
Agora você deve ver uma rede WiFi \Mongoose aparecer. O exemplo configura um AP. Use a senha \Mongoose para se conectar, navegue até http://192.168.4.1/ e você verá um \Olá, mundo” página de saudação.
Parabéns! Você acabou de rodar o Web Server no ESP8266!
Próximos passos
Os próximos passos dependem de você. Você pode usar o exemplo descrito como ponto de partida.
Olhe para seu arquivo user_main.c . Ele configura um ponto de acesso WiFi e inicia o servidor web. Você pode alterar facilmente o modo AP para um modo de estação (e conectar-se à sua rede WiFi) e usar a API do Mongoose para implementar o que quiser. Esta é uma maneira comum de usar o Mongoose, portanto, você pode usar outro exemplo do Mongoose para criar seu programa e ter http, tcp, udp, mqtt e mais mais recursos em seu dispositivo ESP.
Use documentos do Espressif (por exemplo, documentação para descobrir recursos do Mongoose.
O punk não está morto!