【安信可BW16-Kit开发板】BLE应用—温度测量与显示
在《【安信可BW16-Kit开发板】DHT11应用》和《【安信可BW16-Kit开发板】WifiWebClient应用》中分别介绍了利用安信可BW16-Kit开发板进行温度测试和wifi应用,本篇介绍一下安信可BW16-Kit开发板在ArduinoIDE下的BLE应用示例。有关BW16-Kit开发板基本性能和Arduino开发环境搭建不在赘述。
一、BLE应用开发示例
- 按下图连接好线路,注意BW16-Kit开发板DHT11信号线连接A26引脚。
- ArduinoIDE环境下选择开发板为Ameba。
- 选择“Tools” -> “Board” -> “Arduino Ameba”
- 然后打开AmebaBLE下的DHT over BLEUart示例,“Files”->“Examples” ->“AmebaBLE”->“DHT_over_BLEUart”。
- 程序如下
/*
Example
*/
#include "BLEDevice.h"
#include "DHT.h"
#define UART_SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
#define STRING_BUF_SIZE 100
#define DHTPIN 8
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
BLEService UartService(UART_SERVICE_UUID);
BLECharacteristic Rx(CHARACTERISTIC_UUID_RX);
BLECharacteristic Tx(CHARACTERISTIC_UUID_TX);
BLEAdvertData advdata;
BLEAdvertData scndata;
bool notify = false;
void writeCB (BLECharacteristic* chr, uint8_t connID) {
Serial.print("Characteristic ");
Serial.print(chr->getUUID().str());
Serial.print(" write by connection ");
Serial.println(connID);
if (chr->getDataLen() > 0) {
Serial.print("Received string: ");
Serial.print(chr->readString());
Serial.println();
}
}
void notifCB(BLECharacteristic* chr, uint8_t connID, uint16_t cccd) {
if (cccd & GATT_CLIENT_CHAR_CONFIG_NOTIFY) {
Serial.print("Notifications enabled on Characteristic");
notify = true;
} else {
Serial.print("Notifications disabled on Characteristic");
notify = false;
}
Serial.print(chr->getUUID().str());
Serial.print(" for connection");
Serial.println(connID);
}
void setup() {
Serial.begin(115200);
advdata.addFlags();
advdata.addCompleteName("AMEBA_BLE_DEV");
scndata.addCompleteServices(BLEUUID(UART_SERVICE_UUID));
Rx.setWriteProperty(true);
Rx.setWritePermissions(GATT_PERM_WRITE);
Rx.setWriteCallback(writeCB);
Rx.setBufferLen(STRING_BUF_SIZE);
Tx.setReadProperty(true);
Tx.setReadPermissions(GATT_PERM_READ);
Tx.setNotifyProperty(true);
Tx.setCCCDCallback(notifCB);
Tx.setBufferLen(STRING_BUF_SIZE);
UartService.addCharacteristic(Rx);
UartService.addCharacteristic(Tx);
BLE.init();
BLE.configAdvert()->setAdvData(advdata);
BLE.configAdvert()->setScanRspData(scndata);
BLE.configServer(1);
BLE.addService(UartService);
BLE.beginPeripheral();
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
String msg = ("Humidity: " + String((int) h) + "%\t" + "Temperature: " + String((int) t) + "°C\n");
Tx.writeString(msg);
if (BLE.connected(0) && notify) {
Tx.notify(0);
}
delay(5000);
}
二、运行
1、打开手机蓝牙客户端,搜索到蓝牙名为AMEBA_BLE_DEV,并配对;
2、在列表中选择名为“AMEBA_BLE_DEV”,点击进入下面的界面后,选择“UNknown Service”选项;
运行结果如下: