ชื่อโปรเจกต์: SL Real Time Information 4
เดินทางแบบสมาร์ทๆ: ดึงข้อมูลรถสาธารณะ Real-Time ด้วย ESP8266
การจะเดินทางในโครงข่ายขนส่งมวลชนที่ใหญ่ยักษ์อย่าง Stockholm Lokaltrafik (SL) ข้อมูลต้องเป๊ะระดับวินาทีนะน้อง โปรเจกต์นี้พี่จะพาพวกเอ็งเอา NodeMCU (ESP8266) มาเชื่อมต่อกับ SL REST API โดยตรง เปลี่ยนเจ้า Microcontroller ตัวจิ๋วให้กลายเป็น Dashboard สุดเทพที่คอยรายงานเวลารถเมล์ รถไฟ หรือรถรางที่จะเข้าป้ายแบบ Real-time ทั่วทั้งเมือง บอกเลยว่าหล่อเท่แน่นอนงานนี้
ความท้าทายระดับ Big Data: บริหาร RAM ยังไงไม่ให้ตุย
การจะเอา Microcontroller ที่มี RAM แค่ไม่กี่ร้อย KB ไปต่อกรกับ REST API ยุคใหม่เนี่ย มันคือปัญหา "Big Data" ย่อมๆ เลยนะวัยรุ่น
- JSON Overhead: ปกติ API พวกนี้ตอบกลับมาทีนึงยาวเป็นหมื่นตัวอักษร มี Object ซ้อนกันยับๆ สำหรับทุกสายและทุกป้าย ซึ่งมันเกิน Buffer ของบอร์ด Arduino ทั่วไปจะรับไหว (อย่าหาทำแบบโหลดมาทั้งหมดนะ RAM เต็มแน่นอน)
- Stream Parsing ด้วย ArduinoJson: โปรเจกต์นี้เราแก้ปัญหานี้ด้วยการใช้ Library ArduinoJson เราจะใช้วิธี Parse ข้อมูลจาก Stream แบบ "on the fly" หรืออ่านไปประมวลผลไป แทนที่จะโหลดข้อมูลทั้งก้อนลง Memory ทำให้ NodeMCU ดึงแค่เวลาที่รถจะออกได้สบายๆ ส่วน Metadata ขยะที่ไม่ใช้ก็โยนทิ้งไป
- Secure Requests: เจ้า NodeMCU ของเราจัดการเรื่อง HTTPS (TLS) handshakes เพื่อคุยกับ Server ของ SL ได้แบบชิลๆ มั่นใจได้ว่าข้อมูลรับ-ส่งกันได้ถูกต้อง ไม่ต้องกลัวโดนดักกลางทาง
การเชื่อมต่อ API: Platsuppslag และ Realtidsinformation
โครงสร้างโปรเจกต์นี้พี่ใช้ API หลักๆ 2 ตัวของ SL:
- SL Platsuppslag: เอาไว้หา "SiteID" เฉพาะของป้ายที่เราต้องการ (เช่น "T-Centralen")
- SL Realtidsinformation 4: พอได้ SiteID มาแล้ว ESP8266 ก็จะส่ง Request ไปขอข้อมูลรถที่จะมาถึงจริงๆ จากนั้นเราก็มา Filter กรองเอาเฉพาะประเภทรถและเวลานับถอยหลังที่เราอยากรู้
อัปเกรดให้เทพขึ้นและ UI
ตอนนี้พี่ทำ Code ให้มันออกผ่าน Serial Monitor หรือจอ LCD ไปก่อน แต่ด้วยความที่ Code มันเป็นแบบ Modular แยกส่วนกันชัดเจน น้องสามารถเอาไปต่อยอดได้เพียบ:
- เชื่อมต่อจอ E-Paper: ทำเป็นป้ายรถเมล์จำลองแบบประหยัดพลังงาน อัปเดตเฉพาะเวลารถมีการเปลี่ยนแปลง
- ใช้ไฟ LED เป็น Indicator: ใช้พวก NeoPixel strips เปลี่ยนสีตามนาทีที่เหลือ เช่น เขียวคือยังชิล แดงคือต้องสับตีนแตกแล้ว! ช่วยให้เช็กสถานะการเดินทางได้ง่ายๆ ก่อนออกจากบ้าน
โปรเจกต์นี้เน้นโชว์กึ๋นการเชื่อมต่อ Microcontroller ที่ RAM น้อยๆ เข้ากับ REST interface ขนาดใหญ่ของ SL API เพื่อจัดการกับ JSON ที่ใหญ่กว่า RAM ตัวเองหลายเท่าตัว และทำให้ข้อมูลนั้นดูง่ายสำหรับผู้ใช้อย่างเรา
พี่ลองมาหลายท่าแล้ว แต่สุดท้ายมาจบที่ Library ArduinoJson นี่แหละ แจ่มสุด
Code ตัวนี้เอาไป Remix หรือใช้ในโปรเจกต์ตัวเองได้เลยนะวัยรุ่น จัดไปอย่าให้เสีย!
