สวัสดีครับนักศึกษาทุกคน ในบทที่แล้วเราอ่านค่าอุณหภูมิจาก DHT11 ได้แล้ว และต่อ WiFi ได้แล้ว คำถามคือ “เราจะส่งค่าอุณหภูมินี้ไปให้คนอื่นดูบนเว็บได้อย่างไร?”
คำตอบคือ เราต้องใช้วิธีการสื่อสารมาตรฐานที่เรียกว่า HTTP (Hypertext Transfer Protocol) ซึ่งเป็นโปรโตคอลเดียวกับที่เราใช้เปิดเว็บ Google หรือ Facebook นั่นแหละครับ ในบทนี้เราจะแปลงร่าง ESP32 ของเราให้ทำหน้าที่เหมือน Web Browser (Client) เพื่อส่งข้อมูลไปเคาะประตูบ้าน Server ครับ
1. หลักการทำงานของ HTTP: Client & Server
ในการสื่อสารบนเว็บ จะมีผู้เล่น 2 ฝั่งเสมอ:
- Client (ผู้ขอ): ในที่นี้คือบอร์ด ESP32 ของเรา ทำหน้าที่ส่งคำสั่ง (Request) ไปหา Server
- Server (ผู้ให้บริการ): คือเครื่องคอมพิวเตอร์ปลายทางที่รอรับข้อมูลและตอบกลับ (Response)
วิธีการส่งข้อมูล (Method) ที่ควรรู้จัก:
- GET: เป็นการ “ขอข้อมูล” หรือ “ส่งข้อมูลผ่าน URL” (เหมือนเวลาเราเข้าเว็บแล้วเห็น
?id=123ต่อท้าย) -> ง่ายและนิยมใช้ที่สุดสำหรับการเรียนรู้ - POST: เป็นการ “ส่งข้อมูลเข้าไปฝัง” โดยแนบไปกับตัวซองจดหมาย (Body) -> ปลอดภัยและส่งข้อมูลได้เยอะกว่า
2. เครื่องมือทดสอบ: Webhook.site
ก่อนจะเขียนโค้ด เราต้องมี “Server ปลายทาง” ไว้รับข้อมูลก่อน สำหรับการเรียนรู้ ผมแนะนำเว็บ Webhook.site ครับ (ฟรีและไม่ต้องสมัครสมาชิก)
- เข้าไปที่ webhook.site
- คุณจะได้รับ Your unique URL (เช่น
https://webhook.site/abcdef-1234-....) - ให้ Copy URL นี้เก็บไว้ นี่คือที่อยู่บ้านของ Server เราครับ
- เปิดหน้านี้ค้างไว้ เมื่อ ESP32 ส่งข้อมูลมา มันจะเด้งขึ้นมาให้เห็นทันที!

3. ไลบรารี HTTPClient.h
โชคดีมากที่ ESP32 มีไลบรารี HTTPClient.h มาให้ ทำให้เราเขียนโค้ดแค่ไม่กี่บรรทัดก็ส่งข้อมูลได้แล้วครับ
โครงสร้างคำสั่ง:
http.begin(url): ระบุปลายทางhttp.GET(): สั่งส่งข้อมูลhttp.getString(): อ่านคำตอบจาก Serverhttp.end(): วางสาย
4. ปฏิบัติการ: ส่งค่าอุณหภูมิ (จำลอง) ขึ้น Server
เราจะเขียนโปรแกรมให้ ESP32 เชื่อมต่อ WiFi แล้วส่งค่าตัวเลขสุ่ม (จำลองเป็นอุณหภูมิ) ไปที่ Webhook.site ทุกๆ 5 วินาที
โค้ดโปรแกรม:
#include <WiFi.h>
#include <HTTPClient.h> // เรียกใช้ไลบรารีสำหรับยิง HTTP
const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASS";
// ** นำ URL ที่ได้จาก Webhook.site มาใส่ตรงนี้ **
const String serverUrl = "https://webhook.site/xxxx-xxxx-xxxx-xxxx";
void setup() {
Serial.begin(115200);
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
void loop() {
// ตรวจสอบว่าเน็ตยังต่ออยู่ไหม
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http; // สร้าง Object ชื่อ http
// สมมติค่าอุณหภูมิ (ในงานจริงให้เอาค่าจาก dht.readTemperature() มาใส่)
float temperature = random(2000, 4000) / 100.0; // สุ่มเลข 20.00 - 40.00
// สร้าง URL พร้อมแนบข้อมูล (Query String)
// รูปแบบ: url?temp=25.50
String url = serverUrl + "?temp=" + String(temperature);
Serial.print("Sending Request to: ");
Serial.println(url);
// เริ่มการเชื่อมต่อ
http.begin(url);
// สั่งยิง GET Request
int httpResponseCode = http.GET();
// เช็คว่าส่งผ่านไหม (ถ้าผ่านจะได้ Code 200)
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// จบการทำงาน
http.end();
}
delay(5000); // ส่งข้อมูลทุก 5 วินาที
}
5. ดูผลลัพธ์
- Upload โค้ดลงบอร์ด
- ดูที่ Serial Monitor จะเห็นข้อความ
Sending Request to: ... - สลับไปดูที่หน้าเว็บ Webhook.site
- ทางด้านซ้ายมือ จะมีรายการ Request เด้งขึ้นมาใหม่เรื่อยๆ
- คลิกดูรายละเอียด จะเห็นว่าในช่อง Query strings มีค่า
tempที่เราส่งไปปรากฏอยู่!


สรุปท้ายบท
ยินดีด้วยครับ! ตอนนี้นักศึกษาสามารถส่งข้อมูลจากบอร์ดราคาหลักร้อย ขึ้นไปอยู่บน Server จริงๆ บนอินเทอร์เน็ตได้แล้ว นี่คือก้าวแรกของการทำ IoT Dashboard ครับ
ข้อจำกัด: วิธี HTTP Request แบบนี้ (Request-Response) เหมาะกับการส่งข้อมูลเป็นระยะๆ (เช่น ทุก 1 นาที) แต่ไม่เหมาะกับงานที่ต้องการความไวสูงแบบ Real-time (เช่น กดปุ่มปุ๊บ ไฟติดปั๊บ) เพราะมันเสียเวลาเชื่อมต่อทุกครั้ง
ภารกิจต่อไป: ในบทหน้า เราจะมาอุดช่องโหว่นี้ด้วยโปรโตคอลที่เป็น “พระเอกตัวจริงของวงการ IoT” ซึ่งออกแบบมาให้เบา เร็ว และสื่อสารได้สองทาง นั่นคือ MQTT Protocol ครับ เตรียมตัวรู้จักกับ Broker, Topic, Publish และ Subscribe กันได้เลย!
หมายเหตุสำหรับคุณครู:
- Webhook.site เป็นเครื่องมือการสอนที่ดีมากครับ เพราะเด็กๆ เห็นภาพทันทีว่า “Server เห็นอะไร” โดยที่เราไม่ต้องเสียเวลาไปเขียน Code ฝั่ง Server (PHP/Node.js) ให้ยุ่งยากในคาบแรกๆ
- ในส่วนของ HTTPS (SSL) ESP32 รุ่นใหม่ๆ จัดการได้ดีครับ แต่บางครั้งถ้ายิงไม่ผ่าน อาจจะต้องมีการ Bypass Certificate แต่สำหรับ Webhook.site ปกติจะยิงผ่านได้เลยครับ
