27.3.4.2內(nèi)核下的I2C驅(qū)動(二)
895
2025-03-31
1 云端開發(fā)
首先進入華為云官網(wǎng),登陸華為云賬號,進入IoTDA(設(shè)備接入),點擊產(chǎn)品,創(chuàng)建產(chǎn)品。
圖1
按照下圖,自定義產(chǎn)品名稱、廠商名稱以及設(shè)備類型。
圖2
點擊產(chǎn)品,在右側(cè)產(chǎn)品名稱列表中點擊上述創(chuàng)建的產(chǎn)品名稱,進入產(chǎn)品,點擊上傳模型文件,選擇添加文件,將附件(Agriculture_Profile)中的模型文件壓縮包上傳到云端。
圖3
點擊上述產(chǎn)品中的在線調(diào)試,新增測試設(shè)備,注意設(shè)備標識碼保持唯一性。
圖4
創(chuàng)建設(shè)備后,會出現(xiàn)設(shè)備ID和產(chǎn)品秘鑰,請保存好設(shè)備秘鑰,或者點擊左側(cè)導航欄,進入設(shè)備列表,在“所有設(shè)備”中找到新增的真實設(shè)備,進行重置秘鑰。注意設(shè)備ID和設(shè)備秘鑰是設(shè)備對接華為云的關(guān)鍵信息,后面會用到二者進行設(shè)備鑒權(quán)。
圖5
2 模組開發(fā)環(huán)境安裝(如已經(jīng)安裝略過該步驟)
下載RDA驅(qū)動,根據(jù)系統(tǒng)環(huán)境進行選擇對應(yīng)系統(tǒng)版本安裝,之后參考官方文檔進行開發(fā)環(huán)境搭建,QuecPython開發(fā)環(huán)境搭建
3端側(cè)開發(fā)
將下述腳本燒錄到開發(fā)板,點擊運行。需要將圖5中的設(shè)備ID和設(shè)備秘鑰替換為華為云IoTDA中的設(shè)備信息
圖6
import utime import _thread import ujson import modem import hmac from hashlib import sha256 from umqtt import MQTTClient from machine import UART # 如果想使用IMEI,可通過下列語句該進行獲取IMEI號 IMEI = modem.getDevImei() # 客戶只需要提供DeviceID和DeviceSecret即可實現(xiàn)對接華為云 DeviceID = "62183fafe68aa647c087eee6_cat_test227" DeviceSecret = "4fd113fbbdd5dcbe1a93091ce4ea1829" TIME_STAMP = str(utime.time()) CLIENT_ID = DeviceID + "_0_0_"+ TIME_STAMP SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com" PORT = 1883 USER = DeviceID PASSWORD = hmac.new( TIME_STAMP.encode('utf-8'), DeviceSecret.encode('utf-8'), digestmod=sha256).hexdigest() state = 0 utime.time() def sub_cb(topic, msg): global state global c #global state print("Subscribe Recv: Topic={},Msg={}".format(topic.decode(),msg.decode())) topic = topic.decode() msg = b'''{"result_code": 0}''' if r'/sys/commands/request_id=' in topic: c.publish('$oc/devices/{}/sys/commands/response/request_id={}'.format(DeviceID, (topic.split("=")[-1])), msg) #state = 1 def mqtt_init(): global c # 創(chuàng)建一個mqtt實例 c = MQTTClient( client_id=CLIENT_ID, server=SERVER, port=PORT, user=USER, password=PASSWORD, keepalive=30) # 必須要 keepalive=30 ,否則連接不上 # 設(shè)置消息回調(diào) c.set_callback(sub_cb) # 建立連接 c.connect() c.subscribe('$oc/devices/{}/sys/commands/#'.format(DeviceID)) # 數(shù)據(jù)上報任務(wù) def thread_reportmsg(): global c while True: tem = utime.time() % 25 hum = utime.time() % 35 lum = utime.time() % 100 Msg = { "services": [{ "service_id": "Agriculture", "properties": { "Temperature": tem, "Humidity": hum, "Luminance": lum, "LightStatus": "ON", "MotorStatus": "OFF" } }] } msg = ujson.dumps(Msg) c.publish('$oc/devices/{}/sys/properties/report'.format(DeviceID), msg) utime.sleep_ms(2000) # 命令處理任務(wù) def thread_rcvmsg(): global c print('Waiting command') while True: c.wait_msg() if state == 1: utime.sleep_ms(300) break # 斷開連接函數(shù)沒有執(zhí)行,函數(shù)中沒有將state置為1,如果想增加斷開連接,可以在某處增加斷開連接 c.disconnect() def main(): mqtt_init() _thread.start_new_thread(thread_reportmsg, ()) _thread.start_new_thread(thread_rcvmsg, ()) if __name__ == "__main__": main()
可以看見在云端看到設(shè)備在線同時將模擬數(shù)據(jù)上傳到華為云。
圖7
如果想看到數(shù)據(jù)一一對應(yīng)的關(guān)系,可以在上述代碼中添加打印日志,將msg打印出來實現(xiàn)對照具體如下圖所示。可見上報消息與端側(cè)打印的日志是一致的。
圖8
圖9
點擊同步命令下發(fā)下的命令下發(fā),選擇命令以及命令值,進行命令下發(fā)
圖10
點擊命令下發(fā),可見命令下發(fā)成功。
圖11
同時在設(shè)備側(cè)控制臺可以看見日志打印信息。
圖12
附件: Agriculture_Profile.zip 1.29KB 下載次數(shù):1次
Python 硬件開發(fā) 設(shè)備接入 IoTDA
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。