ESP32蓝牙BLE连接米家温湿度计

news2024/11/25 7:02:36

ESP32蓝牙BLE连接米家温湿度计

文章目录

  • ESP32蓝牙BLE连接米家温湿度计
    • 简介
    • 需要准备的东西
    • 软件调试
    • 代码实现
      • 修改查找的名称
    • 修改需要连接的服务和属性
      • 添加解析数据的代码
    • 上电演示
    • 提示

简介

最近在学习低功耗蓝牙BLE(Bluetooth Low Energy),刚好手里有个米家蓝牙温湿度计连接一下,在网上搜索了下相关资料,结合ESP32的BLE的历程完成数据获取以及对温湿度解析的工作。

需要准备的东西

  • 米家蓝牙温湿度计
  • BLE调试助手 or 谷雨蓝牙调试助手(小程序) or nRF Connect
  • ESP32开发环境

软件调试

  1. 首先我们使用谷雨蓝牙调试助手,小程序版本 搜索周边的蓝牙信号,找到名称为LWSD03MMC 的蓝牙
  2. 找到一个UUID为 EBE0CCB0打头 7DA3A6结尾 的服务
  3. 在该服务下找到UUID为EBE0CCC1打头 7DA3A6结尾的属性 权限是可读可通知
  4. 点击监听或者读取 将字符选择为16进制 等待监听一次数据

在这里插入图片描述

在这里插入图片描述

数据解析

我们收到的数据格式如下

440A357C0B

将其分开

0x44 0x0A 0x35 0x7C 0x0B

其中数据的格式是以大端模式存储的,即高位放低地址,高位放低地址 所以0x44 0x0a表示的温度信息就是 0x0a44

将其转换成10进制就是2628,对应的就是26.28℃,和表现的相差不大(更新时间的缘故),因此对于上面的数据 我们可以对他进行解析

0x0a44->温度数据->2628(DEC)->26.28℃
0x35->湿度数据->53(DEC)->53%
0x0B7C->电压数据->2940(DEC)->2.94V

在这里插入图片描述

代码实现

经过上述的讲解 我们已经可以简单的对数据进行解析,下面我们将要用ESP32的蓝牙gatt_client例程完成对蓝牙数据的解析,因为蓝牙温湿度计作为数据服务的提供者,所以是SERVER端,我们作为数据的接收者,所以是client的例程

修改查找的名称

在原本的例程中 上电会扫描周围的额蓝牙设备,直到扫描到指定名称的蓝牙设备才会停止,所以我们需要修改设备名称为LYWSD03MMC

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改需要连接的服务和属性

在代码中 是对BLE的属性做了过滤,这里我们填写上面调试得到的蓝牙UUID,注意这里是大端模式,所以上面的EB打头A6结尾就要变成A6打头EB结尾

在这里插入图片描述

添加解析数据的代码

我们在NOTIFY_EVT时间的处理中添加得到的notify信息,传入参数为收到的通知的值以及数据的长度

在这里插入图片描述

解析函数

解析函数如下所示,我们定义了一个数组,复制了传进来的数据,然后根据上面讲的大端模式,组成16位温度数据 8位湿度数据,16为电压数据 解析 让然后打印

//定义的存储数据的结构体
struct MI_SENSOR_DATA_t
{
    float temperature;
    uint8_t huminity;
    float batVoltage;
};

struct MI_SENSOR_DATA_t Mi_Sensor_data;


static void Deal_MISensor(uint8_t *rawdata,uint8_t rawdata_len)
{
    uint8_t rawdata_len_copy = rawdata_len;
    uint8_t rawdata_copy[rawdata_len_copy+2];

    uint16_t temp=0;

    memcpy(rawdata_copy, rawdata, rawdata_len_copy);
    ESP_LOGI(GATTC_My_TAG,"REC data len:%d ",rawdata_len_copy);
    esp_log_buffer_hex(GATTC_My_TAG, (unsigned char *)rawdata_copy, rawdata_len_copy);
    /*42 0a 3f 2a 0b*/
    /*0x0a42 ->温度 0x3f->湿度 0x0b2a 电量*/
    //获取温度
    temp = rawdata_copy[1];
    temp = (temp << 8)+rawdata_copy[0];
    Mi_Sensor_data.temperature=temp/100.0;
    //获取湿度
    temp &= 0x00;
    temp = rawdata_copy[2];
    Mi_Sensor_data.huminity = temp;

    //获取电池电量
    temp &= 0x00;
    temp = rawdata_copy[4];
    temp = (temp << 8)+rawdata_copy[3];
    Mi_Sensor_data.batVoltage = temp/1000.0;

    ESP_LOGI(GATTC_My_TAG,"温度:%.2f C 湿度:%d 电量:%.3f V \r\n",
            Mi_Sensor_data.temperature,
            Mi_Sensor_data.huminity,
            Mi_Sensor_data.batVoltage);
}

上电演示

在这里插入图片描述

在这里插入图片描述

提示

运行了一会儿,10分钟左右,发现电压从2.929掉到了2.885 掉电还是挺快的 如果我们更新时间比较快的话是比较耗电的,这也就是说为什么手机端的数据一个小时更新一次的原因,因此我们可以不再noitify属性,而是主动去read属性 或者设备只在需要的时候去搜索 连接 notify然后断掉,具体到的玩法后续再开发
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

总结一下 C# 如何自定义特性 Attribute 并进行应用

前言 Attribute&#xff08;特性&#xff09;是一种用于为程序元素&#xff08;如类、方法、属性等&#xff09;提供元数据信息的方法。 特性是一种声明式的信息&#xff0c;附加到程序元素上&#xff0c;提供额外的数据用于描述和控制这些元素的行为。 在编译和运行时&…

WMS系统调拨盘点功能:优化仓储管理效率

一、调拨功能概述 WMS系统的调拨功能是指仓库内部或者不同仓库之间对商品进行转移的过程。调拨的目的在于平衡库存、优化存储空间和提高物流效率。调拨功能主要包括以下几个方面&#xff1a; 1. 调拨申请&#xff1a;根据业务需求&#xff0c;仓库管理员可以发起调拨申请&…

软件设计不是CRUD(23):在流式数据处理系统中进行业务抽象落地——详细编码

&#xff08;接上文《软件设计不是CRUD&#xff08;22&#xff09;&#xff1a;在流式数据处理系统中进行业务抽象落地——设计思考》&#xff09; 4、详细设计 项目开发初期&#xff0c;有两种测速雷达和对应的摄像头需要接入&#xff0c;分别是STC500型测速雷达和TTS400型测…

《UNIX环境高级编程》第三版(电子工业出版社出品)——两年磨一剑的匠心译作

历时两年&#xff0c;《UNIX环境高级编程》的翻译工作终于落下帷幕。这一路走来&#xff0c;真可谓是如鱼饮水&#xff0c;冷暖自知。还记得最初看到招募译者消息的那一刻&#xff0c;内心的激动难以言表。我毫不犹豫地报名&#xff0c;而后经历了试译、海选等激烈的角逐&#…

TestProject Python SDK入门

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…

怎么提取视频中的音频?别错过这6个音频提取方法了!(全新)

您是否曾经发现过一个音乐很棒的视频&#xff0c;并想从视频中提取音频&#xff1f;如今&#xff0c;关于提取mp4视频中的音频需求越来越常见。例如&#xff0c;您可能想从mp4格式的电影中提取音频&#xff0c;将音乐用作手机铃声&#xff0c;或在自己的视频项目中使用视频中的…

C#唯一进程的处理Winform/WPF

C#唯一进程的处理 1.使用进程&#xff08;Process&#xff09;判断winformWPF执行效果&#xff1a; 2.使用互斥体&#xff08;Metux&#xff09;实现winformWPF实现效果&#xff1a; 在C#客户端&#xff08;Winform/WPF&#xff09;开发过程中&#xff0c;有的情况需要确保程序…

零基础入门学用Arduino 第四部分(一)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载&#xff0c;如下图 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c;xp需要下载2015之前的 点击链接Microsoft Visual C Redistributable官方版本…

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)

&#x1f375;茶艺师服务小程序&#xff1a;品味生活的茶艺新体验&#x1f331; &#x1f33f;一、引言&#xff1a;茶艺师服务小程序&#xff0c;让生活更有味 在繁忙的生活中&#xff0c;品一杯香茗&#xff0c;感受茶文化的韵味&#xff0c;是许多人向往的休闲方式。然而&…

Android开发系列(四)Jetpack Compose之Button

在Jetpack Compose中&#xff0c;Button是一个常用的用户界面组件&#xff0c;用于执行某些操作或触发某些事件。Button控件是可触摸的&#xff0c;并且通常会显示一个文本或图标来表示其功能。 要在Jetpack Compose中创建一个Button&#xff0c;可以使用Button()函数&#xf…

C#——正则表达式详情

正则表达式 正则表达式: 列如判断一个字符串是不是手机号&#xff0c;或者密码是否包含大小写数字等这些要求&#xff0c;可以把这些条件写成一个表达式 创建正则表达式 string s1 "1234adsab1KHGFJD"; // 创建正则时需要在字符串前面加上 Regex r new Regex(&q…

序列化与反序列化漏洞实例

实验环境&#xff1a; 本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目&#xff0c;我使用phpstudy集成环境将其测试环境搭建在了本地&#xff0c;如下。涉及的几个页面php为&#xff1a; index.php function.php myclass.php index.php : <?php // inde…

【Redis】java客户端(SpringData和jedis)

https://www.oz6.cn/articles/58 https://www.bilibili.com/video/BV1cr4y1671t/?p16 redis官网客户端介绍&#xff1a;https://redis.io/docs/latest/develop/connect/clients/ jedis maven引入依赖 <dependencies><!--引入Jedis依赖--><dependency><…

统计学一(术语,正态)

目录 一&#xff0c;常用术语 二&#xff0c;正态分布&#xff08;Normal Distribution&#xff09; 三&#xff0c;中心极限定理(Central Limit Theorem) 一&#xff0c;常用术语 population(族群)&#xff1a;要统计的总的 populationSize(族群数量)&#xff1a;要统计的总…

CSS【实战】抽屉动画

效果预览 技术要点 实现思路 元素固定布局&#xff08;fixed&#xff09;在窗口最右侧外部js 定时器改变元素的 right 属性&#xff0c;控制元素移入&#xff0c;移出 过渡动画 transition transition: 过渡的属性 过渡的持续时间 过渡时间函数 延迟时间此处改变的是 right …

【进阶篇-Day3:JAVA接口新特性、代码块、内部类、Lambda表达式、组件等的介绍】

目录 1、接口新特性1.1 JDK8的新特性1.2 JDK9的新特性 2、代码块2.1 代码块的定义2.2 代码块的分类 3、内部类3.1 内部类的定义3.2 内部类成员访问3.3 学习内部类的原因3.4 内部类的分类3.4.1 成员内部类3.4.2 静态内部类3.4.3 局部内部类3.4.4 匿名内部类&#xff08;1&#x…

使用自签名 TLS 将 Dremio 连接到 MinIO

Dremio 是一个开源的分布式分析引擎&#xff0c;为数据探索、转换和协作提供简单的自助服务界面。Dremio 的架构建立在 Apache Arrow&#xff08;一种高性能列式内存格式&#xff09;之上&#xff0c;并利用 Parquet 文件格式实现高效存储。有关 Dremio 的更多信息&#xff0c;…

【3D模型库】机械三维模型库整理

1 开拔网 简介&#xff1a;开拔网是中国较早的机械设计交流平台&#xff0c;广受行业内的各个大学&#xff0c;公司以及行业人士的欢迎。网站有非常丰富的3D模型&#xff0c;CAD图纸&#xff0c;以及各类热门软件的下载。同时我们也为行业搭建一个平台&#xff0c;提供各类设计…

分享:2024年(第12届)“泰迪杯”数据挖掘挑战赛省级奖项获奖名单公示

本次竞赛有评选省奖的省份有广东省、广西壮族自治区、河北省、湖北省。各省奖项依据“泰迪杯”全国评审专家组统一评阅的最终成绩区分省份后从高到低依序按比例产生。 广东省 省级奖项获奖名单公示 奖项设置&#xff1a; 一等奖&#xff1a;约占该省份队伍总数的5%&#xff0…