本帖最后由 LV36 于 2025-3-23 22:17 编辑
目标:搭建小安派·BW21-CBV-KIt OTA平台并以NTPClient为例进行在线OTA升级
参考文档:
【教程】小安派BW21-CBV-Kit——OTA
ameba-OTA-UI
与参考文档重复的图不在列出。
以64 位 Windows 10 22H2平台通过VMware-workstation 安装ubuntu-22.04.5为例
一、搭建 小安派·BW21-CBV-KIt OTA平台
(1)安装 VMware-workstation
下载链接: https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.6.3/24583834/windows/core/VMware-workstation-17.6.3-24583834.exe.tar
复制粘贴至浏览器网址栏回车即可下载,或点击本帖超链接下载。
17.6.3为版本号,可替换。下载解压后得到exe文件,双击以默认设置安装即可。
(2)安装 ubuntu-22.04.5
国内镜像: https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.5/ubuntu-22.04.5-desktop-amd64.iso
安装可参照教程: https://blog.csdn.net/qq_62888264/article/details/145102532 ,或观看帖子附加视频。总体来看,只需选择ISO镜像和虚拟机文件所在文件夹,在虚拟机开启后设置用户名、密码等外,其他按需设置获默认即可。全程联网安装,安装后vm-tool可用,支持主机与虚拟机直接复制粘贴。
本虚拟机用户名、密码均为ubuntu。
(3)搭建ameba-OTA-UI平台
1)设置运行环境
打开ubuntu-22.04.5虚拟机,进入桌面后,单击右键,点击Open in Terminal打开命令行终端,输入
sudo apt install git curl 复制代码
并回车,输入密码ubuntu,以管理员模式安装git和curl命令。安装完成后执行
git clone https://github.com/Ameba-AIoT/ameba-OTA-UI.git 复制代码 拉取ameba-OTA-UI文件夹。切记不使用sudo或在其他其他文件夹中git,以免因文件及文件夹权限问题导致安装异常。
完成后,执行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash 复制代码 如失败,可执行
sudo curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash 复制代码 完成后,执行
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 复制代码 完成后,执行
nvm install v18.20.3
npm install npm@10.8.1 -g 复制代码 安装Node.js ,完成后可通过执行
判断是否安装成功及版本号是否正确。
2)安装依赖
继续执行
等待安装结束。
3)运行Node.js
执行
等待出现访问链接。
可直接下载虚拟机,使用VMware-workstation打开,选择“我已复制该虚拟机”。进入桌面后,双击进入ameba-OTA-UI文件夹,单击右键,点击Open in Terminal,执行
即可启动服务。
查询IP:单击右键,点击Open in Terminal,执行
ens33第2行inet即为本机IP,如10.110.28.211、192.168.3.248
在浏览器地址栏输入IP:3000回车即可访问服务页面。
二、上传OTA程序
使用数据线连接PC和BW21-CBV-Kit(安装好天线模块),选择 “文件”->“示例”->“AmebaOTA”->“OTA”,注意在新打开的代码页面中配置 “工具”->“NN模型加载”->“SD卡”、 “工具”->“OTA模式”->“启用”(重要:每次新打开页面均需重新设置!!!漏操作会导致失败) 。
修改 AP修改名称和密码,和电脑处于同一个局域网,并设置 HTTP服务器修改端口号和IP地址,即 ifconfig 命令获取的IP,端口3000 。
示例
#include "OTA.h"
#include "WiFi.h"
char ssid[] = "01" ; // your network SSID (name)
char pass[] = "12345678" ; // your network password
int status = WL_IDLE_STATUS;
int port = 3000 ; // your server port number
char * server = "192.168.3.248" ; // your server ip address
OTA ota;
void setup ()
{
Serial .begin ( 115200 ) ;
// Connection to internet
while ( status != WL_CONNECTED) {
Serial .print ( "Attempting to connect to WPA SSID: " ) ;
Serial .println ( ssid) ;
status = WiFi .begin ( ssid, pass) ;
delay ( 2000 ) ;
}
// Set up the threads
ota .start_OTA_threads ( port, server) ;
}
void loop ()
{
// Empty or add non-blocking code here
}
关键代码
#include "OTA.h"
char ssid[] = "01" ;
char pass[] = "12345678" ;
int port = 3000 ;
char * server = "192.168.3.249" ;
ota . start_OTA_threads ( port, server ) ;
按住下载按钮,然后按下并松开复位按钮,最后松开下载按钮,进入烧录模式。 点击 "项目"->"上传",程序自动编译并上传,上传后点击复位按钮重启开发板。
在 "项目"-> " 串行监视器 " 中可查看开发板IP等信息。
转到BW21-CBV-Kit OTA Web UI http://IP:3000/可查看连接的设备。
三、OTA升级
以 NTPClient为例。
“文件”->“示例”->“NTPClient”->“基础”
修改代码
/*
Example guide: https://www.amebaiot.com/en/amebapro2-arduino-ntpclient/
*/
#include <OTA.h>
#include <NTPClient.h>
#include <WiFi.h>
#include <WiFiUdp.h>
char ssid[] = "01" ;
char pass[] = "12345678" ;
WiFiUDP ntpUDP;
NTPClient timeClient ( ntpUDP) ;
OTA ota;
int port = 3000 ;
char * server = "10.110.28.211" ;
void setup ()
{
Serial .begin ( 115200 ) ;
WiFi .begin ( ssid, pass) ;
while ( WiFi .status () != WL_CONNECTED) {
delay ( 500 ) ;
Serial .print ( "." ) ;
}
timeClient .begin () ;
ota .start_OTA_threads ( port, server) ;
}
void loop ()
{
timeClient .update () ;
Serial .println ( timeClient .getFormattedTime ()) ;
delay ( 1000 ) ;
}
新增加的代码均为上例的关键代码。
配置 “工具”->“NN模型加载”->“SD卡”、 “工具”->“OTA模式”->“启用”, 点击 "项目"->"编译"。 编译完成后,在C:\Users \AppData\Local\Arduino15\packages\realtek\tools\ameba_pro2_tools\X.X.X中查找ota.bin文件。注意Users为当前用户名,如 Administrator,需按需替换,教程中为 ameba_pro_tools文件夹,实际2.3.4版本为 ameba_pro2_tools文件夹,目前对应X.X.X为1.4.1
将 ota.bin文件托入网页左侧区域,点击Upload,右侧Start OTA变为可用,勾选需要升级的设备,点击 Start OTA即可,OTA State由 OTA_STATE_IDLE变为,可在 "项目"-> " 串行监视器 " 中查看具体信息,网页无法返回是否OTA失败(第一次失败是因为以为各页面“工具”->“NN模型加载”->“SD卡”、“工具”->“OTA模式”->“启用”配置通用,实际每个页面都需要重新配置 )的提示,有待进一步完善和改进,目前只能通过 " 串行监视器 " 确定是否OTA成功。
成功后" 串行监视器 " 中还会以秒为间隔输出当前时间。
以上为PC和开发板处于同一网段 (192.168.3.X)时的OTA测试,OTA正常,速度也比较快。
将PC与路由器调整为同级(10.110.28.X),开发板连接路由器(192.168.3.X),即局域网不同网段 。修改相应程序代码
char * server = "10.110.28.211" ;
并重新进入烧录模式,TTL上传烧录程序,仍可正确识别开发板,只是显示IP为路由器IP。手头只有一个,不知道2个及以上开发板时如何显示和区分。
如PC改为公网 IP,估计显示网页显示开发板出口公网IP地址,不知道2个及以上开发板时如何显示和区分。
总结: 小安派·BW21-CBV-KIt OTA平台搭建还是比较容易的,虚拟机文件体积15G左右,还是比较大的,配置所需时间不到半小时。OTA下发刷机用时也比较短,比较方面。需注意,操作过程中,每个新弹出的界面均需 配置 “工具”->“NN模型加载”->“SD卡”、 “工具”->“OTA模式”->“启用”,TTL烧录前需 按住下载按钮,然后按下并松开复位按钮,最后松开下载按钮,进入烧录模式。所需关键代码为
#include "OTA.h"
char ssid[] = "01" ;
char pass[] = "12345678" ;
int port = 3000 ;
char * server = "192.168.3.249" ;
ota . start_OTA_threads ( port, server ) ;
搭建视频:
小安派·BW21-CBV-KIt OTA平台搭建
小安派·BW21-CBV-KIt 局域网相同网段在线OTA--以NTPClient为例
小安派·BW21-CBV-KIt 局域网跨网段在线OTA--以NTPClient为例
虚拟机:通过网盘分享的文件:Ubuntu22.04-ameba-OTA-UI
链接: https://pan.baidu.com/s/1CMhP2wHPDXdZcJmB4ET7Eg?pwd=wp6m 提取码: wp6m