(3)ESP32 Python 制作一个办公室温度计

简介: 自制ESP32温度计放在办公室,出门前先看看办公室温度再决定穿多少衣服。


因为经常在办公室里面不知道实际室内温度是多少,所以用ESP32做了一个工具来进行温度&湿度的监测。在之前的文章当中,已经完成了ESP32的数据上云工作,如果要进行温度/湿度的检测。从原理上就是给ESP32连接对应的传感器,并把传感器的数据上报到阿里云物联网平台。


我们先来看看效果

image.png

这样的话,每天上班前在家里可以先看看办公室空调是否已经把公司的温度提升上去,如果没有提升上去。那说明可能空调有问题,今日的取暖只能靠抖了。


下面我们说说,这个实现怎么搞。首先在阿里云IOT平台上,对我们之前的产品添加2个功能分别为当前湿度和当前温度。

image.png

实现步骤如下:

  1. 根据所使用的硬件,进行board.json的配置。 因为我们的温度传感器使用的是sht3x, 使用I2C,在board.json的配置如下:
{
"name": "haasedu",
"version": "1.0.0",
"io": { 
"sht3x": {
"type": "I2C",
"port": 0,
"addrWidth": 7,
"freq": 400000,
"mode": "master",
"devAddr": 68      } 
    },
"debugLevel": "ERROR",
"repl": "disable"  }
  1. 实现代码
fromdriverimportI2Cimportsht3xdefreport_iot_data(temperature, humidity ):
upload_data= {'params': ujson.dumps({
'CurrentHumidity': humidity, 'CurrentTemperature':temperature    })
    }  
device.postProps(upload_data)
print('UPDATE IOT SUCCESS!!!')
defget_light_temp_humi():
temperature=humitureDev.getTemperature()        
humidity=humitureDev.getHumidity()    
report_iot_data(temperature, humidity)
returntemperature, humidityi2cObj=I2C() 
i2cObj.open("sht3x")   
humitureDev=sht3x.SHT3X(i2cObj)    
whileTrue:
data=get_light_temp_humi()    
utime.sleep(3)


进行烧录就可以了。

获取温度湿润还需要使用Haas团队写的一个驱动,代码如下

sht3x.py

"""Copyright (C) 2015-2021 Alibaba Group Holding Limited    MicroPython's driver for CHT8305    Author: HaaS    Date:   2021/09/14"""frommicropythonimportconstimportutimefromdriverimportI2C'''# sht3x commands definations# read serial number:                            CMD_READ_SERIALNBR  0x3780     # read status register:                          CMD_READ_STATUS     0xF32D     # clear status register:                         CMD_CLEAR_STATUS    0x3041  # enabled heater:                                CMD_HEATER_ENABLE   0x306D   # disable heater:                                CMD_HEATER_DISABLE  0x3066      # soft reset:                                    CMD_SOFT_RESET      0x30A2      # accelerated response time:                     CMD_ART             0x2B32# break, stop periodic data acquisition mode:    CMD_BREAK           0x3093# measurement: polling, high repeatability:      CMD_MEAS_POLLING_H  0x2400# measurement: polling, medium repeatability:    CMD_MEAS_POLLING_M  0x240B# measurement: polling, low repeatability:       CMD_MEAS_POLLING_L  0x2416'''classSHT3X(object):
# i2cDev should be an I2C object and it should be opened before __init__ is calleddef__init__(self, i2cDev):
self._i2cDev=Noneifnotisinstance(i2cDev, I2C):
raiseValueError("parameter is not an I2C object")
# make AHB21B's internal object points to _i2cDevself._i2cDev=i2cDevself.start()
defstart(self):
# make sure AHB21B's internal object is valid before I2C operationifself._i2cDevisNone:
raiseValueError("invalid I2C object")
# send clear status register command - 0x3041 - CMD_CLEAR_STATUScmd=bytearray(2)
cmd[0] =0x30cmd[1] =0x41self._i2cDev.write(cmd)
# wait for 20msutime.sleep_ms(20)
return0defgetTempHumidity(self):
ifself._i2cDevisNone:
raiseValueError("invalid I2C object")
tempHumidity= [-1, 2]
# start measurement: polling, medium repeatability - 0x240B - CMD_MEAS_POLLING_M   # if you want to adjust measure repeatability, you can send the following commands:# high repeatability: 0x2400 - CMD_MEAS_POLLING_H# low repeatability: 0x2416  - CMD_MEAS_POLLING_Lcmd=bytearray(2)
cmd[0] =0x24cmd[1] =0x0bself._i2cDev.write(cmd)
# must wait for a little before the measurement finishedutime.sleep_ms(20)
dataBuffer=bytearray(6)
# read the measurement resultself._i2cDev.read(dataBuffer)
# print(dataBuffer)# calculate real temperature and humidity according to SHT3X-DIS' data sheettemp= (dataBuffer[0]<<8) |dataBuffer[1]
humi= (dataBuffer[3]<<8) |dataBuffer[4]
tempHumidity[1] =humi*0.0015259022tempHumidity[0] =-45.0+ (temp) *175.0/ (0xFFFF-1)
returntempHumiditydefgetTemperature(self):
data=self.getTempHumidity()
returndata[0]
defgetHumidity(self):
data=self.getTempHumidity()
returndata[1]
defstop(self):
ifself._i2cDevisNone:
raiseValueError("invalid I2C object")
# stop periodic data acquisition modecmd=bytearray(3)
cmd[0] =0x30cmd[1] =0x93self._i2cDev.write(cmd)
# wait for a little whileutime.sleep_ms(20)
self._i2cDev=Nonereturn0def__del__(self):
print('sht3x __del__')
if__name__=="__main__":
'''    The below i2c configuration is needed in your board.json.    "sht3x": {        "type": "I2C",        "port": 1,        "addrWidth": 7,        "freq": 400000,        "mode": "master",        "devAddr": 68    },    '''print("Testing sht3x ...")
i2cDev=I2C()
i2cDev.open("sht3x")
sht3xDev=SHT3X(i2cDev)
'''    # future usage:    i2cDev = I2C("sht3x")    sht3xDev = sht3x.SHT3X(i2cDev)    '''temperature=sht3xDev.getTemperature()
print("The temperature is: %f"%temperature)
humidity=sht3xDev.getHumidity()
print("The humidity is: %f"%humidity)
print("Test sht3x done!")



将程序代码烧录到开发板后,设备会联网,并且每3秒上报一次数据。发布的数据, 我们可以在阿里云物联网平台上的设备的物模型数据中看到。


image.png



关于board.json的部分,需要根据自己采用的温度/湿度传感器,调整对应的GPIO的编号就行。

目录
相关文章
|
开发框架 开发者 Python
Python+ESP32 DIY 一个【赛博朋克逗猫机】 喵喵喵?今天的主子看起来有点奇怪
Python+ESP32 DIY 一个【赛博朋克逗猫机】 喵喵喵?今天的主子看起来有点奇怪
162 1
|
传感器 运维 监控
这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备
这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备
182 0
|
移动开发 自动驾驶 网络协议
Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了
Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了
793 0
|
传感器 监控 网络协议
Python + ESP32 DIY自动感应智能皂液器 避免触摸更安全
Python + ESP32 DIY自动感应智能皂液器 避免触摸更安全
198 0
|
传感器 人工智能 开发框架
ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧
ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧
228 0
|
传感器 开发框架 人工智能
Python + ESP32 DIY炫酷的物联网远程机械臂
Python + ESP32 DIY炫酷的物联网远程机械臂
317 0
|
传感器 网络协议 物联网
HaaS Python + ESP32 打造智能洗手间 检测使用率和空气质量 帮你挑选最好的坑位
HaaS Python + ESP32 打造智能洗手间 检测使用率和空气质量 帮你挑选最好的坑位
200 0
|
传感器 安全 网络协议
【毕设参考】跌倒检测 ESP32+HaaS Python Motion API 快速打造上云的跌倒检测系统
【毕设参考】跌倒检测 ESP32+HaaS Python Motion API 快速打造上云的跌倒检测系统
238 0
|
传感器 监控 网络协议
【毕设参考】ESP32 + HaaS Python打造可以统计流量的自动感应门系统
【毕设参考】ESP32 + HaaS Python打造可以统计流量的自动感应门系统
195 0
|
监控 网络协议 安全
【毕设参考】使用ESP32 + HaaS Python 通过 Modbus 控制强电工业设备 实现低碳节能系统
【毕设参考】使用ESP32 + HaaS Python 通过 Modbus 控制强电工业设备 实现低碳节能系统
201 0