在使用代码时套用的是Arduino中的BLE代码,但是里面传输的是广播一个数字。
现在要将从模块里获得的实验数据通过蓝牙传送到手机里,而不是一个指定的数字,查了资料都是一些经典的,各位带佬指点一下!
可以将从模块获得的实验数据作为变量传递给 BLECharacteristic.setValue() 函数。以下是如何修改你的代码来传递实验数据:
首先,在 setup() 函数中定义数据变量:
float data_value = 0.0;
请注意,data_value的类型应该与你所传输的实验数据的类型相匹配。
在 loop() 函数中获取实验数据,并将其存储在变量data_value中:
// 示例代码,获取实验数据,并将其存储在变量中
data_value = read_experiment_data();
修改 sendData() 函数,将实验数据传递给蓝牙从设备。首先,将value变量定义为一个字符数组,用于存储实验数据的字符串表示:
char value[20];
请注意,数组的大小应该足够大,以容纳实验数据的字符串表示。
将data_value转换为字符串,并将其赋值给value数组:
dtostrf(data_value, 7, 2, value);
dtostrf() 函数将 data_value 转换为字符串,并将结果存储在value中。请注意,第一个参数指定要转换的值,第二个参数指定整数位数,第三个参数指定小数位数,第四个参数指定结果存储在哪个字符串数组中。
使用 setValue() 函数将value数组传递给蓝牙从设备。在这里,我们需要将value强制转换为uint8_t*类型:
experimentCharacteristic.setValue((uint8_t*)value, strlen(value));
注意,setValue()函数的第一个参数是一个指向要传输的数据的指针,第二个参数是数据的长度。
完整代码如下:
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
BLEServer* pServer = NULL;
BLECharacteristic* experimentCharacteristic = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;
float data_value = 0.0;
char value[20];
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("Experiment");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService* pService = pServer->createService(BLEUUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E"));
experimentCharacteristic = pService->createCharacteristic(
BLEUUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"),
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_WRITE_NR
);
pService->start();
BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(BLEUUID(pService->getUUID()));
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x0);
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
}
void sendData() {
dtostrf(data_value, 7, 2, value);
experimentCharacteristic->setValue((uint8_t*)value, strlen(value));
experimentCharacteristic->notify();
Serial.print("Sent Value: ");
Serial.println(value);
}
void loop() {
// 获取实验数据
data_value = read_experiment_data();
if (deviceConnected) {
sendData();
}
delay(500);
}
在上面的代码示例中,read_experiment_data()是一个函数或方法,用于从模块获取实验数据。我们还是需要根据实际情况编写此函数。
注意,由于蓝牙从设备需要以固定的速率接收数据,所以需要以合适的频率发送实验数据,以避免数据溢出或丢失。在上面的示例代码中,我们使用了delay(500)函数来控制发送数据的速率。可以根据需要或实验要求调整发送数据的频率。
写下https://dl.espressif.com/dl/package_esp32_index.json
首先可以尝试在网页上这个文件是否可以打开,如果能正常打开就没问题,直接写在“文件-》首选项”里面
如果网页打不开,那就说明这个网站被和谐了,需要用迅雷下载这个文件,直接将上面的网址在迅雷中新建,迅雷基本是可以下到的,也可以尝试其他下载软件。
下载到package_esp32_index.json文件后放置到C:\Users\Administrator\AppData\Local\Arduino15
目录下即可,这个目录可以点击首选项中进入。
到这里就设置好了开发板的管理器。