วิธีดำเนินการอัปเดตแบบ Over-the-Air (OTA) โดยใช้ไมโครคอนโทรลเลอร์ ESP32 และ ESP-IDF
Contributed By DigiKey's North American Editors
2021-08-10
นักออกแบบผลิตภัณฑ์ Internet of Things (IoT) จำเป็นต้องประเมินการเลือกแพลตฟอร์มและส่วนประกอบอย่างต่อเนื่องเพื่อลดต้นทุนและพลังงาน ในขณะเดียวกันก็ปรับปรุงประสิทธิภาพและเร่งการออกแบบแอปพลิเคชันการเชื่อมต่อ ขณะนี้มีโซลูชันให้เลือกค่อนข้างน้อย แต่นักออกแบบต้องเผชิญกับความท้าทายในการดำเนินการอัปเดตแบบไร้สายผ่านอากาศ (OTA) เพื่อให้เฟิร์มแวร์ของอุปกรณ์ทันสมัยอยู่เสมอเมื่อใช้งาน
กุญแจสำคัญคือการดูแพลตฟอร์มที่พร้อมใช้งานเพื่อดูว่ามีเครื่องมือและการสนับสนุนเพิ่มเติมใดบ้างที่มาพร้อมเพื่อรองรับการอัปเดต OTA การสนับสนุนดังกล่าวสามารถลดความซับซ้อนของกระบวนการได้อย่างมาก แต่อาจต้องให้ความสนใจล่วงหน้า
บทความนี้กล่าวถึงพื้นฐานของ OTA และเหตุใดจึงเป็นฟังก์ชันสำคัญที่ระบบ IoT แทบทุกระบบจำเป็นต้องได้รับการสนับสนุน แม้ว่าจะมีความท้าทายที่นักพัฒนาต้องเผชิญก็ตาม จากนั้นจึงใช้ผลิตภัณฑ์จาก Espressif Systems ESP32 ไมโครคอนโทรลเลอร์ที่เปิดใช้งาน Bluetooth และ Wi-Fi พร้อมโมดูล ชุดคิท และ ESP IoT Development Framework (ESP-IDF) ที่เกี่ยวข้อง เพื่อแสดงวิธีสร้างพาร์ติชัน OTA และใช้สคริปต์ otatool.py เพื่ออัปเดตเฟิร์มแวร์ในขณะที่แอปพลิเคชันยังคงทำงานอยู่
ข้อมูลเบื้องต้นเกี่ยวกับการอัปเดต OTA
จุดสนใจหลักสำหรับทีมพัฒนาส่วนใหญ่คือการนำคุณลักษณะเฉพาะของผลิตภัณฑ์ไปใช้ นั่นคือตรรกะทางธุรกิจที่สร้างความแตกต่างให้กับผลิตภัณฑ์ของตน อย่างไรก็ตาม ผลิตภัณฑ์ IoT ทุกรายการมีชุดคุณสมบัติพื้นฐานที่ต้องปรับใช้ กำหนดค่า และบำรุงรักษาตลอดอายุการใช้งานของอุปกรณ์ การอัปเดตความปลอดภัยเป็นตัวอย่างที่ดี เนื่องจากจำเป็นต้องดำเนินการอัปเดตเหล่านี้ คุณลักษณะที่สำคัญแต่มองข้ามได้ง่ายเมื่อประเมินแพลตฟอร์มการพัฒนาที่เหมาะสมคือ bootloader หรือการอัปเดตเฟิร์มแวร์ OTA (FOTA) (บางครั้งเรียกว่า OTA)
OTA ช่วยให้วิศวกรสามารถบำรุงรักษาและอัปเกรดผลิตภัณฑ์ของตนจากระยะไกลได้ เพื่อตอบสนองทั้งข้อกำหนดทางเทคนิคและทางธุรกิจ โดยไม่ต้องส่งเจ้าหน้าที่บำรุงรักษาไปยังอุปกรณ์ หรือให้ลูกค้าปลายทางดำเนินการบางอย่างกับอุปกรณ์เพื่ออัปเดตอุปกรณ์ แต่สามารถลบค่าใช้จ่ายทั้งหมดเหล่านี้ได้โดยให้อุปกรณ์อัปเกรดเฟิร์มแวร์ในเบื้องหลังอย่างเงียบ ๆ หรือในช่วงเวลา "หยุดทำงาน" ของการทำงาน เช่น กลางดึก
สถาปัตยกรรม OTA สามารถมีได้หลายรูปแบบและการกำหนดค่า ตั้งแต่โซลูชันที่สร้างขึ้นเองไปจนถึงการใช้งานมาตรฐานที่ผู้ให้บริการคลาวด์จัดหาให้ ตัวอย่างสถาปัตยกรรมทั่วไปสามารถเห็นได้ในรูปที่ 1
รูปที่ 1: ภาพรวมสถาปัตยกรรม OTA ที่แสดงกระบวนการตัวอย่างสำหรับการอัปเดตเฟิร์มแวร์แอปพลิเคชันในภาคสนามไปยังอุปกรณ์ที่ปรับใช้ (แหล่งรูปภาพ: Beningo Embedded Group)
ในตัวอย่างนี้ OEM ใช้ Amazon Web Services (AWS) IoT Core เพื่ออัปโหลดเฟิร์มแวร์เวอร์ชันใหม่ จากนั้นใช้ความสามารถของงานในตัวเพื่อปรับใช้การอัปเดตกับอุปกรณ์ในภาคสนาม นี่เป็นเพียงหนึ่งในหลายตัวอย่าง และผู้ให้บริการระบบคลาวด์เกือบทุกรายก็มีโซลูชันที่คล้ายคลึงกัน
มีตัวเลือกไมโครคอนโทรลเลอร์มากมายในปัจจุบันที่รองรับ OTA ไมโครคอนโทรลเลอร์ยอดนิยมตัวหนึ่งสำหรับทั้งระบบต้นทุนต่ำและในหมู่ผู้ผลิตคือ ESP32 มีเหตุผลหลายประการที่ทำให้ ESP32 ได้รับความนิยมอย่างมาก ได้แก่:
- มีไมโครคอนโทรลเลอร์ในตัวพร้อมโมดูลรับรอง Wi-Fi/บลูทูธ
- ราคาถูก
- สภาพแวดล้อมการพัฒนาโอเพนซอร์สและเฟรมเวิร์กซอฟต์แวร์ เช่น ESP-IDF และ ESP Audio Development Framework (ESP-ADF)
- ตัวอย่างแอปพลิเคชันที่มีอยู่มากมายมีให้ใช้งานฟรีบนเว็บ
การเลือกโมดูล ESP32 สำหรับการทดสอบ OTA
มีโมดูลและบอร์ดพัฒนา ESP32 หลายโมดูลที่ผู้ใช้สามารถซื้อเพื่อดูตัวอย่าง OTA ยกตัวอย่าง Adafruit3405บอร์ด ESP32 Huzzah Feather (รูปที่ 2) นี่คือบอร์ดพัฒนาราคาประหยัดที่มีวงจรทั้งหมดสำหรับตั้งโปรแกรม ESP32 และจ่ายไฟผ่านขั้วต่อ USB
รูปที่ 2: 3405 Huzzah Feather Board ประกอบด้วยโมดูล Wi-Fi/บลูทูธที่ผ่านการรับรอง ESP32 WROOM-32D พร้อมแฟลช 4 เมกะไบต์ บอร์ดนี้มีฮาร์ดแวร์ทั้งหมดที่จำเป็นสำหรับการเขียนโปรแกรมและสื่อสารกับโมดูลผ่าน USB (แหล่งรูปภาพ: Adafruit)
ที่แกนหลักของ 3405 คือ ESP32-WROOM-32D โมดูลที่มาพร้อมกับแฟลช 4 เมกะไบต์, Wi-Fi, บลูทูธ และอุปกรณ์ต่อพ่วงที่ครบครันสำหรับเกือบทุกแอปพลิเคชัน
บอร์ดพัฒนาอีกอันที่สามารถใช้ได้คือผลิตภัณฑ์จาก Espressif Systems ESP32-LYRATD-SYNA บอร์ดเสียง (รูปที่ 3) บอร์ดพัฒนานี้รวมถึงโมดูล ESP32-WROVER-B ด้วย
รูปที่ 3: บอร์ด ESP32-LYRATD-SYNA ใช้โมดูล Wi-Fi/Bluetooth ที่ผ่านการรับรอง ESP32 WROVER-B พร้อมแฟลช 4 เมกะไบต์ นอกจากจะช่วยให้นักออกแบบสามารถตั้งโปรแกรมและสื่อสารกับโมดูลผ่าน USB แล้ว ยังมีวงจรที่จำเป็นในการพัฒนาแอปพลิเคชันด้านเสียงอีกด้วย (แหล่งรูปภาพ: Espressif Systems)
โมดูล ESP32-LYRATD-SYNA ยังมีแฟลช 4 เมกะไบต์ รวมถึงวงจรทั้งหมดสำหรับการใช้งานด้านเสียง บอร์ดนี้ประกอบด้วยตัวแปลงสัญญาณเสียง เครื่องขยายเสียง และแจ็คหูฟังและลำโพงเพื่อทดสอบแอปพลิเคชันเสียงอย่างสมบูรณ์
บอร์ดพัฒนาสุดท้ายที่สามารถใช้สำหรับการทดสอบ OTA ได้คือ Espressif ESP32-S2-SAOLA-1RI คณะกรรมการพัฒนา (รูปที่ 4) เมื่อพูดถึงบอร์ดพัฒนา ราคานี้จะถูกที่สุด บอร์ดประกอบด้วยโมดูล ESP32 Wrover พร้อมด้วยวงจรสำหรับตั้งโปรแกรมชิป ไม่มีอะไรหรูหรานอกจากความจริงที่ว่ามันมีหมุดที่อนุญาตให้ใส่ลงในเขียงหั่นขนมสำหรับการทดสอบได้อย่างง่ายดาย
รูปที่ 4: ESP32-S2-SAOLA-1RI ซึ่งใช้โมดูล Wrover เป็นบอร์ดพัฒนาแบบเปลือยที่มีต้นทุนต่ำ แต่มีวงจรเพียงพอที่จะตั้งโปรแกรมโมดูลออนบอร์ด (แหล่งรูปภาพ: Espressif Systems)
บอร์ดเฉพาะที่เลือกสำหรับการทดสอบไม่สำคัญมากนัก เนื่องจากโมดูล ESP32 แต่ละโมดูลใช้ประโยชน์จาก ESP-IDF เฟรมเวิร์กนี้ได้รับการออกแบบมาเพื่อให้กิจกรรมการพัฒนาซอฟต์แวร์สำหรับนักพัฒนาง่ายขึ้น โดยรวมไดรเวอร์ มิดเดิลแวร์ RTOS และที่สำคัญสำหรับวัตถุประสงค์ของบทความนี้ bootloaders และไลบรารี OTA
ตัวโหลดบูตช่วยให้นักพัฒนาใช้ประโยชน์จากการอัปเดต OTA และแบ่งพาร์ติชั่นหน่วยความจำเพื่ออัปเดตเฟิร์มแวร์ในขณะที่แอปพลิเคชันหลักยังคงทำงานอยู่ ซึ่งช่วยลดเวลาหยุดทำงานให้น้อยที่สุด การตั้งค่า bootloader อาจดูซับซ้อนในตอนแรก แต่จะตรงไปตรงมาหากได้รับคำแนะนำอย่างถูกต้อง
เวิร์กโฟลว์การพัฒนา OTA
เวิร์กโฟลว์การพัฒนา OTA สำหรับ ESP32 จะแตกต่างกันไปเล็กน้อยตามความต้องการทางธุรกิจและการเลือกส่วนประกอบผลิตภัณฑ์ ตัวอย่างเช่น ทีมที่ใช้ประโยชน์จาก AWS มักจะใช้คู่มือและตัวอย่างการเริ่มต้นใช้งาน AWS เพื่อให้โซลูชัน ESP32 OTA ทำงานได้ บริษัทที่กำลังปรับแต่งโซลูชันของตนเองมีแนวโน้มที่จะใช้ประโยชน์จากเอกสารประกอบของ ESP32 ในบทความนี้ เราจะมาดูชิ้นส่วนต่าง ๆ ที่ระดับ ESP32 ไม่ใช่ในระบบคลาวด์ เหตุผลก็คือส่วนเหล่านี้เป็นแบบทั่วไปและใช้กับ OTA กับ ESP32 ไม่ว่าจะใช้ผู้ให้บริการคลาวด์หรือโซลูชันใดก็ตาม
โดยทั่วไป ขั้นตอนการตั้งค่าการอัปเดต OTA บน ESP32 เกี่ยวข้องกับขั้นตอนต่อไปนี้:
- กำหนดค่าตารางพาร์ติชั่น ESP32
- ดาวน์โหลดเฟิร์มแวร์ที่รองรับ OTA
- พัฒนาเครื่องมือเพื่อทำหน้าที่เป็นเซิร์ฟเวอร์และผลักดันเฟิร์มแวร์ใหม่
- ดาวน์โหลดเฟิร์มแวร์ล่าสุดลงใน ESP32
- เปลี่ยนเป็นแอปพลิเคชันใหม่
เห็นได้ชัดว่านี่เป็นแนวทางที่เรียบง่าย นักพัฒนาควรดูที่รูปที่ 1 อีกครั้งเพื่อดูกระบวนการอัปเดตเฟิร์มแวร์โดยรวม กระบวนการนี้ค่อนข้างเกี่ยวข้อง ดังนั้นจึงแนะนำให้ใช้ประโยชน์จากตัวอย่าง ESP32 OTA ที่มีอยู่บน GitHub ตัวอย่างเหล่านี้ให้ตัวอย่างที่สำคัญหลายประการ เช่น:
- HTTPS OTA
- OTA แบบดั้งเดิม
- OTA แบบง่าย
- เครื่องมือ OTA (ตัวอย่างสคริปต์หลาม)
รูปที่ 5 แสดงขั้นตอนการปรับใช้และอัปเดตกระบวนการ นักพัฒนาซอฟต์แวร์จะต้องทำตามขั้นตอนสีแดงก่อนเพื่อปรับใช้โซลูชัน OTA กับโมดูล ESP32 ขั้นตอนในสีส้มเป็นขั้นตอนต่อไปและดำเนินการเพื่ออำนวยความสะดวกในการอัปเดต OTA
รูปที่ 5: ตัวอย่างการอัปเดต OTA ของระบบ Espressif ที่อยู่บน GitHub ให้ตัวอย่างง่าย ๆ หลายประการแก่นักพัฒนาในการรับ ESP32 เพื่อดำเนินการอัปเดต OTA (แหล่งรูปภาพ: Espressif Systems)
การกำหนดค่าแอปพลิเคชัน ESP32 สำหรับ OTA
ESP32 มีตารางพาร์ติชั่นที่อธิบายว่าข้อมูลประเภทใดที่อยู่ในไมโครคอนโทรลเลอร์และอยู่ที่ไหน ตัวอย่างเช่น ตารางพาร์ติชั่น ESP32 มาตรฐานจะดูเหมือนตารางที่ 1:
ตารางที่ 1: ตารางพาร์ติชั่น ESP32 มาตรฐานที่แสดงประเภทของข้อมูลและตำแหน่งที่อยู่บนไมโครคอนโทรลเลอร์ (ที่มาของตาราง: Beningo Embedded)
มีแอปพลิเคชันจากโรงงานและส่วนสำหรับไลบรารี NVS และข้อมูลการเริ่มต้น (init) ของเลเยอร์กายภาพ (PHY) ในการใช้ฟังก์ชัน OTA ตารางนี้จำเป็นต้องได้รับการอัปเดตเพื่อให้มีตำแหน่งหน่วยความจำที่ระบุสำหรับเฟิร์มแวร์การอัปเดต OTA นอกเหนือจากการใช้งานหลัก (โรงงาน) สำหรับ OTA โดยทั่วไปแล้วจะมีพาร์ติชั่นสองพาร์ติชั่นที่จัดสรรไว้สำหรับการอัปเดต อันหนึ่งสำหรับเฟิร์มแวร์ที่อัพเดตที่ใช้งานได้ และอีกอันสำหรับเฟิร์มแวร์ที่กำลังดาวน์โหลดและที่จะกลายเป็นเวอร์ชันล่าสุด ซึ่งช่วยให้แอปพลิเคชันจากโรงงานยังคงไม่เสียหาย ตารางพาร์ติชั่น OTA ที่อัปเดตจะมีลักษณะเหมือนตารางที่ 2
ตารางที่ 2: ตารางพาร์ติชั่น OTA ที่อัพเดตโดยทั่วไปของ ESP32 (ที่มาของตาราง: Beningo Embedded)
ดังที่แสดงไว้ ขณะนี้มีส่วนแอปพลิเคชัน ota_0 และ ota_1 ที่มีขนาด 1 เมกะไบต์ นอกเหนือจากส่วนข้อมูล (otadata) ที่จัดสรร RAM สำหรับกระบวนการอัปเดต นักพัฒนาสามารถแก้ไขและอัปเดตตารางนี้เพื่อให้เหมาะกับแอปพลิเคชัน
ในการเรียกใช้ตัวอย่าง OTA มีชุดคำสั่งง่าย ๆ ที่แสดงอยู่ใน GitHub ในส่วน "วิธีใช้ตัวอย่าง" ซึ่งจะอธิบายวิธีสร้างและตั้งโปรแกรมแอปพลิเคชัน
นอกจากนี้ยังมี otatool ที่สามารถใช้อัปเดตเฟิร์มแวร์ได้ โดยทั่วไปแล้วสคริปต์นี้ใช้เพื่อ:
- อ่าน เขียน และลบพาร์ติชั่น OTA
- สลับพาร์ติชันสำหรับเริ่มระบบ
- เปลี่ยนเป็นพาร์ติชั่นโรงงาน
สคริปต์ตัวอย่างสามารถดำเนินการได้โดยการรันตัวอย่างในเทอร์มินัลโดยใช้คำสั่ง:
./otatool_example.sh
หรือใช้ Python:
python otatool_example.py
เมื่อพูดถึงการกำหนดค่า ESP32 สำหรับ OTA ตรวจสอบให้แน่ใจว่าได้ตั้งค่าพาร์ติชันเป็นขั้นตอนที่สำคัญ
ข้อแนะนำในการใช้
โซลูชัน EPS32 OTA สามารถเร่งความเร็วและทำให้โซลูชันการอัปเดตเฟิร์มแวร์ของนักพัฒนาง่ายขึ้น เพื่อป้องกันไม่ให้โซลูชันกลายเป็นภาระในการพัฒนา มี "เคล็ดลับและลูกเล่น" หลายประการที่ควรคำนึงถึง:
- หากเป็นไปได้ ให้ใช้ประโยชน์จากเฟรมเวิร์ก OTA ที่มีอยู่ซึ่งรวมอยู่ในผู้ให้บริการระบบคลาวด์ของบริษัท สิ่งนี้สามารถลดความยุ่งยากในการพัฒนาและบูรณาการได้อย่างมาก
- ใช้บอร์ดพัฒนาราคาประหยัดเพื่อทดสอบความสามารถ OTA และ bootloaders ESP32 มีหลายตัวเลือกและอาจต้องใช้การทดลองบางอย่างเพื่อพิจารณาว่าตัวเลือกใดดีที่สุดสำหรับแอปพลิเคชันในมือ
- สำหรับโซลูชันแบบกำหนดเอง ใช้ประโยชน์จากตัวอย่าง ESP32 OTA บน GitHub
- สำหรับแอปพลิเคชันที่ผลิตภัณฑ์ทำหน้าที่เป็นเราเตอร์หรือฮับ Wi-Fi ให้ลองดาวน์โหลดอิมเมจเฟิร์มแวร์ไปยังหน่วยความจำภายนอกและดำเนินการอัปเดตจากอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่
- ใช้เวลาทบทวนเอกสารประกอบ ESP32 เกี่ยวกับตารางพาร์ติชั่น ซึ่งแตกต่างจากการใช้งานไมโครคอนโทรลเลอร์ทั่วไปเล็กน้อย
- ด้วยเหตุผลด้านความปลอดภัย ทางที่ดีควรปิดใช้งานการย้อนกลับของแอปพลิเคชัน หากแอปพลิเคชันสามารถย้อนกลับเป็นเวอร์ชันก่อนหน้า ผู้โจมตีอาจสามารถผลักดันเวอร์ชันที่มีการใช้ประโยชน์ที่รู้จักและประนีประนอมกับระบบได้
นักพัฒนาซอฟต์แวร์ที่ปฏิบัติตาม "คำแนะนำและเคล็ดลับ" เหล่านี้จะพบว่าช่วยประหยัดเวลาและความเศร้าโศกได้ไม่น้อยเมื่อพยายามใช้ประโยชน์จาก ESP32 หรือโซลูชัน OTA อื่นๆ ตามความเหมาะสม
สรุป
การอัปเดต OTA เป็นคุณสมบัติที่สำคัญสำหรับ IoT และระบบฝังตัวที่เพิ่มขึ้น นักพัฒนาจำเป็นต้องได้รับการจัดการที่ดีเกี่ยวกับวิธีการทำอย่างมีประสิทธิภาพเพื่อประหยัดเวลาล่วงหน้าในระหว่างกระบวนการออกแบบและพัฒนาและหลังจากจัดส่งผลิตภัณฑ์แล้ว
ไมโครคอนโทรลเลอร์ไร้สาย ESP32 ได้เข้าสู่อุปกรณ์ที่หลากหลาย และดังที่แสดงว่ามีโซลูชัน OTA สำเร็จรูป ด้วยการใช้ประโยชน์จาก ESP-IDF และโมดูลและแพลตฟอร์มที่เกี่ยวข้อง และการใช้คำแนะนำและเคล็ดลับที่อิงจากประสบการณ์ นักพัฒนาสามารถลดเวลาในการออกแบบลงอย่างมาก และทำให้โซลูชัน OTA ของตนเองทำงานได้

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.