Como controlar pinos GPIO usando um servidor Web Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


No artigo anterior, abordamos os fundamentos de um servidor da web Arduino. Agora, vamos aprender como controlar os pinos GPIO. Neste tutorial, vamos alternar os LEDs com uma página da Web que pode ser acessada de qualquer lugar do mundo.

Anúncio PCBWay

Mas antes de qualquer coisa, vamos fazer uma breve revisão de alguns termos essenciais do tutorial anterior.

  • servidor web – um software, hardware ou combinação de ambos que contém arquivos necessários para processar e entregar páginas da web.
  • cliente da web – qualquer dispositivo que possa enviar uma solicitação HTTP / web para um servidor web.
  • Servidor local – um servidor web que só pode ser visitado dentro da sua LAN (rede local).
  • Servidor global – um servidor web que pode ser acessado em qualquer lugar via internet.
  • HTTP POST – uma solicitação da web que transmite dados para o servidor.
  • HTTP GET – uma solicitação da web que recupera dados de um navegador da web.
  • Encaminhamento de porta – uma configuração de roteador que direciona o tráfego de uma porta WAN para um dispositivo específico dentro da sua LAN.

Preparando o hardware

Para o nosso projeto de amostra, você precisará das seguintes partes:

  • Arduino Uno
  • ESP8266 módulo ESP-01
  • 1x resistores de 1kΩ
  • 2 x resistores de 2.2kΩ
  • 1 x resistores de 10kΩ
  • CONDUZIU
  • Breadboard
  • Jumper wires

Usando os fios dos jumpers, conecte-os conforme mostrado abaixo:

Como controlar pinos GPIO usando um servidor Web Arduino 1

Assim como antes, vamos usar um UNO do Arduino para programar o módulo ESP-01. Para isso, desabilitaremos o chip de bordo da UNO conectando o pino RESET ao GND. Em seguida, defina o módulo ESP8266 genérico como sua placa no IDE do Arduino.

Leia Também  Liquidez - Noções básicas de auto-emprego bem sucedido

Para definir o módulo ESP-01 no modo de programação, conecte o pino GPIO0 ao GND. Da mesma forma, conecte e desconecte o pino RESET do ESP-01 no GND antes de fazer o upload.

Dicas de soluções de problemas:

  • Nunca se esqueça de conectar o pino RESET do Arduino ao GND.
  • Verifique se a velocidade de upload é 115200.
  • Verifique a leitura de tensão do seu circuito divisor de tensão. Deve dar 3.3V ao seu pino RX.
  • Se houver erros constantes ao fazer o upload de um esboço no ESP-01, faça o downgrade da biblioteca de placas do ESP8266 no Boards Manager para a versão 2.5.0.
  • Se o programa não for executado após o upload, conecte brevemente e desconecte o pino de redefinição do ESP-01 no GND.

Código

Copie o seguinte esboço no IDE do Arduino.

#include 

const char* ssid = "WiFi name";
const char* password = "WiFi password";

int ledPin = 2; 
WiFiServer server(80);

void setup() 
{
  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(100);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
  Serial.print("IP: ");  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() 
{
  WiFiClient client = server.available();
  if (!client) {
  return;
  }

  while(!client.available()){
  }
  
  String request = client.readStringUntil('r');
  Serial.println(request);
  client.flush();

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) 
  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1)
  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one

  client.println("");
  client.println("");
  client.print("LED status: "); 

  if(value == HIGH) 
  {
    client.print("ON");  
  } 
  else 
  {
    client.print("OFF");
  }
  client.println("

"); client.println("Turn ON
"); client.println("Turn OFF
"); client.println(""); Serial.println(""); }

Código Explicação

Desta vez, precisamos apenas do ESP8266WiFI.h. Isso vem com a biblioteca de placas ESP8266, portanto, não é necessário instalá-lo.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
#include 

Digite suas credenciais de rede doméstica aqui.

const char* ssid = "WiFi name";
const char* password = "WiFi password";

Defina o número da porta do servidor da web como 80.

WiFiServer server(80);

Na seção de configuração, defina o pino do LED como uma saída e inicialize-o como LOW.

Curiosamente, o LED embutido do ESP-01 está conectado ao GPIO2, mas está ativo em BAIXO. Se você definir o pino GPIO2 como LOW, o LED conectado ao GPIO2 se apagará enquanto o LED embutido acender.

A instalação também inicializa o monitor serial. O monitor serial é usado para exibir informações como o endereço IP do ESP-01. Também ajuda na identificação de erros.

Por fim, a instalação inicia o servidor da Web usando server.begin().

void setup() 
{
  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(100);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
  Serial.print("IP: ");  Serial.println(WiFi.localIP());

server.begin();
}

Em seguida, na seção de loop, temos server.available(). Esta função detecta novos clientes da web. Ele sempre retorna falso quando não há nenhum. Por outro lado, o código continuará para a próxima linha se detectar um novo cliente.

WiFiClient client = server.available();
  if (!client) {
  return;
  }

Aguarda até que o cliente envie uma solicitação.

  while(!client.available()){
  }

E lê a solicitação e depois a imprime no monitor serial. o client.flush() A função garante que todos os caracteres de saída tenham sido enviados.

  String request = client.readStringUntil('r');
  Serial.println(request);
  client.flush();

/LED=ON e /LED=OFF são os nomes das solicitações que vamos usar para ativar e desativar o LED. Nós os veremos mais adiante no código HTML. Basicamente, se a linha anterior lê /LED=ON, o programa envia ALTO ao pino do LED e vice-versa.

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
  digitalWrite(ledPin, HIGH);
  value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1){
  digitalWrite(ledPin, LOW);
  value = LOW;
  }

Por fim, criamos uma página da Web usando client.println().

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); 

  client.println("");
  client.println("");
  client.print("LED status: "); 

  if(value == HIGH) 
  {
    client.print("ON");  
  } 
  else 
  {
    client.print("OFF");
  }
  client.println("

"); client.println("Turn ON
"); client.println("Turn OFF
"); client.println(""); Serial.println("");

Aqui, vemos como nomeamos os pedidos /LED=ON e /LED=OFF.

  client.println("Turn ON
"); client.println("Turn OFF
");

Demonstração

1. Faça o upload do esboço e abra o monitor serial. Haverá casos em que o monitor serial exibirá dados de lixo e o ESP-01 se recusará a se conectar. Uma solução fácil seria conectar e desconectar brevemente o pino ESP-01 RESET no chão.

Como controlar pinos GPIO usando um servidor Web Arduino 3

2. Digite o endereço IP fornecido do monitor serial para qualquer navegador da web. A primeira linha indica se o LED está atualmente ligado ou desligado. Para alterar, basta clicar nos links.

Como controlar pinos GPIO usando um servidor Web Arduino 5

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br