banner

Ir para o Forum

NodeMCU ESP8266: Detalhes e Pinagem



Hoje vamos falar sobre a pinagem do ESP8266, ou melhor, do NodeMCU. Particularmente, eu gosto bastante deste componente porque ele já vem com entrada USB. Importante explicar, no entanto, que na verdade o NodeMCU é formado por um ESP12E, o qual ainda possui um ESP8266EX em seu interior. Vamos, então, aprender a identificação correta dos pinos olhando o datasheet do NodeMCU, conhecer quais destes pinos funcionam com digitalWrite, digitalRead, analogWrite e analogRead, além de entender melhor o boot.
Como programo mais com Arduino IDE, praticamente enxergo o NodeMCU como um Arduino. Mas, tenho que destacar que esse dispositivo tem seus diferenciais, principalmente em relação a pinagem. Se você assistiu o vídeo ESP32: Detalhes internos e pinagem, sabe que existem pinos que não podem ser usados ou que são reservados para determinadas coisas. Então, quero fazer aqui algo bem parecido, mas desta vez com o ESP8266.


NodeMCU Devkit 1.0


O termo NodeMCU geralmente se refere ao firmware, enquanto a placa é denominada Devkit.
O NodeMCU Devkit 1.0 é constituído de um ESP-12E em uma placa que facilita o seu uso.
Ainda, tem regulador de tensão, interface USB. 



ESP-12E

O ESP-12E é uma placa criada pela AI-THINKER, sendo constituído por sua vez por um ESP8266EX, dentro da capa de metal.



ESP8266EX

Feito pela Espressif, este microchip possui WiFi integrado e baixo consumo de energia.
Processador RISC Tensilica L 106 32bit com clock máximo de 160 MHz.



NodeMCU 1.0 ESP-12E Pinout




ESP-12E Pinout

Quero destacar que o NodeMCU e o ESP-12E não são a mesma coisa. No caso do ESP-12E, a gravação usa a serial, a Uart. Já no NodeMCU, isso é feito pela USB.




Afinal, qual o número que coloco quando estou programando?

Utilize o número que está na frente do GPIO ou as constantes A0, D0, D1, D2, D3, D4, D5, D6, D7 e D8.



Boot

Colocamos o osciloscópio na ponta de cada pino, pois isso nos possibilita descobrir, por exemplo, que quando ligamos o NodeMCU, os pinos dele não ficam todos iguais. Alguns ficam em alta e outros em baixa, por default. Veja os comentários sobre o comportamento de cada pino após o boot na imagem abaixo.



Constantes que já estão predefinidas



Exemplo Blink             



Neste exemplo, ligamos um LED na porta D5, que é o GPIO14. Então, as opções são as seguintes:
//O led está no GPIO14
#define LED 6
//ou usar a constante D5 que já está definida
//#define LED D5

void setup() {
  pinMode(LED, FUNCTION_3);
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}



INPUT / OUTPUT

Ao realizar testes de INPUT e OUTPUT nos pinos, obtivemos os seguintes resultados:

  • digitalWrite NÃO funcionou com os GPIOs 6, 7, 8, 11 e o ADC (A0)
  • digitalRead NÃO funcionou com os GPIOs 1, 3, 6, 7, 8, 11 e o ADC (A0)
  • analogWrite NÃO funcionou com os GPIOs 6, 7, 8, 11 e o ADC (A0) (Os GPIOs 4, 12, 14, 15 possuem PWM por hardware os demais por software)
  • analogRead funcionou apenas com o ADC (A0)

  • 6, 7, 8, 11 não funcionam para os quatro comandos acima



Faça o download do PDF



9 comentários:

  1. Fernando estou no tcc do Senai estou fazendo automação residência com o modulo nodeMcu esp8266 meu grupo fez uma App no mitAppInventor . Somente o modulo funcionou perfeitamente, mais o professor disse que teria que fazer com um micro controlador Pic16f877a.
    Então não conseguimos fazer a comunicação entre o modulo e o pic. Poderia me dar umas dicas.
    Exemplo: o comunicação UART do modulo como ela funciona? Pode mandar carácter ou é só bit? E quais pinos são usados estamos na mais de 1 mês e não conseguimos exatamente por esse detalhe. Se puder ajudar agradeço de qual quer forma.

    ResponderExcluir
    Respostas
    1. Devid, vc pode usar o ESP8266 com pic. Para isso use o em modo AT como uma ponte serial. Ele vai mandar byte a byte como fosse um módulo tx rx transceiver. Tem video no meu canal ensinando isso com arduino. Para pic é semelhante. Abraço!

      Excluir
    2. Se conseguimos fazer funcionar o nodeMcu iremos dar agradecimento no livro e na apresentação agradeço muito sua ajuda.

      Excluir
  2. Boa Noite Fernando!

    Muito bom seu vídeo, lhe escrevi esses tempos sobre um projeto de controle de acesso usando Arduino + ESP8266, e você naquela oportunidade me aconselhou o uso de dispositivo integrado e mais avançado. Estou usando o Nodemcu, e este vídeo foi muito importante para amadurecer os conhecimentos que tive ao longo desses últimos dois meses e meio. Também cheguei a testar cada pino e ele tem particularidades, mas é um equipamento muito bom de trabalhar.

    Obrigado pelo vídeo e pela ajuda.

    Abraço!
    Christiano De Carli

    ResponderExcluir
  3. Oi Fernando. Você saberia me dizer, se a tensão do ESP, de 3,3 volts, tem alguma tolerância?
    Tipo, posso alimentá-lo com 3 volts de uma bateria de Lítio CR2032, ou com uma LiFe de 3.3 volts, que, carregada pode chegar a 3,6 volts.

    Grato,
    Elton Farina
    (edfarina@gmail.com)

    ResponderExcluir
  4. Olá, professor Fernando.
    Muito bom o seu trabalho, acompanho as vídeo aulas no YouTube e já recomendei para vários amigos.
    Gostaria de saber se o App Labkit funciona só com o NodeMCU ESP8266?
    Quero fazer uma automação sem precisar usar o Arduino.

    ResponderExcluir
  5. Me esplica qual a diferença desta plataforma para aque o sr esta explicando, pois tenho uma dessa aqui e nao sei usar.ESP8266 WIFI NodeMcu Lua Escudo Driver de Motor Board L293D ESP8266 ESP-12E Dupla H Bridge Para Arduino Módulo de Alta

    ResponderExcluir
  6. PRECISO DE AJUDA!
    Excelente artigo e vídeo, estou começando, porém ao tentar fazer o simples pisca do led, apareceu esta mensagem de erro bisonha:
    Arduino: 1.8.7 (Windows Store 1.8.15.0) (Windows 10), Placa:"Generic ESP8285 Module, 80 MHz, Flash, ck, 26 MHz, 1M (no SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    O sketch usa 247940 bytes (24%) de espaço de armazenamento para programas. O máximo são 1023984 bytes.
    Variáveis globais usam 28028 bytes (34%) de memória dinâmica, deixando 53892 bytes para variáveis locais. O máximo são 81920 bytes.
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    error: failed reading byte
    warning: espcomm_send_command: can't receive slip payload data
    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    error: espcomm_upload_mem failed

    Este relatório teria mais informações com
    "Mostrar a saida detalhada durante a compilação"
    opção pode ser ativada em "Arquivo -> Preferências"

    O que pode estar acontecendo?
    Agradeço a atenção.

    Veja a foto da montagem:
    https://www.flickr.com/photos/92278260@N04/shares/uJbTo4

    ResponderExcluir
    Respostas
    1. Conseguir, não sei bem o remédio. Fiz a atualização do firmware do ESP8266, porém acho o que resolveu mesmo foi mudar a "upload speed" para 921600.

      Excluir

Tecnologia do Blogger.