Análise do circuito gravador para ESP8266

Introdução

 

Que o ESP8266 virou febre todos nós já sabemos. Mas um ponto que alguns têm dúvida é de como é feita a gravação ou circuito gravador para ele. Lembro-me de quando peguei um ESP8266-01 pela primeira vez. Os circuitos de gravação com protoboard não funcionavam de primeira, tinha mau contato nos jumpers, protoboard, etc. Mas com o tempo e disseminação do ESP8266 os tutoriais pela internet foram ficando melhores, mais assertivos nos circuitos, ajudando bastante os iniciantes.

 

Neste artigo irei mostrar algumas técnicas que são utilizadas para gravação do ESP8266, como é feito o processo, analisaremos alguns circuitos de placas open hardware como NodeMCU e WeMos e faremos na prática um circuito gravador para ESP8266 automático na protoboard com transistores e alguns outros componentes. No final irei mostrar como utilizei alguns desses conceitos para desenvolver o módulo gravador USB automático para ESP8266-01 abaixo:

 

Gravador USB para ESP8266.
Figura 1 - Gravador USB para ESP8266.

 

Processo de Gravação do ESP8266

 

O ESP8266 possui alguns modos de operação. Dentre eles temos o modo de operação normal, onde o ESP8266 executa o programa gravado na memória. E temos outro modo de programação via serial, onde podemos carregar um programa através da IDE Arduino, por exemplo.

 

Os modos de operação são configurados através de pinos mudando o nível lógico. Quando ocorre o Reset, o módulo entra no modo de acordo com a configuração dos pinos. Basicamente o pino GPIO0 estando em LOW, o módulo entra em modo gravação. GPIO0 em HIGH o módulo executa o programa gravado na memória. Para isso deve ser feito um circuito gravador para ESP8266.

 

Nosso colega articulista Josemar Alves, detalhou bastante esse processo nos dois seguintes artigos:

 

Tipos de circuito gravador para ESP8266

 

Podemos manipular os pinos de reset e GPIO0 de diversas maneiras para que mudem seus estados. Dentre os diversos métodos temos métodos manuais e automáticos. Abaixo vamos ver alguns métodos e circuitos mais comumente utilizados.

 

Circuito com push button e conversor USB-serial

 

Este é o circuito mais comum e foi muito disseminado nos primeiros tutoriais sobre ESP-01. Dois push buttons são usados para controlar os pinos de reset e GPIO0 colocando-os em nível baixo LOW de forma sequencial. Primeiro pressiona-se o botão GPIO0, em seguida pulsa-se o botão reset e solta-se o botão GPIO0. Assim o módulo entra em modo gravação via serial.

 

Para gravação serial é comumente utilizado o conversor USB-serial FTDI, mas podem ser usados outros como o CP210x ou CH340x. Com o ESP-01 em modo gravação e o adaptador USB-serial conectado, o programa pode ser transferido via serial pela IDE Arduino por exemplo.

 

Veja abaixo como é a montagem do circuito.

 

Circuito gravador para ESP8266 com push buttons.
Figura 2 - Circuito gravador para ESP8266 com push buttons.

 

Circuito com capacitor e linha DTR do conversor USB-serial

 

Encontrei um post de blog muito legal do Charles onde ele documenta suas aventuras desenvolvendo uma placa com ESP8266. Ele relata que queria uma placa enxuta, sem necessidade de um conversor USB-serial na própria placa, mas que também fizesse a manipulação de reset e GPIO0 automaticamente para colocar o módulo em modo gravação.

 

Para isso ele desenvolveu um circuito gravador para ESP8266 utilizando da linha DTR da serial e de um capacitor de 100 nF no pino de Reset. Assim, quando DTR mudava seu estado, o pino GPIO0 mudava para nível baixo juntamente com o reset, mas por conta do capacitor o reset ia para nível alto logo depois.

 

O circuito desenvolvido por charles pode ser visto abaixo. Note que ambos os pinos Reset e GPIO0 estão atrelados ao DTR.

 

Circuito gravador para ESP8266 com capacitor.
Figura 3 - Circuito gravador para ESP8266 com capacitor.

 

Veja abaixo as medições que Charles realizou em seus protótipos com um osciloscópio. A linha amarela representa o Reset e linha Azul representa o GPIO0.

 

Análise dos sinais de gravação.
Figura 4 - Análise dos sinais de gravação.

 

Em seus protótipos na protoboard o sistema funcionou lindamente, mas devido algumas particularidades de alguns módulos ESP12 que ele testou, ele teve que mudar um pouco sua técnica utilizando o pino CH_PD (Enable) ao invés do pino reset. Veja mais detalhes e o motivo dessa mudança na íntegra lendo o artigo original do Charles:

 

ESP8266 Reset and CH_PD pins for FTDI auto reset

 

Veja o projeto da placa do Charles.

 

Placa de desenvolvimento ESP8266.
Figura 5 - Placa de desenvolvimento ESP8266.

 

Circuito com transistores e pinos RTS e DTR do conversor USB-serial

 

Este é o método mais comum encontrado em diversas placas com ESP8266 como NodeMCU, WeMos, entre outras. O circuito gravador para ESP8266 NodeMCU consiste de dois transistores, resistores e das linhas RTS e DTR do conversor USB-serial.

 

A aplicação esptool.py, que é usada para gravação dos módulos ESP8266, manipula os pinos DTR e RTS sequencialmente seguindo a tabela verdade abaixo para que o módulo entre em modo gravação. O esquemático abaixo faz parte da placa NodeMCU. Veja o esquemático completo do NodeMCU aqui.

 

Circuito gravador para ESP8266 NodeMCU.
Figura 6 - Circuito gravador para ESP8266 NodeMCU.

 

E a placa Wemos D1 Mini, por sua vez, utiliza um pequeno CI, o UMH3N, que contém 2 transistores internos que também estão conectados aos pinos RTS e DTR do CI conversor USB-serial. O circuito abaixo é parte do circuito da Wemos D1 mini. Veja o esquemático completo aqui.

 

Circuito gravador para ESP8266 Wemos D1 Mini.
Figura 7 - Circuito gravador para ESP8266 Wemos D1 Mini.

 

Veja abaixo o trecho de código da aplicação esptool.py que é responsável por controlar os pinos DTR e RTS.

 

 

Lembrando que a aplicação esptool.py é usada “por debaixo dos panos” na IDE Arduino para gravação de módulos ESP8266.

 

Assim temos o mesmo princípio das chaves push button já visto anteriormente, só que de maneira automatizada.

 

Montagem prática do circuito automático

 

Nessa seção vamos montar o circuito gravador para ESP8266 automático com transistores visto anteriormente. Faremos um circuito básico para piscar um LED. Para isso precisamos dos seguintes componentes:

  • 1x Conversor USB-serial FTDI 3,3 V (ou outro que possua as linhas DTR e RTS);
  • 2x Transistores NPN BC337;
  • 2x Resistores 4,7 K ohm;
  • 1x Resistor 330 ohm;
  • 1x LED 5 mm;
  • 1x Módulo WiFi ESP8266-01;
  • 1x Adaptador ESP-01 para protoboard Bauertronix (ou outro compatível).

 

Monte os componentes de acordo com o esquemático abaixo:

 

Circuito gravador para ESP8266 Automático.
Figura 8 - Circuito gravador para ESP8266 Automático.

 

Conecte o conversor USB-serial na USB do computador, abra a IDE Arduino e selecione a opção “Reset Method -> nodemcu”.

 

Método de Reset na IDE Arduino.
Figura 9 - Método de Reset na IDE Arduino.

 

Caso sua IDE ainda não esteja configurada para trabalhar com placas ESP8266, verifique as instruções e passos necessários para configurar sua IDE neste link.

 

Copie o código abaixo que faz o LED conectado ao GPIO2 piscar.

 

 

Aperte Upload e “automagicamente” você deverá ver o sketch sendo carregado no ESP-01 e o LED irá piscar. \o/

 

Programa pisca LED com ESP8266
Gif 1 - Programa pisca LED com ESP8266

 

Projeto Gravador USB automático

 

Depois de ter estudado vários dos conceitos acima sobre circuito gravador para ESP8266, eu decidi colocá-los em prática desenvolvendo um gravador USB automático para o módulo ESP-01. Visto que muitos dos adaptadores USB “chineses” não possuem circuito automático, algumas vezes é necessário fazer adaptações.

 

Fiz várias pesquisas para especificar os componentes que seriam utilizados no módulo e cheguei na seguinte BOM:

  • 1x Conversor USB-serial CH340C;
  • 1x Regulador 3,3 V 662K SOT-23;
  • 1x Conector USB macho;
  • 1x LED;
  • 2x Transistores NPN S8050 SOT-23;
  • 2x Resistores 12 K ohm;
  • 1x Resistor 1 K ohm;
  • 3x Capacitores cerâmicos 2,2 uF;
  • 1x Capacitor cerâmico 100 nF;
  • 1x Header 4x2 fêmea.

 

Componentes Gravador USB para ESP8266.
Figura 10 - Componentes Gravador USB para ESP8266.

 

O esquemático e layout da PCB foram feitos no KiCAD. Veja abaixo o esquemático do circuito gravador para ESP8266:

 

Circuito Gravador para ESP8266 USB.
Figura 11 - Circuito Gravador para ESP8266 USB.

 

A PCB possui 2 layers e foi fabricada na JLCPCB, que faz PCBs de excelente qualidade e custo acessível. Os componentes foram adquiridos no Aliexpress e a montagem foi feita manualmente. Veja abaixo algumas fotos do projeto:

 

Painel de placas Bauertronix Circuito Gravador para ESP8266 USB.
Figura 12 - Painel de placas Bauertronix Circuito Gravador para ESP8266 USB.
Gravador para ESP8266 USB Bauertronix.
Figura 13 - Gravador para ESP8266 USB Bauertronix.

 

Veja no vídeo abaixo como fica fácil programar o ESP-01 com o gravador USB.

 

 

Conclusão

 

Neste post vimos como é o processo de gravação dos módulos baseados no ESP8266 da Espressif e mostramos diversas técnicas para realizar o processo. Apresentamos na prática como montar um circuito gravador para ESP8266 na protoboard utilizando transistores para realizar a gravação automática.

 

Com um projeto open hardware de um adaptador USB para gravação do ESP-01, mostramos que os conceitos apresentados no artigo podem ser aplicados no desenvolvimento de hardware e placas baseadas no ESP8266. No link abaixo está disponível todo o projeto KiCAD do Gravador USB no GitHub da Bauertronix.

 

https://github.com/bauertronix/esp01-usb-programmer

 

Qualquer dúvida sobre o circuito gravador para ESP8266 é só perguntar nos comentários abaixo que irei ajudar na medida do possível. Comente também suas ideias e sugestões.

 

Saiba mais

 

Primeiros Passos com WEMOS D1 R1 com ESP8266EX embutido

Programando o ESP8266 em C no Eclipse

ESP8266 com Arduino

 

Referências

 

https://github.com/espressif/esptool#entering-the-bootloader

https://github.com/espressif/esptool/wiki/ESP8266-Boot-Mode-Selection

http://projectproto.blogspot.com/2009/11/pyserial-dtr-and-rts-manipulation.html

https://github.com/espressif/esptool/blob/master/esptool.py

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Giovanni Bauermeister
É formado em Técnico em Mecatrônica pelo SENAI Roberto Mange de Campinas, onde teve seus primeiros contatos com microcontroladores, eletrônica e programação. Em 2016 obteve a graduação em Engenharia de Controle e Automação pela UNISAL, também em Campinas. Durante a graduação, teve a oportunidade de ingressar como estagiário na empresa Toradex, onde atuou e desenvolveu habilidades em sistemas Linux embarcado. Participou do movimento maker, contribuindo com tutoriais e suporte ao cliente na Filipeflop. Atualmente atua na área de desenvolvimento de projetos.

4
Deixe um comentário

avatar
 
2 Comment threads
2 Thread replies
3 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Breno CruzGiovanni BauermeisterAndré Feliciano Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Breno Cruz
Membro

Giovanni,

Primeiramente, obrigado pelo artigo! Me ajudou bastante a entender o processo de gravação dessas placas e o funcionamento por trás das cortinas. Parabéns pelo desenvolvimento da Bauertronix e por disponibilizar o projeto, sem dúvida essa filosofia de open hardware ajuda bastante toda a comunidade interessada no desenvolvimento de hardware de forma profissional. E sem dúvida, a Bauertronix ficou muito profissional!

Abraços!

André Feliciano
Membro
André Feliciano

Muito legal o artigo. Parabéns. Não imaginava a eletrônica por de trás da gravação.