-- °C
รอข้อมูล...
-- %RH
รอข้อมูล...
-- °C
Calculated
-- °C
รอข้อมูล...
0 ครั้ง
--

มาตรวัดอุณหภูมิ

-- °C
20-35°C ปกติ 36-45°C เฝ้าระวัง 46-60°C เสี่ยง >60°C อันตราย

มาตรวัดความชื้น

-- %RH
95-100% ปกติ 80-94% เฝ้าระวัง <80% เสี่ยงแตกร้าว

มาตรวัดอุณหภูมิคอนกรีต (DS18B20)

-- °C
≤35°C ปกติ 36-45°C เฝ้าระวัง 46-60°C เสี่ยง >60°C อันตราย

สถิติข้อมูล

--°C
--°C
--%
--%

การแจ้งเตือนล่าสุด

ยังไม่มีการแจ้งเตือน

อุณหภูมิ (°C) - แบบเรียลไทม์

ความชื้นสัมพัทธ์ (%RH) - แบบเรียลไทม์

อุณหภูมิอากาศ vs คอนกรีต (°C)

อุณหภูมิคอนกรีต DS18B20 (°C) - แบบเรียลไทม์

# เวลา อุณหภูมิอากาศ (°C) สถานะ คอนกรีต DS18B20 (°C) ความชื้น (%) สถานะ Dew Point (°C)
รอข้อมูล...
0
เปิดอยู่
0
ปิดแล้ว
0
ทั้งหมด
กำลังโหลด...

เกณฑ์อุณหภูมิคอนกรีต

กำหนดค่าเกณฑ์อุณหภูมิสำหรับระดับการเตือนต่างๆ (อ้างอิง ACI 305R)

°C
ช่วงอุณหภูมิปกติ เหมาะสมต่อการ Hydration
°C
เริ่มเสี่ยงต่อ Heat of Hydration ควร Cooling
°C
ความร้อนสูงมาก เสี่ยงแตกร้าวและลดกำลังอัด
มากกว่าค่าส้ม
Thermal Cracking - ต้องหยุดงานหรือ Cooling ฉุกเฉิน

เกณฑ์ความชื้นสัมพัทธ์ในคอนกรีต

กำหนดค่าเกณฑ์ความชื้นสำหรับการบ่มคอนกรีต

%RH
ความชื้นปกติ เหมาะสมต่อการ Hydration สูงสุด
%RH
ความชื้นเริ่มลดเร็ว มีผลต่อ Hydration
น้อยกว่าค่าเหลือง
Hydration ไม่สมบูรณ์ เสี่ยง Shrinkage Crack

ตั้งค่า ESP32

กำหนดความถี่การส่งข้อมูลจาก ESP32 (ESP32 จะโหลดค่าใหม่ทุก 5 นาที)

วินาที
ค่าแนะนำ 30-60 วินาที

การแจ้งเตือน LINE OA (Messaging API)

ตั้งค่าการแจ้งเตือนผ่าน LINE Official Account — แจ้งเตือนส่งจาก PHP Server โดยตรง

สร้างที่ developers.line.biz → เลือก Channel → Messaging API → Issue Channel Access Token
ดู User ID ได้จาก LINE Developers → Basic Settings → Your user ID  |  Group ID ใช้ Webhook Event เพื่อหา groupId
นาที

ภาพรวมระบบ (System Overview)

ระบบตรวจสอบคอนกรีตเรียลไทม์ ออกแบบสำหรับงานวิศวกรรมโยธา ติดตามอุณหภูมิและความชื้นระหว่างกระบวนการ Hydration ของคอนกรีต อ้างอิงมาตรฐาน ACI 305R — รองรับ หลายจุดตรวจ (Multi-device) แต่ละ device_id มี ticket และข้อมูลแยกอิสระ

ESP32
DHT22 GPIO 4
DS18B20 GPIO 5
HTTP POST
JSON
PHP API
api.php
Web Hosting
PDO
MySQL
MySQL DB
bpacoth1_esp32
3 Tables
HTTP GET
JSON
Dashboard
JavaScript SPA
Poll 15s
Push
Message
LINE OA
Messaging API
Auto Ticket

ฮาร์ดแวร์ที่ใช้

อุปกรณ์รุ่น / รายละเอียด
MicrocontrollerESP32 (38-pin DevKit)
Sensor อากาศDHT22 (AM2302) — อุณหภูมิอากาศ & ความชื้น
Sensor คอนกรีตDS18B20 (Waterproof Probe) — อุณหภูมิในเนื้อคอนกรีต
Power5V USB หรือ 3.7V LiPo
NetworkWiFi 2.4 GHz (Built-in)
การต่อวงจร DHT22
GPIO 4DATA (DHT22 Pin 2)
3.3VVCC (DHT22 Pin 1)
GNDGND (DHT22 Pin 4)
ใส่ Pull-up 10kΩ ระหว่าง VCC และ DATA
การต่อวงจร DS18B20
GPIO 5DATA (DS18B20 สายสีเหลือง)
3.3VVCC (DS18B20 สายสีแดง)
GNDGND (DS18B20 สายสีดำ)
ต้องใส่ Pull-up 4.7kΩ ระหว่าง VCC และ DATA (สำคัญมาก)
รองรับหลายตัวบน OneWire เดียวกัน — ระบบอ่านตัวแรก (Index 0)

การตั้งค่า Firmware (ino)

แก้ไขค่าเหล่านี้ใน concrete_monitoring.ino ก่อน Flash

ค่าที่ต้องแก้ไขค่าตัวอย่าง
WIFI_SSID"MyWiFi"
WIFI_PASSWORD"password123"
API_URL"https://esp32.monbakery.com/api.php"
deviceId"ESP32_01"
ESP32 จะโหลด Settings จาก Database ทุก 5 นาที โดยอัตโนมัติ ไม่ต้อง Flash ใหม่เมื่อปรับ threshold
NTP Server: pool.ntp.org — Timezone GMT+7 (ไทย)
DS18B20 Auto-detect: หากไม่ได้ต่อ Sensor จะส่ง concrete_temp = null โดยอัตโนมัติ — ไม่กระทบ DHT22 และระบบยังทำงานได้ตามปกติ (DEVICE_DISCONNECTED_C error handling)

เซ็นเซอร์ DS18B20 — อุณหภูมิในเนื้อคอนกรีต

DS18B20 เป็น Waterproof Digital Temperature Probe ใช้โปรโตคอล OneWire วัดอุณหภูมิได้แม่นยำ ±0.5°C เหมาะสำหรับฝังในเนื้อคอนกรีตเพื่อติดตาม Heat of Hydration

Heat of Hydration คืออะไร?
ปฏิกิริยา Hydration
ปูนซีเมนต์ + น้ำ → ความร้อนภายใน ทำให้อุณหภูมิในเนื้อคอนกรีตสูงกว่าอากาศ 3–8°C
ความเสี่ยงถ้าร้อนเกินไป
อุณหภูมิ >60°C → Thermal Cracking, กำลังอัดลด, คุณภาพคอนกรีตเสื่อม
ระบบนี้ช่วยอะไร?
วัดอุณหภูมิจริงในเนื้อคอนกรีต เตือนล่วงหน้าผ่าน LINE ก่อนถึงระดับอันตราย
พฤติกรรมของระบบ
  • 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)
Calibration Offset: หากต้องการชดเชยความคลาดเคลื่อน สามารถแก้ไขค่า DS18B20_OFFSET ใน Firmware ก่อน Flash ค่าเริ่มต้น = 0.0°C
เชื่อมต่อ Sensor: Dashboard แสดงค่าอุณหภูมิคอนกรีต, Gauge, และ Graph แบบเรียลไทม์ — ระบบแจ้งเตือนทำงานเต็มรูปแบบ
ไม่ได้ต่อ Sensor: Dashboard แสดง -- ในช่องคอนกรีต, Gauge ว่าง — DHT22 และระบบอื่นๆ ยังทำงานได้ตามปกติ

โครงสร้างฐานข้อมูล MySQL

Database: bpacoth1_esp32  |  Host: Web Hosting (phpMyAdmin)  |  Charset: utf8mb4

sensor_data
ColumnTypeหน้าที่
idINT PKAuto increment
device_idVARCHARรหัสอุปกรณ์
temperatureDECIMALอุณหภูมิ (°C)
humidityDECIMALความชื้น (%)
dew_pointDECIMALจุดน้ำค้าง (°C)
concrete_tempDECIMAL NULLอุณหภูมิคอนกรีต DS18B20 (°C)
temp_colorVARCHARgreen/yellow/orange/red
hum_colorVARCHARgreen/yellow/red
recorded_atDATETIMEเวลาบันทึก
settings
ColumnDefaultหน้าที่
temp_green_max35.0เกณฑ์อุณหภูมิปกติ
temp_yellow_max45.0เกณฑ์เฝ้าระวัง
temp_orange_max60.0เกณฑ์เสี่ยง
hum_green_min95.0ความชื้นปกติ
hum_yellow_min80.0ความชื้นเฝ้าระวัง
send_interval30ส่งข้อมูลทุก N วินาที
line_token''Channel Access Token (LINE OA)
line_user_id''User ID (U...) หรือ Group ID (C...)
line_enabled1เปิด/ปิด LINE
line_cooldown5cooldown (นาที)
alert_tickets
ColumnTypeหน้าที่
idINT PKAuto increment
device_idVARCHARรหัสอุปกรณ์
alert_typeVARCHARtemp / hum / both
temperatureDECIMALค่า ณ เวลาเตือน
humidityDECIMALค่า ณ เวลาเตือน
messageTEXTข้อความแจ้งเตือน
statusENUMopen / closed
opened_atDATETIMEเวลาเปิด ticket
closed_atDATETIMEเวลาปิด ticket

API Endpoints

Base URL: https://esp32.monbakery.com/api.php

MethodEndpointหน้าที่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

≤ 35°C — ปกติ
เหมาะสมต่อ Hydration สูงสุด
35 – 45°C — เฝ้าระวัง
เริ่มเสี่ยง Heat of Hydration ควร Cooling
45 – 60°C — เสี่ยง
ความร้อนสูง เสี่ยงแตกร้าวและกำลังอัดลด
> 60°C — อันตราย  🔴 เปิด Ticket + ส่ง LINE
Thermal Cracking — หยุดงาน/Cooling ฉุกเฉิน

เกณฑ์ความชื้นสัมพัทธ์ในคอนกรีต

ความชื้นสำหรับการบ่มคอนกรีต (Curing)

≥ 95% RH — ปกติ
ความชื้นสูง Hydration สมบูรณ์
80 – 94% RH — เฝ้าระวัง
ความชื้นลดเร็ว กระทบ Hydration
< 80% RH — เสี่ยงแตกร้าว  🔴 เปิด Ticket + ส่ง LINE
Hydration ไม่สมบูรณ์ เสี่ยง Shrinkage Crack
ค่าเกณฑ์ทั้งหมดปรับได้จากหน้า ตั้งค่า — ESP32 รับค่าใหม่อัตโนมัติทุก 5 นาที

ระบบ Ticket แจ้งเตือน

เปิด Ticket และส่ง LINE OA เฉพาะระดับ 🔴 อันตราย เท่านั้น — อุณหภูมิ > temp_orange_max หรือ ความชื้น < hum_yellow_min

1
ESP32 ส่งข้อมูล
POST sensor data → PHP API
2
PHP ตรวจสอบ
ค่าถึงระดับ 🔴 อันตราย หรือไม่
3
เปิด Ticket ใหม่
บันทึกลง DB + ส่ง LINE OA ทันที
4
รอการแก้ไข
ไม่ส่ง LINE ซ้ำ จนกว่าจะปิด
5
ปิด Ticket
ค่าปกติ (PHP auto) หรือ Manual ใน Dashboard
Auto Close: เมื่อค่าพ้นระดับอันตราย (อุณหภูมิ ≤ temp_orange_max และความชื้น ≥ hum_yellow_min) PHP API จะปิด Ticket อัตโนมัติ และส่ง LINE OA แจ้งว่า "ระบบพ้นภาวะอันตราย"
Manual Close: กดปุ่ม "ปิด Ticket" ใน Dashboard (หน้า Dashboard หรือหน้า Ticket) เพื่อ Reset ระบบแจ้งเตือน
ticket_action ใน Response ของ POST sensor data: "opened" → เปิด Ticket ใหม่ + ส่ง LINE OA
"exists" → Ticket เปิดอยู่แล้ว (ไม่ส่ง LINE ซ้ำ)
"closed" → ปิด Ticket อัตโนมัติ + ส่ง LINE OA
null     → ค่าปกติ ไม่มี Ticket

วิธีตั้งค่า LINE OA (Messaging API)

การแจ้งเตือนส่งจาก PHP Server → LINE OA โดยตรง ไม่ผ่าน ESP32

Server-side: PHP ส่ง LINE เมื่อ open/close ticket — ESP32 ไม่ต้องจัดการ LINE เอง รองรับ Push Message ได้ทุกประเภท
ฟรีแพลน: Push Message 200 ครั้ง/เดือน หรือสมัครแพลน Light/Standard สำหรับโปรเจกต์ขนาดใหญ่
1
สร้าง LINE Official Account
เข้า manager.line.biz → สร้าง OA ใหม่ (ฟรี) → เปิดใช้งาน Messaging API ใน Settings → Messaging API
2
สร้าง Channel Access Token
เข้า developers.line.biz → เลือก Channel → Messaging API tab → กด Issue ที่ "Channel access token (long-lived)" → Copy token
3
หา User ID หรือ Group ID ปลายทาง
User ID: developers.line.biz → Basic Settings → "Your user ID" (ขึ้นต้น U...)
Group ID: เพิ่ม LINE OA เข้า Group → ส่งข้อความใน Group → ดู Webhook Event → groupId (ขึ้นต้น C...)
4
ตั้งค่าใน Dashboard
เปิดหน้า ตั้งค่า → วาง Channel Access Token → วาง User ID / Group ID → เปิดสวิตช์แจ้งเตือน → กด บันทึก
5
LINE OA ส่งข้อความเมื่อ
เปิด Ticket — ค่าถึงระดับ 🔴 อันตราย ครั้งแรก (temp > 60°C หรือ hum < 80%) PHP ส่งทันที
ปิด Ticket — ค่าพ้นระดับอันตราย (auto) หรือปิด manual ใน Dashboard

Multi-device — หลายจุดตรวจ

รองรับ ESP32 หลายตัวพร้อมกัน แต่ละตัวใช้ device_id ต่างกัน ข้อมูล + Ticket แยกอิสระ

ตั้งค่า ESP32 แต่ละตัว
  • device_id แก้ใน Firmware เช่น "ESP32_01", "ESP32_02"
  • API_URL ใช้ URL เดียวกันทุกตัว
  • Ticket แต่ละ device มี open ticket แยกกัน
  • LINE แจ้งเตือนระบุ device_id ในข้อความ
Dashboard
  • Device Cards แสดงสถานะทุกอุปกรณ์พร้อมกัน (ปรากฏเมื่อมี > 1 device)
  • Dropdown กรองข้อมูล/กราฟ/ticket เฉพาะ device ที่เลือก
  • คลิก Card เปลี่ยน filter ทั้ง Dashboard ทันที
  • Auto Refresh อัปเดต Device Cards ทุก 30 วินาที
Device Cards แสดง: อุณหภูมิอากาศ, ความชื้น, คอนกรีต, Dew Point, เวลาล่าสุด, จำนวนครั้ง, สถานะ Online/Offline, Ticket ที่เปิดอยู่
Offline detection: device ที่ไม่ส่งข้อมูลเกิน 10 นาที จะแสดง ⚫ Offline และ card สีเทา

ขั้นตอนการติดตั้งระบบ

1
เตรียม Database
เปิด phpMyAdmin → Import ไฟล์ server/database.sql → สร้าง database bpacoth1_esp32 พร้อม 3 tables อัตโนมัติ
2
อัปโหลด PHP API
อัปโหลด server/api.php ไปที่ Web Hosting เช่น public_html/api.php — ตรวจสอบ DB credentials ใน api.php (DB_HOST, DB_USER, DB_PASS, DB_NAME)
3
Flash ESP32
เปิด esp32/concrete_monitoring.ino ใน Arduino IDE → ติดตั้ง Libraries: DHT sensor library (Adafruit), OneWire (Paul Stoffregen), DallasTemperature (Miles Burton) → แก้ SSID, Password, API_URL → Upload  |  ถ้าไม่ใช้ DS18B20 ไม่ต้องต่อ Sensor — ระบบยังทำงานได้
4
เปิด Dashboard
อัปโหลด web/ ทั้ง folder ไปที่ Hosting หรือเปิด index.html ใน Browser — Dashboard จะดึงข้อมูลจาก API ทุก 15 วินาทีอัตโนมัติ
5
ตั้งค่า LINE OA (ถ้าต้องการ)
สร้าง LINE OA ที่ manager.line.biz → รับ Channel Access Token จาก developers.line.biz → หา User ID / Group ID → เปิดหน้า ตั้งค่า → ใส่ข้อมูล → บันทึก

Libraries & Dependencies

Arduino / ESP32
  • 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
PHP Server
  • PDO MySQL Connection
  • PHP 7.4+ REST API
  • MySQL 5.7+ Database
  • CORS Header Allow-Origin *
Web Frontend
  • Chart.js 4.4 กราฟเรียลไทม์
  • chartjs-adapter-date-fns Time Axis
  • Font Awesome 6.5 Icons
  • Google Fonts: Prompt Thai Typography