GlobalByte / Arduino / Weather Sensor / Data Logging / Offline Project
ทำ Offline Weather Station ด้วย XIAO SAMD21 Plus และ DFRobot Lark
Weather Station หลายแบบดูข้อมูลได้ดีตอนมี Wi-Fi แต่พอ Network หรือ Cloud มีปัญหา Dashboard ก็อาจหายตามไปด้วย
Project ของ Pradeep เลือกแนวทาง Local-first: ใช้ DFRobot Lark วัดสภาพอากาศ แล้วส่งข้อมูลผ่าน I²C ไปยัง XIAO SAMD21 Plus เพื่อแสดงผลบน OLED และบันทึกลง microSD โดยตรง
ระบบอ่านข้อมูลใหม่ทุก 2 วินาที มีกราฟย้อนหลัง 10 Samples, RGB LED, Buzzer, USER Button และสามารถโหลดข้อมูลล่าสุดจากไฟล์ LARK.CSV กลับมาแสดงหลังเปิดเครื่องใหม่
- ทำงานได้โดยไม่ต้องเชื่อม Wi-Fi หรือ Cloud
- ใช้ DFRobot Lark EDU0157 เป็น Weather Sensor Head
- ใช้ XIAO SAMD21 Plus เป็น Main Controller
- ใช้ XIAO Expansion Board สำหรับ OLED, microSD, Button, Buzzer และ RTC
- เชื่อม Lark ผ่าน Grove I²C Cable เพียงเส้นเดียว
- อ่าน Sensor ใหม่ทุก 2 วินาที
- แสดงกราฟ 10 Samples ล่าสุด
- บันทึกข้อมูลลงไฟล์ LARK.CSV บน microSD
- โหลด 10 Records ล่าสุดกลับเข้าสู่ Graph Buffer หลัง Restart
- ตรวจ I²C ก่อนอ่านค่าเพื่อหลีกเลี่ยงการรอ Timeout เมื่อ Lark หลุด
ทำไมต้องเป็น Offline Weather Station?
จุดแข็งของระบบ Offline คือข้อมูลพื้นฐานยังถูกแสดงและบันทึกต่อได้ แม้ไม่มี Router, Internet หรือ Cloud Dashboard
รูปแบบนี้เหมาะกับการทดลองในห้องเรียน, พื้นที่ภาคสนาม, จุดติดตั้งชั่วคราว หรือสถานที่ที่สัญญาณ Network ไม่สม่ำเสมอ
Project นี้ยังมี OLED, Graph, CSV Logging, RGB Status, Buzzer และ Persistent History โดยทั้งหมดทำงานอยู่บน Hardware ตรงหน้า
ระบบทำงานอย่างไร?
↓ I²C
XIAO SAMD21 Plus
├── OLED Display
├── Graph Buffer 10 Samples
├── RGB LED
├── USER Button / Buzzer
└── microSD → LARK.CSV
เมื่อครบ Interval 2 วินาที Firmware จะตรวจว่า Lark ยังตอบบน I²C หรือไม่ ถ้าพบ Sensor จึงอ่านข้อมูล Weather ชุดใหม่
ค่าที่อ่านได้จะถูกเพิ่มเข้า History Buffer, เขียนลง microSD และนำไป Refresh หน้าจอ
Hardware ที่ใช้
| อุปกรณ์ | หน้าที่ |
|---|---|
| DFRobot Lark Weather Station EDU0157 | วัด Wind Speed, Wind Direction, Temperature, Humidity และ Pressure |
| Seeed Studio XIAO SAMD21 Plus | Main Controller, OLED Rendering, Logging และ UI Logic |
| Expansion Board Base for XIAO | OLED, microSD, USER Button, Buzzer, RTC และ Grove Ports |
| Grove / Gravity Cable | เชื่อม Lark เข้ากับ Grove I²C Port |
| microSD Card | เก็บ LARK.CSV และข้อมูลย้อนหลังสำหรับกราฟ |
| USB-C Data Cable | Power, Upload และ Serial Monitor |
| CR1220 | Optional สำหรับ RTC บน Expansion Board |
| 3.7V LiPo | Optional สำหรับ Portable Power |
| Tripod | Optional สำหรับวาง Lark ในตำแหน่งวัด |
รู้จัก DFRobot Lark Weather Station
| Specification | ค่า |
|---|---|
| Working Voltage | 3.3–5.5V DC |
| Working Current | 40mA |
| Sleep Current | 2mA |
| Communication | I²C / UART |
| Wind Speed | 0.5–12 m/s |
| Wind Direction | 8 Directions |
| Temperature | -20–60°C ±0.2°C |
| Humidity | 0–99%RH ±2%RH |
| Pressure | 300–1100 hPa |
| Built-in Storage | 16 MB |
| Main Body Size | 160 × 55 mm |
| Main Body Weight | 270 g |
เอกสารทางการระบุว่าบอร์ดภายในมี Protective Coating แต่ Type-C และ Gravity Interface อยู่ด้านล่าง จึงควรป้องกันน้ำฝนเข้าสู่ Connector
XIAO SAMD21 Plus เป็น Controller หลัก
XIAO SAMD21 Plus ใช้ Microchip ATSAMD21G18A Cortex-M0+ พร้อม Flash 256 KB และ SRAM 32 KB
รุ่น Plus เพิ่มสิ่งที่เหมาะกับ Project แบบพกพา เช่น:
- Li-ion / LiPo Battery Management
- Reset Button
- Boot Button
- Onboard WS2812 RGB LED
- Additional GPIO ผ่าน Backside Pads
Hardware Card บน Hackster อาจแสดงชื่อ XIAO SAMD21 แต่เนื้อหา, Firmware และ Board Selection ใช้ Seeed XIAO M0 Plus
XIAO Expansion Board รวม Peripheral สำคัญไว้แล้ว
ใช้แสดง Home Screen, Sensor Values และ Graph
ใช้บันทึก LARK.CSV และ Restore History
มี Hardware อยู่บน Board แม้ Firmware นี้ยังไม่ใช้ RTC ทำ CSV Timestamp
ใช้เปลี่ยน Screen และให้ Audible Feedback
Wiring และ I²C Bus
ขั้นประกอบหลักมีเพียง:
ติดตั้งลงบน Expansion Board ให้ Header ตรงตำแหน่ง
ใช้เก็บ CSV และ Restore Graph History
ใช้สำหรับ Power, Upload และ Serial Monitor
ใช้ Grove / Gravity 4-pin Cable เพียงเส้นเดียว
| Device | I²C Address |
|---|---|
| DFRobot Lark | 0x42 |
| OLED | 0x3C |
| Expansion Board RTC | 0x51 |
Grove Connector บน Expansion Board มีลักษณะใกล้เคียงกัน แต่ Firmware ชุดนี้สื่อสารกับ Lark ผ่าน I²C
Storage สองชั้น: Lark 16 MB และ Project microSD
ตัว Lark มี Storage 16 MB และสามารถ Export Data ผ่าน Type-C ได้
Firmware ของ Project เขียน Reading ลง LARK.CSV เพื่อใช้กับ Data Log และ OLED History
Graph History ใน Firmware ของ Project อ่านจาก LARK.CSV บน microSD ไม่ได้อ่านจาก Internal Storage 16 MB ของ Lark
ติดตั้ง Arduino IDE, Board Package และ Libraries
Board Setting ที่ Project ใช้คือ:
Software และ Library หลัก:
- Arduino IDE 2.x หรือ arduino-cli
- Seeed SAMD Boards 1.8.6 หรือใหม่กว่า
- Adafruit SSD1306
- Adafruit GFX
- Adafruit NeoPixel
- Arduino SD
- DFRobot_LarkWeatherStation
SAMD21 ใช้ Native USB หาก Arduino IDE หา Board ไม่เจอ ให้ตรวจและเลือก Port ใหม่
Firmware อ่านข้อมูลใหม่ทุก 2 วินาที
↓
Ping Lark Address 0x42
↓
อ่าน Weather Values
↓
เพิ่มเข้า History Buffer
↓
Append ลง LARK.CSV
↓
Refresh OLED
if (now - lastSample >= 2000) {
lastSample = now;
larkLive = takeSample();
if (!larkLive) {
Serial.println("Lark: no data, sample skipped");
drawScreen();
return;
}
pushHist(live);
logSd(live);
drawScreen();
}
รับมือ Sensor หลุดโดยไม่รอ Timeout หลายรอบ
ก่อนเรียก getValue() Firmware จะ Ping I²C Address ของ Lark ก่อน
static bool larkPresent() {
Wire.beginTransmission(LARK_ADDR);
return Wire.endTransmission() == 0;
}
static bool takeSample() {
if (!larkPresent()) return false;
String t = kv("Temp");
if (t.length() == 0) return false;
live.temp = t.toFloat();
live.humi = kv("Humi").toFloat();
live.wind = kv("Speed").toFloat();
live.press = kv("Pressure").toFloat();
live.alt = kv("Altitude").toFloat();
return true;
}
ถ้า Lark ไม่ตอบ Firmware จะ Skip Sample และ Home Screen แสดง LOST แทนการอ่าน Sensor ซ้ำทุก Field
Presence Check ช่วยหลีกเลี่ยง Long Timeout จาก Lark Library แต่ Firmware ยังมี Delay และ Operation แบบ Blocking ในส่วนอื่น
บันทึกข้อมูลลง LARK.CSV
แต่ละ Record เก็บ:
- Temperature
- Humidity
- Wind Speed
- Pressure
- Altitude
- Wind Direction
- millis()
static void logSd(const Sample &s) {
if (!sdOk) return;
File f = SD.open("LARK.CSV", FILE_WRITE);
if (!f) return;
f.seek(f.size());
f.print(s.temp, 2); f.print(',');
f.print(s.humi, 2); f.print(',');
f.print(s.wind, 2); f.print(',');
f.print(s.press, 2); f.print(',');
f.print(s.alt, 2); f.print(',');
f.print(s.dir); f.print(',');
f.println(millis());
f.close();
}
Expansion Board มี RTC แต่ CSV ใช้ millis()
Expansion Board มี RTC และรองรับ CR1220 แต่ Firmware ที่อยู่ใน Source ไม่ได้ใช้ RTC ทำ Date/Time Timestamp
Column สุดท้ายใน CSV คือ millis() ซึ่งเริ่มนับใหม่หลัง Reset หรือ Power Cycle
Firmware โหลด 10 Rows ล่าสุดจาก LARK.CSV กลับเข้ากราฟได้ แต่ Sample ใหม่หลัง Restart จะเริ่มค่า millis() จากศูนย์อีกครั้ง
OLED, Graph, RGB LED และ Buzzer
USER Button ใช้ Cycle ผ่าน Screen:
- Home
- Temperature
- Humidity
- Wind
- Pressure
- Altitude
- LED Off
แต่ละ Sensor Screen มีกราฟย้อนหลัง 10 Samples และปรับ Scale ตาม Minimum / Maximum ของข้อมูลที่มี
| Screen | RGB Color ใน Firmware |
|---|---|
| Home | Green |
| Temperature | Red |
| Humidity | Blue |
| Wind | White / Grey |
| Pressure | Purple |
| Altitude | Yellow |
แกลเลอรี Hardware และการใช้งาน
ดูวิดีโอทั้งหมดของ Project
Source ที่ตรวจพบมีวิดีโอหลักหนึ่งรายการ แสดงการประกอบ, OLED UI และ SD Card Logging ของระบบจริง
ไฟล์ดาวน์โหลด, Libraries และเอกสารทั้งหมด
Firmware ฉบับเต็มถูกแสดงอยู่ใน Hackster Tutorial แต่ยังไม่พบ Direct Public Attachment ของไฟล์ XIAO_SAMD21_LarkWeather.ino ที่ยืนยันได้ จึงใช้ลิงก์ไปยังบทความต้นฉบับแทนการสร้าง Download URL ขึ้นเอง
DFRobot Lark Arduino Library
Official Repository สำหรับ getValue(), getUnit() และ Lark Communication
เปิด Official GitHub LibraryDFRobot Library ZIP
ดาวน์โหลด Library เพื่อนำเข้า Arduino IDE แบบ Add .ZIP Library
ดาวน์โหลด Library ZIPDFRobot Lark Documentation
Specification, Communication และวิธีใช้งาน EDU0157
อ่าน Official DocumentationDFRobot Lark Product Page
ข้อมูล Product, Shipping List, Documents และ Certification
เปิด Product PageSeeed Board Manager JSON
Additional Boards Manager URL สำหรับ Seeed SAMD Boards
เปิด Board Package IndexXIAO SAMD21 Plus Documentation
Official Pinout, Battery, RGB LED และ Board Setup
อ่าน XIAO SAMD21 Plus GuideXIAO Expansion Board Documentation
OLED, RTC, microSD, USER Button, Buzzer และ Grove Interface
อ่าน Expansion Board GuideFAQ — Offline Weather Station ด้วย XIAO และ Lark
1. Project นี้ต้องใช้ Wi-Fi หรือไม่?
ไม่ OLED, Sensor Reading และ microSD Logging ทำงานแบบ Offline
2. ใช้ XIAO รุ่นไหน?
เนื้อหาและ Firmware ใช้ XIAO SAMD21 Plus โดยเลือก Board เป็น Seeed XIAO M0 Plus
3. Lark วัดอะไรได้บ้าง?
วัด Wind Speed, Wind Direction, Temperature, Humidity และ Barometric Pressure
4. Sampling ทุกกี่วินาที?
ทุก 2 วินาทีตาม Firmware ของ Project
5. Lark ต่อกับ XIAO อย่างไร?
ต่อผ่าน Grove I²C Port ด้วย Gravity / Grove 4-pin Cable
6. Lark ใช้ I²C Address อะไร?
0x42
7. OLED ใช้ Address อะไร?
0x3C
8. RTC ใช้ Address อะไร?
0x51 ตาม Expansion Board
9. ข้อมูลถูกเก็บไว้ที่ไหน?
Firmware ของ Project เขียนข้อมูลลง LARK.CSV บน microSD
10. Lark มี Storage ภายในหรือไม่?
มี 16 MB แต่แยกจาก microSD Logging ที่ Project นี้สร้างขึ้น
11. CSV มี Date และ Time จริงหรือไม่?
ไม่มีใน Firmware เวอร์ชันนี้ โดย Field สุดท้ายใช้ millis()
12. RTC บน Expansion Board ถูกใช้หรือไม่?
Hardware มี RTC แต่ Firmware ที่แสดงไม่ได้ใช้ RTC ทำ Timestamp ใน LARK.CSV
13. หลัง Restart กราฟยังอยู่หรือไม่?
Firmware โหลด 10 Rows ล่าสุดจาก LARK.CSV กลับเข้า Graph Buffer
14. Graph แสดงกี่ Sample?
10 Samples ล่าสุด
15. ถ้า Lark หลุด ระบบทำอย่างไร?
Firmware ตรวจ I²C ก่อนอ่านค่า ถ้าไม่พบจะ Skip Sample และ Home Screen แสดง LOST
16. ใช้ LiPo ได้หรือไม่?
Source ระบุว่าใช้เป็น Optional Portable Power ได้ แต่ไม่ได้ระบุ Capacity หรือ Runtime
17. วางทั้งชุดกลางฝนได้หรือไม่?
Source ไม่ได้ระบุ IP Rating ของ XIAO, OLED, Expansion Board และ microSD Assembly ทั้งชุด
18. มี Firmware .ino ให้ดาวน์โหลดโดยตรงหรือไม่?
Source แสดง Firmware เต็มใน Hackster Tutorial แต่ยังไม่พบ Public Direct Attachment ที่ยืนยันได้
สรุป: Weather Station ที่ยังเก็บข้อมูลต่อได้โดยไม่พึ่ง Cloud
จุดเด่นของ Project นี้ คือการวาง Architecture ให้เรียบง่าย: Lark รับผิดชอบ Weather Sensing ส่วน XIAO SAMD21 Plus จัดการ Display, Interaction และ Local Storage
microSD ไม่ได้ทำหน้าที่เป็น Archive อย่างเดียว เพราะ Firmware ยังอ่าน 10 Rows ล่าสุด กลับมาใช้สร้าง Graph หลัง Restart
การตรวจ I²C ก่อนเรียก Sensor Library ยังเป็นตัวอย่างที่ดีของการออกแบบ Embedded UI ให้รับมือกับ Hardware ที่อาจถูกถอดหรือหลุด โดยไม่ทำให้ผู้ใช้ต้องรอ Timeout ซ้ำหลายรอบ
สำหรับ Maker ที่กำลังเริ่มทำ Weather Monitoring, Sensor Display หรือ Data Logger นี่เป็น Project ที่แสดงให้เห็นว่า ระบบ Offline ก็สามารถมีทั้ง UI, History และ Fault Handling ได้ครบในอุปกรณ์ขนาดเล็ก
References / แหล่งข้อมูลต้นฉบับ
กำลังทำ Weather Monitoring หรือ Data Logging Project?
Project แบบนี้ต้องเลือกทั้ง Development Board, Sensor, Display, Storage และ Interface ให้ทำงานร่วมกัน โดยเฉพาะเมื่อต้องการให้ระบบทำงานต่อได้ แม้ไม่มี Wi-Fi
สามารถสอบถามทีม GlobalByte เรื่อง Development Board, Weather Sensor, OLED, microSD หรือ Maker Accessories ที่เหมาะกับ Requirement ของ Project ได้
บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับและเอกสารทางการก่อนลงมือทำ
Hackster Hardware Card บางส่วนแสดง XIAO SAMD21 รุ่นเดิม แต่เนื้อหา, Firmware และ Board Setting ใช้ XIAO SAMD21 Plus บทความนี้จึงยึดข้อมูลจาก Build และ Firmware เป็นหลัก
Expansion Board มี RTC แต่ Firmware เวอร์ชันที่ Source แสดง บันทึก millis() ลงใน CSV แทน Date / Time จาก RTC
การ Restore History หลัง Restart หมายถึง Sensor Values 10 Records ล่าสุด ถูกโหลดกลับเข้าสู่ Graph Buffer แต่ค่า millis() ของ Sample ใหม่จะเริ่มนับจากศูนย์อีกครั้ง
Lark มี Built-in Storage 16 MB แต่ระบบ microSD Logging ใน Project เป็น Storage Layer อีกชุดหนึ่ง และไม่ได้หมายความว่า LARK.CSV ถูกเขียนลง Internal Storage ของ Lark
Source เรียกค่า Altitude ผ่าน Lark Interface แต่ไม่ได้ระบุ Dedicated Altitude Sensor แยกต่างหาก
แม้ Lark มีโครงสร้างและ Protective Coating สำหรับงานภาคสนาม แต่ Source ไม่ได้ระบุ IP Rating ของ XIAO SAMD21 Plus, Expansion Board, OLED และ microSD Assembly ทั้งชุด
Source ไม่ได้ระบุ Battery Capacity, Battery Runtime, Total Power Consumption, Maximum microSD Capacity, Calibration Interval, Long-term Drift หรือ Maximum Cable Length ของ Build นี้
Firmware ขนาดประมาณ 66 KB เป็นผล Compile ที่ผู้สร้างรายงาน ขนาดจริงอาจเปลี่ยนตาม Library, Board Package และ Compiler Version
ภาพบางส่วนในบทความมาจากวิดีโอ Project และเอกสารทางการของ DFRobot/Seeed เนื่องจาก Source Text ที่เข้าถึงได้ ไม่ได้เปิดเผย Direct URL ของ Hackster Attachments ทุกภาพ จึงไม่มีการสร้าง Attachment URL จากการคาดเดา