去年我写了一篇OpenBCI的博客【OpenBCI】:Matlab实时读取数据流(labstreaminglayer),讲述如何用python的SDK将OpenBCI数据读取到Matlab中。
   后来我想,既然是串口通信,能不能用Matlab串口直接读取OpenBCI的数据,跳过官方的python。答案是肯定的。下面讲述一下我利用串口调试助手对OpenBCI原始数据包的解码过程及其数据格式,这样大家可以用任何语言(例如C#,.Matlab等)的串口通信去开发OpenBCI,不再拘泥于python。

1.连接串口

   要利用串口调试助手去解码OpenBCI数据,我们先下载一个串口调试助手【串口调试助手下载】
   打开串口调试助手,设置串口格式如下:

串口波特率:115200
数据位:8
停止位:1
校验位:无

  选择OpenBCI对应的串口号(我的是COM3),打开串口。此时我们再重启一下OpenBCI就可以看到,串口调试助手显示以下信息。代表OpenBCI就位。

2.获取数据包

  此时给串口发送不同的字母代表不同的指令:

b--------------begin, 开始采集数据
s--------------stop,停止采集数据
f--------------filter,添加60Hz工频滤波器(国内为50Hz,暂时用不到)
g--------------关闭60Hz工频滤波器(国内为50Hz,暂时用不到)

  更多指令参考官方网站[OpenBCI指令集]
  我们在串口调试助手下面的发送框里,输入字母“b”,然后点击发送,OpenBCI就开始输出数据到串口,我们可以看到滚动的数据流。

3.数据包解码

  因为OpenBCI采样频率为250Hz,所以每秒有250个数据包,部分数据包放大看一下,如下图所示:

  图中每一行代表一个数据包,每个数据包由33个字节组成,OpenBCI的所有采集数据(包括8通道的脑电数据和陀螺仪数据)都在这些数据包里。例如上图中的第一行,其数据格式如下:

  每个脑电通道数据由3个字节组成,该数据为:低字节序 有符号整数(little endian signed integer),即:

  1. 第一个字节小于等于127(0x7F)时,该数为正整数
    如通道数据0x29 0x96 0x49 即为 2725449

  2. 第一个字节大于127(0x7F)时,该数为负整数
    如通道数据0xE1 0x96 0x49,即为 -1993143
    可以理解为 0x01 0x00 0x00 0x00 - 0xE1 0x96 0x49 = -1993143

  计算出的整数乘以系数scale_fac_uVolts_per_count = 0.022351744455307063 即可得到单位为uV的电压数据。

4.结束语

  知晓了OpenBCI的数据包格式,这样大家可以用任何语言(例如C#,.Matlab等)的串口通信去读取OpenBCI的原始数据,不再拘泥于官方的python SDK。
  是以为记!

【OpenBCI】(2):原始数据包解码相关推荐

  1. 使用Packet.dll和npf.sys实现原始数据包的发送和接收

    相应源码下载地址: http://download.csdn.net/source/3521479   有人可能问我为什么不直接用wpcap.dll,那个不但功能更强大还稳定.那是因为我这个功能很简单 ...

  2. linux获取网卡协议地址,读取linux下的网络设备的mac地址与发送原始数据包 (2011-11-23 20:11)...

    一:linux下的网络设备 linux的网络设备信息都在/proc/net/dev,从这里我们可以得到所有网卡的名字,如eth0, eth1等等 root@dlrc-desktop:/home/dlr ...

  3. 使用tcpdump查看原始数据包

    点击上方 "后端架构师"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「后端架构师」,收看更多精彩内容 每日英文 Nothing can ...

  4. 用Go处理原始数据包

    文章目录 1. gopacket基本使用 检索可用设备 捕获并过滤数据包 2. 嗅探用户凭证 3. 绕过SYN泛洪保护进行端口扫描 SYN Cookie 绕过 1. gopacket基本使用 Goog ...

  5. 肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁

    图源 | 视觉中国 来源|Python编程时光(ID: Cool-Python) 今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具 -- Tcpdump,也就是我们常说的抓包工具. 与 ...

  6. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )

    文章目录 一.FFmpeg 简介 二.FFmpeg 相关术语 1.容器 2.媒体流 3.数据帧 4.数据包 5.编解码器 6.复用 7.解复用 博客资源 一.FFmpeg 简介 FFmpeg 是 &q ...

  7. 如何处理网络丢包故障?—Vecloud微云

    我们在使用ping命令对目的站进行询问时,数据包由于各种原因在信道中丢失的现象,就是网络丢包.网络丢包是网络中常见的故障之一,它会引起网速降低甚至造成网络中断. 以下是几种常见的网络丢包故障现象及处理 ...

  8. SSL加密包解析的几个概念梳理

    1.DPI技术初识 DPI(Deep PacketInspection)深度包检测技术是在传统IP数据包检测技术(OSI L2-L4之间包含的数据包元素的检测分析)之上增加了对应用层数据的应用协议识别 ...

  9. Linux抓包工具tcpdump命令详解

    1.简介      用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中 ...

最新文章

  1. JavaScript数学,四舍五入到小数点后两位[重复]
  2. 使用python获取路径问题
  3. PHP递归复制文件夹的类
  4. 提高数据库处理查询速度
  5. idea新增文件自动添加到版本控制
  6. slf4j 和 log4j2 架构设计
  7. 数控车椭圆编程实例带图_邹军:数控车床任意位置椭圆宏程序的编程
  8. 深度学习岗位面试记录
  9. 顺序表的类型定义与基本操作
  10. 【我们一起写框架】MVVM的WPF框架(一)—序篇
  11. xp电脑不能访问服务器共享文件夹,XP系统电脑无法访问WIN7共享文件夹怎么办
  12. 【arcgis中两种路网密度计算结果对比】
  13. 晚还款没事,各行信用卡容时容差服务大汇总!
  14. linux单片机用什么数据库,基于ARM-Linux的SQLite嵌入式数据库的研究 -单片机-电子工程世界网...
  15. 南京理工大学计算机考研大纲,2021南京理工大学考研大纲参考书目
  16. 数值分析快速复习(1)——Matlab数值积分
  17. 谷歌五笔输入法电脑版_新手学拼音还是学五笔打字(看完你就明白)
  18. go juju/ratelimit 简单使用
  19. 新能源汽车行业研究报告
  20. 2021闲鱼副业月入过万实战课程:从开店到选择货源到引流

热门文章

  1. Echarts实现空气质量仪表盘网页
  2. 手撸SSO单点登录(一):序言
  3. 创意电子学-小知识:电容器
  4. solidworks跳出登录计算机库,SolidWorks运行过程中三种常见问题解析
  5. linux用户随机密码,Linux 生成随机密码/修改密码
  6. keras_bert实现文本分类,数据为头条新闻
  7. React配置默认路由
  8. 马航发布会确认MH370失事:这是史无前例的悲剧
  9. 通道抠图怎么扣ps教程ps学习视频教程基础学习
  10. 17届智能车竞赛技术报告 | 乐师逐飞二队 - 基础四轮组