用STC89C52连接Phyphox(多数据协同)
用STC89C52连接Phyphox(多数据协同)
这一篇笔记,尽管是使用51单片机实现的,但从原理以及未来的实用性上看,显然适用于Arduino、ESP32以及8266等其他常见单片机,集成蓝牙与不集成蓝牙都是一样的,只要走蓝牙通道。
转眼蓝牙连接Phyphox的研究已经是第7篇笔记了,先列一下表:
用STC89C52连接Phyphox(综述) 用STC89C52连接Phyphox(串口) 用STC89C52连接Phyphox(烧录) 用STC89C52连接Phyphox(蓝牙) 用STC89C52连接Phyphox(Phyphox) 用STC89C52连接Phyphox(Ds18b20) 用STC89C52连接Phyphox(多数据协同)←本篇 用STC89C52连接Phyphox(双向数据传输)←挖坑,以后填
我们真的要使用STC89C52RC做实验的话,大概率要碰到同时采集两种或两种以上的传感器数据的情况,例如伏安法测电阻,测定二极管伏安特性曲线等,可能希望电压、电流同时能够送到Phyphox才好。使用ESP32创作实验,要使用Phyphox官方的Phyphox-BLE库,这个库受到Arduino IDE的支持,使创作实验时,能自动支持到同时有5个实型数据传输,这可以从BLE库的write()函数中看到;但若企图传输10个、20个数据,或者其它类型的数据传输,要么不被支持,要么需要自己去重写write()函数体。
这一篇C51下的多数据协同的研究意义就在于此,我们希望能找到多个数据传输的方法,实现多数据的协同工作。
一、c文件
定义好发送字符串的函数,并初始化串口后:
void main()
{
char buf[10];
uchar code char_temp[3]={'\r','\n'};
while(1)
{
……
strcpy(buf,"12#34#56");
PostString(buf);
PostString(char_temp);
delayms(5);
}
}
strcpy函数需要#include <string.h> 和 #include <stdio.h>两个头文件。这里的代码是要发送12#34#56字符串给Phyphox。这个字符串是有格式的,#作为分隔符,到Phyphox Editor里面要使用这个分隔符。
二、Phyphox Editor
当Phyphox Editor中编辑Phyphox文件时,我们只能被允许创建一个Bluetooth视图,亦即Phyphox只能使用一个蓝牙,但能传输多少数据是不限制的(实际受蓝牙本身的传输规范限制),这样我们只要传输一个带格式字符串,多数据协同即成功。
我们指定接收到的数据按formattedString转换,在separator中指定接收的数据由#分开,并在index中指定0,则取出12#34#56中的索引为0的数据:12;再创建一个output变量,指定index为2,则取出12#34#56中的索引为2的数据:56。
编写Analysis部分。把两个输出变量送给两个value:
到Download/Transfor标签里下载回phyphox文件,运行,看到名称为11111的value里面正确显示了12#34#56分割后的数据12,即12.00;名称为2222的value里面显示了分割后的56,即56.00。