# 为NyBoard上传1.0版本程序

以下视频展示了如何使用Arduino IDE 对 Bittle 进行配置。 这些步骤与 Nybble 相同，您只需要将 OpenCat.h 中的产品定义更改为 Nybble。

```cpp
//#include "InstinctBittle.h" //activate the correct header file according to your model 
#include "InstinctNybble.h" 
```

{% embed url="<https://www.youtube.com/watch?v=MbTN4IcuqLo>" %}

## 1 NyBoard

### 1.1 阅读用户手册

在 NyBoard 上找到主板的版本信息。如下图所示：

![](/files/Rrwu8EenLSl37s1ebmwV)

#### Nybble

相应的规格文档：[NyBoard V0\_1](https://github.com/PetoiCamp/OpenCat-Old/blob/master/Resources/NyBoard/NyBoardV0_1.pdf)、[NyBoard V0\_2](https://github.com/PetoiCamp/OpenCat-Old/blob/master/Resources/NyBoard/NyBoardV0_2.pdf)、[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)（轻度修订）。

#### Bittle

相应的规格文档：[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\_0 为例，如下图所示：

![](/files/iUFnEcQ50xW19V5yrqRw)

![](/files/XwVY9jj5FfBcguhAJO2y)

{% hint style="danger" %}
错误的操作可能会损坏您的 NyBoard！
{% endhint %}

### 1.2  把滑动开关拨到Arduino档.

滑动开关用于选择Nyboard上板载I2C设备（陀螺仪/I2C PWM控制器以及EEPROM）的连接属性。

当开关位于“Arduino”端的时候，这些I2C设备将同ATMega328P通信，Arduino可以访问这些设备

当开关位于“Pi”端的时候，这些I2C设备将断开和ATMega328P的连接，主板上的 树莓派接口 和 Grove I2C 接口上的设备将成为主设备。

{% hint style="warning" %}
有时，如果您无法启动，则可能是您不小心将开关拨到了“Pi”端。
{% endhint %}

{% hint style="warning" %}
以下部分保留用于 NyBoard 旧版本 (V0系统)：

### 1.3 把电位器顺时针转至最低输出

{% hint style="success" %}
从NyBoard V0\_2开始，我们在板上添加了一个跳线帽选择开关，可以绕过降压芯片电路直接给舵机供电。如果您使用的是Nybble套件中的金属齿舵机，可以跳过这一小节。
{% endhint %}

高电压可以提升舵机的转矩，使Nybbles运动更迅速。代价是它同时会增大电流、缩短电池寿命，降低电路的稳定性，以及加速舵机的磨损。据我们测试，5.5V的电压可以得到一个比较平衡的性能表现。

在最初组装时，先不要把NyBoard的螺丝拧紧，因为可能还要调节电位器。在微调校准之前 ，确保所有舵机可以在当前电压设置下正常、稳定地转动。

### 1.4. 把NyBoard调节到最佳状态

在设计NyBoard时我考虑了两种使用场景：作为Nybble配套的驱动板，和DIY用户的开发板。

板载的降压电路可在5\~8V输出之间调节，峰值电流不能超过5A。Nybble套件中的金属齿舵机可以承受高压，功率大，通过NyBoard的降压电路会有过载保护的问题，最好由电池直接供电。而DIY用户往往选用更便宜的塑料齿舵机，但它们不能承受高压，必须降压到5.5V左右才能使用。好在塑料齿舵机的工作电流更低，也不会触发降压电路的过载保护了。

所以如果使用的是配套的金属齿舵机，推荐直接由电池供电。对于初版NyBoard\_V0\_1，这需要一些焊接工作，可见[论坛帖子](https://www.petoi.com/forum/hardware/reconfigure-nyboard-v0-1-for-pro-users)。对于更新NyBoard\_V0\_2，可以更方便地把跳线帽SW3接在BATT和V\_S之间（出厂时SW3默认接在V\_S和V+之间，以免烧坏塑料齿舵机)。

{% hint style="warning" %}
V\_S 表示舵机供电。跳线帽可以选择到底是由降压电路（V+）还是电池组（BATT）供电，所以BATT和V+永远不应该短接。
{% endhint %}

{% hint style="info" %}
事实证明，当直接使用 BATT 而不是 V+ 为金属齿舵机供电时，NyBoard 的工作更稳定。 但是，如果您使用 NyBoard 驱动您自己的塑料齿轮伺服系统，则需要使用降压电路。
{% endhint %}
{% endhint %}

NyBoard用7.2V电池直接为金属舵机供电，电池充满电时为8.4V。您不能使用NyBoard直接驱动自己的塑料舵机（比如SG系列）。

## 2  下载和安装软件环境

{% hint style="info" %}
您将需要配置[Arduino集成开发环境](https://www.arduino.cc/en/software)，且最好是最新的版本，旧版本往往会编译出可能超出内存限制十六进制文件。Arduino的版本更新不会覆盖掉您之前的库和工程。
{% endhint %}

如果您先前已添加其他库并看到错误消息\`\`XXX库已安装''，我建议您先[删除它们](https://stackoverflow.com/questions/16752806/how-do-i-remove-a-library-from-the-arduino-environment)。

由于Arduino IDE安装的配置不同，如果您在以后的编译过程中看到有关缺少库的任何错误消息，只需用baidu他们（google也可以）并将其安装到IDE中即可。

{% hint style="warning" %}
如果您在 2022 年 1 月 3 日之后从 GitHub 下载了最新的 [OpenCat 代码](https://github.com/PetoiCamp/OpenCat)，则可以跳过以下库安装步骤。

### 2.1  通过库管理器安装所需的库文件

在Arduino的库管理器（操作指南 : <https://www.arduino.cc/en/Guide/Libraries>）中，搜素并安装以下的库：

* **Adafruit PWM Servo Driver**
* **QList（非必须）**
* **IRremote**

  IRremote库在近期有更新，甚至更改了按键的编码。你可以安装2.6.1版本实现对我们代码的兼容。

  为节省编程空间，你可以禁用IRremote.h中没用到的解码器，这样可以省出10%的flash空间！

  在Mac上，找到**Documents/Arduino/libraries/IRremote/src/IRremote.h**，并把没用到的解码器置0：

  ```
  #define DECODE_RC5           0
  #define SEND_RC5             0

  #define DECODE_RC6           0
  #define SEND_RC6             0

  #define DECODE_NEC           1
  #define SEND_NEC             0

  #define DECODE_SONY          0
  #define SEND_SONY            0

  ...

  #define DECODE_HASH          1 // special decoder for all protocols
  ```

### 2.2  使用压缩包（.zip）安装库

使用被广泛使用的I2Cdev库和MPU6050库，传送门：[jrowberg/i2cdevlib: I2C device library collection for AVR/Arduino or other C++-based MCUs](https://github.com/jrowberg/i2cdevlib)

我相信你们的git用的很好，下载下来就OK。无论是用git clone或者download zip。注意选一下是Arduino下的，主要要红色箭头指示的2个库，I2Cdev是负责I2C通信的；MPU6050是启用DMP（数字融合处理器，做姿态解算的），当然也可以全部下载下来。

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

在IDE里点击：项目 -> 加载库 -> 添加.zip库，把刚刚下的ZIP直接导入即可

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

服务到位给您下载好了：
{% endhint %}

{% file src="/files/FCHxDzsqS4g0ZBojWh3C" %}

{% file src="/files/tForgmMZpNtOf1QGxCpO" %}

### 2.3  增加NyBoard支持

对于V1版本的Nyboard (**NyBoard V1\_\***) 完全兼容UNO，选UNO即可。&#x20;

![](/files/s1Q9CnXlABYQYoYpXR9F)

{% hint style="warning" %}
以下部分适用于旧版本 (V0)

* 如果你手上的是**NyBoard V0\_\***，因为它超频到了20MHz，你需要按下列步骤添加配置文件：

#### 自动添加NyBoard支持

{% hint style="success" %}
感谢[A-Ron](https://github.com/asmagill)对这一节的贡献！
{% endhint %}

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

1. 打开Arduino首选项面板。
2. 在**附加开发板管理器网址**处，添加： <https://raw.githubusercontent.com/PetoiCamp/OpenCat/main/Resources/NyBoard/boardManager/package_petoi_nyboard_index.json>。如果里面已经有其他网址了，可以用逗号或者换行来分隔它们。
3. 点击“好”关闭首选项面板（需要先关闭之前的网址编辑器）。
4. 从**工具 -> 开发板: XXXX -> 开发板管理器...** 打开 **开发板管理器**。
5. 搜索“nyboard”。
6. 安装NyBoard。
7. 关闭**开发板管理器**。
8. 从 **工具 -> 开发板** 选择 **开发板** **ATmega328P (5V, 20 MHz) NyBoard XXXX**  (NyBoardV0\_1 和 NyBoardV0\_2 选用同样的开发板)。

#### 手动添加NyBoard支持

{% hint style="warning" %}
只有当以上方法无效时使用！
{% endhint %}

* 找到开发板配置文件 **boards.txt**

**苹果系统：**

/Users/UserName/Library/Arduino15/packages/arduino/hardware/avr/version#/

或

/Applications/Arduino.app/Contents/Java/hardware/arduino/avr

右键点击Arduino.app图标显示程序包内容。

**Windows系统：**

C:\Program Files(x86)\Arduino\hardware\arduino\avr\\

{% hint style="warning" %}
通过Microsoft商店安装的程序可能会安装在隐藏目录，可以直接[从Arduino官网下载IDE](https://www.arduino.cc/)并手动选择安装位置。
{% endhint %}

**Linux**&#x20;

从终端命令行下载到的也许不是最新版本，可以[从Arduino官网下载IDE](https://www.arduino.cc/en/Main/Software)然后解压安装:

`sudo install.sh`

boards.txt 的位置可能随Linux版本有不同：

**Fedora:**&#x20;

/etc

**Arch:**&#x20;

/usr/share/arduino/hardware/archlinix-arduino/avr/

**Mint:**

location\_of\_installation/arduino/hardware/arduino/avr

**Ubuntu** (on 18.04 when installing with \`apt-get install arduino\`):&#x20;

/usr/share/arduino/hardware/arduino/boards.txt

找到 **boards.txt** 后：

* 备份 **boards.txt** 便于回滚操作
* 新建一份 **boards.txt**

您可以下载我修改后的[**boards.txt**](https://raw.githubusercontent.com/PetoiCamp/OpenCat/main/Resources/NyBoard/boards.txt)**，**&#x6216;者自行修改您原来的**boards.txt**，可能需要管理员权限。

用文本编辑器打开**boards.txt**，找到`pro.name=Arduino Pro or Pro Mini`的代码段，插入

```
## Arduino Pro or Pro Mini (5V, 20 MHz) w/ ATmega328P
## --------------------------------------------------
pro.menu.cpu.20MHzatmega328=ATmega328P (5V, 20 MHz) NyBoard

pro.menu.cpu.20MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.20MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.20MHzatmega328.upload.speed=57600

pro.menu.cpu.20MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.20MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.20MHzatmega328.bootloader.extended_fuses=0xFD
pro.menu.cpu.20MHzatmega328.bootloader.file=atmega/ATmega328_20MHz.hex

pro.menu.cpu.20MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.20MHzatmega328.build.f_cpu=20000000L

## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P
## --------------------------------------------------
```

如下图:

```
##############################################################
pro.name=Arduino Pro or Pro Mini

pro.upload.tool=avrdude
pro.upload.protocol=arduino

pro.bootloader.tool=avrdude
pro.bootloader.unlock_bits=0x3F
pro.bootloader.lock_bits=0x0F

pro.build.board=AVR_PRO
pro.build.core=arduino
pro.build.variant=eightanaloginputs

## Arduino Pro or Pro Mini (5V, 20 MHz) w/ ATmega328P
## --------------------------------------------------
pro.menu.cpu.20MHzatmega328=ATmega328P (5V, 20 MHz) NyBoard

pro.menu.cpu.20MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.20MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.20MHzatmega328.upload.speed=57600

pro.menu.cpu.20MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.20MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.20MHzatmega328.bootloader.extended_fuses=0xFD
pro.menu.cpu.20MHzatmega328.bootloader.file=atmega/ATmega328_20MHz.hex

pro.menu.cpu.20MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.20MHzatmega328.build.f_cpu=20000000L

## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P
## --------------------------------------------------
```

保存并退出编辑器。

* 下载 [ATmega328\_20MHz.hex](https://raw.githubusercontent.com/PetoiCamp/OpenCat/main/Resources/NyBoard/bootloaders/atmega/ATmega328_20MHz.hex) 并保存到Arduino文件夹 ./bootloaders/atmega/。 在该文件夹中应该还有其他开发板的后缀为.Hex的文件。

重启Arduino IDE。在**工具->开发板**中，选择**Arduino Pro or Pro Mini**。在子目录里会出现 **ATmega328P (5V, 20 MHz) NyBoard**。

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

{% hint style="info" %}
如果完成以上操作后仍找不到NyBoard，可能是您的Arduino IDE的有效配置文件存在其他位置。在电脑的所有位置搜索boards.txt，看看是不是有新的发现。
{% endhint %}
{% endhint %}

{% hint style="warning" %}
只有当引导程序崩溃时才需要进行下列操作！

### 2.4 为板子烧录Arduino的Bootloader（这不是常规操作）

* [什么是引导程序？](https://www.arduino.cc/en/Hacking/Bootloader?from=Tutorial.Bootloader)

每块NyBoard在出厂时都经过了功能性测试，这意味着它们已经预先烧录了引导程序。但是，在极个别情况下，引导程序可能会崩溃并导致无法上传Arduino代码。

当然，不能上传代码往往是由其他原因造成的，而不是因为引导程序崩溃：

* 有时USB驱动可能会检测到一个USB设备的电流过大而主动禁用该设备。这时需要更换USB端口甚至重启电脑来再次激活USB端口；
* 需要安装FTDI USB到UART上传器的驱动；
* 在Arduino IDE中没有选对串口；
* 接触不良；
* 运气不好 ☯️ 过两天可能又好了。

如果您确实需要重新烧录引导程序：

* 如果你手上的是**NyBoard V1\_\***，在Arduino IDE的**Tool**下选用**Arduino Uno**
* 如果你手上的是**NyBoard V0\_\*** ，就需要选用**NyBoard (ATmega328P 5V, 20MHz)**

![](/files/NLiMXoudZHRPFyiS8sWZ)

* 选择您的烧录工具。上面的截图突出显示了两种常用的编程器，高亮的 **USBtinyISP**是一种小巧便宜的专门的编程器，打勾的**Arduino as ISP**是[用另一块Arduino板作为编程器](https://www.arduino.cc/en/Tutorial/ArduinoISP)
* 把编程器接到NyBoard的2x6的SPI端口，注意接插方向和良好接触
* 点击**烧录引导程序**进行烧录。如果这是您第一次尝试烧录，请耐心多等一会儿，直到看见进度条达到100%并不再有新进度条或新信息跳出为止。
  {% endhint %}

### 2.5  连接USB上载器（USB适配器）

{% hint style="info" %}
此步骤不需要将Nyboard安装在机器人身上。
{% endhint %}

![](/files/g4FrHyLlZ65XnX37e59w)

![](/files/lMksvdagbymYEadONW13) ![](/files/s5HjXG1QXatvLyBTwBQi)

{% hint style="info" %}
下图显示了之前套件中的两个 FTDI 板。

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

红色上传器上有电平选择跳线帽，拔到5V。在连接上传器和NyBoard的6针母座时要注意方向，可以用地线GND作为参考。

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

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

先用 miniUSB-USB 线缆连接电脑和FTDI上传器。红色款上传器有三个LED灯，电源，Tx和Rx，蓝色款上传器没有电源灯。在接通电脑USB的瞬间，Tx和Rx灯会闪一下然后会熄灭，表明有初始的信息传输。然后您可以在Arduino IDE的**工具->端口**找到对应的串口 “/dev/cu.usbserial-xxxxxxxx”（苹果系统） 或 “COM#” （Windows系统）。
{% endhint %}

通过USB到micro-USB电缆将您的计算机与USB上载器连接。

USB上载器具有三个LED，即电源（红色），Tx和Rx。连接后，Tx和Rx应该闪烁一秒钟，指示初始通信，然后变暗。仅电源LED指示灯应保持点亮状态。您可以在“工具”->“端口”下找到一个新端口，名称为：

“ /dev/cu.usbserial-xxxxxxxx” （Mac）

“ COMX ”（Windows，注意一定不是COM1，COM1一般台式机有，RS232串口）

“ttyUSB” （Linux，注意Arduino是否有读写该设备的权限，没有就chmod）

![](/files/V3xAxfNlV7i25Thq0XmR)

{% hint style="danger" %}
如果Tx和Rx灯常亮，也不闪烁，则串口通讯可能存在问题，这时串口也不会显示在串口列表里。这往往是由于NyBoard在驱动舵机时没有外接电源，USB端口被过流保护禁用导致的。
{% endhint %}

特别提一下Linux，将上载器连接到计算机后，您将在串行端口列表中看到“ ttyUSB＃”。但是上传时，您仍然可能会遇到串行端口错误。您将需要授予串行端口权限。请转到此链接并按照说明进行操作 <https://playground.arduino.cc/Linux/All/#Permission>

{% hint style="info" %}
驱动程序在这里，理论上Win10免驱

Mac: <http://www.wch.cn/download/CH341SER_MAC_ZIP.html>

Windows: <http://www.wch.cn/download/CH341SER_EXE.html>
{% endhint %}

### 2.6  连接蓝牙模块 (可选)

连接蓝牙模块， 您可以使用智能手机 APP 或 Web API 控制机器人。

在标准机器人套件中包含我们的官方蓝牙模块。 波特率请设置为 115200。

您需要像使用蓝牙 AirPod 一样将其连接到计算机。 默认密码为 0000 或 1234。然后您可以在 Arduino IDE 的 Tools->Port 下选择它，使用方法与USB上载器相同。

具体连接方法请参考[双模蓝牙模块](https://docs.petoi.com/v/chinese/mo-kuai-shi-yong-zhi-nan-1/shuang-mo-lan-ya-mo-kuai)相应章节。

![](/files/ck3tvYzOEkyBFlo3dsmG)

![](/files/aGMnSoi09mIZQ9lpRKTy)

{% hint style="warning" %}
如果您使用的是NyBoard V0\_\* 主板，您需要将其波特率设置为 **57600** 。
{% endhint %}

{% hint style="warning" %}
在 Mac 上，蓝牙可能会在多次上传后断开连接。 在这种情况下，请删除连接再重新连接。
{% endhint %}

{% hint style="warning" %}
在矽递及其代理渠道销售的版本中不包含蓝牙模块，请向<support@petoi.com>咨询购买方式。
{% endhint %}

### 2.7  下载OpenCat软件包

* 从 GitHub 下载 1.0 OpenCat 存储库：<https://github.com/PetoiCamp/OpenCat/tree/1.0>
* 如果下载代码的Zip文件，则解压缩后将获得一个OpenCat-1.0文件夹。您需要在打开OpenCat.ino之前将其重命名为OpenCat（Arduino规定代码必须放在同名文件夹之下）。

{% hint style="warning" %}
无论您将文件夹保存在何处，文件结构都应为：

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

* ModuleTests文件夹中有几个名为testX（X代表外设，比如蜂鸣器陀螺仪）.ino的代码。您可以上传它们以分别测试某些模块。打开任何带有前缀“ test”的testX.ino的工程。 （我建议您使用testBuzzer.ino作为第一个测试项目）。
* 打开串行监视器并设置波特率:
  * 使用NyBoard V1\_ \*，将开发板选为Arduino Uno，然后在代码和串口监视器中将波特率设置为115200。
  * 使用NyBoard V0\_\*，将开发板选为NyBoard (ATmega328P 5V, 20MHz)，然后在代码和串行监视器中将波特率设置为 57600。
* 编译代码，应该没有错误提示。如果有请根据提示查找问题，一般问题为缺少某些库，根据需要安装即可。随后上传到您的开发板上，您应该看到Tx和Rx LED快速闪烁。一旦它们停止闪烁，消息应出现在串口监视器上。
* 在输入命令之前，请确保串口监视器设置为“没有结束符” （No line ending）。否则，不可见的' \n'或' \r'字符将使解析函数失效。

![NyBoard V0\_\*](/files/5Rqv0rkUXc3dZwcgOtuW) ![NyBoard V1\_\*](/files/Mx30e2qzq4NwCICAj3BZ)

对于Linux计算机，您初次编译时可能会看到错误消息，例如“ permission denied（权限被拒绝）”。

![](/files/pj3XgFZ3OGCH2Jp9iQZx)

您将需要向avr-gcc添加执行特权才能编译Arduino程序：

`sudo chmod +x filePathToTheBinFolder/bin/avr-gcc`

此外，您需要为/ bin中的所有文件添加执行权限，因此命令为：

`sudo chmod -R +x /filePathToTheBinFolder/bin`

## 3  使用串口通信协议

通过连接NyBoard和Arduino IDE的USB上载器 /蓝牙模块，就可以和Nyboard直接通信了。

我们预先定义了一些指令，指令和参数表如下：&#x20;

![](/files/MdeeqnC2MYC2Ep5k7lFL)

所有的命令都是以单个ASCII字符开头，并区分大小写。通常指令为小写。

{% hint style="info" %}
有的指令，如“c”和“m”是复合命令：

比如：连续命令如：“ m8 40”，“ m8 -35”，“ m 0 50”可以写为“ m8 40 8 -35 0 50”。您最多可以组合四个相同类型的命令。确切地说，字符串的长度应小于30个字符。您可以在代码中更改限制，但是串行缓冲区可能会有系统的限制。
{% endhint %}

{% hint style="warning" %}
一些命令尚未实现，例如“h”。 命令“i”和“l”在软件版本 1.0 中仍然存在一些错误。
{% endhint %}

## 4  使用树莓派接口&#x20;

{% hint style="warning" %}
机器人的运动是不需要树莓派的，树莓派是机器人的主控上位机。

&#x20;您需要断开USB上载器才能与 Pi 的串行端口进行通信。
{% endhint %}

您可以在NyBoard上焊接2x5插座，就可以连接Raspberry Pi。 Pi 3A +最适合Bittle的型号。

### Nybble

![](/files/Aa5keLcZEHa5t9iKl2Jr)

### Bittle

{% hint style="danger" %}
焊上了2x5的插座后，Bittle的盖子就盖不上了。
{% endhint %}

![](/files/YXDSKPxHXrf4JE5TFAeV)

红色的[树莓派卡扣](https://github.com/PetoiCamp/NonCodeFiles/blob/master/stl/Bittle%20%26%20BittleX/RaspberryPiStandOff/Pi3A_standOff.stl)可以3D打印。

![](/files/QQqFdwaao7gxbfaiEvCg)

如[串行协议](https://bittle.petoi.com/v/zhong-wen/4.-she-zhi-nyboard#4-3-shi-yong-chuan-kou-tong-xin-xie-yi)所示，Arduino IDE的串口监视器支持的命令参数全部编码为AscII码字符串，主机（例如RasPi）支持额外的命令，大多数命令都编码为二进制字符串以进行有效编码。例如，当编码角度为65度时：

* Ascii码字符串: 2个字节的char，'6' 和 '5'
* 二进制字符串: 1个字节的char，‘A’

{% hint style="info" %}
值 -113 如何处理？ 它需要四个字节作为 AscII码字符串，但在二进制编码中仍然只需要一个字节，尽管内容将不再可作为字符打印。
{% endhint %}

显然，二进制编码比AscII码字符串有效得多。但是，传输的消息将不会直接被人类读取。在OpenCat存储库中，有一个简单的Python脚本[ardSerial.py](https://github.com/PetoiCamp/OpenCat/blob/main/serialMaster/ardSerial.py)，它可以处理NyBoard和Pi之间的串行通信。

### 4.1  配置树莓派的串行接口

打开树莓派的终端，输入 `sudo raspi-config`

在 **Interface（接口）**&#x9009;项，选择 **Serial（串行接口）**&#x9009;项以启用串口。禁用串行登录 shell 并启用串行接口以使用主 UART：

1. 使用 sudo 权限命令运行 raspi-config：**sudo raspi-config**
2. 找到 Interface Options-> SerialPort
3. 选项 `Would you like a login shell to be accessible over serial? 选择`**`No`**
4. `选项 Would you like the serial port hardware to be enabled? 选择`**`Yes`**
5. 退出 raspi-config 并重新启动机器人（关闭、打开电池电源）以使更改生效。

{% hint style="danger" %}
你还需要**禁用**Pi的[1-wire接口](https://www.raspberrypi-spy.co.uk/2018/02/enable-1-wire-interface-raspberry-pi/)防止Pi的GPIO 4不断地发送重启信号。
{% endhint %}

{% hint style="info" %}
树莓派官方网站上有一个很好的[教程](https://www.raspberrypi.com/documentation/computers/configuration.html)。
{% endhint %}

只要把树莓派和NyBoard通过可选的2x5插座相连，它们的串口就自动连接起来了，逻辑电平是3.3V。如果您连接的是其他AI芯片，就要注意Rx和Tx的连接，以及它们的逻辑电平。外接板上的Rx要连接NyBoard的Tx，外接板上的Tx要连接NyBoard的Rx，还需要连接NyBoard的参考电平输入和外接板的逻辑电压。

{% hint style="info" %}
注意：如果您在树莓派上安装了 Ubuntu 操作系统，请进行如下配置：

* 在 `/boot/config.txt 添加 enable_uart=1`
* 在 Ubuntu系统的文件 `/boot/firmware/cmdline.txt中删除`&#x20;

`console=serial0,115200（类似于在树莓派系统中文件/boot/cmdline.txt）`

* 运行以下命令关闭串行控制台：

`sudo systemctl stop serial-getty@ttyS0.service && sudo systemctl disable serial-getty@ttyS0.service`

* 请确保您已安装python 串行库 pyserial，而不是来自 apt 的 python-serial。
* 创建 udev file (`/etc/udev/rules.d/50-tty.rules`),并添加以下内容：

  ```
  KERNEL=="ttyS0", SYMLINK+="serial0" GROUP="tty" MODE="0660"
  KERNEL=="ttyAMA0", SYMLINK+="serial1" GROUP="tty" MODE="0660"
  ```
* 运行以下命令重载 udev 规则：

`sudo udevadm control --reload-rules && sudo udevadm trigger`

* 运行以下命令更改新的串口设备的用户组：

sudo chgrp -h tty /dev/serial0

sudo chgrp -h tty /dev/serial1

* 这些设备现在位于 tty 组下。 运行以下命令将用户添加到 tty 组和dialout 组：

sudo adduser $USER tty

sudo adduser $USER dialout

* 运行以下命令更新设备上组读取的权限：

sudo chmod g+r /dev/ttyS0

sudo chmod g+r /dev/ttyAMA0

* 重启树莓派（关闭、打开机器人电池电源）

或者创建一个自动执行这些操作的脚本。
{% endhint %}

### 4.2  给 [ardSerial.py](https://github.com/PetoiCamp/OpenCat/blob/master/SerialMasterPython/ardSerial.py) 增加执行权限给

如果您想在bash里运行ardSerial.py，您还需要为它添加可执行权限：

`chmod +x ardSerial.py`

同时您可能需要把文件第一行的Python安装路径`#!/user/bin/python`改成您电脑上的设置。

### 4.3  用 **ardSerial.py** 向机器人发送指令

{% hint style="warning" %}
NyBoard 只有一个串口。 如果你想用树莓派的串口控制机器人，你需要拔掉USB上载器。
{% endhint %}

在树莓派的终端输入`./ardSerial.py <args>` 就相当于之前在Arduino串口监视器里输入 \<args> 。比如，`./ardSerial.py kcr` 表示“执行 s**k**ill **cr**awl”。

Python脚本**ardSerial.py** 和**Nybble.ino**里对应的解析代码都比较简略，需要逐渐完善。

{% hint style="warning" %}
对于Nybble:

{% hint style="warning" %}
连接到树莓派时可能会降低运动能力！ 需要更强的电池。
{% endhint %}

某些快速的步态，比如小跑（trot，指令是`ktr`），可能会导致系统重启。目前系统由两节14500电池串联供电，您可以升级供电方案，比如模型专用的锂聚合物动力电池。

在改装过程中需要综合考虑软硬件的协作。对于Nybble小巧的身躯而言，最好是把它作为一个编程平台来研究系统整合与决策树，而不是作为一台遥控赛车。
{% endhint %}

## 5  电池

尽管通过USB上载器供电是可以给Nyboard上传程序的，但是仅使用USB上载器为 NyBoard 供电时，舵机存在明显的充电和放电现象，并导致黄色 LED 闪烁。USB 数据线的电流不足以维持舵机正常工作。 因此，舵机必须由外部电池供电才能正常工作。

### Bittle

#### 5.1 电压

NyBoard需要7.4〜8.4V外部电源来驱动舵机。我们在Bittle套件中包括了带有内置充电和保护电路的定制锂电池。短按电池按钮将显示其状态。蓝灯表示有电，红灯表示电量低。

#### 5.2 连接插头和打开电源&#x20;

连接电源时，请注意极性。 NyBoard上的插座具有防呆功能（防止反向插座），因此您将无法以错误的方向插入。详情请看[这里](https://bittle.petoi.com/v/zhong-wen/untitled-1#dian-chi-an-zhuang)（请不要 **大 力 出 奇 迹**！）

长按按钮3秒钟以打开/关闭电池。

{% hint style="danger" %}
**反接电池有可能会损坏Nyboard！虽然我们也设计了简单的防反接电路～**
{% endhint %}

#### 5.3 电池续航能力

电池寿命因使用情况而异

如果您主要是编码和测试姿势，则可以持续几个小时，如果保持Bittle的运行，则可以持续不到30分钟。

电量不足时，电池指示灯将变为红色。电源将自动切断。

#### &#x20;5.4 充电

请使用输出为5V-1A 的 USB充电器为电池充电。我们不建议使用快速充电器。电池在充电过程中无法供电。充电时请注意电池安全。

完全充电大约需要1.5至2小时，为确保安全，防止将其置于无人处持续充电。

#### 5.5 玩耍结束该做的事情

请记住长按电池上电源键2.5秒以上关闭电源。建议您最好在关闭电源后把电池从NyBoard板上拔下来。

### Nybble

#### 5.1. 电压

NyBoard需要7.4\~9V 外接强力电源来驱动舵机。在调试狸宝时，我们用的是8V电源，通常可以通过串联两节锂离子或锂聚合物电池来获得。一节电池充满电是4.2V，在3.6V以上都可以正常工作，串联后就是8.4\~7.2V的电压区间。如前所述，驱动套件配送的舵机最好采用电池直连，也就是把跳线帽SW3连接在BATT和V\_S之间。

在购买电池时，搜索关键词“14500 3.7V 锂离子电池”，最好再加上“无保护板”。我注意到有些有过载保护的电池可能会过早地触发断电保护（<2.5A），导致狸宝不能正常工作，比如重启或死机。电池的放电能力越大越好，比如能稳定以2A放电，或2C以上。

我们的用户在论坛上对各国能买到的电池品牌作了[汇总](https://www.petoi.com/forum/clinic/report-your-batteries)。

#### 5.2. 尺寸

套件中的电池盒适用于14500锂离子电池，14表示直径为14mm，50表示电池长度，有时会差±2mm，但仍可适用。这个尺寸和常见的5号AA干电池一样，但是同尺寸的锂电池电压更高。

{% hint style="danger" %}
注意不要和普通5号电池混淆而误装到其他设备上！
{% endhint %}

另外，要选购正极有按钮状突起的电池。如果您在美国，可以在沃尔玛网购“EBL 14500 Li-ion”电池；在中国，可以在淘宝上试试运气。不要买标榜900mAh以上的电池，至少它们在容量上就不诚实。

您也可以自己设计电池盒来安装其他的电源方案，尤其是当您想添加树莓派做一些严肃的开发 ，或者纯粹想让狸宝跑得更快的时候。

#### 5.3. 接线&#x20;

接线时要注意极性，确保您能清楚地区分NyBoard电源接线端子和电池上的正负号（+/-）。

{% hint style="danger" %}
**电源反接几乎必然会损坏NyBoard！**
{% endhint %}

把NyBoard电源端子的螺丝拧松，插入电池盒引出的电源线，然后拧紧螺丝。闭合开关后，蓝光（主控）和黄光（舵机供电）LED都会点亮。

![](/files/mvAyAqWthLduHmtevxm8)

1月1日之后发货的套件中，端子更换为防反接插座，这样您就不会插错方向了。

#### 5.4. 续航时间

续航时间取决于使用场景。如果您主要是用狸宝编程和测试一些动作，电池可以支持几个小时。如果您一直让狸宝跑来跑去，那就玩不到一个小时，大约四十分钟左右。

当电量不足时，黄色LED可能会不稳定地抖动。这时NyBoard仍可驱动一两个舵机，但更多舵机的负载的叠加会使电路极不稳定，导致持续重启或舵机的异常转动。在极个别情况下，电压波动会恰好翻转EEPROM中的关键常数，那就需要重新上传代码来恢复数据了。

#### &#x20;5.5 充电

最好使用与电池配套的锂电池智能充电器，比如“充电器+4节电池”的套装。在充电期间最好在场以防发生意外 。

#### 5.6 归置

使用后，记得把电池从电池盒中取出，以防无意中接通开关导致电池过度放电。

#### 5.7 信号干扰

可以同时连接FTDI上载器和外接电源。事实上，如果在不接外接电源时命令舵机转动，会使USB端口负载过量电流，导致USB端口被禁用。在电池电量不足时，多个舵机的负载的叠加会波及逻辑电路，导致输出乱码、重启或死机。


---

# 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/li-shi-wen-dang/wei-nyboard-shang-chuan-1.0-ban-ben-cheng-xu.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.
