Hệ thống điều khiển thiết bị thông minh thông qua NodeMCU ESP8266 và App Mobile

Bạn đang có dự định triển khai một dự án điều khiển thiết bị trong nhà bằng SmartPhone, mà chưa biết bắt đầu từ đâu không biết cách thức để làm như thế nào. Trong nội dung bài viết hôm nay mình sẽ hướng dẫn cho các bạn một dự án Hệ thống Điều khiển thiết bị thông minh thông qua NodeMCU ESP8266 + App Mobile để có thể điều khiển thiết bị trong ngôi nhà của mình.

Trước khi thực hành hướng dẫn này nếu bạn chưa bao giờ sử dụng NodeMCU Esp8266 hoặc chưa bao giờ lập trình Esp8266 với Arduine IDE, các bạn xem tại đây nhé.

Sơ đồ đấu nối

Các linh kiện cần thiết cho dự án

Tên linh kiện Số lượng Shopee
Esp8266 1 Mua ngay
Relay 4 Kênh 1 Mua ngay
LCD16X2 1 Mua ngay
Board I2C LCD16X2 1 Mua ngay
Dây cắm (Đực – cái) Mua ngay

Cài đặt ứng dụng Android trên Smartphone.

Tải App ESP8266

  • Mở ứng dụng CHPLAY trên điện thoại nhập tìm kiếm từ khóa: Esp8266
  • Tiếp theo đặt địa chỉ IP và PORT 80 trong ứng dụng Android.
  • Bây giờ bạn có thể điều khiển ứng dụng.

Code

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ON 0
#define OFF 1

LiquidCrystal_I2C lcd(0x3F , 16, 2);
const char* ssid = "Nha Tro 4";
const char* password = "Nguyen nam";
const int LED1 = 15; //D8 on ESP Board 
const int LED2 = 13; //D7 on ESP Board
const int LED3 = 12; //D6 on ESP Board
const int LED4 = 14; //D5 on ESP Board
bool value1 = LOW;
bool value2 = LOW;
bool value3 = LOW;
bool value4 = LOW;

WiFiServer server(80);
int delayLCD = 750;

void setup() {
  Serial.begin(115200);
  Wire.begin(2, 0);
  lcd.begin();
  lcd.setCursor (0,0);
  lcd.print("Hello, world!");
  lcd.setCursor (0,1);
  lcd.print("belajarduino.com");
  delay (delayLCD); 
  pinMode(LED1, OUTPUT);  digitalWrite(LED1, LOW);
  pinMode(LED2, OUTPUT);  digitalWrite(LED2, LOW);
  pinMode(LED3, OUTPUT);  digitalWrite(LED3, LOW);
  pinMode(LED4, OUTPUT);  digitalWrite(LED4, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  lcd.setCursor (0,0);
  lcd.print ("Connecting to...");
  lcd.setCursor (0,1);
  lcd.print (ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    lcd.print (".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  lcd.clear();
  lcd.setCursor (0,0);
  lcd.print (" WiFi connected ");

  // Start the server
  server.begin();
  Serial.println("Server started");
  lcd.setCursor (0,1);
  lcd.print (" Server started ");
 delay (2000);
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
  lcd.clear();
  lcd.setCursor (0,0);
  lcd.print ("ESP8266 URL ADRS");
  lcd.setCursor (0,1);
  lcd.print (WiFi.localIP());
  delay (2000);
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
  
  //lcd.clear();
  lcd.setCursor (0,0);
  lcd.print ("ESP8266 URL ADRS");
  lcd.setCursor (0,1);
  lcd.print (WiFi.localIP());
  lcd.print ("     ");
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  lcd.clear();
  lcd.setCursor (0,0);
  lcd.print ("Client Send Data");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  lcd.setCursor (0,1);
  lcd.print (request);
  delay(1000);
  client.flush();
          
// Set LED according to the request
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<fieldset>");
  client.println("<font color = redq>");
  client.print("Control 4 LED Via Wifi");
  client.println("</font>");
  client.println("</fieldset>");
  client.println("<br><br>");
  if (request.indexOf("/status1=1") != -1)  {
    digitalWrite(LED1, ON);
    value1 = HIGH;
      lcd.setCursor(0,0);
      lcd.print("LED1 set to ON  ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    }
  if (request.indexOf("/status1=0") != -1)  {
    digitalWrite(LED1, OFF);
    value1 = LOW;
      lcd.setCursor(0,0);
      lcd.print("LED1 set to OFF ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
     }
     if(value1==HIGH){
      client.println("<br><br>");
      client.print("status1=1");
      }
     if(value1==LOW){
      client.println("<br><br>");
      client.print("status1=0");
      }
    
  if (request.indexOf("/status2=1") != -1)  {
    digitalWrite(LED2, ON);
    value2 = HIGH;
      lcd.setCursor(0,0);
      lcd.print("LED2 set to ON  ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    }
  if (request.indexOf("/status2=0") != -1)  {
    digitalWrite(LED2, OFF);
    value2 = LOW;
      lcd.setCursor(0,0);
      lcd.print("LED2 set to OFF ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    }
     if(value2==HIGH){
      client.println("<br><br>");
      client.print("status2=1");
      }
     if(value2==LOW){
      client.println("<br><br>");
      client.print("status2=0");
      }
   
  if (request.indexOf("/status3=1") != -1)  {
    digitalWrite(LED3, ON);
    value3 = HIGH;
      lcd.setCursor(0,0);
      lcd.print("LED3 set to ON  ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    }
  if (request.indexOf("/status3=0") != -1)  {
    digitalWrite(LED3, OFF);
    value3 = LOW;
      lcd.setCursor(0,0);
      lcd.println("LED3 set to OFF ");
      lcd.setCursor(0,1);
      lcd.println("by Client Reques");
      delay (delayLCD);
    }
     if(value3==HIGH){
      client.println("<br><br>");
      client.print("status3=1");
      }
     if(value3==LOW){
      client.println("<br><br>");
      client.print("status3=0");
      }
    
  if (request.indexOf("/status4=1") != -1)  {
    digitalWrite(LED4, ON);
    value4 = HIGH;
      lcd.setCursor(0,0);
      lcd.print("LED4 set to ON  ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    } 
  if (request.indexOf("/status4=0") != -1)  {
    digitalWrite(LED4, OFF);
    value4 = LOW;
      lcd.setCursor(0,0);
      lcd.print("LED4 set to OFF ");
      lcd.setCursor(0,1);
      lcd.print("by Client Reques");
      delay (delayLCD);
    }
     if(value4==HIGH){
      client.println("<br><br>");
      client.print("status4=1");
      }
     if(value4==LOW){
      client.println("<br><br>");
      client.print("status4=0");
      }
  
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
  lcd.setCursor(0,1);
  lcd.print("Client Disconect");
  delay(1000);
}

Thư viện

Download thư viện “BlynkSimpleEsp8266.h”: Tải ngay

  • Các bạn có thể tải code tìm địa chỉ bus ở đây. Tải ngay.
  • Thư viện LiquidCrystal_I2C.h: Tải ngay.

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments