Olá pessoal que acompanha este blog!
Vou demonstrar aqui como fazer um controle remoto de 3 canais usando o modulo wifi ESP8266 pela interface do Arduino, um das placas estará rodando como servidor web e a outra como cliente web.
Para reduzir o tempo de resposta optei por não envia pagina nenhuma apenas o comando para informar o estado dos 3 botões que foram colocados na placa do nodemcu, por ser muito simples e basico não vou colocar o esquemático apenas a imagem da protoboard, creio que seja o suficiente para que vcs entendam o circuito.
A placa é alimentada com 5V da usb ou 5V de uma fonte externa pelo pino Vin e GND, os leds são ligados a resistores de 220R ao GND e aos pinos D1,D2 e D3.Os botões São ligado ao GND e ao pinos D1,D2,D3 diretamente pois não precisam de resistores externos de pull up´s. Coloquei as placas uma ao lado da outra pra facilitar a visualização e o vídeo veja abaixo ( https://youtu.be/KVtNlUg0EF0):
O código fonte:
Código do servidor (lê os botões):
//desenvolvedor: Aguivone M. Fogia
//Data : 07/09/2021 // Deu certo
//Blog: Microcontroladores-C
//exemplo com NodeMCU - modo servidor
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>//caso use o modo servidor
//------------------------------------------------------------------------------------
// definição dos pinos
//------------------------------------------------------------------------------------
#define LED 2 // led do modulo wifi
#define BOT_1 D1 // botão 1
#define BOT_2 D2 // botão 2
#define BOT_3 D3 // botão 3
WiFiServer server(80);//usa porta 80
void setup()
{
pinMode(LED, OUTPUT); // inicializa o led da placa
pinMode(BOT_1, INPUT_PULLUP); // habilita pull up interno do pino
pinMode(BOT_2, INPUT_PULLUP); // habilita pull up interno do pino
pinMode(BOT_3, INPUT_PULLUP); /// habilita pull up interno do pino
setupWiFi();
}
void loop()
{
// checa se tem algum dispositivo conectado!
WiFiClient client = server.available();
if (!client)
{
digitalWrite(LED, LOW);
delay(100);
digitalWrite(LED, HIGH);
delay(100); //espera conexão
return;
}
// Lê a primeir linha dos dados recebidos pelo pacote ethernet
String req = client.readStringUntil('\r');
client.flush();
// prepara pagina ehtenet
String s = "S-";
if (digitalRead(BOT_1) == LOW) //botão pressionado
{
s += "1";
}
else
{
s += "0";
}
if (digitalRead(BOT_2) == LOW) //botão pressionado
{
s += "1";
}
else
{
s += "0";
}
if (digitalRead(BOT_3) == LOW) //botão pressionado
{
s += "1";
}
else
{
s += "0";
}
s += "*\n";
// envia dados
client.print(s);
delay(100); //tempo de tratamento por parte do cliente
//cliente desconectado
// a cada requisição a pagina é enviada e o cliente é desconectado
}
void setupWiFi()
{
//////////////////////
// definições da WiFi //
//////////////////////
const char* WiFi_Senha = "123456789";//senha que você quer usar(deve ser em branco(aberta) ou maior que 8 caráteres,senão não funciona e não troca o nome da wifi)
const char* WiFi_Nome = "MICROCONTROLADORES-C";//nome que você quer dar a sua rede
IPAddress ip(192,168,50,4);//ok
IPAddress gateway(192,168,50,1);//ok
IPAddress subnet(255,255,255,0);//ok
//////inicializa a wifi//////////////////////////////////////////////
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);//mac qualquer pra testar
WiFi.softAPConfig(ip, gateway, subnet);
WiFi.mode(WIFI_STA);//modo acess point e servidor
// WiFi.mode(WIFI_AP_STA);//modo acess point e servidor
WiFi.softAP(WiFi_Nome, WiFi_Senha);
WiFi.begin();
server.begin();
}
Código do cliente(aciona os leds):
//desenvolvedor: Aguivone M. Fogia //Data : 07/09/2021 // Deu certo //Blog: Microcontroladores-C //exemplo com NodeMCU - modo cliente #include <ESP8266WiFi.h> #define LED 2 // led do modulo wifi #define LED1 D1 #define LED2 D2 #define LED3 D3 char nome_wifi[] = "MICROCONTROLADORES-C"; // nome da rede wifi char senha[] = "123456789"; // senha deve ter no minimo 8 caracteres const char* host = "192.168.50.4"; void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); // inicializa o led da placa pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); Serial.println(); Serial.printf("Connecting to %s ", nome_wifi); WiFi.begin(nome_wifi,senha); while (WiFi.status() != WL_CONNECTED) { digitalWrite(LED, LOW);//sem conexão pisca led da placa do node delay(300); digitalWrite(LED, HIGH); delay(300); //espera conexão } Serial.println(" connected"); } void loop() { WiFiClient client; Serial.printf("\n[Connecting to %s ... ", host); if (client.connect(host, 80)) { Serial.println("connected]"); Serial.println("[Sending a request]"); client.print(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n" ); Serial.println("[Response:]"); while (client.connected() || client.available()) { if (client.available()) { String pacote = client.readStringUntil('\n'); Serial.println(pacote); if(pacote.indexOf("*")> 0) { int pos = pacote.indexOf("*"); if(pacote[pos-1]=='1') { digitalWrite(LED1,HIGH); } else { digitalWrite(LED1,LOW); } if(pacote[pos-2]=='1') { digitalWrite(LED2,HIGH); } else { digitalWrite(LED2,LOW); } if(pacote[pos-3]=='1') { digitalWrite(LED3,HIGH); } else { digitalWrite(LED3,LOW); } } else { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); } client.flush(); } } client.stop(); Serial.println("\n[Disconnected]"); } else { Serial.println("connection failed!]"); } delay(200); }
formatado por http://hilite.me/ 07/09/2021
Até a próxima! Que a paz de cristo esteja com vcs.
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!