Pessoal, minha idéia aqui é dar uma pincelada no que se deve fazer com o ESP para interagir com os GPIOs do Arduino remotamente via web.
Alguém disse uma vez "If you can blink a LED you can do anything". No mundo dos sistemas embebidos ("Embebed systems"), esse dizer é uma verdade verdadeira ululante! Quando você faz com que um LED acenda a partir de um sinal gerado em uma das portas do Arduino, ou que ele possa ler o status de uma chave ou sensor, o que está realmente acontecendo é a interação do mundo da eletrônica com o mundo físico! Conseguir essa interação via uma página da internet é de fato toda a essência do IoT.
A primeira configuração que testarei, será o ES8266 funcionando como um servidor web local, conectado a um Arduino UNO. Vamos instalar botões em dois GPIOs digitais do Arduino (Pinos 8 e 9) simulando o estado de algum sensor e um potenciômetro na porta analógica A0, simulando os dados fornecidos por um sensor analógico, como por exemplo temperatura. A função do ESP8266 será receber essas informações dos GPIOs do Arduino e gerar uma página HTML simples, publicando os resultados em tempo real na web! Cool!!!!!!!!
O circuito:
Montei dois botões (normalmente abertos) conectados entre as entradas do Arduino e o VCC (via um resistor de 10K para não gerar um curto-circuito, claro). Ao pressionar o botão, o que estamos fazendo é é colocar um sinal HIGH na entrada digital do Arduino. O potenciômetro (também de 10K) será montado entre VCC (5V) e Terra, com seu pino central conectado a entrada analógica A0 do Arduino. O pot controlará o nível de tensão na entrada analógica A0, a qual variará de "0V a 5V". O Arduino lerá a tensão no pino AO e seu ADC interno (Analogic Digital Converter), convertirá a mesma para um valor que variará respectivamente de "0 a 1023".
As definições iniciais:
#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3); //Rx ==> Pin 2; TX ==> Pin3
#define speed8266 9600
#define CH_PD 4
#define DEBUG true
void setup()
{
esp8266.begin (speed8266);
Serial.begin(9600);
reset8266(); // Pin CH_PD vai a zero por um breve momento e depois fica em HIGH
InitWifiModule();
}
O que farei aqui, será ressaltar os principais módulos do código, mas não se preocupem que no final deixo o link para o código completo:
Depois das definições e set up geral é importante iniciar o ESP como um servidor. Para isso, a função InitWifiModule()
void InitWifiModule()
{
sendData("AT+RST\r\n", 2000, DEBUG); // reset
sendData("AT+CWJAP=\"Your network ID\",\"password\"\r\n", 2000, DEBUG);
delay(3000);
sendData("AT+CWMODE=1\r\n", 1000, DEBUG);
sendData("AT+CIFSR\r\n", 1000, DEBUG); // Show IP Adress
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); // Multiple conexions
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // start comm port 80
}
No loop principal, se espera para ver se o ESP está enviando algo e se o string "+IPD" é encontrada, o que significa que a pagina foi identificada (veja a cópia do monitor serial mais abaixo).
Esperamos 300 milisegundos para garantir que o buffer serial tenha lido todos os dados.
Como a função read() retorna ASCII, é importante que ao se carregar o connection ID, seja subtraído o valor "48" do dado lido. 48 é o código do primeiro caracter decimal "0". Assim se por exemplo, o dado 49 (codigo ASCII para "1") é recebido, ao subtrair 48, o resultado será um digito puro ("1").
Em verde, está o código HTML que será enviada ao Browser para a construção da página (Note que mesmo que você não seja familiar com a linguagem HTML, em vermelho está o que aparecerá escrito na página, fique livre para customizer-la a seu gosto).
Em azul, as informações são enviadas (Comando CPISEND) e em laranja se fecha a conexão (comando CPICLOSE).
void loop()
{
if (esp8266.available()) // check if 8266 is sending data
{
if (esp8266.find("+IPD,"))
{
delay(300);
int connectionId = esp8266.read() - 48;
String webpage = "<head><meta http-equiv=""refresh"" content=""3";
webpage += "</head><h1>MJRoBot WebServer ESP8266</h1><h2>Ardin: ";
webpage += "D8 status ==> ";
int a = digitalRead(8);
webpage += a;
webpage += "<h2>Arduino Pin: D9 status ==> ";
int b = digitalRead(9);
webpage += b;
webpage += "<h2>Arduino Pin: A0 data ===> ";
int c = analogRead(0);
webpage += c;
webpage += "</h2>";
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend += webpage.length();
cipSend += "\r\n";
sendData(cipSend, 1000, DEBUG);
sendData(webpage, 1000, DEBUG);
String closeCommand = "AT+CIPCLOSE=";
closeCommand += connectionId; // append connection id
closeCommand += "\r\n";
sendData(closeCommand, 3000, DEBUG);
}
}
}
A função "sendData()" enviará os comandos AT para o ESP
Quando o esp8266.available é TRUE, significa que existem dados disponíveis , portanto a resposta "c" é montada
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command);
long int time = millis();
while ( (time + timeout) > millis())
{
while (esp8266.available())
{
char c = esp8266.read(); // read the next character.
response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;
}
Durante a conexão o monitor serial apresenta os dados abaixo:
Muito importante é o segundo IP address que aparece no monitor: 10.0.1.2
(Ignore o cabeçalho onde diz Arduino Mega, os dados apresentados no monitor serial são os mesmos independente do microprocessador.
Ao entrar com o IP acima, em um browser (de preferencia o CHROME. Tive problemas com o Safari), o ESP montará a pagina HTML que foi programada e começará a enviar as informações capturadas nas entradas do UNO:
No monitor Serial, se observará os dados que são continuamente atualizados:
No vídeo abaixo se poderá observar o WebServer funcionando:
Link para o vídeo do WebServer (UNO + ESP8266)
Bom, é isso aí. Ainda não vimos os LEDs piscarem! Mas isso fica para a próxima parte desse tutorial. Faça o download do programa completo abaixo, mão na massa e boa sorte!
Link para o codigo completodo Arduino
Abaixo o link de meu Blog (vale deixar uns "like" por lá ;-)
MJRoBot "Um andarilho no mundo da eletrônica"
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por