Phyphox Ble库的经验点滴
Phyphox Ble库的经验点滴
Phyphox是自动支持蓝牙BLE传输协议的,直接使用BLE 5.0可以给Phyphox传输数据。但是当Phyphox Ble的Arduino库发布以来,直接使用有Ble功能的ESP32、Arduino Nano 33等蓝牙/WIFI双模开发板创作Phyphox实验,则显得远超过另用蓝牙芯片要方便。Phyphox Ble库把Phyphox实验创作转变成了富于创作激情的远高于实验本身的乐趣。
下面的经验点滴,有些会在ESP32上出现,有些会在Nano 33上,有些则同时会出现在两种板子上。第1、3条比较容易,而第2条太难了。
1、导出到Phyphox editor的编辑文件报Buffer “” not defined错误
这种情况一般发生在,蓝牙是把time作为CH0自动传输的,而有时我们并不使用time这个量,于是就删掉了它与graph的链接。
之后我们在向手机phyphox里面导入这个实验的时候,phyphox向我们汇报错误:Buffer “” not defined.
这个原因是,当我们在phyphox editor里删除了链接时,事实上把蓝牙送过来的缓冲区数据一并删除了,如果到phyphox editor 的xml栏里去看,会发现<data-containers>……</data-containers>段落里没有了<container size="0" static="false" init="">CH0</container>,它就是用于传输time的缓存变量,而<bluetooth>……</bluetooth>会缺少<output char="@#¥%#¥%" extra="time">CH0</output>,它是蓝牙输入时input页面的offset为16时的缓存变量,和container里面的是一个,只是用在不同有效数据段里。
解决的办法,是在output的灰色小+字位置,创建一个空的缓存变量就行了,名称可以不再是CH0,任意名称都可以;如果不想再跑到phyphox里面去折腾,直接用记事本打开.phyphox文件,修改代码,也很方便。
2、Nano 33 Ble Sensor向Phyphox传递多个数值时报错
例如向Phyphox只传输1个数据,我们就在Arduino IDE里server.write(a),但是如果传输两个数据,我们仍然server.write(a,b)有时会报错。
这个原因是什么,目前尚不清楚,但从提示来看,就是phyphox Ble库与其他Arduino库有冲突,提示是不让phyphox Ble重载write函数,也就是,在phyphoxBle.h里面,有几个write函数,不同的参数个数,会自动选择匹配参数个数的write函数。但现在冲突了,phyphox Ble分不清要调用谁。因此,我们到phyphoxBle.h里面注释掉对应的write()函数只留下包含一个参数的和两个参数的就行了。比如只留下void write(float&)、void write(float&, float&)这两个,传输1个蓝牙数据和两个蓝牙数据就不会报错了。如果需要传输3个数据呢?就只留下void write(float&)、void write(float&, float&, float&)这两个write,避免phyphox Ble糊涂。
3、用Phyphox editor调整蓝牙采集数据的顺序
这个不用过多文字,蓝牙phyphox被约定只能一次传输20个byte的缓冲变量地址,每个偏移量offset约定为4,因此一次可以传输5个变量(实际time是自动被传输的,咋过去的,不清楚),这样,这5个变量依次偏移0、4、8、12、16就分别把它们取出来送给phyphox了。我们在取数据时,只要指定偏移里,就能取到指定的变量;显然,这个偏移自然能够被用于输出,比如我们思考一个这样的实验,把手机当成小车,手机phyphox把数据通过蓝牙送给ESP32或Nano 33 Ble会怎样呢?象马斯克的小猪那样,手机phyphox把数据通过蓝牙送给脑机芯片而直接把物理实验(或者科学探索)操作在脑海里,又会怎样呢?