ภาพรวมบทเรียน
บทที่ 7 Arduino และ Node MCU เป็นบทเรียนที่ต่อยอดจากการอ่านค่าจากเซ็นเซอร์ ไปสู่การบันทึกข้อมูลลงฐานข้อมูลจริง โดยใช้ NodeMCU ESP8266 เชื่อมต่อ Wi‑Fi อ่านค่าอุณหภูมิและความชื้นจาก Sensor แล้วส่งข้อมูลไปยังไฟล์ add.php เพื่อบันทึกลงฐานข้อมูล MySQL
สไลด์บทนี้แบ่งเนื้อหาหลักเป็น 2 ส่วน ได้แก่ (1) แนะนำอุปกรณ์ และ (2) การบันทึกข้อมูลอุณหภูมิและความชื้นลงในฐานข้อมูล MySQL ด้วย NodeMCU ESP8266
Learning Objectives
หลังเรียนบทนี้ ผู้เรียนควรเข้าใจการส่งข้อมูลจากอุปกรณ์ IoT ไปยัง Web Server และฐานข้อมูลได้
7.1 แนะนำอุปกรณ์
จากสไลด์ บทนี้ทบทวนอุปกรณ์พื้นฐานที่จำเป็นและเพิ่ม NodeMCU ESP8266 เพื่อใช้เชื่อมต่ออินเทอร์เน็ต โดยอุปกรณ์ที่ใช้ ได้แก่ Arduino UNO R3, ตัวต้านทาน, Breadboard, Jumper Wire, NodeMCU ESP8266 และ DHT Sensor
Arduino UNO R3
บอร์ดพื้นฐานที่ใช้เรียนรู้แนวคิดไมโครคอนโทรลเลอร์และการต่อวงจร
ตัวต้านทาน
ใช้จำกัดกระแสหรือช่วยสร้างวงจร Pull-up ตามชนิดของเซ็นเซอร์
Breadboard
ใช้ทดลองวงจรโดยไม่ต้องบัดกรี เหมาะกับการฝึกปฏิบัติในห้องเรียน
Jumper Wire
สายเชื่อมต่อวงจร มีทั้งผู้-ผู้ ผู้-เมีย และเมีย-เมีย
NodeMCU ESP8266
บอร์ด Wi‑Fi สำหรับรับส่งข้อมูลผ่านเครือข่าย เหมาะกับงาน IoT
DHT Sensor
เซ็นเซอร์วัดอุณหภูมิและความชื้น เพื่อส่งค่าลงฐานข้อมูล MySQL
7.2 NodeMCU ESP8266 คืออะไร?
NodeMCU ESP8266 เป็นบอร์ดไมโครคอนโทรลเลอร์ที่มี Wi‑Fi ในตัว ทำให้เหมาะกับการพัฒนาอุปกรณ์ IoT ที่ต้องส่งข้อมูลขึ้น Server หรือควบคุมผ่านอินเทอร์เน็ต จุดเด่นคือราคาประหยัด ขนาดเล็ก และสามารถเขียนโปรแกรมผ่าน Arduino IDE ได้
ภาพประกอบ: NodeMCU ESP8266 ในระบบ IoT
7.3 ภาพรวมระบบ NodeMCU → PHP → MySQL
ระบบในบทนี้มีลำดับการทำงานดังนี้: NodeMCU อ่านค่าอุณหภูมิและความชื้นจาก DHT Sensor จากนั้นเชื่อมต่อ Wi‑Fi แล้วส่งข้อมูลไปยังไฟล์ add.php ผ่าน URL แบบ Query String เช่น ?temperature=40&humidity=87 เมื่อ PHP รับค่าแล้วจึงบันทึกลงตาราง dht ในฐานข้อมูล arduino_db
ภาพประกอบ: Workflow การบันทึกข้อมูลลง MySQL
7.4 วิธีการต่อ DHT Sensor กับ NodeMCU ESP8266
จากสไลด์ การต่ออุปกรณ์สำหรับอ่านค่าอุณหภูมิและความชื้นใช้สายหลัก 3 เส้น ได้แก่ไฟเลี้ยง, กราวด์ และขาสัญญาณ โดยระบุสีสายไว้ดังนี้
| NodeMCU / แหล่งจ่าย | DHT Sensor | คำอธิบาย |
|---|---|---|
| 5V | ขาสีแดง | ไฟเลี้ยง Sensor |
| GND | ขาสีดำ | กราวด์ของวงจร |
| D2 = GPIO 2 | ขาสีเหลือง | ขาสัญญาณข้อมูลจาก Sensor |
ภาพประกอบการต่อ NodeMCU + DHT Sensor
7.5 สร้างฐานข้อมูล MySQL
สไลด์กำหนดให้สร้างฐานข้อมูลชื่อ arduino_db และสร้างตารางชื่อ dht โดยมีฟิลด์ ID เป็นชนิด int กำหนดเป็น Primary Key และ Auto Increment เพื่อเก็บข้อมูลแต่ละรายการโดยอัตโนมัติ
CREATE DATABASE arduino_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE arduino_db;
CREATE TABLE dht (
ID INT AUTO_INCREMENT PRIMARY KEY,
temperature FLOAT NOT NULL,
humidity FLOAT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);ภาพประกอบ: โครงสร้างฐานข้อมูล
7.6 สร้างไฟล์ add.php สำหรับรับค่าและบันทึกฐานข้อมูล
สไลด์ระบุให้ไปที่ xampp → htdocs แล้วสร้างโฟลเดอร์ชื่อ arduino จากนั้นสร้างไฟล์ add.php ไว้ในโฟลเดอร์นี้ เพื่อรับค่า temperature และ humidity จาก URL แล้วบันทึกลง MySQL
<?php
$temperature = $_GET['temperature'];
$humidity = $_GET['humidity'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "arduino_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO dht (temperature, humidity)
VALUES ($temperature, $humidity);";
if ($conn->query($sql) === TRUE) {
echo "save OK";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>ข้อเสนอแนะเพื่อความปลอดภัย
โค้ดจากสไลด์เหมาะสำหรับการเรียนในเครื่อง Localhost แต่ถ้านำขึ้นใช้งานจริงควรตรวจสอบค่าที่รับเข้ามา ใช้ Prepared Statement และกำหนดสิทธิ์ฐานข้อมูลให้ปลอดภัย ไม่ควรเปิดรับข้อมูลจากอินเทอร์เน็ตโดยไม่มีการป้องกัน
7.7 การส่งค่าผ่าน Query String
แนวคิดสำคัญคือการส่งข้อมูลผ่าน URL เช่น ?temperature=40&humidity=87 โดย PHP จะอ่านค่าด้วย $_GET จากนั้นนำค่าไปบันทึกลงฐานข้อมูล
http://localhost/arduino/add.php?temperature=40&humidity=87
// PHP อ่านค่าได้ด้วย
$temperature = $_GET['temperature'];
$humidity = $_GET['humidity'];7.8 วิธีดู IP เครื่องสำหรับทดสอบ
จากสไลด์ การทดสอบจาก NodeMCU ไปยังคอมพิวเตอร์ที่รัน XAMPP ต้องทราบ IP Address ของเครื่องคอมพิวเตอร์ วิธีตรวจสอบคือกด Windows + R แล้วพิมพ์ cmd จากนั้นใช้คำสั่ง ipconfig
ipconfigจากนั้นให้ใช้ IP ของเครื่องแทนคำว่า ip address ใน URL เช่น
http://192.168.1.25/arduino/add.php?temperature=40&humidity=87save OK แสดงว่า PHP เชื่อมต่อฐานข้อมูลและบันทึกข้อมูลสำเร็จ7.9 Code โปรแกรม NodeMCU ESP8266
ตัวอย่างต่อไปนี้สรุปจากสไลด์ โดย NodeMCU อ่านค่าจาก DHT Sensor แล้วส่งค่าไปยังไฟล์ add.php ด้วย HTTP GET ทุก ๆ 3 วินาที
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include "DHT.h"
DHT dht;
ESP8266WiFiMulti WiFiMulti;
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
dht.setup(D2);
Serial.begin(115200);
for (uint8_t t = 4; t > 0; t--) {
Serial.printf("[SETUP] WAIT %d...\n", t);
Serial.flush();
delay(1000);
}
WiFiMulti.addAP("WiFi Name", "WiFi password");
randomSeed(50);
}
void loop() {
delay(dht.getMinimumSamplingPeriod());
float hum = dht.getHumidity();
float temp = dht.getTemperature();
Serial.print(dht.getStatusString());
Serial.print("\t");
Serial.print(hum, 1);
Serial.print("\t\t");
Serial.print(temp, 1);
Serial.print("\t\t");
Serial.println(dht.toFahrenheit(temp), 1);
if (WiFiMulti.run() == WL_CONNECTED) {
HTTPClient http;
String url = "http://ip address/arduino/add.php?temperature="
+ String(temp) + "&humidity=" + String(hum);
Serial.println(url);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n",
http.errorToString(httpCode).c_str());
}
http.end();
}
delay(3000);
}จุดที่ต้องแก้ก่อนใช้งานจริง
- แก้
WiFi Nameเป็นชื่อ Wi‑Fi ของตนเอง - แก้
WiFi passwordเป็นรหัสผ่าน Wi‑Fi - แก้
ip addressเป็น IP ของเครื่องที่รัน XAMPP - ตรวจสอบว่า NodeMCU และเครื่อง Server อยู่ในเครือข่ายเดียวกัน
- ตรวจสอบว่า Apache และ MySQL ใน XAMPP ทำงานอยู่
ภาพประกอบ: ลำดับการทดสอบระบบ
7.10 ผลลัพธ์การทำงาน
เมื่อระบบทำงานถูกต้อง Serial Monitor จะแสดงค่าอุณหภูมิ ความชื้น และ URL ที่ NodeMCU ส่งไปยัง Server จากนั้น PHP จะตอบกลับข้อความ save OK และในฐานข้อมูล MySQL จะมีข้อมูลใหม่เพิ่มในตาราง dht
| ID | temperature | humidity | created_at |
|---|---|---|---|
| 1 | 30.4 | 78.2 | 2026-06-12 10:00:00 |
| 2 | 30.6 | 77.9 | 2026-06-12 10:00:03 |
| 3 | 30.7 | 78.1 | 2026-06-12 10:00:06 |
ต้องการทำระบบ IoT บันทึกข้อมูลลงฐานข้อมูลจริง?
Siam2Dev ช่วยออกแบบระบบ NodeMCU/ESP32, PHP API, MySQL, Data Logger, Dashboard และระบบแจ้งเตือนสำหรับ Smart Farm, Smart Home และงานวิจัย IoT
สรุปบทเรียน
บทที่ 7 ทำให้ผู้เรียนเข้าใจกระบวนการเชื่อมต่ออุปกรณ์ IoT เข้ากับระบบฐานข้อมูลจริง ตั้งแต่ NodeMCU อ่านค่า Sensor ส่งข้อมูลผ่าน Wi‑Fi ไปยัง PHP และบันทึกลง MySQL ซึ่งเป็นพื้นฐานสำคัญของระบบ IoT Dashboard และ Data Logger
แบบฝึกหัดท้ายบท
- อธิบายบทบาทของ NodeMCU ESP8266 ในระบบ IoT Data Logger
- เขียนตารางการต่อ DHT Sensor กับ NodeMCU โดยระบุ VCC, GND และ DATA
- สร้างคำสั่ง SQL สำหรับสร้างฐานข้อมูล
arduino_dbและตารางdht - เขียนไฟล์
add.phpเพื่อรับค่าtemperatureและhumidity - ทดสอบ URL
/arduino/add.php?temperature=40&humidity=87แล้วอธิบายผลลัพธ์ - อธิบายวิธีดู IP Address ของเครื่องที่รัน XAMPP
- แก้โค้ด NodeMCU ให้ส่งข้อมูลทุก 1 นาทีแทนทุก 3 วินาที
- ออกแบบ Dashboard อย่างง่ายเพื่อแสดงข้อมูลล่าสุดจากตาราง
dht