โครงการ ESP32 รับข้อความจากเว็บและแสดงบนจอ LCD

โครงการ ESP32 รับข้อความจากเว็บและแสดงบนจอ LCD 16x2

บทนำ

ในยุคที่เทคโนโลยีกำลังเติบโตอย่างรวดเร็ว การเรียนรู้การใช้งานไมโครคอนโทรลเลอร์อย่าง ESP32 เป็นสิ่งที่ไม่ควรมองข้าม โครงการนี้จะพาคุณไปรู้จักกับการสร้างโครงการที่น่าสนใจ โดยใช้ ESP32 รับข้อความจากเว็บเบราว์เซอร์และแสดงผลบนจอ LCD 16x2 ซึ่งเป็นการรวมกันระหว่างเทคโนโลยีเว็บเซิร์ฟเวอร์และการควบคุมจอ LCD ผ่านไลบรารี LiquidCrystal_I2C โครงการนี้เหมาะสำหรับมือใหม่ที่ต้องการเรียนรู้พื้นฐานการพัฒนาโปรเจกต์ IoT และการเขียนโปรแกรมด้วย ESP32

วัตถุประสงค์

โครงการนี้มีวัตถุประสงค์หลักดังนี้:
  • เชื่อมต่อ ESP32 กับ Wi-Fi: สร้างการเชื่อมต่อกับเครือข่าย Wi-Fi เพื่อให้ ESP32 สามารถรับข้อมูลจากเว็บเบราว์เซอร์ได้
  • สร้างเว็บเซิร์ฟเวอร์บน ESP32: ใช้ไลบรารี ESPAsyncWebServerเพื่อสร้างเว็บเซิร์ฟเวอร์ที่ให้ผู้ใช้สามารถส่งข้อความผ่านฟอร์ม HTML
  • แสดงข้อความบนจอ LCD 16x2: ข้อความที่ได้รับจากเว็บเบราว์เซอร์จะถูกแสดงบนจอ LCD 16x2 โดยใช้ไลบรารี LiquidCrystal_I2C
  • ฝึกการใช้ไลบรารี ESPAsyncWebServer และ LiquidCrystal_I2C: เรียนรู้การสร้างเซิร์ฟเวอร์และการควบคุมจอ LCD ผ่านไลบรารีที่ช่วยในการพัฒนาโปรเจกต์ IoT

อุปกรณ์ที่ต้องใช้ในโครงงาน

สำหรับการสร้างโครงการนี้ คุณจะต้องเตรียมอุปกรณ์และเครื่องมือดังนี้:
  1. ESP32 Development Board - เป็นไมโครคอนโทรลเลอร์ที่มีความสามารถในการเชื่อมต่อ Wi-Fi และ Bluetooth ใช้สำหรับการรับข้อมูลจากเว็บและควบคุมการแสดงผลบนจอ LCD
  2. จอ LCD 16x2 (I2C) - จอ LCD ที่ใช้ I2C interface สำหรับแสดงข้อความที่รับมาจากเว็บเบราว์เซอร์
  3. สายเชื่อมต่อ - สายเชื่อมต่อที่ใช้ในการเชื่อมต่อ ESP32 กับจอ LCD ผ่าน I2C
  4. คอมพิวเตอร์ - คอมพิวเตอร์ที่ใช้ในการเขียนและอัปโหลดโค้ดไปยัง ESP32

การต่ออุปกรณ์จอLCD กับ ESP32

การต่ออุปกรณ์จอLCD กับ ESP32

หลักการทำงาน

การทำงานของโครงการนี้สามารถอธิบายได้ตามลำดับขั้นตอนดังนี้:
  1. การเชื่อมต่อ Wi-Fi: ESP32 จะเชื่อมต่อกับเครือข่าย Wi-Fi ที่กำหนดไว้ในโค้ดและแสดง IP address บน Serial Monitor เพื่อให้เราทราบว่า ESP32 เชื่อมต่อกับเครือข่ายได้สำเร็จแล้ว
  2. การสร้างเว็บเซิร์ฟเวอร์: ใช้ไลบรารี ESPAsyncWebServer ในการสร้างเว็บเซิร์ฟเวอร์บนพอร์ต 80 ซึ่งจะส่งหน้า HTML ไปยังเว็บเบราว์เซอร์ของผู้ใช้ เพื่อให้สามารถกรอกข้อความและส่งไปยัง ESP32
  3. การรับข้อความจากเว็บเบราว์เซอร์: เมื่อผู้ใช้ส่งข้อความผ่านฟอร์ม HTML ข้อความจะถูกส่งเป็น HTTP GET request ไปยัง ESP32 ซึ่งจะดึงข้อความจาก request นี้
  4. การแสดงผลบนจอ LCD 16x2: ข้อความที่ได้รับจากเว็บเบราว์เซอร์จะถูกแสดงบนจอ LCD 16x2 โดยใช้ฟังก์ชัน scrollText() ที่ทำให้ข้อความเลื่อนจากขวาไปซ้าย เพื่อให้ข้อความทั้งหมดแสดงบนจอ LCD อย่างครบถ้วน

โค้ดโปรแกรม

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <LiquidCrystal_I2C.h>

// ตั้งค่าขนาดของ columns and rows 
int lcdColumns = 16;
int lcdRows = 2;

String msg;

// กำหนดค่า LCD (I2C address, columns, rows)
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

// ตั้งค่า Wi-Fi
const char* ssid = "your_SSID";      // เปลี่ยนเป็นชื่อ Wi-Fi ของคุณ
const char* password = "your_PASSWORD";  // เปลี่ยนเป็นรหัสผ่าน Wi-Fi ของคุณ


AsyncWebServer server(80);  // เริ่มต้น WebServer บนพอร์ต 80

// หน้า HTML ที่จะส่งไปยัง Browser
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<head>
  <title>ESP32 LCD Message</title>
  <style>
    body { font-family: Arial, sans-serif; text-align: center; }
    h1 { color: #333; }
    input[type="text"] { padding: 10px; font-size: 16px; }
    input[type="submit"] { padding: 10px; font-size: 16px; margin-top: 10px; }
  </style>
</head>
<body>
  <h1>Send Message to ESP32</h1>
  <form action="/get" method="get">
    <input type="text" name="text" placeholder="Enter your message">
    <br>
    <input type="submit" value="Send">
  </form>
</body>
</html>
)rawliteral";

void setup() {
  // initialize LCD
  lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();

  // เชื่อมต่อ Wi-Fi
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // แสดงข้อความต้อนรับบนจอ LCD
  lcd.setCursor(0, 0);
  lcd.print("Connected!");
  lcd.setCursor(0, 1);
  lcd.print(WiFi.localIP());
  delay(5000);
  lcd.clear();

  // เส้นทางหลักเพื่อแสดง HTML หน้าแรก
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  // เส้นทางเพื่อรับข้อความจากฟอร์มและแสดงผลบนจอ LCD
  server.on("/get", HTTP_GET, [](AsyncWebServerRequest *request){
    
    if (request->hasParam("text")) {
      msg = request->getParam("text")->value();
      msg.replace("%20", " ");  // แทนที่ %20 ด้วยช่องว่าง
      
      lcd.clear();
      
      // ส่งข้อความตอบกลับไปที่ Browser
      request->send(200, "text/html", "<h1>Message Received</h1><a href=\"/\">Go Back</a>");
    } else {
      request->send(200, "text/html", "<h1>No message sent</h1><a href=\"/\">Go Back</a>");
    }
  });

  // เริ่มต้น Server
  server.begin();
}

void scrollText(int row, String message, int Delaytime) {
  
  static unsigned long  SpeedStr = 0;
  static int pos = 0; 
  static int str = message.length();
  message.trim();
  message = " " + message + " " + message + " " + message + " " + message + " "; 

  if(millis() > SpeedStr){
    lcd.setCursor(0, row);
    lcd.print(message.substring(pos, pos + lcdColumns));
    (pos < str) ? pos++ : pos=0;
    SpeedStr = millis() + Delaytime; 
  }
}

void loop() {
  // แสดงข้อความบนจอ LCD
  if (msg.length() > 0) {
      lcd.setCursor(0, 0);
      lcd.print("Text Input");
      scrollText(1, msg, 450);
  }
}

อธิบายโค้ดอย่างละเอียด

1. การตั้งค่า LCD

LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); - การกำหนดพารามิเตอร์สำหรับการใช้งานจอ LCD ผ่าน I2C โดย 0x27 คือ I2C address ของจอ LCD

2. การเชื่อมต่อ Wi-Fi

WiFi.begin(ssid, password); - เริ่มต้นการเชื่อมต่อกับเครือข่าย Wi-Fi โดยใช้ SSID และรหัสผ่านที่กำหนด

3. การสร้างเว็บเซิร์ฟเวอร์

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ ... }); - กำหนดเส้นทางหลักเพื่อส่งหน้า HTML ไปยังเว็บเบราว์เซอร์ 

4. การรับข้อความและแสดงบน LCD

if (request->hasParam("text")) { ... } - ตรวจสอบว่ามีการส่งข้อความผ่านฟอร์มหรือไม่ และแสดงข้อความบนจอ LCD 

สรุป

โครงการ "ESP32 รับข้อความจากเว็บและแสดงบนจอ LCD 16x2" นี้เป็นตัวอย่างที่ดีในการเรียนรู้การใช้ ESP32 สำหรับการสร้างโปรเจกต์ IoT โดยการรับข้อความจากเว็บเบราว์เซอร์และแสดงผลบนจอ LCD โครงการนี้ไม่เพียงแต่ช่วยเพิ่มความรู้ในด้านการพัฒนาโปรเจกต์ IoT แต่ยังเป็นการฝึกทักษะการเขียนโปรแกรมและการใช้งานไลบรารีต่าง ๆ อย่าง ESPAsyncWebServer และ LiquidCrystal_I2C การเข้าใจและประยุกต์ใช้เทคนิคเหล่านี้จะช่วยให้คุณสามารถสร้างโครงการที่ซับซ้อนมากขึ้นในอนาคต 

Download Code โครงการ ESP32 รับข้อความจากเว็บและแสดงบนจอ LCD 16×2

ดาวน์โหลดไฟล์ทั้งหมดได้ที่นี้ เรียนรู้เพิ่มเติมเกี่ยวกับ ESP32:
  1. ESPAsyncWebServer – สร้างหน้าเพจ Wi-Fi Manager เรียนรู้วิธีการสร้างหน้าเพจ Wi-Fi Manager ด้วยไลบรารี ESPAsyncWebServer เพื่อให้สามารถเชื่อมต่อและตั้งค่าการเชื่อมต่อ Wi-Fi ของ ESP32 ได้อย่างง่ายดาย
  2. ESPAsyncWebServer – สร้างเว็บเพจแผนภูมิแสดงค่าเซนเซอร์ ค้นพบวิธีการสร้างเว็บเพจที่แสดงแผนภูมิค่าที่อ่านจากเซนเซอร์ โดยใช้ ESPAsyncWebServer สำหรับการตรวจสอบและวิเคราะห์ข้อมูลในเวลาจริง
  3. ESP32 Web Server – ควบคุมดิจิตอลเอาพุต เรียนรู้การสร้างเว็บเซิร์ฟเวอร์บน ESP32 เพื่อควบคุมดิจิตอลเอาพุต เช่น การเปิดและปิด LED ผ่านเว็บเบราว์เซอร์
  4. การใช้งาน LiquidCrystal_I2C กับ ESP32 คำแนะนำเกี่ยวกับการใช้งานไลบรารี LiquidCrystal_I2C บน ESP32 เพื่อควบคุมจอ LCD 16x2 รวมถึงการตั้งค่าและการเขียนข้อมูลลงบนจอ LCD
  5. ESP32 WiFi การเริ่มต้นใช้งาน ESP32 WiFi ค่อนข้างง่ายและสะดวกโดยใช้ Arduino IDE ซึ่งเป็นเครื่องมือที่ได้รับความนิยมในการพัฒนาโปรแกรมสำหรับไมโครคอนโทรลเลอร์ต่างๆ
Shopping Cart
Scroll to Top