本篇文章分为两个部分,其一是从官网翻译的部分(一二三),内容是如何进行官方板子的编程,我在这里就不过多赘述(官方固件代码GitHub)。第四部分是关于OpenBCI第三方平替板的开发教程。
一、Cyton 板编程教程
请注意,如果您想使用开箱即用的 Cyton,则无需进行任何电路板编程。所有 OpenBCI 电路板在发货时都已编程,即已上传固件。在尝试更新或更改电路板固件之前,或者如果您认为电路板存在问题,请发送电子邮件至support@openbci.com 。除非有明确指示,否则请勿尝试将固件上传到您的电路板。
如果您对我们是如何做到的感到好奇,请继续阅读!如果您想立即开始传输 EEG/EMG/ECG 数据,请转到入门。祝您生物传感愉快!
概述
OpenBCI Cyton 板上有功能强大的微控制器,它们附带最新的 OpenBCI 固件,可与板载 ADS1299、加速度计和 SD 卡交互。本教程介绍如何使用 OpenBCI Dongle 和您的 PC 对固件进行编程。如果我们推出固件升级,或者您或其他人想出了一个您想要实现的自定义程序,您应该使用以下方法。我们在 2016 年对 Cyton 固件进行了重大更改,推出了 v2.x,并在 2017 年推出了 v3.x。本教程涵盖 v2 和 v3,以及 v1。如果您已经使用 v1 固件对代码进行了修改,并且想要升级,请查看本文档末尾的注释。祝您黑客愉快!
固件版本 2.xx 和 3.xx(2016 年秋季至今)
这些说明适用于使用固件版本 2.xx、3.xx 及更高版本对 Cyton 进行编程!无线电固件(加密狗的固件和 Cyton 板上的无线电模块)自 2016 年秋季之前以来一直未更新,因此只要您在此日期之后购买了 Cyton 板,就无需担心重新编程无线电。有关上传原始 OpenBCI Cyton 固件(1.xx)的信息,请参阅下文。
你需要:
-
运行Arduino v1.8.0或更高版本的计算机
-
OpenBCI 加密狗已连接到 USB 端口
-
带电池供电的 OpenBCI Cyton 板
-
OpenBCI Cyton 固件(按照以下指南下载)
-
OpenBCI Cyton SD 固件(按照以下指南下载)
-
OpenBCI WiFi Master 固件(按照以下指南下载)
-
如果您的计算机没有 Arduino v1.8.0(或更高版本),请安装最新的 Arduino IDE,可在此处找到:https:
Windows 用户须知安装 Arduino 1.8 时,如果安装程序指示您卸载 1.5.8,请将包含 1.5.8 的 Arduino 文件夹从Program Files
移至桌面或其他文件夹。将此文件夹重命名为Arduino_1.5.8
。Change or remove program
在控制面板中打开应用程序并卸载 Arduino 应用程序。将出现一个弹出窗口,指示文件不存在并询问您是否要从文件列表中删除该程序,选择“是”。然后正常安装 1.8.0。导航回您的Program Files
文件夹并找到 Arduino 文件夹。将此文件夹重命名为Arduino_1.8.0
。现在将其拖放到文件夹Arduino_1.5.8
中Program Files
。
从 Arduino 库管理器安装固件(最简单! )
不知道库管理器是什么?浏览官方 Arduino 指南。
打开库管理器并搜索OpenBCI并安装OpenBCI_32bit_Library
、OpenBCI_32bit_SD
和 的最新版本OpenBCI_Wifi_Master
。
现在跳转到安装 ChipKit Core部分
Cyton固件
-
下载最新的OpenBCI_32bit_Library,它是最顶层的 zip 文件。
-
解压文件夹并将名称更改为
OpenBCI_32bit_Library
-
移至
OpenBCI_32bit_Library
:在 Mac 上:
/Documents/Arduino/libraries
在 Windows 上:C:\Users\username\Documents\Arduino\libraries
如果您遇到问题或想了解更多信息,请查看官方 Arduino 指南以了解手动安装。
Cyton SD库
-
下载最新的OpenBCI_32bit_SD,它是最上面的 zip 文件。
-
解压文件夹并将名称更改为
OpenBCI_32bit_SD
-
移至
OpenBCI_32bit_SD
:在 Mac 上:
/Documents/Arduino/libraries
在 Windows 上:C:\Users\username\Documents\Arduino\libraries
如果您遇到问题或想了解更多信息,请查看官方 Arduino 指南以了解手动安装。
手动安装 WiFi Master固件
-
下载最新的WiFi Master Library,它是最顶层的 zip 文件。
-
解压文件夹并将名称更改为
OpenBCI_Wifi_Master
-
移至
OpenBCI_Wifi_Master
:在 Mac 上:
/Documents/Arduino/libraries
在 Windows 上:C:\Users\username\Documents\Arduino\libraries
如果您遇到问题或想了解更多信息,请查看官方 Arduino 指南以了解手动安装。
从Github
希望贡献或编写自定义固件的开发人员可以将固件存储库直接克隆到您的libraries
文件夹中
<span style="color:var(--prism-color)"><span style="background-color:#292d3e"><span style="color:#bfc7d5">
<code><span style="color:#bfc7d5">On Mac: `/Documents/Arduino/libraries`
</span><span style="color:#bfc7d5">On Windows: `C:\Users\username\Documents\Arduino\libraries`
</span>
</code></span></span></span>
安装 ChipKIT 核心固件
- 在您可以使用 Arduino 将代码正确上传到 PIC32 之前,您需要将 chipKIT-core 板文件添加到您的 Arduino IDE。chipKIT 的工作人员整理了有关如何通过 URL 从 Arduino 内部自动安装的说明。
注意:最新的 ChipKIT 固件可能会导致设备固件刷写不正确。在这种情况下 [软重置电路板后电路板无数据流/无设备 ID 和加速度计 ID] 请选择固件版本 1.3.1。
选择“OpenBCI 32”作为主板
如果您遵循上一个链接中的流程,您将能够从工具 >> 板 >> 下拉菜单中选择OpenBCI 32板!
从示例
- 在 Arduino IDE 中,转到
File-->Examples-->OpenBCI_32bit_Library-->DefaultBoard
将启动 Cyton 固件。注意您必须仅上传DefaultBoard
Sketch!
上传前硬件设置
- 确保 OpenBCI Dongle 上的滑动开关已切换到 GPIO6 选项。如果在另一侧,它将尝试对 Dongle 上安装的 RFduino 进行编程!
插入加密狗并选择串行端口
现在是插入加密狗并关闭主板电源的好时机。
-
为您的 OpenBCI Dongle 选择正确的串行端口。
-
在 Mac 上,它将被命名为/dev/tty.usbserial-DN00nnnn,其中 nnnn 是特定于您的 openBCI Dongle 的数字和字母的组合。
-
在 Windows 上,串行端口将作为编号的 COM 端口列出。
-
在 Linux 上情况会有所不同。
-
将 Cyton 置于引导加载模式
- 当您对代码满意时,您必须将 32 位主板置于引导加载程序模式。我们没有办法远程重置 chipKIT 兼容 IC,因此您必须按照以下步骤手动执行:
- 关闭 OpenBCI 板的电源。
- 同时按下 RST 和 PROG 按钮。
- 打开 OpenBCI 板的电源。
- 按住 PROG 按钮的同时松开 RST 按钮。
- 松开 PROG 按钮。
- 确认您看到 32 位主板上的蓝色 LED 闪烁。
上传固件
- 按下 Arduino IDE 上的上传按钮。
就是这样!您将看到 Dongle 上有一些闪烁的灯光,片刻之后,Arduino IDE 会告诉您已完成。祝您黑客愉快!
固件版本 1.xx(2014 年 - 2016 年秋季)
你需要:
- 运行Arduino v1.8.0或更高版本的计算机
- OpenBCI 加密狗已连接到 USB 端口
- 带电池供电的 OpenBCI Cyton 板
注意:在给电路板供电之前,务必将 Dongle 插入 PC,因为必须在给设备(电路板上的 RFduino)供电之前给主机(Dongle 上的 RFduino)供电。
首先,安装 Arduino IDE,网址为:
Windows 用户须知安装 Arduino 1.8 时,如果安装程序指示您卸载 1.5.8,请将包含 1.5.8 的 Arduino 文件夹从 移至Program Files (x86)
您的下载文件夹。将此文件夹重命名为Arduino_1.5.8
。Change or remove program
在控制面板中打开应用程序并卸载 Arduino 应用程序。将出现一个弹出窗口,指示文件不存在并询问您是否要从文件列表中删除该程序,选择“是”。然后正常安装 1.8.0。导航回您的Program Files (x86)
文件夹并找到 Arduino 文件夹。将此文件夹重命名为Arduino_1.8.0
。现在将其拖放到文件夹Arduino_1.5.8
中Program Files
。
您可以在我们的 github 存储库中找到以前的 OpenBCI 固件和库。
<span style="color:var(--prism-color)"><span style="background-color:#292d3e"><span style="color:#bfc7d5">
<code><span style="color:#bfc7d5">https://github.com/OpenBCI/OpenBCI_32bit
</span>
<span style="color:#bfc7d5">https://github.com/OpenBCI/OpenBCI_32bit_Library/tree/maint/1.0.0
</span>
</code></span></span></span>
- OpenBCI_32位
- 这是在 OpenBCI 32 位板上运行的固件
- OBCI_SD
- 支持将原始数据写入板载 SD 卡
- OpenBCI_32_Daisy
- OpenBCI 32 位库
您需要将我们的 Libraries 存储库中的文件夹“OpenBCI_32_Daisy”和“OBCI_SD”安装到您的 Documents/Arduino/libraries 文件夹中。如果 sketch 文件夹中没有“libraries”文件夹,请创建一个。将名为“OpenBCI_32bit”的文件夹移动到您的 Documents/Arduino 文件夹中。
在您可以使用 Arduino 将代码正确上传到 PIC32 之前,您需要将 chipKIT-core 主板文件添加到您的 Arduino IDE。chipKIT 的工作人员整理了有关如何通过 URL 从 Arduino 内部自动安装的说明。按照上一个链接中的过程,您将能够从工具 >> 主板 >> 下拉菜单中选择 OpenBCI 主板!
从文件 -> Sketchbook 下拉菜单中打开 OpenBCI_32bit 草图。然后从板下拉菜单中选择 OpenBCI 32。
确保 OpenBCI Dongle 上的滑动开关已切换到 GPIO6 选项(朝向您的计算机)。如果它在另一侧,它将尝试对 Dongle 安装的 RFduino 进行编程!现在是插入 Dongle 并关闭 Cyton 板电源的好时机。
为您的 OpenBCI Dongle 选择正确的串行端口。
-
在 Mac 上,它将被命名为/dev/tty.usbserial-DN00nnnn,其中 nnnn 是特定于您的 openBCI Dongle 的数字和字母的组合。
-
在 Windows 上,串行端口将作为编号的 COM 端口列出。
-
在 Linux 上情况会有所不同。
当您对代码满意时,您必须将 32 位主板置于引导加载程序模式。我们没有办法远程重置 chipKIT 兼容 IC,因此您必须手动执行此操作。
-
如果您要上传固件 3.xx,则需要确保在上传固件之前已安装 WiFi 库。为此,请转到
Sketch > Include Library > Manage Libraries
。 -
然后,在右上角的搜索栏中输入 OpenBCI WiFi。
-
现在,单击 OpenBCI_WiFi_Master 并安装 v1.0.0(如果有较新版本,则安装最新版本)。
注意:我们建议您在以下五个步骤中用一只拇指按下 RST 和 PROG 按钮,同时用另一只拇指在 OFF 和 PC 之间切换开关。
- 关闭 OpenBCI 板的电源。
- 同时按下 RST 和 PROG 按钮(用左手拇指)。
- 打开 OpenBCI 板的电源(用右手拇指)。
- 按住 PROG 按钮的同时松开 RST 按钮。
- 松开 PROG 按钮。
现在您应该看到 Cyton 板上的蓝色 LED 闪烁着。您的 Cyton 板已准备好进行刷新!
- 按下 Arduino IDE 上的上传按钮(带有指向右侧箭头的圆形按钮)。就是这样!您将看到 Dongle 上有一些闪烁的灯光,片刻之后,Arduino IDE 会告诉您上传已完成。祝您黑客愉快!
** 注意:** 偶尔,您可能会看到以下屏幕截图中的错误消息。您可以忽略它。只要 Program flash: ...................................#################################### done
出现,您的固件 100 次中有 99 次都上传正确。如果您的主板在 GUI(或其他软件)中似乎无法正常工作,只需尝试重新上传固件。
二、8bit 上传指南
注意:8位硬件不再生产
你需要:
- 运行 Arduino IDE 的计算机
- OpenBCI 加密狗已连接到 USB 端口
- 带电池供电的 OpenBCI 8 位开发板
确保 OpenBCI Dongle 上的滑动开关已切换到 GPIO6 选项。这样,DTR 重置信号将通过无线方式传送到 ATmega328。如果在另一侧,它将尝试对 Dongle 安装的 RFduino 进行编程!
您可以在我们的 github 存储库中找到最新的固件和库
- ** 已弃用 **
您需要将这些文件从我们的存储库安装到您的 Documents/arduino/libraries 文件夹中
- 脂肪组织
- 支持将原始数据写入板载 SD 卡
- OpenBCI_8
- OpenBCI 8 位库
将文件 OpenBCI_8bit_SD.ino 移动到您的 Documents/arduino 文件夹,然后启动 Arduino IDE。然后您应该会在 Sketch 文件夹中看到草图。
从 Board 下拉菜单中选择 Arduino UNO。
为您的 OpenBCI Dongle 选择正确的串行端口。
-
在 Mac 上,它将被命名为/dev/tty.usbserial-DN00nnnn,其中 nnnn 是特定于您的 openBCI Dongle 的数字和字母的组合。
-
在 Windows 上,串行端口将被列为 COM 端口。
-
在 Linux 上情况会有所不同。
当您对代码满意时,只需按上传即可对 OpenBCI 8 位目标进行编程。就是这样!您将看到 Dongle 上有一些闪烁的灯光,片刻之后,Arduino IDE 会告诉您已完成。
故障排除
如果您遇到问题Board_Defs.h
并且正在使用 Linux 上传,则必须将位于以下位置的所有文件移动到: /Arduino/hardware/chipkit-core/pic32/variants/openbci/
这/Arduino/hardware/chipkit-core/pic32/cores/pic32/
应该可以解决您在编译时遇到的任何问题。
如果上传失败并显示No Target Found
:
- 拔下加密狗和设备。
- 将加密狗插入您的计算机。
- 将设备插入您的计算机。
- 将设备置于引导加载程序模式。
- 尝试再次上传。
如果上传失败,Program Flash Failed
可能是由于 Arduino IDE 无法足够快地从串行端口读取数据,也可能是由于资源不足或计算机整体功率不足。我们建议采取以下措施:
- 上传过程中,保持主板和加密狗物理上靠近彼此。
- 保持 Arduino IDE 处于打开状态、位于前面和中间,并且在上传期间不要使用任何其他程序。
- 关闭所有打开的程序(例如(Google Chrome、MS Word 等...)并且仅在上传期间打开 Arduino 1.6.5 IDE。
- 重新启动计算机,不要打开除用于编程的 Arduino IDE 之外的任何其他程序。
- 如果其他方法都失败了,那就找一个拥有更强大计算机的朋友,然后从他们的计算机上进行上传。
在极端情况下,如果您尝试了上述五种方法仍然无法上传,那么您可以尝试更改设备的轮询时间。可以使用 OpenBCI Radio Config Utility 软件调整轮询时间。
三、关于更新和使用 v2.0.0 Cyton固件的
概述
OpenBCI Cyton 开发板的所有三个主微控制器、Pic 32(Pic32)和 Dongle(Host)和开发板(Device)上的两个 RFduinos 都更新了新固件。本教程未解释如何使用 OpenBCI Dongle 和 来编程固件PC
;您需要参考教程Cyton 开发板编程教程和Cyton 无线电编程教程。如果您花了很多时间编写自定义 Arduino 代码以在 OpenBCI 上运行,那么您会发现本教程有助于升级以获得 2.0.0 固件的新稳定性和功能。
将数据包从 Pic32 发送到PC
在 250Hz 时,我们处于物理硬件的上限。由于和之间的串行波特率较慢(,更快的波特率会干扰上的无线电) Device,RFduino 必须在从获得数据包后立即发送它们。另一方面,无线编程必须能够将多个无线电数据包组合成一页并一次写入,因此,无线编程必须等待查看它是否通过串行端口接收到所有数据后再发送。这两个要求导致原始固件是有状态的,其中和将处于或模式。这导致了问题,并可能导致无法联系,因为无线电卡在流模式中,并且上的重置按钮未与绑定,因此必须对整个进行电源循环。Pic32Pic32Device115200 baud
DeviceDeviceHoststreaming
not streaming
PC
Cyton
Cyton
DeviceCyton
一个例子
假设您想将自定义数据从 发送Cyton
到PC
。要做到这一点,只需用正确的起始字节0x41
和停止字节包装数据0xCX
(其中X
为0-F
十六进制)。在OpenBCI_32bit_Library
代码库中:
<span style="color:var(--prism-color)"><span style="background-color:#292d3e"><span style="color:#bfc7d5">
<code><span style="color:#bfc7d5">/*
</span><span style="color:#bfc7d5"> * @description Writes channel data and axisData array to serial port in
</span><span style="color:#bfc7d5"> * the correct stream packet format.
</span><span style="color:#bfc7d5"> *
</span><span style="color:#bfc7d5"> * Adds stop byte OPENBCI_EOP_STND_ACCEL. See OpenBCI_32bit_Library_Definitions.h
</span><span style="color:#bfc7d5"> */
</span><span style="color:#bfc7d5">void OpenBCI_32bit_Library::sendChannelDataWithAccel(void) {
</span>
<span style="color:#bfc7d5"> Serial0.write('A'); // 0x41 1 byte
</span>
<span style="color:#bfc7d5"> Serial0.write(sampleCounter); // 1 byte
</span>
<span style="color:#bfc7d5"> ADS_writeChannelData(); // 24 bytes
</span>
<span style="color:#bfc7d5"> accelWriteAxisData(); // 6 bytes
</span>
<span style="color:#bfc7d5"> Serial0.write(OPENBCI_EOP_STND_ACCEL); // 0xC0 1 byte
</span>
<span style="color:#bfc7d5"> sampleCounter++;
</span>
<span style="color:#bfc7d5">}
</span>
</code></span></span></span>
此代码以正确的格式将 33 个字节的数据从 写入Pic32,Device因此一旦到达 ,Device它将被发送到Host和PC
。固件版本 2 的新功能是能够使用不同的停止字节,在原始固件中,只能发送 的停止字节,0xC0
但现在,我们可以发送0xCn
(十六进制) 。重要的是,如果您只想发送每个数据n
包的字节数据,您仍然必须发送带有正确起始和停止字节的这些字节。发送数据太快会导致 上的缓冲区溢出,并导致系统重新启动并向 和 发送错误消息。0-F
20
33
DeviceHostPC
每 10ms 或100Hz
这是从 repo 文件夹中调用BoardWithCustomData.ino
的文件中获取的一个示例。examples
OpenBCI_32bit_Library
<span style="color:var(--prism-color)"><span style="background-color:#292d3e"><span style="color:#bfc7d5">
<code><span style="color:#bfc7d5">void sendLEDStatus() {
</span><span style="color:#bfc7d5"> // Must have header byte
</span><span style="color:#bfc7d5"> Serial0.write('A'); // 0x41 1 byte
</span><span style="color:#bfc7d5"> // Write the LED state
</span><span style="color:#bfc7d5"> Serial0.write(LEDState); // 1 byte
</span><span style="color:#bfc7d5"> // Fill the rest with fake data
</span><span style="color:#bfc7d5"> for (int i = 0; i < 30; i++) {
</span><span style="color:#bfc7d5"> Serial0.write(0x00);
</span><span style="color:#bfc7d5"> }
</span><span style="color:#bfc7d5"> // Send a stop byte with an `B` or `1011` in the last nibble to indicate a
</span><span style="color:#bfc7d5"> // different packet type.
</span><span style="color:#bfc7d5"> Serial0.write(0xCB); // 1 byte
</span><span style="color:#bfc7d5">}
</span>
</code></span></span></span>
正如您上面看到的,我们实际上只想发送 1 个字节,但如果我们想快速发送,以这个 100Hz 的速率,我们必须将其包装在起始字节和停止字节中,以告诉它在Device收到停止字节后立即发送数据包。
采用新的 Pic32 代码范式
我们大幅降低了文件的复杂性.ino
,以便新程序员更容易进行自定义设备编程,同时也增加了一套功能,为优秀程序员提供强大功能。我们创建了一个环境,以示例的形式推动对主要项目的贡献。如果您想为其他人贡献主库代码,现在您只需发出拉取请求即可。Joel 能够在大约 20 分钟内将他的脉搏传感器代码调整到新固件!现在,任何下载固件的人都可以获得脉搏传感器代码,而不必翻遍所有的 OpenBCI 存储库来找到如何使用脉搏传感器、使用外部触发器、读取模拟输入等的示例……
请仔细阅读examples文件夹中的内容,OpenBCI_32bit_Library深入了解新代码的所有可能性。请记住,如果您有想要分享的新代码,请分享!!发出拉取请求!
四、OpenBCI平替板编程教程
(from咸鱼的便宜板子)
将microUSB线连接板子上的ESP32和电脑(这里默认已经装好了驱动)
下载OpenBCI_ESP32_stable.ino,使用arduino IDE如下配置即可。点击烧录按钮进行编译及上传代码。