建议的Phyphox与外接传感器互联方式
建议的Phyphox与外接传感器互联方式
——兼答某大学的某同学的提问
自一、两年前接触使用单片机来拓展Phyphox的外接传感器技术以来,经历了Phyphox连接ESP32、Arduino UNO+蓝牙BLE、Arduino Nano BLE/Sensor以及STC51、C8051F、MSP430等任何单片机借助蓝牙BLE与Phyphox互通数据的研究和使用过程。这里叙述的话,显然突出了一个意思,Phyphox目前与手机之外的事物相互联系,务必要通过蓝牙BLE。
使用Phyphox的人,大多数缺乏单片机的技术背景而在实际工作中遇到这样或那样的困难,即使在Arduino UNO的技术门槛相当低的背景下。人们需要尽可能更平易的技术,尽可能微小的学习成本,这是Phyphox拓展外接传感器以建设低成本传感器实验环境面临的最大问题。
至此,我们能体会到Phyphox与外接传感器互联方式的技术分野:一种是前面提到的“平易+微小”,另一种则是复杂而灵活的应用。前者有更大的推广空间,后者有更大的技术人员研究的可能。前者是以下建议的互联方式,这种方式是Phyphox官方不建议的,但它是当前实际最有现实意义的。
以下通过ESP32板及支持库之困、Arduino蓝牙调试之便、Phyphox端通用程序模板说明,不涉及具体的代码和实验。(说明一下背景。是近些天询问我解决ESP32和Phyphox互联问题的人比较多,一是我确实没有时间答复,二是水平实在有限,三是个别投缘的问题解决了却又不能让有类似问题的人借鉴了同样使问题得以解决,就把粗略的经验整理成粗略的笔记,供人参考。实际上我注意了一些国内外的Phyphox技术网址,涉及的方面之广、研究的层面之深,确实没有发现比我的公众号再值得研究的去处了(吹牛
),如果有Phyphox的技术问题不能解决,那么即便去Phyphox官方论坛去,解决的可能性也不会太大(还吹牛
),所以还是建议投入一些学习的时间(研究我的公众号里的笔记,太能吹牛了啊
)。
一、ESP32板卡及支持库之困
ESP32开发环境有很多种,它们都能在Arduino IDE下被使用。而较ESP32古老和陈旧的Arduino则是ESP32未出现之前即已形成的一个庞大而无所不在的生态体系。很多人从Arduino迁移到ESP32并自然而然地使用着Arduino IDE——ESP32的Micro Python也多有人用,但与Arduino IDE的类C++语言相比,似乎仍显弱势。
不好的消息是,Arduino IDE下安装ESP32板卡支持并不是一件容易的事。这个板卡支持库大约要下载200M至300M的文件,且需json指定的下载脚本。网络的原因,下载极慢,或不能下载。有好心的人,制作了一键安装包,或复制拷贝的脚本,仍然问题非常多;也有在乌班图、Deepin等Linux系统下的ESP32&Phyphox使用者,林林总总各种问题,不一而足。
很多问题,即便当面面对屏幕也不一定能立时解决,更何况只是提供一些蛛丝马迹的出错信息。
对此,我的总结是:数十起、近百宗的问题,绝大多数仅仅是ESP32支持库安装错误,如缺少文件、路径错误、版本杂糅、多处重复安装等等。除此之外,还有一些问题,出在Arduino IDE下烧录程序时,ESP32开发板板卡类型、串口位置等设置错误——ESP32标准板子、各公司改造的板子,与Arduino UNO相比,极度零碎,标准确实不够统一。
鉴于以上情况,对于初次进入这个领域的使用者,建议远离ESP32。远离ESP32,也就远离了Phyphox官方出品的PhyphoxBLE支持库,更远离了ESP32板卡支持库的安装之困。
二、Arduino蓝牙调试之便
一种Arduino UNO开发板(图片引自百度)如无特殊的追求新奇的爱好,Arduino UNO目前原版、各种仿制版相对要统一。最重要的是,Arduino IDE安装完毕,默认就支持Arduino UNO开发板,无需任何设置与调整。当进行实验程序开发时,与开发和编写任何平时所用的Arduino UNO程序毫无二致,当需要串口列印数据时,仍然只是使用Serial.println(“demo”);
函数命令。
前面提到,Phyphox与ESP32互联的桥梁是蓝牙BLE。支持BLE标准的蓝牙模块,有HC-08、JDY-24M等可以使用。
一种HC-08蓝牙BLE封装(图片引自百度)当一切传感器所需要的正常功能都在Arduino下调试完毕,现在可以使用我们自己的蓝牙BLE与Phyphox通信了。这是为什么能够脱离ESP32和建议不再使用ESP32的原因。程序中的关键处理:
注释掉一切Serial.print或println的字符串;phyphox本来也不接收它们。 把要传输给Phyphox的数据全部转成字符串,并连接成一个字符串,用”#”隔开,用Serial.println()打印出去;例如:
……
double T, P;
……
Serial.println(String(T) + "#" + String(P));
……
在Arduino IDE的串口监视器里观察是否正确。正确,关闭串口监视器。 连接蓝牙BLE到Arduino UNO。完毕。
显然,这里的做法,全部都是Arduino本身的知识,为使外接传感器的数据进入Phyphox,我们的学习成本几乎是零。
接线。以BMP180和JDY-24M蓝牙BLE为例,介绍接线。BMP180是一款很常用的压强传感器,可同时测压强和温度,JDY-24M蓝牙支持BLE标准,好象芯片荒开始后这款蓝牙忽然进入人们的视野。和HC-08相比,似乎JDY-24M不如HC-08稳定。以下连接,只测试了Arduino UNO侧,ESP32侧没有测试。以本文所述方式使用ESP32,尽量不要这样做,因为如果ESP32支持库被正常安装后,实在没有必要再另搭一个蓝牙BLE在上面,ESP32的WIFI/BLE是这款芯片的主要卖点。另,ESP32有三组串口,IO1、IO3只是和Arduino语法通用的那一组。
三、Phyphox端通用程序模板
Phyphox端的程序,使用Phyphox在线编辑器修改模板即可,其灵活性远远超过在Arduino IDE下使用PhyphoxBLE创作实验。
模板的功能,需要完成以下的任务:
通过Phyphox能搜索到蓝牙BLE并正常连接; 向Phyphox传输我们的”#”分隔符的字符串,并重新拆分开; 在Phyphox Web Editor中编写程序,下载进入Phyphox。
仍以上述BMP180的使用为例,Phyphox模板关键代码,使用是不需要重新更动的:
……
<input>
<bluetooth editor:uuid="97" editor:posx="109.88330078125" editor:posy="163.433349609375" mode="notification" rate="1" subscribeOnStart="false">
<output char="0000FFE1-0000-1000-8000-00805F9B34FB" conversion="formattedString" separator="#" index="0">Output 1</output>
<output char="0000FFE1-0000-1000-8000-00805F9B34FB" conversion="formattedString" separator="#" index="1">Output 2</output>
</bluetooth>
</input>
……
按此处模板,将.phyphox程序引入到编辑器,根据实际实验的需要重新修改即可。这个地方,是这种互联方式仅有的一点点学习投入。
全部完毕,接线也并不复杂,还看得下去:
另:
Phyphox互联外接传感器,官方PhyphoxBLE支持除ESP32之外,还支持Arduino Nano BLE/Sensor,但后者价格昂贵,仍需要安装板卡支持库,初学难度并未降低。除此之外,通过MQTT的方式,也可以实现外接传感器与Phyphox互联,目前正在极度缓慢的研究学习之中。
------心存DREAM喜欢琢磨实验并自娱自乐的MIRACLE------
实验教学值得学习的去处:
2.学生自主创新实验