กลับไปหน้ารวมไฟล์
sl-real-time-information-4-fc81b8.md

ชื่อโปรเจกต์: 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:

  1. SL Platsuppslag: เอาไว้หา "SiteID" เฉพาะของป้ายที่เราต้องการ (เช่น "T-Centralen")
  2. 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 หรือใช้ในโปรเจกต์ตัวเองได้เลยนะวัยรุ่น จัดไปอย่าให้เสีย!

Default output

ข้อมูล Frontmatter ดั้งเดิม

title: "SL Real Time Information 4"
description: "Arduino sketch written for NodeMCU to fetch information from Stockholm Lokaltrafiks API about departures from any given stop."
author: "Nosen"
category: ""
tags:
  - "sl"
  - "bus"
  - "transportation"
views: 1264
likes: 0
price: 1499
difficulty: "Intermediate"
components:
  - "1x NodeMCU ESP8266 Breakout Board"
tools: []
apps:
  - "1x SL Realtidsinformation 4"
  - "1x SL Platsuppslag"
downloadableFiles: []
documentationLinks: []
passwordHash: "39e08cad60337ef3ddccd0cdc78289651ddf2c6453b4f856a1db56ce02ba178c"
encryptedPayload: "U2FsdGVkX19M6RNiAahLRK0mSXdclqZBkzlzHpFQWCvYZgkKh27eTG5NPzWwGOHY4NKbbgWRaILXE5Ub2i6RXf/T2I9LKg7/45TvvaoSdJdkQ6y4jDjdPbffxCQm/DqcTeie0CxE+ocMTKwISJW48g=="
seoDescription: "Arduino sketch for NodeMCU to fetch real-time departure info from Stockholm Lokaltrafiks API."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/sl-real-time-information-4-fc81b8_cover.jpg"
lang: "th"