@[toc](目录)
作者:胡领情
# 前言
在各种灾害中,火灾是最经常、最普遍地威胁公众安全和社会发展的主要灾害之一。火给人类带来文明进步、光明和温暖。但是,有时它是人类的朋友,有时是人类的敌人。失去控制的火,就会给人类造成灾难。说到火灾的控制,一套火焰感应报警系统就有其价值了。那我们如何去检测火焰呢?
本文内容主要讲述基于KHDVK-3861物联网开发板套件的火焰传感器,开发一个具有火焰感应报警功能的HarmonyOS应用,主要实现蓝牙设备扫描,连接,检测火焰,设置报警阈值。
## 1.效果演示
<img src="https://gitee.com/skh_7_0/hdev-board-fire/raw/master/img/fire.gif" alt="效果图" style="zoom: 50%;" />
## 2.环境准备
本贴不对实验环境搭建做详细说明。具体准备实验环境请参考:
1.《HarmonyOS 官方文档》,获取地址:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/installation_process-0000001071425528
2、KHDVK-3861 物联网开发板套件。
## 3.蓝牙通信说明
#### 3.1 蓝牙通信协议:
| UUID | 值 |
| :---------------------------- | :----------------------------------- |
| 服务uuid:(需要续平台保持一致) | 0000ffb0-0000-1000-8000-00805f9b34fb |
| 特征1uuid:(属性只写) | 0000ffb1-0000-1000-8000-00805f9b34fb |
| 特征2uuid:(属性只通知) | 0000ffb2-0000-1000-8000-00805f9b34fb |
#### 3.2 蓝牙通信流程:
![](https://gitee.com/skh_7_0/hdev-board-fire/raw/master/img/蓝牙通信时序图.png)
#### 3.3 数据透传协议:
##### 3.3.1 串口协议:
消息格式:
| 字段 | 长度 | 说明 |
| -------- | ---- | ------------------------------------------------------------ |
| 协议标识 | 2 | 0xA55A:固定值,HiLink 串口协议标识 |
| 协议版本 | 1 | 1~255:ver1~ver255 |
| 消息类型 | 1 | 标识消息的类型 |
| 数据长度 | 2 | 数据字段长度 |
| 数据 | N | 数据单元组 |
| 协议校验 | 1 | 从协议标识首节至协议内容尾字节求累加和后再对 256 取余数据单元组: |
| 字段 | 长度(byte) | 说明 |
| ----- | ------------ | ------------------------- |
| tagid | 2 | 根据3.3.2数据协议,自定义 |
| len | 2 | 长度对应 value 的字节数 |
| value | 1/2/4/N | hex 表示 |
##### 3.3.2 数据协议:
(permission P:APP下发;G:设备请求;R:设备上报)
| 功能名称 | tagid | len | value | permission |
| ---------------- | ------ | ---- | ----- | ---------- |
| 火焰距离 | 0x0001 | 4 | | GR |
| 火焰距离报警阈值 | 0x0002 | 4 | | PGR |
## 4.开发调试
蓝牙交互封装BleHelper工具类,通过BLE扫描和广播提供的开放能力,可以根据指定状态获取外围设备、启动或停止BLE扫描、广播。
#### 4.1 应用程序进行BLE扫描
1、MyBleCentralManagerCallback继承BleCentralManagerCallback类实现scanResultEvent和scanFailedEvent回调函数,用于接收扫描结果。
2、BleCentralManager(BleCentralManagerCallback callback)接口获取中心设备管理对象。
3、调用startScan()扫描蓝牙设备。
```java
/**
* 扫描设备
* @param filters 设备过滤器
* @since 2021-10-09
*/
public void startScan(List<BleScanFilter> filters) {
centralManager = new BleCentralManager(context, new MyBleCentralManagerCallback());
centralManager.startScan(filters);
}
/**
* 扫描设备回调
*
* @since 2021-10-09
*/
private class MyBleCentralManagerCallback implements BleCentralManagerCallback {
// 扫描结果的回调
@Override
public void scanResultEvent(BleScanResult bleScanResult) {
if (mBleManagerCallback != null) {
mBleManagerCallback.scanResultCallback(bleScanResult);
}
// 获取广播数据中的服务uuids
List<UUID> uuids = bleScanResult.getServiceUuids();
for (UUID uuid : uuids) {
if (SERVICE_UUID.equals(uuid.toString())) {
peripheralDevice = bleScanResult.getPeripheralDevice();
int length = peripheralDevice.toString().length();
String deviceId = peripheralDevice.toString().substring(length - CUT_LENGTH, length);
stopScan();
bleConnect();
}
}
}
// 扫描失败回调
@Override
public void scanFailedEvent(int event) {
HiLog.debug(loglabel, "扫描失败 scanFailedEvent()");
}
// 组扫描成功回调
@Override
public void groupScanResultsEvent(List<BleScanResult> list) {
// 使用组扫描时在此对扫描结果进行处理
}
}
```
#### 4.2 应用程序建立连接
1、扫描成功,匹配服务UUID FFB0,调用bleConnect()连接开发板蓝牙。
2、触发connectionStateChangedEvent(int connectionState)回调,connectionState=2连接成功,然后调用discoverServices()接口发现服务。
3、在回调servicesDiscoveredEvent(int status)中获取外围设备支持的服务和特征值,此时才能调用read和write方法读取或者写入对应特征值数据。
4、characteristicChangedEvent(GattCharacteristic characteristic)特征变更的回调中,解析传感器上报数据、校验等。具体数据解析逻辑在ProtocolEntity中parseCharacteristic(String hexStr)方法。
```java
/**
* 连接到BLE外围设备
*
* @since 2021-10-09
*/
public void bleConnect() {
peripheralDevice.connect(false, new BlePeripheralCallback() {
// 在外围设备上发现服务的回调
@Override
public void servicesDiscoveredEvent(int status) {
super.servicesDiscoveredEvent(status);
if (status == BlePeripheralDevice.OPERATION_SUCC) {
HiLog.debug(loglabel, "发现服务成功 servicesDiscoveredEvent()");
for (GattService service : peripheralDevice.getServices()) {
checkGattCharacteristic(service);
}
if (mBleManagerCallback != null) {
mBleManagerCallback.connectCallback(status);
}
}
}
private void checkGattCharacteristic(GattService service) {
for (GattCharacteristic tmpChara : service.getCharacteristics()) {
if (tmpChara.getUuid().equals(UUID.fromString(NOTIFY_CHARACTER_UUID))) {
// 启用特征通知
peripheralDevice.setNotifyCharacteristic(tmpChara, true);
}
if (tmpChara.getUuid().equals(UUID.fromString(WRITE_CHARACTER_UUID))) {
// 获取GattCharacteristic
writeCharacteristic = tmpChara;
}
}
}
// 连接状态变更的回调
@Override
public void connectionStateChangeEvent(int connectionState) {
super.connectionStateChangeEvent(connectionState);
if (connectionState == ProfileBase.STATE_CONNECTED && !isConnected) {
HiLog.debug(loglabel, "连接成功 connectionStateChangeEvent() connectionState:" + connectionState);
isCon
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于KHDVK-3861物联网开发板套件的火焰传感器,开发一个具有火焰感应报警功能的HarmonyOS应用,主要实现蓝牙设备扫描,连接,检测火焰,设置报警阈值。 蓝牙通信协议: UUID 值 服务uuid:(需要续平台保持一致) 0000ffb0-0000-1000-8000-00805f9b34fb 特征1uuid:(属性只写) 0000ffb1-0000-1000-8000-00805f9b34fb 特征2uuid:(属性只通知) 0000ffb2-0000-1000-8000-00805f9b34fb
资源推荐
资源详情
资源评论
收起资源包目录
hdev-board-fire-master.zip (77个子文件)
hdev-board-fire-master
gradle.properties 816B
gradle
wrapper
gradle-wrapper.jar 57KB
gradle-wrapper.properties 194B
gradlew.bat 3KB
entry
src
test
java
com
huhu
myharmony
ExampleTest.java 126B
ohosTest
java
com
huhu
myharmony
ExampleOhosTest.java 408B
main
resources
horizontal
layout
ability_main.xml 7KB
base
media
ic_adjust.png 2KB
arrow_left.png 590B
icon.png 7KB
element
float.json 1015B
string.json 2KB
color.json 540B
graphic
border_input_box.xml 281B
background_element.xml 176B
background_login.xml 220B
background_ability_ble_detail.xml 178B
background_login_can.xml 218B
background_ability_ble.xml 178B
login_dialog_bg.xml 219B
background_button.xml 215B
background_ability_contact_person.xml 178B
background_ability_home.xml 178B
layout
fraction_two.xml 371B
ability_register.xml 9KB
ability_ble_detail.xml 6KB
login_dialog.xml 1KB
ability_main.xml 7KB
alarm_dialog.xml 1KB
test_view.xml 565B
fraction_first.xml 373B
ability_ble.xml 2KB
ability_home.xml 766B
title_bar.xml 781B
ar
element
string.json 1008B
en
element
string.json 2KB
zh
element
string.json 2KB
java
com
huhu
myharmony
ble
ProtocolEntity.java 4KB
BleAbility.java 4KB
controller
BluetoothEventListener.java 1KB
BluetoothPlugin.java 11KB
BleHelper.java 13KB
BluetoothDevice.java 2KB
Constants.java 2KB
BleDetailAbility.java 371B
slice
BleDetailAbilitySlice.java 4KB
BleAbilitySlice.java 6KB
utils
Toast.java 3KB
DataUtils.java 9KB
MyApplication.java 305B
BaseAbilitySlice.java 5KB
config.json 2KB
proguard-rules.pro 45B
build.gradle 762B
.gitignore 7B
build.gradle 948B
.idea
jarRepositories.xml 1KB
vcs.xml 180B
misc.xml 215B
inspectionProfiles
Project_Default.xml 274B
compiler.xml 169B
gradle.xml 955B
.gitignore 47B
previewer
phone
phoneSettingConfig_-1216798398.json 285B
phoneSettingConfig_1430931696.json 285B
phoneSettingConfig_MateX2.json 354B
phoneSettingConfig_1274688853.json 285B
phoneSettingConfig_-42163849.json 285B
phoneSettingConfig_P40.json 285B
previewConfigV2.json 594B
previewConfig.json 120B
settings.gradle 17B
img
fire.gif 880KB
蓝牙通信时序图.png 32KB
gradlew 6KB
.gitignore 224B
README.md 15KB
共 77 条
- 1
资源评论
程序员柳
- 粉丝: 8085
- 资源: 1469
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- c89d601238f853a62af1e46d9dca8505.docx
- opencv人脸检测识别
- 数据集-目标检测系列- 凤梨 菠萝 检测数据集 pineapple >> DataBall
- 最新程序员IT简历模板,.NET Java简历模板
- 数据集-目标检测系列- 火龙果 检测数据集 pitaya >> DataBall
- 金属表面缺陷检测相关论文一则
- java 音乐播放器 音乐系统 音乐网站平台 项目源码 web ssm jsp 【项目源码+数据库脚本+项目说明】(毕设)
- 数据集-目标检测系列- 草莓 检测数据集 Strawberry >> DataBall
- 数据集-目标检测系列- 西瓜 检测数据集 watermelon>> DataBall
- 双脉冲回路中计算寄生电感
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功