quinta-feira, 10 de março de 2016

Atualizar o firmware do ESP8266

O ESP8266, Figura 1, é um SoC (System-on-a-chip) de baixo custo com Wi-Fi, memória flash, antena e GPIO (General Purpose Input/Output), capaz de implementar o protocolo TCP/IP completamente. Foi desenvolvido em 2014 pela empresa chinesa Espressif Systems [1].

Fig. 1 - ESP8266-ESP1.

Varias versões de firmware foram lançadas, alterando o baud rate para 9600, 57600 ou 115200. Normalmente está é causa de problemas na comunicação.

Neste post iremos utilizar a ferramenta esptool para gravar o firmware v.0.9.2, pois ele trabalha com baud rate 9600. Para tal será necessário um conversor USB/Serial com suporte a 3.3V (FTDI). 

Conectando o módulo ESP8266 no conversor USB/Serial (FTDI)

A Figura 2 mostra o pinagem do módulo.

Fig. 2 - Pinagem.
 
Já a Figura 3 o esquema de ligação do módulo no FTDI.

Fig. 3 - Esquema de ligação.

A tabela abaixo complementa as informações de ligação:

ESP8266 -----> FTDI

Vcc 3.3V -----> Não conectar no FTDI - usar fonte externa.
GND ----------> GND + GND da fonte externa
TX ------------> RX
RX ------------> TX
CH_PD -------> 3.3V que alimenta o FTDI
GPIO 0 -------> GND

O GPIO 0 conectado ao GND ativa a função flashing do ESP8266.

Download do firmware e esptool 

O Esptool é um utilitário Python para se comunicar com o gerenciador de inicialização ROM no Espressif ESP8266. Pretende ser uma plataforma simples e independente, de código aberto e substituto do XCOM [2].

Atualize o sistema.
$ sudo apt-get update
$ sudo apt-get dist-upgrade
Esptool tem como dependência a biblioteca pySerial.

Para  instalar:
$ pip install pyserial

ou

$ sudo apt-get install python-serial
Agora faça o download da ferramenta esptool.
$ cd /opt
$ git clone https://github.com/themadinventor/esptool.git
$ cd esptool
Faça o download do Firmware v0.9.2.2 AT na pasta do esptool e descompacte o arquivo.

Após realizar todas as ligações do módulo, conecte o FTDI na USB do PC.

Abra um terminal/shell e digite:
$ python esptool.py -p /dev/ttyUSB0 write_flash 0x000000 "v0.9.2.2 AT Firmware.bin"
O processo leva alguns segundos.

Quando a gravação terminar, desconecte o FTDI da USB, desligue o módulo ESP e desconecte a GPIO 0 do GND para sair do modo flashing.

É hora de testar.

Teste

Conecte novamente o FTDI na USB e ligue a alimentação do ESP.

Abra a IDE do Arduino, clique em "ferramentas" e depois selecione a porta correta.

Clique em "Serial Monitor", ajuste para Baud rate 9600 e selecione "Both NL & CR".

Digite (sem aspas "") "AT" e terá como resposta "OK";
Digite "AT+RST" para resetar o módulo;
Digite "AT+GMR" para ver a versão do firmware;
Digite "AT+CWLAP" para ver todas as redes que o módulo detectou.

Uma lista com vários comandos pode ser obtida clicando aqui. 

Um pouco mais...

O procedimento acima funciona com os firmwares:

v0.9.5.2 AT Firmware;
nodemcu_20150213;
AT22SDK100-2015-03-20-boot1.2.

Para gravar o firmware boot1.1, faça download do arquivo na pasta do esptool e descompacte-o.

Utilize o comando:
esp8266_at$ python esptool.py -p /dev/ttyUSB0 write_flash 0x00000 ../esp8266_at/bin/boot_v1.1.bin 0x01000 ../esp8266_at/bin/v0.20/user1.bin 0x7C000 ../esp8266_at/bin/esp_init_data_default.bin 0x7E000 ../esp8266_at/bin/blank.bin
Para projetos com o Arduino recomendo a biblioteca ESPsoftwareserial.

Links

[1]. ESP8266 - https://en.wikipedia.org/wiki/ESP8266 
[2]. ESPtool - https://github.com/themadinventor/esptool 
[3]. ESPsoftwareserial library - https://github.com/plerup/espsoftwareserial 
[4]. NodeMCU ESP8266 Firmwarehttps://github.com/nodemcu/nodemcu-firmware

4 comentários:

Josenildo Simão disse...

Olá. Por que não posso conectar o 3.3v no FTDI, mas na fonte externa ?

Binary Codec disse...

@Josenildo Simão: Olá, porque o consumo de corrente durante a gravação é mais alto. Ligando direto no FTDI podem ocorrer erros de gravação ou mesmo danificar o FTDI ou USB.

Josenildo Simão disse...

Agradeço por ter respondido! A fonte tem que fornecer até quantos amperes ?

Maurilio Pereira disse...

Boa noite!
Ao realizar o procedimento o meu apresenta o seguinte erro:
esptool.py v2.0
Connecting........_____....._____....._____....._____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to Espressif device: Timed out waiting for packet header