# 固件上载

## \*\* 下载最新版的桌面应用程序 [Petoi Desktop App](https://github.com/PetoiCamp/DesktopAppRelease/releases) \*\*

{% hint style="info" %}

* 下载完成压缩文件（.zip）后，请对其解压缩后再使用。
* Windows用户，请不要将 UI.exe 移动到其他文件目录。
  {% endhint %}

电脑端桌面应用程序 Petoi Desktop App 适用于 机器人 Nybble 和 Bittle，机器人主板 NyBoard采用Arduino UNO ATmega328P主控芯片， 主板 BiBoard 采用 ESP32 主控芯片。

关于NyBoard更详细的规格参数请参考 [NyBoard V1\_0](https://docs.petoi.com/v/chinese/nyboard/nyboard-v1_0) 或 [NyBoard V1\_1](https://docs.petoi.com/v/chinese/nyboard/nyboard-v1_1) 或 NyBoard V1\_2 (电子原件布局与 NyBoard V1\_2 相似)。

关于BiBoard更详细的规格参数请参考 [BiBoard V0 快速上手指南](https://docs.petoi.com/v/chinese/kuai-su-shang-shou-zhi-nan)。

* **NyBoard**

#### **NyBoard** 主板型号

**NyBoard** 主板型号（版本信息)，请见主板上的丝印。

{% hint style="info" %}
**NyBoard** **V1\_1** 主板型号（版本信息)，可参考图示位置：

![](/files/2U2lAUYAL0LrB6Ry4chs)\
\
将I2C开关(SW2)拨到“**Arduino**”

<img src="/files/IbmnpCGkP1qolbYK5red" alt="" data-size="original">

I2C 开关改变 I2C 设备（陀螺仪/加速度计、伺服驱动器、外部 EEPROM）的主控。 默认“Arduino”时，NyBoard 使用板载 ATmega328P 作为主芯片； 拨到“RPi”端时，NyBoard 使用通过 I2C 端口（SDA、SCL）连接的外部芯片作为主芯片。
{% endhint %}

{% hint style="warning" %}
注意：

* 有时，如果您无法启动Bittle / Nybble，比如在串口连续打印：`Init IMU\r\n,`则可能是您不小心将开关拨到了“RPi”端。

* 在上传固件前，请确保不要在主板的I2C接口连接任何I2C设备，否则会导致固件上载失败。I2C接口位置如下图示(红框内）：

  ![](/files/OfK5TzfKMJKY11M1Gd26)
  {% endhint %}

* **BiBoard**

#### **BiBoard** 主板型号

**BiBoard** 主板型号（版本信息)，可参考图示位置：

<figure><img src="/files/4lZqOFalch8BjX3zurM6" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
在预组装的Bittle / Bittle X上，您可以这样查看BiBoard的版本信息：

<img src="/files/xDHY67FvlXeBK75rYmYV" alt="" data-size="original">
{% endhint %}

## 使用 Petoi Desktop APP 上载固件

### 下载最新版[桌面应用程序](https://github.com/PetoiCamp/OpenCat/releases)

{% hint style="info" %}
不同计算机可能存在一些操作系统平台兼容性问题。 但您仍然可以直接从终端(windows: Command Prompt; Linux / Mac OS: Terminal )运行该应用程序：

1. 在终端中将文件路径切换到 OpenCat/pyUI/。
2. 为你的 Python3 安装 pyserial，Pillow 。 你也可以创建一个干净的 Anaconda  Python3虚拟环境和使用使用命令 **pip3 install pyserial Pillow** 安装必要的库文件。
3. 运行 **python3 UI.py** 命令启动应用程序。
   {% endhint %}

对于NyBoard，固件上传主要是调用应用程序 avrdude 来为主板上传固件文件。

对于BiBoard，固件上传主要是调用应用程序 esptool 来为主板上传固件文件。

{% hint style="info" %}

#### Linux系统中安装 avrdude

对于Linux系统用户，除了上述步骤，你还需要执行以下步骤：

1\. 安装 avrdude&#x20;

* Fedora : dnf install avrdude
* CentOS : yum install avrdude
* Debian / Ubuntu : apt install avrdude

2\. 修改FirmwareUploader.py中的变量 avrdudeconfPath

* Fedora / CentOS : `avrdudeconfPath = '/etc/avrdude/'`
* Debian / Ubuntu : `avrdudeconfPath = '/etc/'`
  {% endhint %}

### 连接USB上载器

具体步骤可参考[USB上载模块中连接NyBoard](https://docs.petoi.com/v/chinese/tong-xin-mo-kuai/usb-xia-zai-mo-kuai-ch340c#lian-jie-nyboard)部分。

### 打开 **Petoi Desktop App**

USB上载器正确连接后，打开 **Petoi Desktop App**（Windows：UI.exe / Mac：Petoi Desktop App / Linux: Petoi-opencat），选择 **产品** 和 **语言**。

#### **Petoi Desktop App中的菜单栏**

![产品类型](/files/6L43Ca4Enz9df7KkrUa1) ![语言](/files/BtahKji6N0PXG0fTsqIr) ![帮助](/files/NZEUZrZe01eNfsrj491E)

{% hint style="info" %}
法语，日语……等版本还未完成翻译。欢迎为我们的 GitHub 代码仓库做贡献：OpenCat/pyUI/translate.py。
{% endhint %}

### 点击“固件上载”按钮

![主界面](/files/D73r64D8y3elRbV1zMiX)

<figure><img src="/files/ivgeEJK6Mq8mxcpbxAqS" alt=""><figcaption><p>固件上载器界面</p></figcaption></figure>

### 选择正确的选项

{% hint style="warning" %}
注意：1.0 版软件无法与 **关节校准**、**技能创作坊** 及其他 API 一起正常工作。此版本固件仅在您需要使用 CodeCraft（我们的合作伙伴 TinkerGen 提供的图形化编程工具）时使用。
{% endhint %}

<table><thead><tr><th width="131.33333333333331">选项</th><th>可供选值</th><th>备注</th></tr></thead><tbody><tr><td>软件版本</td><td>1.0<br>2.0（默认）</td><td>1.0 版本将过时</td></tr><tr><td>主板型号</td><td>NyBoard_V1_0<br>NyBoard_V1_1<br>NyBoard_V1_2（默认）<br>BiBoard_V0_1<br>BiBoard_V0_2</td><td>Bittle X 使用 BiBoard_V0_1 或者 BiBoard_V0_2</td></tr><tr><td>产品</td><td>Bittle（默认）<br>Nybble<br>Bittle X</td><td></td></tr><tr><td>模式</td><td>标准（默认）<br>随机<br>语音<br>Mind+<br>摄像头（ Bittle）<br>超声波（Nybble）<br>随机_ 超声波（Nybble）</td><td>某些模式仅适用于特定产品，当您在产品和主板型号之间切换时，它应该会自动更新允许的模式列表。</td></tr><tr><td>串口</td><td>自动检测或手动选择</td><td>您可以通过重新拔插电脑端的USB接口找到</td></tr></tbody></table>

{% hint style="info" %}
**主板型号**（硬件版本）和 **软件版本** 之间没有任何关联。
{% endhint %}

#### 固件上载选项按钮

#### 固件上载流程

单击“上传”按钮后，上传过程立即开始。 底部状态栏会实时显示当前进度，以及关键流程的结果。&#x20;

参数固件上传成功后，主板开始自动运行配置程序。 会依次弹出一些消息窗口供您确认或取消：

1. 舵机校准参数清零? (Y/N)

![](/files/3Ey2TDHy07jRhxWlIIez)

选择点击“是(Y)”，程序会将所有舵机校准参数清零，状态栏会实时更新相应的过程和结果。&#x20;

选择点击“否(N)”，程序将跳过此步骤。

{% hint style="info" %}
对于 1.0 版本软件，会弹出 “更新技能? (Y/N)” 的警告信息窗口，如下所示：

![](/files/UnTSf9HXnDl85wVHxwYV)

选择“是(Y)”，程序会更新所有技能配置参数，状态栏会实时更新相应的流程和结果。&#x20;

选择“否(N)”，程序将跳过此步骤。&#x20;

如果您是第一次上传这个版本的软件，请务必选择点击 “**是(Y)**”！&#x20;

对于 2.0 版本软件 ，此选项会在后台自动处理为 Y。
{% endhint %}

2\. 校准 IMU? (Y/N)

![](/files/1NcXms9XrnXAGSHQS0cN)

选择点击“是(Y)”，程序会校准陀螺仪（IMU），状态栏会实时更新相应的过程和结果。

选择点击“否(N)”，程序将跳过此步骤。

{% hint style="danger" %}
注意：&#x20;

1. &#x20;在点击“是(Y)”按钮之前，**请确保将 主板 水平放置**。
2. 首次上传不同的版本固件时，请务必点击“**是(Y)**”按钮！
   {% endhint %}

完成所有步骤后，将弹出一个消息窗口，显示“参数初始化完成！” 您需要确认进行第二轮上传主程序固件。

![](/files/pmOKLgVVRGIF025bTGi9)

{% hint style="warning" %}
校准舵机驱动芯片

在校准 IMU后有一步可选的操作来校准舵机驱动：

```
Optional: Connect PWM 3 -> Grove pin A3 to calibrate PCA9685
```

您可以通过校准舵机驱动芯片（PCA9685 chip）来让角度控制更加精准。用一根跳线连接 PWM 引脚3（舵机控制脚的信号脚之一 ）和 Grove 引脚 A3，并把线按稳。

<img src="/files/BAQlPGYBGoweBzD4O4GL" alt="" data-size="original">

您不需要专门的跳线来完成这一步。任何能连通引脚的细金属线都可以，比如拉直的回形针。

程序会测量信号脉宽，在连续三次测量到相同读数后自动校准芯片。校准修正值会被存入控制板并在下次启动时生效。然后您可以继续进行下一步。

如果机器人的某个舵机停止转动，但将电池断电重启后又能转动，很可能就是因为舵机驱动信号不准，这一步就不可跳过。
{% endhint %}

主程序固件上传完成后，状态栏会更新固件上传成功或失败等相应结果。 如果上传成功，则会弹出“固件上传完成！”消息窗口。&#x20;

![](/files/9AtfepTenpQpponQVx20)

{% hint style="info" %}
注意：&#x20;

* 首次打开桌面应用软件上传固件时，程序会先上载“参数”固件，再上载“主程序”固件。 如果上载成功后重新上传，只是修改了“模式”选项，应用软件只上载“主程序”固件。
* 如果 NyBoard 未连接电池或者未打开电源供电，固件上传成功后，您会听到重复的下降旋律，表示电池电量低。 您需要连接电池并打开其电源供电。
  {% endhint %}

如果您有 Arduino IDE 编程经验，可以参考使用 Arduino IDE 上载程序固件。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.petoi.com/chinese/zhuo-mian-ying-yong/gu-jian-shang-zai.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
