[RTL8195][RTL8710] Cloud OTA

材料準備

  • Ameba x 1
  • Apache Web Server

範例說明

這個範例裡說明了如何使用AMEBA從 Web Server上下載firmware完成遠端OTA的功能。此專案由Maker Rododo貢獻

http://www.rododo.farm/

  • 安裝Web Server

本範例需先安裝Web Server,在此先以Windwos系統安裝Apache Web Server為例,至Apache Lounge website下載httpd-2.4.29-Win64-VC15.zip

https://www.apachelounge.com/download/

1

下載完成並解壓縮後,將裡頭的Apache24目錄拷貝到C:\根目錄之下
接下來以系統管理員權限開啟CMD命令提示字元工具
輸入:

C:\Apache24\bin\httpd -k install

啟動Apache:

net start apache2.4

1

測試:
接著打開瀏覽器,於網址列輸入

http://127.0.0.1/

1

如果Apache Web Server有順利啟動,網頁上會顯示It works!

  • 製作OTA firmware

在這裡我們要先作一簡單的OTA firmware,用來驗證從Web Server下載後,是否有燒錄完成,並順利執行其功能。
在此我們打開Arduino IDE,並且新增草槁文件,如下圖,在此我們只需在loop()裡每隔1秒鐘就在console裡印出Hello From Ameba!!

1

接著執行編譯,進行編譯後我們需要找到用於OTA的 ota.bin,接著我們打開安裝Arduino Ameba SDK的資料夾,如果當初安裝Arduino IDE的路徑沒有特地改變,因是在:

C:\Users\yourname\AppData\Local\Arduino15\packages\realtek\tools\ameba_tools\1.1.0

應會找到ota.bin,把他備份下來,並且放置到Apache Web Server的htdocs目錄裡(C:\Apache24\htdocs)。

  • 製作checksum文件

此範例在從遠端OTA之前,會先藉由checksum來檢查ota.bin是否正確,在此可以使用RTL8195 Github上提供checksum tool:

https://github.com/Ameba8195/Arduino/blob/master/ameba_tools_windows/tools/windows/checksum.exe

下載checksum.exe並拷貝至Apache Web Server的htdocs目錄裡(C:\Apache24\htdocs)

打開cmd命令提示字完,切換到C:\Apache24\htdocs目錄,輸入:

Checksum.exe ota.bin

1

其中203df9即是由checksum產生的檢查碼。將檢查碼轉成10進制後,開啟記事本在C:\Apache24\htdocs目錄裡新增check.txt,並存進此10進制數值,如下圖:

1

  • 範例操作

我們需要的library有:

https://github.com/Ameba8195/Arduino/blob/master/libraries/AmebaCloudOTA.zip

安裝library的方式請參考Arduino官方網站的教學文章將zip檔的library加入Ameba:

https://www.arduino.cc/en/Guide/Libraries#toc4

匯入成功後,我們打開範例 “File” -> “Examples” -> “AmebaCloudOTA” -> “ota_cloud”, 輸入欲連線的AP SSID及Password,另外還需輸入Web Server所在的IP Address及Port

1

編譯並上傳至Ameba之後按下Reset按鈕,就可以開始從Web Server下載OTA 接著我們打開終端機軟體

1

WiFi連線成功後,會先進行check.txt的檢查

1

開始download ota.bin

1

下載結束,進行checksum的檢驗,接著開始OTA程序,如有成功,則燒錄完成就會自動重新啟動,並印出” Hello from Ameba!!!”

1

程式碼說明

int checksum = OTA.gatherOTAinfo(REMOTE_ADDR,"/check.txt", REMOTE_PORT);
if( checksum != -1) Serial.println("info_ok");

在setup()裡,一開始藉由OTA.gatherOTAinfo來取得遠端server上check.txt裡頭的checksum資訊,此方法中需填入web server address及port