本帖最后由 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
|