0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在鴻蒙上使用Python進(jìn)行物聯(lián)網(wǎng)編程

OpenHarmony技術(shù)社區(qū) ? 來源:鴻蒙技術(shù)社區(qū) ? 作者:唐佐林 ? 2021-09-28 09:55 ? 次閱讀

在上一篇帖子《使用 Python 開發(fā)鴻蒙設(shè)備程序(1-GPIO 外設(shè)控制)》中,已經(jīng)成功的使用 Python 對(duì) GPIO 上的外設(shè)進(jìn)行了控制。

這其實(shí)不是什么大不了的事,從功能的角度也著實(shí)不值得炫耀!然而,這卻是非常重要的一步:在鴻蒙上用使用 Python 進(jìn)行物聯(lián)網(wǎng)編程是可行的?。?!

既然可行,加上 Python 語言天生的優(yōu)勢(shì)(易于掌握,開發(fā)效率高),那么真的值得持續(xù)打造,將鴻蒙上的 Python 進(jìn)行到底。

所以,今天的主題就是利用 GPIO 搭配 I2C 對(duì)外設(shè)進(jìn)行編程。主要內(nèi)容為:通過控制“智慧農(nóng)業(yè)”外設(shè)板上的傳感器,獲取當(dāng)前環(huán)境的溫度和濕度。

這塊外設(shè)板上的 SHT30 是一個(gè)溫度濕度傳感器,它通過 I2C 與主控板(Hi3861)進(jìn)行連接。

因此,SHT30 是一種 I2C 設(shè)備,只需要通過 I2C 接口就能輕易對(duì)它進(jìn)行控制。

什么是 I2C?一般能查到的定義都會(huì)是:I2C(Inter-Integrated Circuit)是一種由 PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。

所以,把 I2C 直接看作總線是 OK 的,即:SHT30 與 Hi3861 直接通過 I2C 總線相連。

除此之外,也可以把 I2C 看作一種通信協(xié)議,即:SHT30 與 Hi3861 通過 2 根信號(hào)線連接在一起,并遵守預(yù)定義的規(guī)則,進(jìn)而能夠交換信息。

那么,是不是在開發(fā)板上有 I2C 專用的物理線路呢?

答案是:沒有!開發(fā)板已經(jīng)提供了一堆用于普適輸入輸出的 GPIO 了,所以沒有必要為 I2C 提供專用的物理線路, 只需要復(fù)用 GPIO 即可實(shí)現(xiàn) I2C 通信!

所以,下面的代碼就有了:

cfab54a8-1fc0-11ec-82a8-dac502259ad0.jpg

在原理上,I2C 需要 2 根信號(hào)線完成設(shè)備間的通信;其中 SDA 為串行數(shù)據(jù)線,用來傳輸起始標(biāo)志,應(yīng)答標(biāo)志和數(shù)據(jù);而 SCL 為串行時(shí)鐘線,用來對(duì)設(shè)備進(jìn)行同步。

因此,在代碼層面,需要編程復(fù)用 2 個(gè) GPIO 完成對(duì) I2C 的支持。而 GPIO_0 能夠提供 I2C1_SDA 的功能,GPIO_1 能夠提供 I2C1_SCL 的功能。

所以在真正初始化 I2C1 之前需要對(duì) GPIO_0 和 GPIO_1 進(jìn)行正確的功能設(shè)置,否則,設(shè)備間無法進(jìn)行通信。

當(dāng) GPIO 的初始化完成,接下來就是對(duì) I2C1 的初始化了,方法很簡(jiǎn)單:將 I2C1 的 ID 和波特率作為參數(shù)調(diào)用 i2c_init(),可謂完全無難度。

最后,進(jìn)行設(shè)備初始化,這一步也只需要向目標(biāo)設(shè)備發(fā)送初始化命令即可,如:向 SHT30 發(fā)送 [0x22, 0x36]。

OK!相信上面的初始化代碼大家理解起來沒有問題了。那么,我們來推理一下: 有 I2C1 那么有沒有 I2C0 呢?

答案是:有!鴻蒙 L0 設(shè)備目前通過復(fù)用 GPIO 的方式提供 2 個(gè) I2C 供使用。

當(dāng)初始化正確完成,接下來就是讀取 SHT30 上的實(shí)時(shí)數(shù)據(jù)了!

d01753ba-1fc0-11ec-82a8-dac502259ad0.jpg

上面的代碼非常簡(jiǎn)潔,但似乎不那么好理解!

沒關(guān)系,我們先來熟悉一下目前 Python 提供的 I2C 接口函數(shù)。

d06842a2-1fc0-11ec-82a8-dac502259ad0.jpg

有了這個(gè)表格,我們很容易就能理解上面的代碼片段了,即:先向 I2C1 上的 SHT30 發(fā)送讀取命令 [0xE0, 0x00],然后再從設(shè)備讀取 6 個(gè)字節(jié)的數(shù)據(jù)。如果函數(shù)執(zhí)行成功,那么可得到從設(shè)備返回到的溫濕度數(shù)據(jù)。

完整交互過程如下圖所示:

d0d23a22-1fc0-11ec-82a8-dac502259ad0.jpg

這里對(duì) SHT30 返回的數(shù)據(jù)做一點(diǎn)說明。如果讀取成功,SHT30 會(huì)返回 6 個(gè)字節(jié)的數(shù)據(jù),其中前 3 個(gè)字節(jié)表示溫度數(shù)據(jù),后 3 個(gè)字節(jié)表示濕度數(shù)據(jù)。

并且,d[2] 和 d[5] 分別表示溫度和濕度的校驗(yàn)字節(jié),通過這兩個(gè)字節(jié)即可判斷讀取到的溫濕度數(shù)據(jù)是否有效(注:本文的示例中,為了方便大家理解,沒有做數(shù)據(jù)校驗(yàn)的工作。)

最后就是溫濕度數(shù)據(jù)的轉(zhuǎn)換了,方法如下:

d133ff14-1fc0-11ec-82a8-dac502259ad0.jpg

有了這些的工作,下面就只需要循環(huán)調(diào)用 read() 即可完成最終目標(biāo):獲取當(dāng)前環(huán)境溫濕度。

d197d5a2-1fc0-11ec-82a8-dac502259ad0.jpg

最后的運(yùn)行結(jié)果如下:

d1f4a976-1fc0-11ec-82a8-dac502259ad0.jpg

更新提示:這個(gè)版本的實(shí)現(xiàn)同時(shí)支持 1.0 和 1.1 的代碼,因此,大家需要根據(jù)代碼版本編譯 dt_python_demo。

將 dt_python_demo 拷貝到應(yīng)用目錄:

1.0:。/applications/sample/wifi-iot/app

1.1:。/applications/sample/BearPi/BearPi-HM_Nano

修改 app 模塊的任務(wù)列表:

1.0:。/applications/sample/wifi-iot/app/BUILD.gn

1.1:。/applications/sample/BearPi/BearPi-HM_Nano/BUILD.gn

libdtpython.a 路徑:

1.0:。/vendor/hisi/hi3861/hi3861/build/libs

1.1:。/device/bearpi/bearpi_hm_nano/sdk_liteos/build/libs

根據(jù)代碼版本修改 BUILD.gn:

d26c3c3e-1fc0-11ec-82a8-dac502259ad0.jpg

Enjoy it!

代碼開源地址:

https://gitee.com/delphi-tang/python-for-hos

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2909

    文章

    44635

    瀏覽量

    373388
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84690
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2634

    瀏覽量

    66348

原文標(biāo)題:將鴻蒙上的Python進(jìn)行到底!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用Python進(jìn)行串口通信的案例

    當(dāng)然!以下是一個(gè)使用Python進(jìn)行串口通信的簡(jiǎn)單示例。這個(gè)示例展示了如何配置串口、發(fā)送數(shù)據(jù)以及接收數(shù)據(jù)。我們將使用 pyserial 庫,這是一個(gè)非常流行的用于串口通信的Python庫。 首先,你
    的頭像 發(fā)表于 11-22 09:11 ?199次閱讀

    對(duì)比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語言的對(duì)比: 一、語法和易用性 Python 語法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。
    的頭像 發(fā)表于 11-15 09:31 ?316次閱讀

    socket 聯(lián)網(wǎng)中的應(yīng)用

    不同的計(jì)算機(jī)程序在網(wǎng)絡(luò)中進(jìn)行通信。它基于TCP/IP協(xié)議,提供了一種可靠的、面向連接的通信方式。聯(lián)網(wǎng)中,Socket使得設(shè)備能夠發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)程控制和監(jiān)控。 2. Sock
    的頭像 發(fā)表于 11-12 14:19 ?457次閱讀

    聯(lián)網(wǎng)學(xué)習(xí)路線來啦!

    開發(fā)的方法,成為了未來一個(gè)單片機(jī)程序員的必備技能。 3.2.2網(wǎng)絡(luò)通信協(xié)議棧 聯(lián)網(wǎng)開發(fā),離不開網(wǎng)絡(luò)的支持。作為網(wǎng)絡(luò)協(xié)議的實(shí)際統(tǒng)治者——TCP/IP,相信了解一些計(jì)算機(jī)知識(shí)的人都不陌生,單片機(jī)資源受限
    發(fā)表于 11-11 16:03

    MCU聯(lián)網(wǎng)中的應(yīng)用前景

    與網(wǎng)絡(luò)的智能化交互。聯(lián)網(wǎng)的核心在于數(shù)據(jù)的收集、傳輸、處理和應(yīng)用,而MCU在這一過程中扮演著至關(guān)重要的角色。 2. MCU聯(lián)網(wǎng)中的作用
    的頭像 發(fā)表于 11-01 13:39 ?354次閱讀

    FPGA聯(lián)網(wǎng)中的應(yīng)用前景

    FPGA(現(xiàn)場(chǎng)可編程門陣列)聯(lián)網(wǎng)中的應(yīng)用前景非常廣闊,其高度的靈活性和可編程性使其成為
    的頭像 發(fā)表于 10-25 09:22 ?474次閱讀

    什么是聯(lián)網(wǎng)技術(shù)?

    的概念最早可以追溯到1999年,由凱文·阿什頓寶潔公司提出,并用作新傳感器項(xiàng)目的演講標(biāo)題。隨著技術(shù)的不斷發(fā)展,聯(lián)網(wǎng)逐漸成為信息科技產(chǎn)業(yè)的重要組成部分。
    發(fā)表于 08-19 14:08

    使用Python進(jìn)行Ping測(cè)試

    )請(qǐng)求包,然后等待目標(biāo)主機(jī)返回響應(yīng)包,從而測(cè)量網(wǎng)絡(luò)的延遲和丟包情況。隨著Python編程語言的廣泛應(yīng)用,越來越多的網(wǎng)絡(luò)工程師開始使用Python進(jìn)行自動(dòng)化網(wǎng)絡(luò)測(cè)試和管理任務(wù)。本篇文章將
    的頭像 發(fā)表于 08-12 17:56 ?508次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>進(jìn)行</b>Ping測(cè)試

    如何使用Python進(jìn)行神經(jīng)網(wǎng)絡(luò)編程

    。 為什么使用Python? Python是一種廣泛使用的高級(jí)編程語言,以其易讀性和易用性而聞名。Python擁有強(qiáng)大的庫,如TensorFlow、Keras和PyTorch,這些庫提
    的頭像 發(fā)表于 07-02 09:58 ?410次閱讀

    PLC聯(lián)網(wǎng)中的應(yīng)用

    隨著科技的快速發(fā)展,聯(lián)網(wǎng)(IoT)技術(shù)已成為推動(dòng)工業(yè)自動(dòng)化、智能家居、智能交通等領(lǐng)域革新的重要力量。而PLC(Programmable Logic Controller,可編程邏輯控制器)作為工業(yè)
    的頭像 發(fā)表于 06-15 11:25 ?1393次閱讀

    第十八屆粵港澳聯(lián)網(wǎng)大會(huì)暨開源鴻蒙生態(tài)發(fā)展大會(huì):共筑智能未來,推進(jìn)產(chǎn)業(yè)創(chuàng)新

    科技浪潮席卷全球的今天,聯(lián)網(wǎng)與開源鴻蒙技術(shù)的交融,正在為全球產(chǎn)業(yè)帶來前所未有的發(fā)展機(jī)遇。在這個(gè)背景下,第十八屆粵港澳
    的頭像 發(fā)表于 03-26 08:31 ?682次閱讀
    第十八屆粵港澳<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>大會(huì)暨開源<b class='flag-5'>鴻蒙</b>生態(tài)發(fā)展大會(huì):共筑智能未來,推進(jìn)產(chǎn)業(yè)創(chuàng)新

    純血鴻蒙系統(tǒng),拿什么與安卓、iOS比?

    ArkUI …… 2、鴻蒙進(jìn)階 Stage模型 網(wǎng)絡(luò)、數(shù)據(jù)管理 一次開發(fā)多段部署 …… 3、鴻蒙多媒體技術(shù) 音頻 視頻 相機(jī) 圖片 …… 4、鴻蒙南向與驅(qū)動(dòng)開發(fā)
    發(fā)表于 02-21 21:04

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:Hi3861鴻蒙開發(fā)板及入門常見問題解答

    華清遠(yuǎn)見20歲了~過去3年里,華清遠(yuǎn)見研發(fā)中心針對(duì)個(gè)人開發(fā)板業(yè)務(wù),打造了多款硬件+項(xiàng)目學(xué)習(xí)套件,涉及STM32單片機(jī)、嵌入式、聯(lián)網(wǎng)、人工智能、鴻蒙、ESP32、阿里云IoT等多技術(shù)方向。 今天我們
    發(fā)表于 02-01 16:55

    【年度精選】2023年度top5榜單——鴻蒙技術(shù)社區(qū)問答

    學(xué)術(shù)交流方式感興趣的朋友,這無疑是一個(gè)值得參考學(xué)習(xí)的范例。 3、鴻蒙上能安裝docker嗎? 作者:cnasis 閱讀量:3478||回答數(shù):1 推薦理由: 關(guān)于是否可以鴻蒙上
    發(fā)表于 01-12 17:00

    鴻蒙聯(lián)網(wǎng)基礎(chǔ)

    關(guān)于聯(lián)網(wǎng)架構(gòu)以及鴻蒙第三方應(yīng)用庫的引用方式
    的頭像 發(fā)表于 01-08 08:37 ?534次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>基礎(chǔ)