Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Guia Completo: Dispositivo IoT com ESP8266-01 e Arduino Nano

Componentes e Materiais

Arduino Nano R3 1
Módulo ESP8266 ESP-01 1
Módulo Relé 2 Canais 1
LEDs 2
Protoboard 1
Jumpers 1 set
Resistores 1kΩ (2x), 2.2kΩ (1x) 3
PCB Personalizada (PCBWay) 1 (opcional)

Ferramentas Necessárias

Aplicações e Serviços Online

Sobre o Projeto

Introdução

Vamos construir um dispositivo que conecta à internet e permite controle remoto de eletrodomésticos via Wi-Fi. Usaremos Arduino Nano com módulo ESP8266-01.

Cenário de Funcionamento

Painel de Controle (Web): Página web simples (HTML, CSS, jQuery) com botões para ligar/desligar cargas.

Hardware Embarcado: A página envia comandos ao ESP8266-01 (servidor web) que repassa ao Arduino via serial. O Arduino aciona relés.

Primeiros Passos com ESP8266-01

O Arduino Nano não tem Wi-Fi nativo. O ESP8266-01 adiciona essa capacidade via comunicação serial. É barato (~US$ 1,50), tem comunidade forte, MCU integrado (pode operar sozinho) e 2 GPIOs.

Pinout do ESP8266-01

Configuração do ESP8266-01

O ESP comunica via serial (pinos 0/1 do Arduino), mas esses pinos são necessários para debug. Solução: biblioteca SoftwareSerial nos pinos 2/3.

Problema: ESP vem de fábrica a 115.200 baud, muito alto para SoftwareSerial. Precisamos reconfigurar para 9600 baud usando AT Commands.

Alterando a Velocidade de Comunicação

  1. Carregue sketch vazio no Arduino
  2. Conecte ESP8266 aos pinos 0/1 (Hardware Serial) temporariamente
  3. Serial Monitor a 115.200 baud, "Both NL & CR"
  4. Envie AT → deve responder OK
  5. Envie AT+UART_DEF=9600,8,1,0,0 (ou AT+CIOBAUD=9600)
  6. Resposta OK confirma mudança
  7. Altere Serial Monitor para 9600 baud e teste AT novamente

Conectando ao Wi-Fi

AT+CWJAP="SEU_SSID","SUA_SENHA"

Sucesso retorna WIFI CONNECTED e WIFI GOT IP.

Conceitos Básicos: Internet, Cliente/Servidor

Internet = fio (fibra, cobre, satélite). Dois computadores conectados comunicam-se. Servidor conectado diretamente (IP fixo, ex: 172.217.171.228 = google.com). Cliente conectado via ISP.

Nosso caso: Navegador (Cliente) → Requisição HTTP → ESP8266 (Servidor) → Arduino → Ação.

Construindo a Página Web

Estrutura (HTML)

<!DOCTYPE html>
<html>
<head>
  <title>Smart Home Control Panel</title>
</head>
<body style="background-color: seagreen; color: seashell; text-align: center;">
  <h1>Smart Home Control Panel</h1>
  <h4>Sorry But I'm a Meme Addict!</h4>
  <img src="dogMeme.jpg" width="400" height="400">
  <br>
  <button id="111" class="button">LAMP ON</button>
  <br>
  <button id="110" class="button">LAMP OFF</button>
</body>
</html>

Estilo (CSS)

Incluído inline no <body> e <button> (margem 10px).

Funcionalidade (jQuery)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
  $(".button").click(function() {
    var p = $(this).attr('id'); // pega id do botão (111 ou 110)
    $.get("https://192.168.1.4:80/", { pin: p }); // GET para o ESP
    // IMPORTANTE: Substitua pelo IP do seu ESP8266!
  });
</script>

Lógica dos IDs: 111 = pino 11, estado 1 (ON); 110 = pino 11, estado 0 (OFF). O Arduino separa: pinNumber = 11, pinState = 1/0.

Conectando a Carga (Teste com LEDs)

LED no pino 11 (ânodo) via resistor 1kΩ ao GND. Teste antes de usar relés.

Código do Arduino

#include <SoftwareSerial.h>
SoftwareSerial esp8266(2, 3); // Rx=2, Tx=3

#define SERIAL_SPEED 9600
#define DEBUG true

int redLED = 12;
int blueLED = 11;

void setup() {
  pinMode(redLED, OUTPUT);
  pinMode(blueLED, OUTPUT);
  digitalWrite(redLED, LOW);
  digitalWrite(blueLED, HIGH);
  Serial.begin(SERIAL_SPEED);
  esp8266.begin(SERIAL_SPEED);
  InitWifiModule();
  digitalWrite(blueLED, LOW);
}

void loop() {
  if (esp8266.available()) {
    if (esp8266.find("+IPD,")) {
      delay(1000);
      int connectionId = esp8266.read() - 48;
      esp8266.find("pin=");
      int pinNumber = (esp8266.read() - 48) * 10;
      pinNumber += (esp8266.read() - 48);
      int statusLed = (esp8266.read() - 48);
      digitalWrite(pinNumber, statusLed);

      Serial.println(connectionId);
      Serial.print(pinNumber); Serial.print(" "); Serial.println(statusLed);

      String closeCommand = "AT+CIPCLOSE=";
      closeCommand += connectionId;
      closeCommand += "\r\n";
      sendData(closeCommand, 1000, DEBUG);
    }
  }
}

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();
      response += c;
    }
  }
  if (debug) Serial.print(response);
  return response;
}

void InitWifiModule() {
  sendData("AT+RST\r\n", 2000, DEBUG);
  sendData("AT+CWJAP=\"SEU_SSID\",\"SUA_SENHA\"\r\n", 2000, DEBUG);
  delay(3000);
  sendData("AT+CWMODE=1\r\n", 1500, DEBUG);
  delay(1000);
  sendData("AT+CIFSR\r\n", 1500, DEBUG);
  delay(1000);
  sendData("AT+CIPMUX=1\r\n", 1500, DEBUG);
  delay(1000);
  sendData("AT+CIPSERVER=1,80\r\n", 1500, DEBUG);
}

Não esqueça: Coloque seu SSID e senha na linha do AT+CWJAP.

Como Funciona

  1. Carregue o código no Arduino
  2. Abra Serial Monitor: verifique "OK" (conectado) ou "FAIL/ERRO" (verifique credenciais)
  3. Abra a página web e controle os LEDs

Controlando Cargas de Alta Tensão (Relés)

Relé é chave mecânica acionada por sinal de baixa potência (5V/0V) para comutar circuitos de alta potência. Módulo 2 canais: IN1/IN2 nos pinos 11/12 do Arduino. COM do relé num lado da carga; outro lado em NO (normalmente aberto) ou NC (normalmente fechado).

Página Web Atualizada (2 Cargas)

<button id="111" class="button">Blue LED ON</button>
<button id="110" class="button">Blue LED OFF</button>
<br>
<button id="121" class="button">Red LED ON</button>
<button id="120" class="button">Red LED OFF</button>

IDs: 11x = pino 11, 12x = pino 12; último dígito = estado.

Tornando Profissional: PCB

Projetado no Autodesk Eagle. Arquivos open-source: PCBWay Project. Peça sua PCB clicando "Add to cart".

Solução de Problemas

Conclusão

Aprendemos: página web (HTML/CSS/jQuery), controle wireless de carga AC via painel web, uso do ESP8266-01 com Arduino. Mais tutoriais em makesomestuff.org.

Códigos Completos

Página Web (HTML)

<!DOCTYPE html> <html> <head> <title>Smart Home System</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head>
<body style="background-color: seagreen; color: seashell; text-align: center;">
<h1> Smart Home Control Panel</h1> <h4>Sorry But I'm a Meme Addict!</h4>
<img src="dogMeme.jpg" width="400" height="400"> <br>
<button style="margin: 10px;" id="111" class="button">Blue LED ON</button>
<button id="110" class="button">Blue LED OFF</button> <br>
<button style="margin:10px;" id="121" class="button"> Red LED ON</button>
<button id="120" class="button">Red LED OFF</button>
<script> $(".button").click(function () { var p = $(this).attr('id'); $.get("https://192.168.1.4:80/", { pin: p }); }); </script> </body> </html>

Código Final do Arduino

#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3);
#define serialCommunicationSpeed 9600
#define DEBUG true
int redLED =12; int blueLED =11;
void setup() {
  pinMode(redLED,OUTPUT); pinMode(blueLED,OUTPUT);
  digitalWrite(redLED,LOW); digitalWrite(blueLED,HIGH);
  Serial.begin(serialCommunicationSpeed);
  esp8266.begin(serialCommunicationSpeed);
  InitWifiModule(); digitalWrite(blueLED,LOW);
}
void loop() {
  if(esp8266.available()) {
    if(esp8266.find("+IPD,")) {
      delay(1000);
      int connectionId = esp8266.read()-48;
      esp8266.find("pin=");
      int pinNumber = (esp8266.read()-48)*10;
      pinNumber += (esp8266.read()-48);
      int statusLed = (esp8266.read()-48);
      digitalWrite(pinNumber, statusLed);
      Serial.println(connectionId); Serial.print(pinNumber); Serial.print(" "); Serial.println(statusLed);
      String closeCommand = "AT+CIPCLOSE="; closeCommand+=connectionId; closeCommand+="\r\n";
      sendData(closeCommand,1000,DEBUG);
    }
  }
}
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(); response+=c; }
  }
  if(debug) Serial.print(response); return response;
}
void InitWifiModule() {
  sendData("AT+RST\r\n",2000,DEBUG);
  sendData("AT+CWJAP=\"SEU_SSID\",\"SUA_SENHA\"\r\n",2000,DEBUG); delay(3000);
  sendData("AT+CWMODE=1\r\n",1500,DEBUG); delay(1500);
  sendData("AT+CIFSR\r\n",1500,DEBUG); delay(1500);
  sendData("AT+CIPMUX=1\r\n",1500,DEBUG); delay(1500);
  sendData("AT+CIPSERVER=1,80\r\n",1500,DEBUG);
}

Esquemáticos

Disponíveis na seção de esquemáticos do projeto original (duas imagens).

Processo de manufatura

  1. Detector de Idiomas TinyML com Edge Impulse no Arduino Nano 33 BLE Sense
  2. Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
  3. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  4. Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
  5. Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
  6. Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
  7. Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
  8. Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
  9. Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
  10. Controle sua TV com Alexa via Arduino IoT Cloud – Guia Passo a Passo