ภาพรวมระบบ
มาตรวัดอุณหภูมิ
มาตรวัดความชื้น
มาตรวัดอุณหภูมิคอนกรีต (DS18B20)
สถิติข้อมูล
การแจ้งเตือนล่าสุด
กราฟข้อมูล
อุณหภูมิ (°C) - แบบเรียลไทม์
ความชื้นสัมพัทธ์ (%RH) - แบบเรียลไทม์
อุณหภูมิอากาศ vs คอนกรีต (°C)
อุณหภูมิคอนกรีต DS18B20 (°C) - แบบเรียลไทม์
ประวัติข้อมูล
| # | เวลา | อุณหภูมิอากาศ (°C) | สถานะ | คอนกรีต DS18B20 (°C) | ความชื้น (%) | สถานะ | Dew Point (°C) |
|---|---|---|---|---|---|---|---|
| รอข้อมูล... | |||||||
ประวัติ Ticket แจ้งเตือน
ตั้งค่าระบบ
เกณฑ์อุณหภูมิคอนกรีต
กำหนดค่าเกณฑ์อุณหภูมิสำหรับระดับการเตือนต่างๆ (อ้างอิง ACI 305R)
เกณฑ์ความชื้นสัมพัทธ์ในคอนกรีต
กำหนดค่าเกณฑ์ความชื้นสำหรับการบ่มคอนกรีต
ตั้งค่า ESP32
กำหนดความถี่การส่งข้อมูลจาก ESP32 (ESP32 จะโหลดค่าใหม่ทุก 5 นาที)
การแจ้งเตือน LINE OA (Messaging API)
ตั้งค่าการแจ้งเตือนผ่าน LINE Official Account — แจ้งเตือนส่งจาก PHP Server โดยตรง
เอกสารระบบ
ภาพรวมระบบ (System Overview)
ระบบตรวจสอบคอนกรีตเรียลไทม์ ออกแบบสำหรับงานวิศวกรรมโยธา ติดตามอุณหภูมิและความชื้นระหว่างกระบวนการ Hydration ของคอนกรีต อ้างอิงมาตรฐาน ACI 305R — รองรับ หลายจุดตรวจ (Multi-device) แต่ละ device_id มี ticket และข้อมูลแยกอิสระ
DS18B20 GPIO 5
JSON
Web Hosting
MySQL
3 Tables
JSON
Poll 15s
Message
Auto Ticket
ฮาร์ดแวร์ที่ใช้
| อุปกรณ์ | รุ่น / รายละเอียด |
|---|---|
| Microcontroller | ESP32 (38-pin DevKit) |
| Sensor อากาศ | DHT22 (AM2302) — อุณหภูมิอากาศ & ความชื้น |
| Sensor คอนกรีต | DS18B20 (Waterproof Probe) — อุณหภูมิในเนื้อคอนกรีต |
| Power | 5V USB หรือ 3.7V LiPo |
| Network | WiFi 2.4 GHz (Built-in) |
การตั้งค่า Firmware (ino)
แก้ไขค่าเหล่านี้ใน concrete_monitoring.ino ก่อน Flash
| ค่าที่ต้องแก้ไข | ค่าตัวอย่าง |
|---|---|
WIFI_SSID | "MyWiFi" |
WIFI_PASSWORD | "password123" |
API_URL | "https://esp32.monbakery.com/api.php" |
deviceId | "ESP32_01" |
concrete_temp = null โดยอัตโนมัติ — ไม่กระทบ DHT22 และระบบยังทำงานได้ตามปกติ (DEVICE_DISCONNECTED_C error handling)เซ็นเซอร์ DS18B20 — อุณหภูมิในเนื้อคอนกรีต
DS18B20 เป็น Waterproof Digital Temperature Probe ใช้โปรโตคอล OneWire วัดอุณหภูมิได้แม่นยำ ±0.5°C เหมาะสำหรับฝังในเนื้อคอนกรีตเพื่อติดตาม Heat of Hydration
- Auto Detect ตรวจสอบการเชื่อมต่ออัตโนมัติทุกรอบ
- Null Safety ส่ง
concrete_temp = nullถ้าไม่ได้ต่อ Sensor - No Config ไม่ต้องตั้งค่าใน Settings — เปิด/ปิดด้วยการต่อ/ถอด
- OneWire ใช้ GPIO 5 + 4.7kΩ pull-up resistor
- Alert 🔴 เปิด Ticket + ส่ง LINE เฉพาะระดับ อันตราย (concrete_temp > temp_orange_max)
DS18B20_OFFSET ใน Firmware ก่อน Flash ค่าเริ่มต้น = 0.0°C-- ในช่องคอนกรีต, Gauge ว่าง — DHT22 และระบบอื่นๆ ยังทำงานได้ตามปกติโครงสร้างฐานข้อมูล MySQL
Database: bpacoth1_esp32 | Host: Web Hosting (phpMyAdmin) | Charset: utf8mb4
| Column | Type | หน้าที่ |
|---|---|---|
id | INT PK | Auto increment |
device_id | VARCHAR | รหัสอุปกรณ์ |
temperature | DECIMAL | อุณหภูมิ (°C) |
humidity | DECIMAL | ความชื้น (%) |
dew_point | DECIMAL | จุดน้ำค้าง (°C) |
concrete_temp | DECIMAL NULL | อุณหภูมิคอนกรีต DS18B20 (°C) |
temp_color | VARCHAR | green/yellow/orange/red |
hum_color | VARCHAR | green/yellow/red |
recorded_at | DATETIME | เวลาบันทึก |
| Column | Default | หน้าที่ |
|---|---|---|
temp_green_max | 35.0 | เกณฑ์อุณหภูมิปกติ |
temp_yellow_max | 45.0 | เกณฑ์เฝ้าระวัง |
temp_orange_max | 60.0 | เกณฑ์เสี่ยง |
hum_green_min | 95.0 | ความชื้นปกติ |
hum_yellow_min | 80.0 | ความชื้นเฝ้าระวัง |
send_interval | 30 | ส่งข้อมูลทุก N วินาที |
line_token | '' | Channel Access Token (LINE OA) |
line_user_id | '' | User ID (U...) หรือ Group ID (C...) |
line_enabled | 1 | เปิด/ปิด LINE |
line_cooldown | 5 | cooldown (นาที) |
| Column | Type | หน้าที่ |
|---|---|---|
id | INT PK | Auto increment |
device_id | VARCHAR | รหัสอุปกรณ์ |
alert_type | VARCHAR | temp / hum / both |
temperature | DECIMAL | ค่า ณ เวลาเตือน |
humidity | DECIMAL | ค่า ณ เวลาเตือน |
message | TEXT | ข้อความแจ้งเตือน |
status | ENUM | open / closed |
opened_at | DATETIME | เวลาเปิด ticket |
closed_at | DATETIME | เวลาปิด ticket |
API Endpoints
Base URL: https://esp32.monbakery.com/api.php
| Method | Endpoint | หน้าที่ | Response |
|---|---|---|---|
| GET | ?limit=N |
ดึง sensor data ล่าสุด N รายการ + stats + open ticket | { data, total, current, stats, open_ticket, device_filter } |
| GET | ?limit=N&device_id=X |
กรองข้อมูลเฉพาะ device นั้น (stats และ open_ticket ก็กรองด้วย) | { data, total, current, stats, open_ticket, device_filter } |
| GET | ?action=devices |
รายชื่ออุปกรณ์ทั้งหมด + จำนวนการอ่านค่า + เวลาล่าสุด | { devices: [{ device_id, reading_count, last_seen }] } |
| GET | ?action=devices_status |
สถานะล่าสุดของแต่ละ device + open ticket (สำหรับ Device Cards) | { devices: [{ device_id, temperature, humidity, temp_color, open_ticket_id, ... }] } |
| GET | ?action=settings |
ดึงค่า settings ทั้งหมด (ESP32 โหลดทุก 5 นาที) | { temp_green_max, ..., send_interval } |
| GET | ?action=check_ticket&device_id=X |
เช็ค open ticket ของ device | { has_open_ticket, ticket_id } |
| GET | ?action=tickets&limit=N |
ดึงประวัติ ticket ทั้งหมด (รองรับ &device_id=X) | { tickets: [{ id, device_id, alert_type, status, ... }] } |
| POST | (body: sensor JSON) |
บันทึก sensor + Auto open/close ticket + ส่ง LINE OA อัตโนมัติ | { status:"ok", id, ticket_action, ticket_id } |
| POST | ?action=settings |
บันทึก settings จาก Dashboard | { status:"ok" } |
| POST | ?action=close_ticket |
ปิด ticket manual จาก Dashboard + ส่ง LINE OA | { status:"ok" } |
เกณฑ์อุณหภูมิคอนกรีต
อ้างอิง ACI 305R — Hot Weather Concreting
เกณฑ์ความชื้นสัมพัทธ์ในคอนกรีต
ความชื้นสำหรับการบ่มคอนกรีต (Curing)
ระบบ Ticket แจ้งเตือน
เปิด Ticket และส่ง LINE OA เฉพาะระดับ 🔴 อันตราย เท่านั้น — อุณหภูมิ > temp_orange_max หรือ ความชื้น < hum_yellow_min
"opened" → เปิด Ticket ใหม่ + ส่ง LINE OA
"exists" → Ticket เปิดอยู่แล้ว (ไม่ส่ง LINE ซ้ำ)
"closed" → ปิด Ticket อัตโนมัติ + ส่ง LINE OA
null → ค่าปกติ ไม่มี Ticket
วิธีตั้งค่า LINE OA (Messaging API)
การแจ้งเตือนส่งจาก PHP Server → LINE OA โดยตรง ไม่ผ่าน ESP32
Group ID: เพิ่ม LINE OA เข้า Group → ส่งข้อความใน Group → ดู Webhook Event → groupId (ขึ้นต้น C...)
ปิด Ticket — ค่าพ้นระดับอันตราย (auto) หรือปิด manual ใน Dashboard
Multi-device — หลายจุดตรวจ
รองรับ ESP32 หลายตัวพร้อมกัน แต่ละตัวใช้ device_id ต่างกัน ข้อมูล + Ticket แยกอิสระ
- device_id แก้ใน Firmware เช่น
"ESP32_01","ESP32_02" - API_URL ใช้ URL เดียวกันทุกตัว
- Ticket แต่ละ device มี open ticket แยกกัน
- LINE แจ้งเตือนระบุ device_id ในข้อความ
- Device Cards แสดงสถานะทุกอุปกรณ์พร้อมกัน (ปรากฏเมื่อมี > 1 device)
- Dropdown กรองข้อมูล/กราฟ/ticket เฉพาะ device ที่เลือก
- คลิก Card เปลี่ยน filter ทั้ง Dashboard ทันที
- Auto Refresh อัปเดต Device Cards ทุก 30 วินาที
ขั้นตอนการติดตั้งระบบ
server/database.sql → สร้าง database bpacoth1_esp32 พร้อม 3 tables อัตโนมัติserver/api.php ไปที่ Web Hosting เช่น public_html/api.php — ตรวจสอบ DB credentials ใน api.php (DB_HOST, DB_USER, DB_PASS, DB_NAME)esp32/concrete_monitoring.ino ใน Arduino IDE → ติดตั้ง Libraries: DHT sensor library (Adafruit), OneWire (Paul Stoffregen), DallasTemperature (Miles Burton) → แก้ SSID, Password, API_URL → Upload | ถ้าไม่ใช้ DS18B20 ไม่ต้องต่อ Sensor — ระบบยังทำงานได้web/ ทั้ง folder ไปที่ Hosting หรือเปิด index.html ใน Browser — Dashboard จะดึงข้อมูลจาก API ทุก 15 วินาทีอัตโนมัติLibraries & Dependencies
- WiFi.h Built-in ESP32
- HTTPClient.h Built-in ESP32
- DHT.h Adafruit DHT Sensor Library
- OneWire.h Paul Stoffregen — OneWire Protocol
- DallasTemperature.h Miles Burton — DS18B20
- time.h NTP Time Sync
- PDO MySQL Connection
- PHP 7.4+ REST API
- MySQL 5.7+ Database
- CORS Header Allow-Origin *
- Chart.js 4.4 กราฟเรียลไทม์
- chartjs-adapter-date-fns Time Axis
- Font Awesome 6.5 Icons
- Google Fonts: Prompt Thai Typography