WiFi ESP12 (ESP8266): programando com a IDE do Arduino

   ESP8266, WiFi, ioT (internet das coisas) são três termos extremamente conectados/entrelaçados desde o lançamento deste pequeno módulo chamado ESP8266 (em meados de 2014, conforme artigo publicado anteriormente). Conexão á internet sem fio via WiFi facilita muito a criação de aplicações, as torna menos dependentes de cabeamento (uma fonte de custo enorme nas instalações) e dá mais mobilidade á projetos.
   Porém teoria e prática são coisas bem diferentes: o conceito de ioT pode ser lindo maravilhoso, mas até mesmo um hardware  simples e pequeno como o ESP8266 pode trazer dor de cabeça ao usuário, pelo menos até que se pegue a "manha" de sua utilização.
   É por isso que eu resolvi trazer uma série de artigos com os princípios básicos da utilização do ESP8266, na forma da versão ESP12 (imagem abaixo). Neste primeiro artigo da série, vou comentar sobre a utilização de seus pinos digitais, analógicos e PWM com a IDE do Arduino, sem utilizar sua capacidade de WiFi.

OBS: tenho três modelos de ESP8266 (ESP-12) á venda na minha loja virtual:
1- ESP8266 com Arduino Leonardo na mesma placa!
2- ESP-12 somente
3- ESP-12 rodando NodeMCU, com LED RGB e carregador de LiPo


   Meu artigo se baseia no tutorial elaborado pelo website eDIY, que já começa indicando o circuito eletrônico mínimo necessário para o funcionamento do ESP12 (que é similar ao indicado pelo amigo Augusto Campos neste artigo); veja abaixo.


   Você vai precisar montar este circuito todo, pois o procedimento de gravação de código nos ESP8266 não é tão simples e tranquilo quanto no Arduino (apesar de utilizar a mesma IDE). Algumas notas sobre o circuito:

- O LED não é extremamente necessário para gravação, mas vai ser útil para rodar um "blink" mais pra frente
- O capacitor de 100nF faz a filtragem de ruídos vindos da sua fonte de alimentação 3,3V. Eu testei este circuito em bancada sem o capacitor e funcionou normalmente.
- O "jumper" indicado na imagem deve ser fechado apenas quando você for gravar código no ESP8266; em outros momentos deve permanecer aberto.
- O conversor USB-Serial não precisa ter um pino de reset (que é necessário para gravar o Arduino por exemplo); basta que ele tenha RX, TX e GND. Qualquer conversor que seja reconhecido pelo seu PC serve (FT232, PL2303, CH340, etc).

   Após montar o circuito acima siga este tutorial do site OpenHomeAutomation, que ensina como adicionar a placa ESP12 à IDE do Arduino; o que você deve fazer é basicamente:

- Na IDE do Arduino, vá em "Arquivo > Preferências" e no campo "Gereciador de placas adicionais" coloque a seguinte URL: http://arduino.esp8266.com/package_esp8266com_index.json .
- Vá em "Ferramentas > Placas > Gerenciador de Placas" e procure por "Plataforma ESP8266"; clique em baixar e aguarde o download.

   Pronto! agora você pode programar os seus ESP8266 diretamente pela IDE do Arduino. O primeiro código que eu indico você rodar está abaixo (e também no link passado acima), ele conecta seu ESP-12 ao WiFi que você selecionar (coloque login e senha da sua rede no sketch abaixo) e mostra o seu endereço IP.

 // Import required libraries  
 #include "ESP8266WiFi.h"  
   
 // WiFi parameters  
 const char* ssid = "your_wifi_name";  
 const char* password = "your_wifi_password";  
   
 void setup(void)  
 {   
 // Start Serial  
 Serial.begin(115200);  
   
 // Connect to WiFi  
 WiFi.begin(ssid, password);  
 while (WiFi.status() != WL_CONNECTED) {  
 delay(500);  
 Serial.print(".");  
 }  
 Serial.println("");  
 Serial.println("WiFi connected");  
   
 // Print the IP address  
 Serial.println(WiFi.localIP());  
   
 }  
   
 void loop() {  
   
 }  

   Para efetuar a gravação deste código, feche o jumper que indiquei na imagem acima e pressione o botão reset; o ESP vai entrar em modo de programação. Ao finalizar a gravação você pode abrir o monitor serial da IDE do Arduino, aguardar alguns segundos e ver o seu IP sendo escrito na tela!.
OBS: caso seja impresso algo como "Exception(2) after boot" no seu monitor serial, a solução é alterar o tamanho da memória do ESP no menu "Ferramentas > Tamanho da Flash" de 512kB para 4Mb, conforme descrito neste link.  
   O circuito que montei para meus testes está na imagem abaixo (bem mais bagunçado que no desenho do Fritzing não é?).


   Após montar o circuito acima, adicionar o ESP8266 à IDE do Arduino, coloca-lo no modo de gravação (fechar o jumper) e gravar o sketch testador de redes WiFi (acima), você agora tem certeza que seu ESP8266 funciona!!.
   O próximo e último teste do artigo de hoje vai envolver um potenciômetro (entrada analógica), um botão (entrada digital) e dois LED's (saída PWM e saída digital). Segundo o site oficial do ESP8266, esta placa tem apenas uma entrada analógica (que funciona de 0 á 1V apenas) e todos os pinos podem funcionar como saída PWM.
OBS: o circuito abaixo deve ser ADICIONADO ao circuito que você utilizou acima, não remova nenhuma conexão feita anteriormente, apenas adicione os componentes e conexões mostrados abaixo.


   Utilizando o procedimento já demonstrado neste artigo (fechar o jumper e pressionar reset), faça o download do código abaixo para o seu ESP-12.  

 const int analogInPin = A0;   
 const int ledBotao = 2;   
 const int analogOutPin = 12;  
 const int botao = 13;   
 int sensorValue = 0;   
 int estadoBotao = 0;  
   
 void setup() {  
  pinMode(botao, INPUT);  
  pinMode(ledBotao, OUTPUT);  
 }  
   
 void loop() {  
    
  sensorValue = analogRead(analogInPin);  
  analogWrite(analogOutPin, sensorValue);  
   
  estadoBotao = digitalRead(botao);  
  if (estadoBotao == HIGH) {  
   digitalWrite(ledBotao, LOW);  
   } else {  
     digitalWrite(ledBotao, HIGH);  
   }  
   
  delay(100);  
 }  

   Este código vai funcionar da seguinte forma: 
- Ao pressionar o botão (GPIO13) o LED que estava aceso (GPIO2) vai apagar
- Ao girar o potenciômetro (conectado ao pino 'ADC') a luminosidade do outro LED (GPIO12) vai variar, através da aplicação de PWM.
  
   No próximo artigo desta série, trarei um tutorial sobre conexão do ESP-12 á internet via WiFi, e envio de dados de sensores para o Thingspeak!.

Marcadores: , , , , , ,