วันศุกร์ที่ 18 พฤษภาคม พ.ศ. 2561

ตั้งค่า ESP32 เพื่อ upload แบบ OTA

    โปรเจ็ค ota การทำงานจะเป็นการใช้ HTTP get ไปยัง url เพื่อ download ไฟล์ .bin เข้ามา program ลงบอร์ด  การใช้งานเป็นดังนี้

1. เลือกโปรเจ็คที่เราต้องการโปรแกรมแบบ ota เช่น ota_blink โดยโปรเจ็คนี้มีการทำงานของโค้ดเป็นการสั่งให้ไฟกระพริบตามความถี่ที่เรากำหนดในโค้ด  เมื่อกระพริบจนถึงเวลาที่กำหนดในโค้ดแล้วจะทำการ download โค้ดใหม่เข้ามาโปรแกรม 

2. เข้ามายังไดเรกทอรี่โปรเจ็คที่เราต้องการโปรแกรม ใช้คำสั่ง make เพื่อสร้างไฟล์ .bin จากนั้นเข้าไปในไดเรกทอรี่ build แล้วใช้คำสั่ง python -m SimpleHTTPServer 8070 เพื่อรัน server ที่ localhost:8070

3. เข้ามายังไดเรกทอรี่ของโปรเจ็ค ota แล้วใช้คำสั่ง make menuconfig แล้วตั้งค่า ดังนี้
  ( ชื่อ Wifi )                                                  WiFi SSID                                       
  ( รหัส Wifi )                                               WiFi Password                                   
  ( ip ของ server ที่เราจะดาวน์โหลดโค้ด ) HTTP Server IP                                 
  ( port default คือ 8070 )                              HTTP Server Port                                       
  ( ชื่อไฟล์ .bin ที่เราต้องการโปรแกรม )   HTTP GET Filename 

ให้ตั้งค่า Partition Table (Factory app, two OTA definitions) เพื่อใช้งานโปรแกรมแบบ ota แล้วตั้งค่า flash size ที่เท่ากับขนาด flash size ของบอร์ดด้วย

Build in Partition Talble

- Single factory app, no OTA
# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 1M
เป็นการโปรแกรมแบบทั่วไปใช้สาย serial ตัวโปรแกรมจะอยู่ใน factory app แล้วทำการรันหลังจากโปรแกรม

- Factory app, two OTA definitions
# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x4000
otadata,  data, ota,     0xd000,  0x2000
phy_init, data, phy,     0xf000,  0x1000
factory,  0,    0,       0x10000, 1M
ota_0,    0,    ota_0,   ,        1M
ota_1,    0,    ota_1,   ,        1M
  โปรแกรมแบบ ota จะมีการแบ่ง partition ota_0 กับ ota_1 เริ่มต้นโปรแกรมผ่านสาย Serial จากนั้นเมื่อโปรแกรม ota ทำงานจะทำการดาวน์โหลดโค้ดแล้วนำมาใส่ใน ota_0 แล้วรันโปรแกรมใน ota_0 ด้วย  ต่อมาเมื่อดาวน์โหลดโปรแกรมใหม่เข้ามาโค้ดจะถูกนำไปใส่ใน ota_1 และโปรแกรมก็เปลี่ยนไปรันที่ ota_1 ทำงานสลับ partition เมื่อมีการดาวน์โหลดโปรแกรมใหม่เข้ามา
factory app จะไม่รันเมื่อมีโปรแกรมใน ota_0, ota_1
ota จะไม่ update factory app

- Custom partition table CSV
ใช้ไฟล์ csv ในการกำหนด partition

phy_init is for storing PHY initialisation data
nvs (2) is for the Non-Volatile Storage (NVS) API. ใช้เก็บข้อมูล WiFi หรือเป็น Storage data ได้แนะนำว่าต้องการอย่างน้อย 0x3000 bytes

4. เมื่อตั้งค่าใน menuconfig เสร็จแล้วให้ใช้คำสั่ง make erase_flash flash เพื่อทำการ clear flash ก่อนแล้วค่อยทำการ flash โปรแกรมเข้าไป  เมื่อ flash เสร็จแล้วใช้คำสั่ง flash monitor ได้เพื่อดูพอร์ต Serail ของโปรแกรม

1 ความคิดเห็น: