【教程】小安派BW21-CBV-Kit——OTA

[复制链接]
查看97 | 回复2 | 2025-1-20 16:22:18 | 显示全部楼层 |阅读模式

用料

示例

说明

在这个示例中,我们使用Web UI将固件上传到一个或多个BW21-CBV-Kit。

关于为BW21-CBV-Kit OTA设置Web UI的说明,请点击以下链接并按照README.md中的步骤操作。[https://github.com/Ameba-AioT/ameba-OTA-UI]

实现流程

如果您的电脑上成功设置了BW21-CBV-Kit OTA Web UI,您将在http://localhost:3000/看到网页,下图显示了没有连接设备的网页渲染:

image.png

  • 首先请在Arduino IDE中打开OTA示例。“文件”->“示例”->“AmebaOTA”->“OTA”。

image.png

  • 在编译和上传示例之前,请完成以下步骤:
  • 设置从SD卡加载NN模型。“工具”->“NN模型加载”->“SD卡”

image.png

  • 启用OTA模式。“工具”->“OTA模式”->“启用”

image.png

  • 根据您的AP修改名称和密码。您的电脑和 BW21-CBV-Kit 应该连接到同一个局域网。

image.png

  • 根据您的HTTP服务器修改端口号和IP地址。

image.png

  • 现在,编译并上传这个示例到您拥有的每个和所有板上。可以是一个板或多个板(在这个示例指南中我们将使用两个BW21-CBV-Kit)。
  • 这个设置至少必须完成一次,以允许OTA线程API第一次被调用。对于后续的固件更新,只要包含了OTA.h并在setup函数中调用了start_ota_threads API,您就不需要手动重新上传代码。
  • 上传后,按下重置按钮并在串行监视器上获取单个BW21-CBV-Kit的IP地址。

开发板1的IP地址:192.168.3.26

image.png

开发板2的IP地址:192.168.3.65

image.png

然后,转到BW21-CBV-Kit OTA Web UI http://localhost:3000/查看连接的设备

image.png

  • 如果您能在OTA网页上看到BW21-CBV-Kit的IP地址,这表明连接成功。

在下面的步骤中,您可以将BW21-CBV-Kit从电脑上断开并使用任何稳定的5V直流电源供电。本示例指南的整体连接图如下所示。

image.png

在这个教程中,我们将通过OTA上传一个NTPClient草图。

  • 打开NTPClient示例。“文件”->“示例”->“NTPClient”->“基础”。
  • 包含OTA.h头文件并在setup函数的末尾添加API start_OTA_threads,并根据您的HTTP服务器定义端口号和IP地址。同时根据您的AP修改名称和密码。
  • 参考下图修改后的NTPClient草图。

image.png

在编译之前,记得设置从SD卡加载NN模型并启用OTA模式。

编译修改后的NTPClient草图,编译后不要上传。

优先级很重要:请注意,BW21-CBV-Kit将只会启动最新的编译固件。

编译完成后,在C:\Users<username>\AppData\Local\Arduino15\packages\realtek\tools\ameba_pro_tools\x.x.x中查找ota.bin文件。

将ota.bin(或重命名后的ota.bin)上传到网页UI进行OTA传输到BW21-CBV-Kit,如下图所示:

image.png

  • 上传后,选择设备以执行OTA传输:

image.png

  • 点击“开始OTA”开始OTA传输。当固件在板上更新时,您将看到OTA状态的变化,如下图所示。

image.png

  • 下载进度完成后,板将自动使用OTA传输的固件(即本示例中的修改后的NTPClient)重新启动。
  • 重启后,您将在串行监视器上看到生成的输出。

开发板1:

image.png

开发板 2:

image.png

代码参考

多线程:

在start_OTA_threads()中编写了两个线程,以确保OTA更新成功。

  • 线程1: 为了检查连接,OTA状态从AMB82迷你板发送到服务器。一旦接收到,板上的OTA状态将显示在Web UI上。
thread1_id = os_thread_create_arduino(thread1_task, NULL, priority1, stack_size1);
// 第一个线程是为了保持连接检查(每5秒发送请求一次)
if (thread1_id) { 
Serial.println("[OTA] Keep-alive connectivity thread created success-fully.");
} 
else { 
Serial.println("[OTA] Failed to create keep-alive connectivity thread.");
}
  • 线程2:

监听来自服务器的OTA开始信号,一旦收到start_ota信号,BW21-CBV-Kit 将请求通过OTA下载固件。

thread2_id = os_thread_create_arduino(thread2_task, NULL, priority1, stack_size2);
// 第二个线程是为了获取开始OTA过程的信号。
if (thread2_id) { 
Serial.println("[OTA] Start OTA process thread created successfully.");
} 
else
 { 
 Serial.println("[OTA] Failed to create Start OTA process thread.");
 }
用心做好保姆工作
回复

使用道具 举报

HaydenHu | 2025-1-20 19:29:51 | 显示全部楼层
这小螃蟹厉害了,感觉esp32被按在地上摩擦了
回复 支持 反对

使用道具 举报

1055173307 | 2025-1-21 11:58:42 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则