今天為大家隆重介紹一位 Py4OH 家族的新成員 – 小凌派開發(fā)板,目前已經(jīng)進(jìn)入 Py4OH 主線,基于 OpenHarmoy 3.0 LTS 并完整支持 Py4OH 所有特性。
小凌派開發(fā)板是一款由福州市凌睿智捷電子有限公司基于OpenHarmony打造的L0級(jí)物聯(lián)網(wǎng)開發(fā)板,采用E53接口標(biāo)準(zhǔn),可接入所有的E53案例擴(kuò)展板:
支持 IEEE 802.11b/g/n 制式,AP 模式
小凌派提供了多個(gè)好玩的擴(kuò)展板,比如:智慧手勢(shì)擴(kuò)展板,智慧農(nóng)業(yè)擴(kuò)展板,有了這些擴(kuò)展板,我們可以來(lái)做點(diǎn)有意思的東西。
做點(diǎn)什么呢?嗯,空氣質(zhì)量監(jiān)控系統(tǒng)!!!
智慧農(nóng)業(yè)擴(kuò)展板上集成了溫濕度傳感器SHT30,LED燈,直流電機(jī),而溫濕度傳感器SHT30可以說(shuō)是為我們的空氣質(zhì)量監(jiān)控系統(tǒng)量身打造:當(dāng)環(huán)境溫度在體感舒適度(大約18-25攝氏度)之外,則LED警報(bào)指示燈開始閃爍;否則關(guān)閉LED警報(bào)指示燈。
實(shí)現(xiàn)思路:開發(fā)板上電后,先進(jìn)行必要的初始化,然后每隔1秒通過(guò)SHT30獲取當(dāng)前環(huán)境的溫度和濕度;當(dāng)溫度處于體感舒適度時(shí)關(guān)閉LED燈,否則改變LED燈的狀態(tài)(閃爍)。
有了實(shí)現(xiàn)思路就可以很輕松的畫出設(shè)計(jì)圖。
首先就是交互圖。交互圖可以幫助我們理清楚開發(fā)板與擴(kuò)展板之間的關(guān)系,這是至關(guān)重要的,只有理清楚關(guān)系才可能從代碼層面出發(fā),想明白先做什么再做什么。
從上面的交互圖可以看出,在開發(fā)板一側(cè)需要一個(gè)程序變量代表擴(kuò)展板上的SHT30傳感器,同時(shí)也需要一個(gè)程序變量代表擴(kuò)展板上的LED燈。有了這兩個(gè)變量,就可以直接獲取溫度數(shù)據(jù)和濕度數(shù)據(jù),并且可以輕松愉快的控制LED燈狀態(tài)了!!!
嗯,這是什么?同學(xué)們!!這是面向?qū)ο?a target="_blank">編程啊。
Py4OH使用的是Python語(yǔ)言進(jìn)行設(shè)備開發(fā),而Python語(yǔ)言完美支持面向?qū)ο缶幊贪。?/p>
這又能怎樣?這就可以簡(jiǎn)化編程了!!
不信??來(lái),看看下面的流程圖!
整個(gè)流程圖描述的邏輯是非常簡(jiǎn)單的,僅僅是表達(dá)了我們想做的東西。相信大家也看出來(lái)了,“簡(jiǎn)單”是依賴于 th 和 light 所具備的能力,這兩個(gè)變量(對(duì)象)所對(duì)應(yīng)的類型將SHT30與LED的復(fù)雜性及控制邏輯全部隱藏,使得它們變成了黑盒,我們只需要知道如何使用即可!
OK!鋪墊已經(jīng)足夠,是時(shí)候展示真正的技術(shù)了!
import pin
import sht30
import gpio
import os
i2cx = 0 # SHT30是一種i2c設(shè)備,位于0號(hào)i2c上
freq = 400000 # i2c通信頻率
sda = gpio.make_id([0, 'A', 0]) # 計(jì)算sda所對(duì)應(yīng)的引腳號(hào)
scl = gpio.make_id([0, 'A', 1]) # 計(jì)算scl所對(duì)應(yīng)的引腳號(hào)
th = sht30.SHT30(i2cx, sda, scl, freq) # 創(chuàng)建名為th的SHT30對(duì)象
th.open() # 通過(guò)th對(duì)象打開SHT30設(shè)備
lpin = gpio.make_id([0, 'A', 2]) # 計(jì)算接入LED燈的引腳號(hào)
light = pin.Pin(lpin) # 創(chuàng)建LED燈對(duì)象
while True :
t = th.temperature() # 獲取溫度數(shù)據(jù)
h = th.humidity() # 獲取濕度數(shù)據(jù)
if t != None :
print('temperature = ' + str(t))
if h != None :
print('humidity = ' + str(h))
if (18 <= t) and (t <= 25) :
light.low() # 若當(dāng)前溫度在體感舒適度范圍內(nèi),則關(guān)閉LED燈
else :
light.change() # 若當(dāng)前溫度不在體感舒適度范圍內(nèi),則改變LED燈的狀態(tài),即:閃爍
os.sleep(1)
(左右移動(dòng)查看全部?jī)?nèi)容)
很明顯,LED燈不是第一次出現(xiàn)我的文章中,SHT30也不是!如果有同學(xué)對(duì)它們的驅(qū)動(dòng)方式還不熟悉,可以參考我之前的兩篇帖子《使用Python開發(fā)鴻蒙設(shè)備程序(1-GPIO外設(shè)控制)》和《使用Python開發(fā)鴻蒙設(shè)備程序(2-I2C應(yīng)用實(shí)例)》,在這里重點(diǎn)強(qiáng)調(diào)的是使用面向?qū)ο蠹夹g(shù)對(duì)它們進(jìn)行封裝,增加代碼復(fù)用性。
要面向?qū)ο蠓庋b,必須的,先定義接口!
'''
This is just a demo for interface definition.
'''
class Pin:
is_high = False
def __init__(self, pin_num):
pass
def high(self):
self.is_high = True
def low(self):
self.is_high = False
def status(self):
return 1 if self.is_high else 0
def change(self):
if self.is_high:
self.low()
else:
self.high()
def __del__(self):
pass
class SHT30:
sht30_addr = 0x44
write_cmd = (sht30_addr << 1) | 0x00
read_cmd = (sht30_addr << 1) | 0x01
def __init__(self, i2cx, sda, scl, freq):
pass
def open(self):
pass
def close(self):
pass
def temperature(self):
return None
def humidity(self):
return None
def __del__(self):
pass
(左右移動(dòng)查看全部?jī)?nèi)容)
由于實(shí)現(xiàn)細(xì)節(jié)太多,大家可以在附件中直接下載完整代碼自行參考學(xué)習(xí)。
看到這,是不是覺得我有炒冷飯的嫌疑?!
又拿LED燈和SHT30溫濕度傳感器來(lái)寫水文!!
哈哈!如果你這么想,那么請(qǐng)看看標(biāo)題,,,這只是《上》,還有《下》呢!!
下一篇文章,我會(huì)帶著大家將其它設(shè)備接入小凌派開發(fā)板,然后編程獲取當(dāng)前環(huán)境的PM2.5和PM10數(shù)據(jù),并在數(shù)據(jù)不理想時(shí)啟動(dòng)直流電機(jī)(風(fēng)扇)對(duì)空氣質(zhì)量進(jìn)行調(diào)整。
最后,給大家展示一下Py4OH命令行的輸出。
To be continued...
更多熱點(diǎn)文章閱讀
原文標(biāo)題:【開源樣例】Py4OH:自制開源鴻蒙空氣質(zhì)量監(jiān)控系統(tǒng)(上)
文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電子技術(shù)
+關(guān)注
關(guān)注
18文章
906瀏覽量
56161 -
電子發(fā)燒友論壇
+關(guān)注
關(guān)注
4文章
197瀏覽量
1120
原文標(biāo)題:【開源樣例】Py4OH:自制開源鴻蒙空氣質(zhì)量監(jiān)控系統(tǒng)(上)
文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論