ปรึกษา IoT
Internet of Things • Chapter 07

บทที่ 7 Arduino และ Node MCU

เรียนรู้การประยุกต์ใช้ NodeMCU ESP8266 อ่านค่าอุณหภูมิและความชื้นจาก DHT Sensor แล้วส่งข้อมูลผ่าน Wi‑Fi ไปยัง PHP และบันทึกลงฐานข้อมูล MySQL โดยใช้ HTTP GET และ XAMPP เป็นเครื่องมือฝึกปฏิบัติ

NodeMCU ESP8266 DHT Sensor HTTP GET PHP MySQL XAMPP

หัวข้อสำคัญในสไลด์

  • แนะนำอุปกรณ์ Arduino, Breadboard, Jumper และ NodeMCU
  • การต่อ DHT Sensor กับ NodeMCU ESP8266
  • การสร้างฐานข้อมูล Arduino_db และตาราง dht
  • PHP add.php สำหรับรับค่า temperature/humidity
  • โค้ด NodeMCU ส่งข้อมูลเข้า MySQL ผ่าน HTTP
อ้างอิงสไลด์บทที่ 7
NodeMCU ESP8266
PHP API
MySQL Database

ภาพรวมบทเรียน

บทที่ 7 Arduino และ Node MCU เป็นบทเรียนที่ต่อยอดจากการอ่านค่าจากเซ็นเซอร์ ไปสู่การบันทึกข้อมูลลงฐานข้อมูลจริง โดยใช้ NodeMCU ESP8266 เชื่อมต่อ Wi‑Fi อ่านค่าอุณหภูมิและความชื้นจาก Sensor แล้วส่งข้อมูลไปยังไฟล์ add.php เพื่อบันทึกลงฐานข้อมูล MySQL

สไลด์บทนี้แบ่งเนื้อหาหลักเป็น 2 ส่วน ได้แก่ (1) แนะนำอุปกรณ์ และ (2) การบันทึกข้อมูลอุณหภูมิและความชื้นลงในฐานข้อมูล MySQL ด้วย NodeMCU ESP8266

Learning Objectives

หลังเรียนบทนี้ ผู้เรียนควรเข้าใจการส่งข้อมูลจากอุปกรณ์ IoT ไปยัง Web Server และฐานข้อมูลได้

อธิบายบทบาทของ NodeMCU ESP8266 ในระบบ IoT ได้
ต่อ DHT Sensor กับ NodeMCU และอ่านค่าอุณหภูมิ/ความชื้นได้
สร้างฐานข้อมูล MySQL และไฟล์ PHP เพื่อรับค่าจาก Query String ได้
เขียนโปรแกรม NodeMCU ส่งข้อมูลผ่าน HTTP GET ไปยัง PHP/MySQL ได้

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 ได้

มี Wi‑Fi ในตัว เขียนด้วย Arduino IDE ได้ เหมาะกับ IoT Data Logger ใช้ส่งข้อมูล HTTP ได้

ภาพประกอบ: NodeMCU ESP8266 ในระบบ IoT

NodeMCU ESP8266 Wi‑Fi Web Server PHP + MySQL NodeMCU อ่านค่า Sensor แล้วส่งข้อมูลผ่าน Wi‑Fi ไปยัง Server

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

DHT Sensor Temp / Humidity NodeMCU ESP8266 Wi‑Fi add.php รับ GET MySQL table: dht URL ตัวอย่าง: /arduino/add.php?temperature=40&humidity=87

7.4 วิธีการต่อ DHT Sensor กับ NodeMCU ESP8266

จากสไลด์ การต่ออุปกรณ์สำหรับอ่านค่าอุณหภูมิและความชื้นใช้สายหลัก 3 เส้น ได้แก่ไฟเลี้ยง, กราวด์ และขาสัญญาณ โดยระบุสีสายไว้ดังนี้

NodeMCU / แหล่งจ่ายDHT Sensorคำอธิบาย
5Vขาสีแดงไฟเลี้ยง Sensor
GNDขาสีดำกราวด์ของวงจร
D2 = GPIO 2ขาสีเหลืองขาสัญญาณข้อมูลจาก Sensor

ภาพประกอบการต่อ NodeMCU + DHT Sensor

NodeMCU ESP8266 5V GND D2 / GPIO2 DHT Sensor VCC DATA GND D2 = GPIO2 ใช้เป็นขาสัญญาณข้อมูลตามสไลด์

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
);

ภาพประกอบ: โครงสร้างฐานข้อมูล

arduino_db table: dht ID temperature humidity created_at PK + Auto Increment

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=87
ผลการทดสอบ: ถ้าเปิด URL แล้วขึ้นข้อความ save 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 ทำงานอยู่

ภาพประกอบ: ลำดับการทดสอบระบบ

1. XAMPP Start Apache Start MySQL 2. Database arduino_db table dht 3. add.php รับ GET save OK 4. NodeMCU Upload Code ส่งข้อมูลจริง ทดสอบทีละขั้นเพื่อลดปัญหาในการเชื่อมต่อ PHP/MySQL

7.10 ผลลัพธ์การทำงาน

เมื่อระบบทำงานถูกต้อง Serial Monitor จะแสดงค่าอุณหภูมิ ความชื้น และ URL ที่ NodeMCU ส่งไปยัง Server จากนั้น PHP จะตอบกลับข้อความ save OK และในฐานข้อมูล MySQL จะมีข้อมูลใหม่เพิ่มในตาราง dht

IDtemperaturehumiditycreated_at
130.478.22026-06-12 10:00:00
230.677.92026-06-12 10:00:03
330.778.12026-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

แบบฝึกหัดท้ายบท

  1. อธิบายบทบาทของ NodeMCU ESP8266 ในระบบ IoT Data Logger
  2. เขียนตารางการต่อ DHT Sensor กับ NodeMCU โดยระบุ VCC, GND และ DATA
  3. สร้างคำสั่ง SQL สำหรับสร้างฐานข้อมูล arduino_db และตาราง dht
  4. เขียนไฟล์ add.php เพื่อรับค่า temperature และ humidity
  5. ทดสอบ URL /arduino/add.php?temperature=40&humidity=87 แล้วอธิบายผลลัพธ์
  6. อธิบายวิธีดู IP Address ของเครื่องที่รัน XAMPP
  7. แก้โค้ด NodeMCU ให้ส่งข้อมูลทุก 1 นาทีแทนทุก 3 วินาที
  8. ออกแบบ Dashboard อย่างง่ายเพื่อแสดงข้อมูลล่าสุดจากตาราง dht

คำถามที่พบบ่อยเกี่ยวกับบทที่ 7

คำว่า localhost บน NodeMCU หมายถึงตัว NodeMCU เอง ไม่ใช่คอมพิวเตอร์ที่รัน XAMPP ดังนั้นต้องใช้ IP Address ของคอมพิวเตอร์ เช่น 192.168.1.25 แทน localhost

ต้องเปิด Apache สำหรับรัน PHP และ MySQL สำหรับฐานข้อมูล จากนั้นตรวจสอบว่าไฟล์ add.php อยู่ในโฟลเดอร์ htdocs/arduino/ ถูกต้อง

ตรวจสอบชื่อฐานข้อมูล ชื่อตาราง ชื่อฟิลด์ และ SQL INSERT ให้ตรงกัน รวมถึงดู Error จาก PHP/MySQL และตรวจสอบสิทธิ์ผู้ใช้ฐานข้อมูล

บทเรียนนี้ใช้ GET เพื่อให้เข้าใจง่ายและทดสอบผ่าน Browser ได้ แต่ระบบจริงควรพิจารณาใช้ POST พร้อม Token หรือ API Key เพื่อเพิ่มความปลอดภัย
อ่านต่อ

ต่อยอดจากบทที่ 7

หลังส่งข้อมูลจาก NodeMCU เข้า MySQL ได้แล้ว สามารถพัฒนาเป็น Dashboard, ระบบแจ้งเตือน และระบบวิเคราะห์ข้อมูล IoT ได้