Atualizando Firmware de comandos seriais AT no ESP8266

O objetivo deste tutorial é mostrar como realizar o procedimento de atualização do firmware de um microcontrolador ESP8266 para uma versão mais atual.

Motivo: ao comprar um ESP8266, normalmente seu uso tem como objetivo permitir que outros microcontroladores como o Arduino UNO, tenham acesso a uma rede WIFI. Porém por padrão o ESP8266 trabalha na velocidade de 115200 bits por segundo, velocidade essa que o Arduino UNO tem dificuldade de trocar informações principalmente quando ele utiliza bibliotecas que emulam portas Seriais, devido a limitação da própria placa possuir apenas uma interface serial. Neste ponto você pode estar se perguntado, não bastaria eu acessar o ESP8266, utilizando qualquer terminal serial, e através do manual de comandos AT do ESP8266 (download aqui), executar um comando para modificar a velocidade de comunicação serial? Sim, é exatamente esse o objetivo, mas o problema é que diversas versões do firmware do ESP8266 possuem um bug que impede que essa alteração seja gravada na memória FLASH do dispositivo. O que acaba criando o problema que essa alteração é totalmente perdida quando o dispositivo é desconectado da fonte de energia. Para resolver isso precisamos atualizar o firmware AT do ESP8266.

Lista de equipamentos necessários:

  • ESP8266-01 512k
  • Raspberry Pi qualquer versão
  • Protoboard/jumpers

Esquema elétrico:

O objetivo desse esquema elétrico é conectar o ESP8266 à porta serial TX/RX do Rasbperry pi, além disso alimentá-lo com 3.3v, e conectar sua porta GPIO0 (ZERO) no terra GND, o que coloca o ESP8266 em estado de gravação de firmware.

ESP VCC -> Raspberry 3.3v – vermelho
ESP GND -> Raspberry GND – preto
ESP RXD -> Raspberry TX – verde
ESP TXD -> Raspberry RX – laranja
ESP CH_PD -> Raspberry 3.3v – vermelho
ESP GPIO0 -> Raspberry GND – preto

Após a conexão elétrica, você pode conectar seu Raspberry Pi à uma fonte de energia, será necessárias algumas configurações para permitir que a porta serial possa ser utilizada para comunicação com o ESP8266.

  1. Acesse a pasta /boot e edite o arquivo e retire esta parte do arquivo console=ttyAMA0,115200
  2. Execute o comando sudo raspi-config, no menu Interfacing Options, selecione a opção p6 Serial, e quando a aplicação perguntar sobre login pela porta serial selecione não e habilitar a porta serial selecione SIM.
  3. Reinicie o Raspberry pi
  4. Agora precisamos instalar alguns programas
    1. O primeiro é um cliente serial chamado minicom, para isso digite o comando sudo apt-get install minicom
    2. Precisamos também de um script Python que é o responsável por realizar o update do firmware do ESP8266, para isso, clone o seguinte repositório com o comando: git clone https://github.com/themadinventor/esptool.git
    3. Por fim precisamos baixar o arquivo contendo a imagem do novo firmware a ser instalado, para isso acesse o link https://www.espressif.com/en/support/download/at. Neste tutorial utilizamos a última versão: ESP8266 AT Bin V1.6.1 Dentro do arquivo zip uma lista de arquivos estarão disponíveis, esses arquivos devem ser copiados para dentro da pasta esptool que foi criada ao clonar o repositório git, no passo anterior. Para a versão ESP8266-01 de 512k vamos precisar dos arquivos:
      1. boot_v1.7.bin
      2. user1.1024.new.2.bin
      3. esp_init_data_default_v08.bin
      4. blank.bin

O primeiro passo é executar o comando abaixo para zerar a memória flash do ESP8266. Ao finalizar, desligue o cabo vermelho ligado ao VCC do ESP8266 e ligue novamente para resetar o dispositivo.

#limpar a memória do ESP8266
python esptool.py –port /dev/serial0 erase_flash

Em seguida precisamos construir o comando para atualizar o firmware, como ele é composto por vários arquivos, cada um deve ser gravado no endereço de memória correto, para que o dispositivo possa encontrar a sequencia de execução:

Endereço na memória  Arquivo
0x7e000                          blank.bin
0x7C000                          esp_init_data_default_v08.bin
0x0                                    boot_v1.7.bin
0x1000                             user1.1024.new.2.bin

O comando a ser executado para atualizar o firmware esta abaixo.

#gravar o novo firmware
python esptool.py – -port /dev/serial0 write_flash 0x7e000 blank.bin 0x7C000 esp_init_data_default_v08.bin 0x0 boot_v1.7.bin 0x1000 user1.1024.new.2.bin

Durante a atualização um log similar a esse será apresentado em tela, após a conclusão basta desconectar novamente o cabo vermelho VCC, para reiniciar o ESP8266:

root@raspberrypi:/home/pi/esptool# python esptool.py – -port /dev/serial0 write_flash 0x7e000 blank.bin 0x7C000 esp_init_data_default_v08.bin 0x0 boot_v1.7.bin 0x1000 user1.1024.new.2.bin
esptool.py v2.3.2-dev
Connecting….
Detecting chip type… ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 512KB
Compressed 4096 bytes to 26…
Wrote 4096 bytes (26 compressed) at 0x0007e000 in 0.0 seconds (effective 4912.0 kbit/s)…
Hash of data verified.
Compressed 128 bytes to 75…
Wrote 128 bytes (75 compressed) at 0x0007c000 in 0.0 seconds (effective 90.1 kbit/s)…
Hash of data verified.
Compressed 4080 bytes to 2936…
Wrote 4080 bytes (2936 compressed) at 0x00000000 in 0.3 seconds (effective 118.0 kbit/s)…
Hash of data verified.
Compressed 407796 bytes to 293036…
Wrote 407796 bytes (293036 compressed) at 0x00001000 in 27.2 seconds (effective 119.8 kbit/s)…
Hash of data verified.

Leaving…
Hard resetting via RTS pin…

 

Agora que o firmware esta atualizado, podemos acessar o ESP8266 utilizando o programa Minicom para modificar a velocidade de transmissão de dados. IMPORTANTE: DESCONECTE O CABO QUE ESTA LIGADO NA GPIO0 E REINICIE O ESP8266 DESCONECTANDO E RECONECTANDO O CABO VCC.

Para isso execute o comando:

root@raspberrypi:/home/pi/esptool# minicom -b 115200 -o -D /dev/serial0

Dentro do terminal serial digite o comando abaixo, e para confirmar tecle CTRL+M e em seguida CTRL+J

AT+UART_DEF=9600,8,1,0,0

A partir deste momento, você não conseguirá mais digitar comandos no minicom, tecle CTRL+A e depois a letra Q para sair do programa.

Execute novamente o programa minicom mas utilizando a velocidade de 9600 bits por segundo para testar a modificação:

root@raspberrypi:/home/pi/esptool# minicom -b 9600 -o -D /dev/serial0

Digite o comando AT e em seguida tecle CTRL + M e CTRL + J, voce deverá receber o retorno OK, confirmando que a modificação foi feita com sucesso.

Add your comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.