4 คะแนน โดย GN⁺ 2026-01-10 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เฟรมเวิร์กรุ่นถัดไป ที่ออกแบบมาเพื่อให้พัฒนาแอปพลิเคชันแบบฝังตัวที่ปลอดภัยและมีประสิทธิภาพได้อย่างรวดเร็ว
  • มอบ ความปลอดภัยของหน่วยความจำและเธรดตั้งแต่คอมไพล์ไทม์ โดยไม่ต้องมีรันไทม์หรือ garbage collector และทำ มัลติทาสก์ได้โดยไม่ต้องใช้ RTOS
  • รองรับไมโครคอนโทรลเลอร์หลากหลายรุ่น พร้อมฟังก์ชันหลักอย่าง HAL, networking, Bluetooth, USB, bootloader
  • คำนึงถึงทั้งการประมวลผลแบบเรียลไทม์และอายุแบตเตอรี่ ด้วย การออกแบบประหยัดพลังงาน และ executor แบบอิงลำดับความสำคัญ
  • กำลังก้าวขึ้นเป็น แพลตฟอร์มหลักของการพัฒนา embedded แบบ asynchronous ที่ผสานเข้ากับ ecosystem ของ Rust

ภาพรวมของ Embassy

  • Embassy คือ เฟรมเวิร์กรุ่นถัดไป ที่ใช้ Rust และความสามารถ async เพื่อเขียนแอปพลิเคชันแบบฝังตัวได้อย่างปลอดภัยและมีประสิทธิภาพ
    • ทำงานได้โดยไม่ต้องมีรันไทม์, garbage collector หรือระบบปฏิบัติการ
    • รับประกัน ความปลอดภัยของหน่วยความจำและเธรด ได้ตั้งแต่คอมไพล์ไทม์

สถาปัตยกรรมบนพื้นฐาน Rust + async

  • ใช้ความสามารถ async/await ของ Rust เพื่อทำ มัลติทาสก์ อย่างมีประสิทธิภาพในสภาพแวดล้อมแบบฝังตัว
    • ทาสก์จะถูกแปลงเป็น state machine ตั้งแต่คอมไพล์ไทม์ และทำงานแบบร่วมมือกัน
    • ไม่ต้องจัดสรรหน่วยความจำแบบไดนามิก และทำงานบนสแตกเดียว
    • ทำให้ได้โค้ดที่เร็วกว่าและมีขนาดเล็กกว่า โดยไม่ต้องมี context switching ของ RTOS
  • ในเอกสารที่ลิงก์ไว้มีการกล่าวถึงประสิทธิภาพที่เหนือกว่าเมื่อเทียบกับ RTOS

องค์ประกอบหลัก (Batteries Included)

  • Hardware Abstraction Layer (HAL)
    • ควบคุมความสามารถของฮาร์ดแวร์ผ่าน Rust API ที่ปลอดภัย
    • รองรับหลัก ได้แก่ STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
  • การจัดการเวลา (embassy-time)
    • มี type อย่าง Instant, Duration, Timer ที่ใช้งานได้แบบ global และไม่มีปัญหา overflow
  • รองรับเรียลไทม์และการใช้พลังงานต่ำ
    • สร้าง executor ได้หลายตัวเพื่อรัน ทาสก์ตามลำดับความสำคัญ
    • เมื่อว่าง ระบบจะสลับคอร์เข้าสู่โหมดประหยัดพลังงานโดยอัตโนมัติ พร้อม ปลุกด้วย interrupt
  • เครือข่าย (embassy-net)
    • รองรับ Ethernet, IP, TCP, UDP, ICMP, DHCP
    • ด้วยโครงสร้าง asynchronous จึงทำให้ การจัดการ timeout และการรองรับหลายการเชื่อมต่อ เป็นเรื่องง่าย
  • Bluetooth
    • รองรับ BLE stack หลายแบบ เช่น trouble, nrf-softdevice, embassy-stm32-wpan
  • LoRa, USB, Bootloader
    • รองรับ LoRaWAN stack ผ่าน lora-rs
    • embassy-usb รองรับการทำงานของ USB CDC, HID class
    • embassy-boot รองรับ การอัปเดตเฟิร์มแวร์ที่ปลอดภัยแม้เกิดไฟดับ

ข้อมูลทางเทคนิคและไลเซนส์

  • Rust เวอร์ชันต่ำสุดที่รองรับ (MSRV) : 1.75 ขึ้นไป
  • ไลเซนส์: เลือกใช้ได้ระหว่าง Apache-2.0 หรือ MIT
  • ชื่อโปรเจกต์ เป็นตัวย่อของ “** EMBedded ASYnc**”

2 ความคิดเห็น

 
pmnxis 2026-01-11

ผมเคยใช้ embassy-rs กับ STM32G030C8T6 พัฒนาสินค้าจนถึงขั้นผลิตจริงมาแล้ว แต่พอใช้ก็มีข้อเสียอยู่บ้าง
เวลาต้องเข้าถึง HAL ที่ไม่ใช่มาตรฐาน สุดท้ายก็ยังต้องใช้แนวทางแบบเดียวกับตอนใช้เฟรมเวิร์ก RTIC
ต้องระวังเพราะ async มีโอกาสทำให้การใช้หน่วยความจำไม่มีประสิทธิภาพ
ถ้าจะพัฒนาในสภาพแวดล้อมที่มีแฟลชเมมโมรีต่ำกว่า 32KB จะค่อนข้างมีข้อจำกัดมาก (log + debug symbol ฯลฯ)
หากอยากพัฒนาบนระบบนิเวศที่อยู่นอกเหนือจาก NRF/STM/ESP/RP ก็แทบจะยากมากในทางปฏิบัติ
การลองใช้ Rust embedded ผ่าน embassy-rs ถือว่าเป็นเรื่องดี แต่ถ้าต่อไปอยากพัฒนาให้ดีขึ้นทั้งในแง่การผลิตจริงและเส้นทางอาชีพ ก็น่าจะลอง RTIC ให้มากขึ้นหน่อย
อีกด้านหนึ่งก็มีความกังวลว่า การที่มันกลายเป็นเหมือน advanced rust arduino จนเข้าถึงได้ง่าย อาจกลับทำให้เวลาเจองานพัฒนาที่ยากขึ้นจริง ๆ กลายเป็นสถานการณ์ที่น่าลำบากก็ได้

 
GN⁺ 2026-01-10
ความคิดเห็นจาก Hacker News
  • ฉันเป็นแฟนตัวยงของโปรเจกต์ Embassy นี่เป็นตัวอย่างที่สมบูรณ์แบบว่าทำไม async Rust ถึงยอดเยี่ยม
    มันทำงานได้โดยไม่ต้องใช้ heap และด้วยzero-cost abstraction จึงทำงานพร้อมกันได้แม้บนชิปคอร์เดียว โดยไม่มีความซับซ้อนของ RTOS
    น่าทึ่งมากที่ทีม Embassy เติบโตมาได้ไกลขนาดนี้
    อีกอย่าง อยากแนะนำ reqwless ซึ่งเป็น HTTP client สำหรับ Embassy-net รองรับ HTTPS ด้วย
    เมื่อก่อนฉันไม่คิดว่า Rust embedded จะดีกว่า C/C++ แต่ตอนนี้ฉันตัดสินใจซื้อ MCU จากการรองรับ Rust แล้ว

    • ถ้าจะลองเล่น อยากรู้ว่าแนะนำชุดพัฒนา MCUตัวไหน
    • ชอบมากที่มันเพิ่ม type safety ให้กับ HAL นี่เป็นเหมือนกันชนสำหรับคนที่เพิ่งเข้ามาในสายนี้
      แต่ฉันก็ยังไม่ค่อยเข้าใจว่า watchdog คืออะไร
  • สำหรับฉัน สิ่งที่ชอบที่สุดใน Embassy คือที่ชั้นรูปแบบแอปพลิเคชัน
    งานของอุปกรณ์ที่มีอายุยาวจะซ่อนเรื่อง timing และการประสานงานไว้หลัง async API เล็ก ๆ
    ตัวอย่างเช่นในโค้ดอย่าง loop { let btn = ir.wait_for_press().await; } คอมไพเลอร์จะสร้าง state machine ให้โดยอัตโนมัติ
    ฉันคิดว่าสไตล์แบบนี้คือผลลัพธ์ตามธรรมชาติของ async + no-std
    ฉันอยากเห็นการพูดคุยเรื่องโครงสร้างแอปพลิเคชันแบบนี้มากขึ้น มากกว่าเรื่อง HAL หรือ executor
    บทความฟรี ที่ฉันเขียนร่วมกับ Brad Gibson ก็พูดถึงแนวคิดนี้
    และฉันยังเปิดรีโป device-kit เพื่อทดลองและทำเอกสารรูปแบบพวกนี้ด้วย อยากรู้เหมือนกันว่ามีรีโปอื่นที่ลองแนวคล้าย ๆ กันไหม

    • สิ่งนี้มีประโยชน์ไม่ใช่แค่กับลอจิกระดับสูง แต่กับเฟิร์มแวร์ระดับต่ำด้วย
      ตอนที่เคยเขียนเฟิร์มแวร์ NIC เป็น state machine ถ้ามีอะไรแบบ async ของ Rust ตอนนั้นคงดีมาก
      ใน C ก็พอเลียนแบบ coroutine ได้ แต่แฮ็กมาก
      ตอนนั้นเราเชื่อว่า RTOS thread มีต้นทุนสูง แต่พอมาคิดตอนนี้ก็อาจไม่ได้เป็นแบบนั้นเสมอไป
      ถ้ามี async สำหรับจัดการโปรโตคอลอย่าง 802.11 ด้วย โค้ดคงเล็กลงและเรียบง่ายกว่านี้มาก
  • ฉันชอบ Embassy มากจริง ๆ
    ย้ายมาจากBare metal Cและ FreeRTOS แล้วรู้สึกว่าในที่สุด embedded ก็มี toolchain ที่ทันสมัยสักที
    โดยเฉพาะ ecosystem รอบ ๆ นั้นยอดเยี่ยมมาก — probe-rs + การรวมกับ cargo run, การล็อกด้วย defmt, embedded_hal, stm32-rs ฯลฯ
    ฉันเคยใช้ RTIC ด้วย แต่สุดท้ายก็ลงเอยกับ Embassy เพราะergonomicsของ syntax แบบ async
    ฉันยังแปลกใจที่มัน build และรันบน macOS ได้ทันที เมื่อก่อนต้องใช้ Linux ตลอด แต่ตอนนี้ทำได้บนชิป M โดยตรงแล้ว
    ฉันใช้เวลาพอสมควรกว่าจะเข้าใจแนวคิดเรื่องการแชร์การเข้าถึงอุปกรณ์ต่อพ่วง แต่เมื่อกฎของlockถูกบังคับตั้งแต่คอมไพล์ Bug ก็แทบไม่มีเลย
    คุณภาพของสแตก USB และเครือข่ายก็ดีมาก ฉันใช้ PLDM over USB และ Ethernet TCP stack ซึ่งทำงานได้สมบูรณ์แบบ
    ข้อเสียคือ การ onboard คนที่คุ้นกับตัวอย่างจาก vendor เดิม ๆ ทำได้ยาก และถ้า vendor ไม่รู้ Rust การดีบักร่วมกันก็ลำบาก
    แต่ถ้าอยู่ใน ecosystem ของ STM ก็แนะนำอย่างยิ่ง

    • ตอนที่เคย build Embassy ฉันตกใจมากที่มันดึงdependency เกิน 100 ตัวมา คิดว่าสำหรับงานอดิเรกโอเค แต่สำหรับงานอุตสาหกรรมยังอีกไกล
    • ฉันสงสัยเหมือนกันว่ารองรับมัลติคอร์อย่างESP32ไหม แต่ดูแล้วทำได้ด้วย executor ตัวที่สองและสื่อสารผ่าน embassy_sync
  • Embassy และ async Rust คือนวัตกรรมที่ยิ่งใหญ่ที่สุดที่เกิดขึ้นในโลก embedded ในช่วง 10 ปีที่ผ่านมา
    RTOS ฝั่ง C แม้แนวคิดจะดี แต่ตอนใช้งานจริงกลับทรมานมาก เฟรมเวิร์กเบา ๆ อย่าง Embassy คือวิวัฒนาการที่เป็นธรรมชาติ
    จริง ๆ แล้ว Embassy อาจมองได้ว่าเป็นระบบปฏิบัติการเรียลไทม์ด้วยซ้ำ ดูรายละเอียดได้ในบทความนี้

  • ฉันกำลังเขียน Glicol ใหม่ให้เป็น no-std และคู่ผสมembassy-rs + 2350นี่ดีที่สุดมาก
    ถ้าคุณวางแผนจะเริ่มพัฒนา embedded ในปี 2026 ก็แนะนำสแตกนี้อย่างมาก

  • ออกนอกประเด็นนิดหน่อย แต่ถ้าอยากเริ่มต้นพัฒนา embedded ควรเริ่มยังไงดี
    ฉันทำเว็บดีเวลอปเมนต์มาเกิน 10 ปี ตอนนี้กำลังอ่านหนังสือ Rust อยู่ และเพิ่งสั่ง Raspberry Pi มา แบบนี้ถือว่าเป็น embedded จริงไหม?

    • ฉันแนะนำบอร์ด ST Nucleoมากกว่า Raspberry Pi เพราะมี SWD programmer ในตัว ทำให้แฟลชและดีบักได้ง่าย
      รุ่นอย่าง NUCLEO-F767ZI ที่มีพอร์ต USB ก็ดีมาก
    • ฉันซื้อ ESP32-C6 Touch LCD มาในราคา $25 มันแทบจะเหมือนFitbit ที่ไม่ต้องมีสายรัด
      มีทั้ง Wi-Fi, BLE และเซ็นเซอร์ 6 แกน แถมยังรันเดโม C ได้ทันทีด้วย LVGL ก็ยอดเยี่ยม
      ฉันยังไม่ได้ลอง Rust กับมัน แต่เพราะมันเป็น RISC-V เลยรู้สึกน่าสนใจ Elecrow กับ Makerfabs ก็ดีสำหรับมือใหม่
    • ฉันแนะนำให้ซื้อบอร์ดที่ใช้RP2040พร้อมชุดเริ่มต้นอุปกรณ์อิเล็กทรอนิกส์ แล้วเริ่มเขียนโค้ดได้เลย
      ถ้าใช้ Rust rp-hal เหมาะสำหรับเริ่มต้น และค่อยไปลอง Embassy ทีหลัง
    • Raspberry Pi ก็ใช้ GPIO ได้ จึงเหมาะสำหรับฝึกความรู้สึกแบบ embedded
      ถ้าอยากเข้าใกล้bare metalมากขึ้น ฉันแนะนำบอร์ด ESP32 เพราะราคาถูก และมีหลายฟอร์มแฟกเตอร์ที่มาพร้อมที่ชาร์จแบตหรือหน้าจอ
  • ฉันสร้างLoRa relayด้วย Embassy เพื่อใช้กับแอป Bitchat (บน nrf52)
    ส่วนใหญ่ทำงานได้ลื่นมาก และ panic ที่เจอเป็นปัญหาฝั่ง Nordic SoftDevice

    • Bitchat ไม่ใช่ว่าใช้ BLE เหรอ? อยากรู้ว่าคุณทำโปรโตคอล LoRa เองเลย หรือ bridge เข้ากับอะไรอย่าง Meshtastic
  • ฉันเคยทำคอนโทรลเลอร์สำหรับแป้นเหยียบแอมป์กีตาร์โมเดล Sparkด้วย Embassy
    ควบคุมแอมป์ผ่าน BLE และสิ่งที่น่าสนใจคือ Rust BLE stack เป็นโอเพนซอร์สทั้งหมด
    แต่ตอนนี้มันยังอยู่ช่วงเริ่มต้น API เปลี่ยนบ่อย และต้อง pin git revision ใน Cargo
    ถึงอย่างนั้นก็คาดหวังกับอนาคตของโปรเจกต์นี้มาก

  • Microsoft เองก็ใช้ Embassy กับงานEC (Embedded Controller) เช่นกัน
    รายละเอียดดูได้ที่ Open Device Partnership

  • Ariel OS เป็นระบบปฏิบัติการที่สร้างอยู่บน Embassy น่าลองดู

    • แม้จะเป็นคนละโปรเจกต์กับ Embassy แต่ถ้าคุณกำลังหาpreemptive multitasking ก็อาจลองดู Xous ด้วย