[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