phyphox通过蓝牙反控ESP32的技术细节
phyphox通过蓝牙反控ESP32的技术细节
Phyphox能够通过它的官方的Arduino支持库来扩展我们自己创作实验的事情发生之后,可由ESP32/Arduino Nano 33外接手机不配备的传感器来采集电信号、压强甚至紫外线等传感器的各种各样的信号,换句话说,从此我们有两点本领提升了:
从此手里拿个手机、搭配一个ESP32/Arduino Nano 33的开发板,再也不去想什么山东朗威/美国Vernier了——我一直顽固的不相信成品传感器实验室的产品,一个根本原因,它不给我们看电路图,为了实现完美的实验效果,我一直在怀疑这些商业公司在各种补偿、各种修饰等方面,已经远离了真正的实验探索应该有的杂乱和干扰。一个探索性的实验,就应该存在众多干扰和不确定因素,甚至想得很美,实操却根本无法成功。离开这些不确定和无法预料的失败,都不应该是物理实验特有的底色。有一些物理实验,在滴水不漏的原理和设计之后操作竟然彻彻底底失败了,我们看到这样的实验,我们应该异常兴奋!做一下就成功了,就象做题一样,一做就对了,还有什么意思呢?
从此想着的物理,是给人真情境的教学。没有情境,只有题,只有知识点,缺少了实验的感受。
打住。前面一直在研究如何把ESP32等开发板采集的数据传到Phyphox里,于是Phyphox成为数据处理之后的表现层,让实验者在手机上看到实验的结果;而另一方面,手机本身也是携带众多的传感器的,例如Android自动支持十几种传感器,为什么不能反过来把手机作为一个巨大的多功能传感器呢?
答案是可能的。Phyphox BLE库也支持从手机传感器把数据传给ESP32,再送给电脑来处理,若是在电脑上做个程序界面,几乎没有什么是实现不了的了。
ESP32从Phyphox手机传感器获取数据和普通的由ESP32向手机Phyphox传送数据的实验创作步骤与思路不太相同,比较麻烦,但好过直接用蓝牙创作实验。仍然方便一些。ESP32端从手机Phyphox获取传感器数据的原理,是先在Arduino IDE里面编写ino,然后烧录到ESP32,运行起来,等待Phyphox来连接。
在phyphoxBle.cpp里,能见到PhyphoxBLE::read()函数,它读传感器数据然后把地址给蓝牙,然后蓝牙把这块指定长度的内存数据接收过来处理。
而在Phyphox里面,我们需要自己去编写.phyphox文件,指定蓝牙为output,指定为output的蓝牙有input口,这样在phyphox editor里编写了phyphox实验后,手机就成为十几种传感器的聚合体了。
这是一个用Phyphox检测手机所在的环境里光线强弱的实验:如果光照比较弱,ESP32会自动把连接在IO26脚上的高亮二极管点亮,而当环境光照比较强时,ESP32自动熄灭LED。
这个应用场景是显然的——打点计时器有个“先接通电源,后松开纸带”的事儿,Phyphox轻松可实现了,甚至可以使用phyphox来开发智能家居,把手机放在床头,晚上要去洗手间的时候,睁开眼睛四周黑魆魆一片不知暗得多深,于是拿起手机、打开phyphox,测不含g的加速度,摇一摇,原来暗处关闭的LED亮起来了。
.ino文件:
#include <phyphoxBle.h>
void receivedData();
const int ledPin = 26;
void setup()
{
PhyphoxBLE::start();
PhyphoxBLE::configHandler = &receivedData;
pinMode(ledPin, OUTPUT);
}
void loop()
{
PhyphoxBLE::poll();
}
void receivedData() {
float light;
PhyphoxBLE::read(light);
bool led;
if (light < 4000.20) {
led = true;
} else {
led = false;
}
digitalWrite(ledPin, led);
}