分享

ESP32直连Phyphox任意传输测量量

 新用户5228KeDY 2021-10-10

ESP32直连Phyphox任意传输测量量

通过ESP32给手机物理工坊即Phyphox编程或创作实验,数据的收发是按照小端序Little Endian来存储的。知道了这个道理,我们能够攻克使用Phyphox官方BLE库来实验创作的两处困难:

1.使用官方BLE库创作实验,只能传输float浮点型数据,不能传输int整型、char字符或字符数组。官方BLE库没给其他类型数据的接口函数。大概官方以为Phyphox里面没有字符或字符数组类型变量,因此也就无需创作者使用这些类型。

2.使用官方BLE库创作实验,最多只能传输5个浮点型变量,算上时间,最多6个。在官方库的源码里:

void PhyphoxBLE::write(float& f1, float& f2, float& f3, float& f4)
{
  float array[4] = {f1, f2, f3, f4};
  data = reinterpret_cast<uint8_t*>(array);
  dataCharacteristic->setValue(data,16);
  dataCharacteristic->notify();
}

官方源码为什么要这样一个一个的函数重写来实现传输数据的用意,我们难于知道;但是,Phyphox Editor里面允许用户传输有格式字符串formattedString,并指示出预先设定的分隔符separator。如果我们在传输数据时,把多个传感器的测量数据提前拼接成字符串,再使用formattedString传输,由Phyphox Editor拆分开,也就实现了多数据传输了。

这里只测试字符串,以示道理。

仍然使用ESP32 BLE Arduino里的BLE_notify.ino修改。不改动的部分,以……表示。

原来的代码:

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;

uint8_t value = 0;//这里需要改动

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

……

void loop() {//以下需要改动
    // notify changed value
    if (deviceConnected) {
        pCharacteristic->setValue(&value, 1);
        pCharacteristic->notify();
        value++;
        delay(10); 

    }
    ……
}

改动后的代码:

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;

std::string value = "";

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

……

void loop() {
    value = "12345.67";
    delay(500);
    // notify changed value
    if (deviceConnected) {
        pCharacteristic->setValue(value);        
        pCharacteristic->notify();
//        value++;
        delay(3); 
    }

……
}

到Phyphox editor里面:

运行效果:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章