Ameba Arduino: [RTL8195AM] [RTL8710AF] Cloud OTA

Ameba Arduino: [RTL8195AM] [RTL8710AF] 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:Apache24binhttpd -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:UsersyournameAppDataLocalArduino15packagesrealtektoolsameba_tools1.1.0

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

  • 製作checksum文件

此範例在從遠端OTA之前,會先藉由checksum來檢查ota.bin是否正確,在此可以使用Github上提供checksum tool:
https://github.com/ambiot/amb1_arduino/raw/master/Arduino_package/ameba_tools_windows/tools/windows/checksum.exe
下載checksum.exe並拷貝至Apache Web Server的htdocs目錄裡(C:Apache24htdocs)
打開cmd命令提示字完,切換到C:Apache24htdocs目錄,輸入:

Checksum.exe ota.bin

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

  • 範例操作

我們需要的library有:
https://github.com/ambiot/amb1_arduino/raw/master/Arduino_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