Petoi Doc Center
🇨🇳中文版
🇨🇳中文版
  • 欢迎查阅派拓艺文档中心
  • 快速上手指南
  • Petoi 机器人关节序号
  • 蓝牙连接
  • 上传固件
  • 关节校准
  • 红外遥控
    • 遥控器
  • 手机应用
    • 总览
    • 关节校准
    • 控制面板
  • 桌面应用
    • 总览
    • 固件上载
    • 关节校准
    • 技能创作坊
    • 调试器
  • 图形化编程
    • Petoi 编程积木
    • Mind+中的Python代码模式
    • Arduino UNO 编程积木
  • Arduino IDE
    • 为NyBoard上传程序
    • 为BiBoard上传程序
    • 使用Arduino IDE校准舵机
    • 串口监视器
  • API
    • 🖇️串口协议
      • 反馈舵机
      • 嵌套任务队列和信号发生器
    • 🐍Python serialMaster使用指南
    • 🐛MicroPython控制器
      • MicroPython上手玩
      • 配置WebREPL
      • 使用ESP-NOW协议
    • 🍓通过树莓派控制机器人
    • 🤖ROS
  • NYBOARD
    • 总述
    • NyBoard V1_0
    • NyBoard V1_1 & NyBoard V1_2
  • BiBoard
    • BiBoard V0 快速上手指南
    • 例程介绍
      • 1. GPIO例程
      • 2. 串口
      • 3. 模拟-数字转换器
      • 4. 数字-模拟转换器
      • 5. EEPROM(电擦除存储器)
      • 6. 陀螺仪IMU(MPU6050)
      • 7. 红外遥控
      • 8. PWM
      • 9. 舵机(施工)
      • 10. 经典蓝牙串口SPP
      • 11. 蓝牙低功耗(BLE)串口透传
      • 12. 文件系统SPIFFS
      • 13. Arduino IDE增加硬件分区配置选项
      • 14. 播放MP3
      • 15. WiFi和OTA的使用
    • BiBoard V1 用户指南
  • 通信模块
    • 通信模块概要说明
    • USB上载模块(CH340C)
    • 双模蓝牙模块
    • WiFi模块(ESP8266)
      • 使用ESP8266 + Python 脚本实现无线群控
  • 扩展模块
    • 扩展模块概要说明
    • MU摄像头模块
    • 超声波传感器
    • 光强传感器
    • 触摸传感器
    • 手势传感器
    • 人体移动探测器
    • 语音指令模块
    • Petoi AI Vision摄像头模块
    • 深度开发应用AI视觉模块
      • 🏋️模型训练
      • ⚖️模型量化
      • 🏌️模型部署
      • COCO数据集DIY训练
    • 机械臂
      • 升级旧款 Bittle/Bittle X
    • Micro:bit 游戏手柄
  • 应用实例
    • 技能创作
    • 姿势模仿教程
    • 可编程木偶角色
  • 历史文档
    • 为NyBoard上传1.0版本程序
  • 技术支持
    • 🛠️配套应用软件
    • 🙋‍♂️常见问题 (FAQ)
    • 烧录Bootloader
  • 资源链接 🕸
    • 🔭Official Site of Petoi
    • 💿GitHub of OpenCat
    • 📀GitHub of OpenCatEsp32
    • 🎪PetoiCamp (Forum)
Powered by GitBook
On this page
  • 1. 什么是OTA?
  • Arduino下的OTA操作

Was this helpful?

Export as PDF
  1. BiBoard
  2. 例程介绍

15. WiFi和OTA的使用

ESP32的Arduino例程提供了OTA(On The Air upgrade,在线升级)的功能。

Previous14. 播放MP3NextBiBoard V1 用户指南

Last updated 2 years ago

Was this helpful?

1. 什么是OTA?

我们BiBoard的配置是16MB的Flash,具体分区如下:

OTA主要操作OTAdata区域和APP1,APP2区域。原理是:

  • BiBoard运行含有OTA功能的固件,此时启动指向APP1区域。

  • 通过WiFi向ESP32发送OTA指令,升级程序的二进制文件被传送到APP2区域。

  • 如果APP2传输完毕并校验成功,OTAdata指向APP2区域,下次则从更新后的固件区域(APP2)启动,APP1数据保留。下次OTA将写入APP1区覆盖掉旧的固件。

  • 如果因为网络传输错误导致APP2未传输完成,由于APP2没有通过校验,OTAdata没有指向APP2区域。复位启动后依然执行APP1区域的程序,损坏的APP2区域将在下次OTA的时候被全部擦写覆盖。

Arduino下的OTA操作

例程中首先配置WiFi,配置WiFi模式为STA(Station,基站模式)。启用WiFi函数并传入账户密码“WiFi.begin(ssid, password); ”

  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();

当WiFi顺利连接上时,会在串口打印IP地址;如果连接错误,ESP32会重启。

例程中可以配置端口号,OTA密钥或密钥的哈希,以及OTA的区域及类型(默认注释掉的)。

  // Port defaults to 3232
  // ArduinoOTA.setPort(3232);

  // Hostname defaults to esp3232-[MAC]
  // ArduinoOTA.setHostname("myesp32");

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

下面是几个类似回调函数的代码段,用于OTA各个阶段状态的判断。

  ArduinoOTA
    .onStart([]() {
      String type;
      if (ArduinoOTA.getCommand() == U_FLASH)
        type = "sketch";
      else // U_SPIFFS
        type = "filesystem";

      // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
      Serial.println("Start updating " + type);
    })
    .onEnd([]() {
      Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .onError([](ota_error_t error) {
      Serial.printf("Error[%u]: ", error);
      if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
      else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
      else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
      else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
      else if (error == OTA_END_ERROR) Serial.println("End Failed");
    });

  ArduinoOTA.begin();

按照例程配置完之后,在loop中调用“ArduinoOTA.handle();”即可。后面的analogWrite函数是为了区别不同固件更新的效果(通过改变数值)。

void loop() {
  ArduinoOTA.handle();
  analogWrite(2, 127);    // test OTA firmware
}

第一次使用串口下载,调用的是python工具“esptool”。下载完成后即可使用OTA。在端口选项中会发现多出了一个基于IP地址的端口,这便是OTA的地址。

选择该地址,右下角变成ESP32 Dev Module on 你的BiBoard的IP地址(192.168.1.178)。

同时也会弹出:“Serial monitor is not supported on network ports such as 192.168.1.178 for the ESP32 Dev Module in this release(该版本无法使用基于网络的串口监视器)”的警告。

Arduino的ESP32 OTA仅适用于更新程序,无法完成串口调试工作。如果需要调试BiBoard请连接USB-C接口。

下载程序,如图所示。