因?yàn)榻?jīng)常在辦公室里面不知道實(shí)際室內(nèi)溫度是多少,所以用ESP32做了一個(gè)工具來進(jìn)行溫度&濕度的監(jiān)測。在之前的文章當(dāng)中,已經(jīng)完成了ESP32的數(shù)據(jù)上云工作,如果要進(jìn)行溫度/濕度的檢測。從原理上就是給ESP32連接對應(yīng)的傳感器,并把傳感器的數(shù)據(jù)上報(bào)到阿里云物聯(lián)網(wǎng)平臺(tái)。
我們先來看看效果
這樣的話,每天上班前在家里可以先看看辦公室空調(diào)是否已經(jīng)把公司的溫度提升上去,如果沒有提升上去。那說明可能空調(diào)有問題,今日的取暖只能靠抖了。
下面我們說說,這個(gè)實(shí)現(xiàn)怎么搞。首先在阿里云IOT平臺(tái)上,對我們之前的產(chǎn)品添加2個(gè)功能分別為當(dāng)前濕度和當(dāng)前溫度。
實(shí)現(xiàn)步驟如下:
根據(jù)所使用的硬件,進(jìn)行board.json的配置。 因?yàn)槲覀兊?a href="http://www.nncyjs.com/zhuanti/eXbz50" style="color:#4595e6;" target="_blank">溫度傳感器使用的是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'
}
實(shí)現(xiàn)代碼
from driver import I2C
import sht3x
def report_iot_data(temperature, humidity ):
upload_data = {'params': ujson.dumps({
'CurrentHumidity': humidity, 'CurrentTemperature':temperature })
}
device.postProps(upload_data)
print('UPDATE IOT SUCCESS!!!')
def get_light_temp_humi():
temperature = humitureDev.getTemperature()
humidity = humitureDev.getHumidity()
report_iot_data(temperature, humidity)
return temperature, humidity
i2cObj = I2C() i2cObj.open('sht3x') humitureDev = sht3x.SHT3X(i2cObj)
while True:
data = get_light_temp_humi()
utime.sleep(3)
進(jìn)行燒錄就可以了。
獲取溫度濕潤還需要使用Haas團(tuán)隊(duì)寫的一個(gè)驅(qū)動(dòng),代碼如下
sht3x.py
'''
Copyright (C) 2015-2021 Alibaba Group Holding Limited
MicroPython's driver for CHT8305
Author: HaaS
Date: 2021/09/14
'''from micropython import constimport utimefrom driver import I2C'''
# 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
'''class SHT3X(object):
# i2cDev should be an I2C object and it should be opened before __init__ is called
def __init__(self, i2cDev):
self._i2cDev = None
if not isinstance(i2cDev, I2C):
raise ValueError('parameter is not an I2C object')
# make AHB21B's internal object points to _i2cDev
self._i2cDev = i2cDev
self.start()
def start(self):
# make sure AHB21B's internal object is valid before I2C operation
if self._i2cDev is None:
raise ValueError('invalid I2C object')
# send clear status register command - 0x3041 - CMD_CLEAR_STATUS
cmd = bytearray(2)
cmd[0] = 0x30
cmd[1] = 0x41
self._i2cDev.write(cmd)
# wait for 20ms
utime.sleep_ms(20)
return 0
def getTempHumidity(self):
if self._i2cDev is None:
raise ValueError('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_L
cmd = bytearray(2)
cmd[0] = 0x24
cmd[1] = 0x0b
self._i2cDev.write(cmd)
# must wait for a little before the measurement finished
utime.sleep_ms(20)
dataBuffer = bytearray(6)
# read the measurement result
self._i2cDev.read(dataBuffer)
# print(dataBuffer)
# calculate real temperature and humidity according to SHT3X-DIS' data sheet
temp = (dataBuffer[0]<<8) | dataBuffer[1]
humi = (dataBuffer[3]<<8) | dataBuffer[4]
tempHumidity[1] = humi * 0.0015259022
tempHumidity[0] = -45.0 + (temp) * 175.0 / (0xFFFF - 1)
return tempHumidity def getTemperature(self):
data = self.getTempHumidity()
return data[0]
def getHumidity(self):
data = self.getTempHumidity()
return data[1]
def stop(self):
if self._i2cDev is None:
raise ValueError('invalid I2C object')
# stop periodic data acquisition mode
cmd = bytearray(3)
cmd[0] = 0x30
cmd[1] = 0x93
self._i2cDev.write(cmd)
# wait for a little while
utime.sleep_ms(20)
self._i2cDev = None
return 0
def __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!')
將程序代碼燒錄到開發(fā)板后,設(shè)備會(huì)聯(lián)網(wǎng),并且每3秒上報(bào)一次數(shù)據(jù)。發(fā)布的數(shù)據(jù), 我們可以在阿里云物聯(lián)網(wǎng)平臺(tái)上的設(shè)備的物模型數(shù)據(jù)中看到。
關(guān)于board.json的部分,需要根據(jù)自己采用的溫度/濕度傳感器,調(diào)整對應(yīng)的GPIO的編號(hào)就行。
上一篇:ESP32 開發(fā)環(huán)境和基本使用
下一篇:最后一頁
推薦閱讀最新更新時(shí)間:2025-06-09 10:32


設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- arduino環(huán)境下利用ESP32控制舵狗(初始位置的調(diào)試)
- LT1172HVCT、5V/1.25A 正降壓轉(zhuǎn)換器的典型應(yīng)用
- 【訓(xùn)練營】四條腿機(jī)器狗
- SG3525A 推挽式脈寬調(diào)制器控制電路的典型應(yīng)用
- LT1108CS8-12掌上電腦邏輯電源微功率DC/DC轉(zhuǎn)換器典型應(yīng)用電路
- AM2M-1515DH30-NZ ±15 Vout、2W 雙路輸出 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- LTC2945HMS 具有高達(dá) 200V 浪涌保護(hù)的堅(jiān)固型 4V 至 70V 高壓側(cè)功率監(jiān)視器的典型應(yīng)用
- 常用MCU全能燒錄器
- 【航順訓(xùn)練營】國產(chǎn)航順MCU開發(fā)學(xué)習(xí)板
- LTC3624EMSE-25 5V 輸出電壓、2A 同步降壓型穩(wěn)壓器的典型應(yīng)用,具有 1MHz、突發(fā)模式操作
- 具有備用電源監(jiān)控功能的 LTC4420IMSE 18V 雙輸入微電源路徑優(yōu)先器的典型應(yīng)用電路
- 51單片機(jī)-實(shí)踐操作
- Advanced Energy LGA110D 的直流/直流電源轉(zhuǎn)換效率優(yōu)于同級(jí)產(chǎn)品
- 臺(tái)積電上調(diào)代工費(fèi) 芯片及電子設(shè)備價(jià)格上漲或持續(xù)至 2022 年
- 2021軟件百強(qiáng)企業(yè)前五:中興通訊“軟實(shí)力”突顯
- 西安封鎖擾亂DRAM/NAND生產(chǎn) 價(jià)格跌幅縮小至8%
- STM32F103單片機(jī)modbus通信示例
- 初學(xué)stm32-通用定時(shí)器的使用
- 單片機(jī)(MCU)如何才能不死機(jī)之對齊訪問(Aligned Access)
- 汽車轉(zhuǎn)向控制燈電路設(shè)計(jì)要點(diǎn)及原理
- Samtec應(yīng)用科普 | C-V2X技術(shù)在汽車領(lǐng)域的應(yīng)用
- 尼得科運(yùn)動(dòng)&能源事業(yè)本部在印度卡納塔克邦胡布利舉行新工廠竣工儀式
- 貿(mào)澤開售Qorvo適用于5G和mMIMO應(yīng)用的新型QPA9822線性5G高增益/高驅(qū)動(dòng)放大器
- 邊緣計(jì)算網(wǎng)關(guān)工業(yè)物聯(lián)網(wǎng)應(yīng)用:空壓機(jī)遠(yuǎn)程運(yùn)維監(jiān)控管理
- 納芯微電子工業(yè)控制、機(jī)器人解決方案器件選型概述
- 使用瑞薩電子RZ/T2H產(chǎn)品實(shí)現(xiàn)多關(guān)節(jié)機(jī)器人
- 新能源純電動(dòng)汽車無法行駛故障分析
- AI玩具,還是AI工具?
- 能效比達(dá)2TOPS/W!解密邊緣AI芯片低功耗設(shè)計(jì)之法
- 宜科PLC+伺服解決方案推動(dòng)智能制造行業(yè)革新
- 探討校準(zhǔn)溫度校驗(yàn)儀的方法
- Klashwerks公司Raven互聯(lián)車載系統(tǒng)功能全解析
- 使用終端仿真器UEE完成 5G 基站測試,是什么體驗(yàn)?
- 都說ADAS安全第一,可是誰來保障ADAS的安全?
- 怎樣測量小于-60dBm的射頻信號(hào)功率?
- 讓半導(dǎo)體排行榜洗牌的存儲(chǔ)器,2017年的市場表現(xiàn)到底如何?
- 細(xì)分領(lǐng)域“異軍突起” 工業(yè)機(jī)器人產(chǎn)業(yè)日趨成熟
- 寫于“中興事件”之后 誰才是中國芯片的未來
- MCU為何會(huì)一再成為焦點(diǎn)?
- 中國制造 還缺哪些“芯”?
- 是否有控件或皮膚可以使WINCE開發(fā)的軟件界面美化,比如MagicSkin,AppFace等?
- 喜添新內(nèi)褲,散分散分~~~~~~
- 合格的電子工程師需要掌握的知識(shí)和技能
- 關(guān)于直流是否有反射電壓(電流)的問題,再請教
- TMS320C6678外部存儲(chǔ)器DDR3硬件設(shè)計(jì)以及軟件調(diào)試
- 國內(nèi)首個(gè)基于Atmel公司AT86RF212芯片的開發(fā)評估系統(tǒng)
- 求幫助
- 求STM32F107 USB HID 64位收發(fā)數(shù)據(jù)例程
- 28335通過GPADAT寄存器來改變輸出引腳電平?
- 有人做過WHQL認(rèn)證嗎?