วิธีดำเนินการอัปเดตแบบ Over-the-Air (OTA) โดยใช้ไมโครคอนโทรลเลอร์ ESP32 และ ESP-IDF

By Jacob Beningo

Contributed By DigiKey's North American Editors

นักออกแบบผลิตภัณฑ์ 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

แผนผังภาพรวมสถาปัตยกรรม OTA ที่แสดงตัวอย่างกระบวนการอัปเดตเฟิร์มแวร์แอปพลิเคชันรูปที่ 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

รูปภาพของ Adafruit 3405 Huzzah Feather Boardรูปที่ 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 ด้วย

รูปภาพของบอร์ด Espressif Systems ESP32-LYRATD-SYNAรูปที่ 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 พร้อมด้วยวงจรสำหรับตั้งโปรแกรมชิป ไม่มีอะไรหรูหรานอกจากความจริงที่ว่ามันมีหมุดที่อนุญาตให้ใส่ลงในเขียงหั่นขนมสำหรับการทดสอบได้อย่างง่ายดาย

รูปภาพของระบบ Espressif ESP32-S2-SAOLA-1RI ที่ใช้โมดูล 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 เกี่ยวข้องกับขั้นตอนต่อไปนี้:

  1. กำหนดค่าตารางพาร์ติชั่น ESP32
  2. ดาวน์โหลดเฟิร์มแวร์ที่รองรับ OTA
  3. พัฒนาเครื่องมือเพื่อทำหน้าที่เป็นเซิร์ฟเวอร์และผลักดันเฟิร์มแวร์ใหม่
  4. ดาวน์โหลดเฟิร์มแวร์ล่าสุดลงใน ESP32
  5. เปลี่ยนเป็นแอปพลิเคชันใหม่

เห็นได้ชัดว่านี่เป็นแนวทางที่เรียบง่าย นักพัฒนาควรดูที่รูปที่ 1 อีกครั้งเพื่อดูกระบวนการอัปเดตเฟิร์มแวร์โดยรวม กระบวนการนี้ค่อนข้างเกี่ยวข้อง ดังนั้นจึงแนะนำให้ใช้ประโยชน์จากตัวอย่าง ESP32 OTA ที่มีอยู่บน GitHub ตัวอย่างเหล่านี้ให้ตัวอย่างที่สำคัญหลายประการ เช่น:

  • HTTPS OTA
  • OTA แบบดั้งเดิม
  • OTA แบบง่าย
  • เครื่องมือ OTA (ตัวอย่างสคริปต์หลาม)

รูปที่ 5 แสดงขั้นตอนการปรับใช้และอัปเดตกระบวนการ นักพัฒนาซอฟต์แวร์จะต้องทำตามขั้นตอนสีแดงก่อนเพื่อปรับใช้โซลูชัน OTA กับโมดูล ESP32 ขั้นตอนในสีส้มเป็นขั้นตอนต่อไปและดำเนินการเพื่ออำนวยความสะดวกในการอัปเดต OTA

ไดอะแกรมของตัวอย่างการอัพเดทระบบ Espressif OTAรูปที่ 5: ตัวอย่างการอัปเดต OTA ของระบบ Espressif ที่อยู่บน GitHub ให้ตัวอย่างง่าย ๆ หลายประการแก่นักพัฒนาในการรับ ESP32 เพื่อดำเนินการอัปเดต OTA (แหล่งรูปภาพ: Espressif Systems)

การกำหนดค่าแอปพลิเคชัน ESP32 สำหรับ OTA

ESP32 มีตารางพาร์ติชั่นที่อธิบายว่าข้อมูลประเภทใดที่อยู่ในไมโครคอนโทรลเลอร์และอยู่ที่ไหน ตัวอย่างเช่น ตารางพาร์ติชั่น ESP32 มาตรฐานจะดูเหมือนตารางที่ 1:

รูปภาพของตารางพาร์ติชั่น ESP32 มาตรฐานตารางที่ 1: ตารางพาร์ติชั่น ESP32 มาตรฐานที่แสดงประเภทของข้อมูลและตำแหน่งที่อยู่บนไมโครคอนโทรลเลอร์ (ที่มาของตาราง: Beningo Embedded)

มีแอปพลิเคชันจากโรงงานและส่วนสำหรับไลบรารี NVS และข้อมูลการเริ่มต้น (init) ของเลเยอร์กายภาพ (PHY) ในการใช้ฟังก์ชัน OTA ตารางนี้จำเป็นต้องได้รับการอัปเดตเพื่อให้มีตำแหน่งหน่วยความจำที่ระบุสำหรับเฟิร์มแวร์การอัปเดต OTA นอกเหนือจากการใช้งานหลัก (โรงงาน) สำหรับ OTA โดยทั่วไปแล้วจะมีพาร์ติชั่นสองพาร์ติชั่นที่จัดสรรไว้สำหรับการอัปเดต อันหนึ่งสำหรับเฟิร์มแวร์ที่อัพเดตที่ใช้งานได้ และอีกอันสำหรับเฟิร์มแวร์ที่กำลังดาวน์โหลดและที่จะกลายเป็นเวอร์ชันล่าสุด ซึ่งช่วยให้แอปพลิเคชันจากโรงงานยังคงไม่เสียหาย ตารางพาร์ติชั่น OTA ที่อัปเดตจะมีลักษณะเหมือนตารางที่ 2

รูปภาพของตารางพาร์ติชั่น OTA ที่อัปเดตทั่วไปของ ESP32ตารางที่ 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 ของตนเองทำงานได้

DigiKey logo

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.

About this author

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo เป็นที่ปรึกษาด้านซอฟต์แวร์แบบฝังตัว เขาได้ตีพิมพ์บทความมากกว่า 200 บทความเกี่ยวกับเทคนิคการพัฒนาซอฟต์แวร์แบบฝังตัวเป็นวิทยากรและผู้ฝึกสอนด้านเทคนิคที่เป็นที่ต้องการและสำเร็จการศึกษา 3 ปริญญา รวมถึง ปริญญาโทวิศวกรรมศาสตร์จากมหาวิทยาลัยมิชิแกน

About this publisher

DigiKey's North American Editors