Python通过蓝牙获取米家温湿度计2的数据

引言

最近入手了一个米家温湿度计2,今天介绍一下如何使用Python获取它的数据。
在这里插入图片描述

实验过程

我们使用到了python的bluepy模块,用以连接蓝牙设备。

温度、湿度和电压数据获得

我们可以直接通过蓝牙直接获取温度、湿度和电压的数据,得到的为bytes格式:

temp=int.from_bytes(data[0:2],byteorder='little',signed=True)/100
humidity=int.from_bytes(data[2:3],byteorder='little')
voltage=int.from_bytes(data[3:5],byteorder='little') / 1000

电池电量百分比显示

由于设备并没有提供电池电量百分比数据,我们可以自己进行计算,公式如下:
在这里插入图片描述

米家温湿度计使用的是一个CR2032纽扣电池,首次开机测得的电池电压为3.261V(不同的设备不同,可结合自己的情况),在网上查到CR2032纽扣电池的放电曲线如下:
在这里插入图片描述
在这里插入图片描述
由图中可以得到,电池放电的截止电压约为2V,所以我们可以得到纽扣电池的电量百分比:

battery = round((voltage - 2) / (3.261 - 2) * 100, 2)

由此我们便得到了所有的数据

完整代码

from bluepy import btle
from dataclasses import dataclass

mac = "A4:C1:38:BE:C9:D5"

@dataclass
class Result:
    temperature: float
    humidity: int
    voltage: float
    battery: int = 0

class Measure(btle.DefaultDelegate):
    def __init__(self, params):
        btle.DefaultDelegate.__init__(self)
    
    def handleNotification(self, cHandle, data):
        try:
            result = Result(0,0,0,0)
            temp=int.from_bytes(data[0:2],byteorder='little',signed=True)/100
            humidity=int.from_bytes(data[2:3],byteorder='little')
            voltage=int.from_bytes(data[3:5],byteorder='little') / 1000
            battery = round((voltage - 2) / (3.261 - 2) * 100, 2)
            result.temperature = temp
            result.humidity = humidity
            result.voltage = voltage
            result.battery = battery
            print(result)
        except Exception as e:
            print(e)


def connect():
    p = btle.Peripheral(mac)
    p.writeCharacteristic(0x0038, b'\x01\x00', True) 
    p.writeCharacteristic(0x0046, b'\xf4\x01\x00', True)
    p.withDelegate(Measure("mijia"))
    return p

p = connect()

if p.waitForNotifications(3000):
    p.disconnect()

下面是我自己运营的微信小程序“但行趣事”和公众号“是雯子吖”,更多的技术文章以及视频我会放到小程序和公众号当中,有志同道合的小伙伴也可以在小程序(联系客服按钮)或者公众号(直接留言)当中联系我们

但行趣事小程序
是雯子吖公众号
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我雯子小姐的小爷

是雯子吖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值