<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          將鴻蒙上的 Python 進(jìn)行到底!

          共 2346字,需瀏覽 5分鐘

           ·

          2021-12-14 18:44

          關(guān)注不迷路


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

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

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

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

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

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

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

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

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


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

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

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

          當(dāng) GPIO 的初始化完成,接下來就是對 I2C1 的初始化了,方法很簡單:將 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 個 I2C 供使用。

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


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

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


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

          完整交互過程如下圖所示:
          這里對 SHT30 返回的數(shù)據(jù)做一點說明。如果讀取成功,SHT30 會返回 6 個字節(jié)的數(shù)據(jù),其中前 3 個字節(jié)表示溫度數(shù)據(jù),后 3 個字節(jié)表示濕度數(shù)據(jù)。

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

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

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


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



          更新提示:這個版本的實現(xiàn)同時支持 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:

          Enjoy it!


          代碼開源地址:
          https://gitee.com/delphi-tang/python-for-hos

          逆鋒起筆是一個專注于程序員圈子的技術(shù)平臺,你可以收獲最新技術(shù)動態(tài)最新內(nèi)測資格BAT等大廠的經(jīng)驗、精品學(xué)習(xí)資料職業(yè)路線、副業(yè)思維,微信搜索逆鋒起筆關(guān)注!

          又一本 Python 可視化好書來了!

          Python 爬蟲,看這幾本書就夠了!

          一些日常使用的 Python 技巧分享

          Python 竟然也能做這樣的進(jìn)度條。。。

          Python 暴力破解附近局域網(wǎng) WiFi 密碼



          求分享

          求點贊

          求在看

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码中文字幕视频在线观看 | 国产精品日韩欧美一级极品欧美日韩一级精品 | 精品草逼 | 大香蕉伊仁久久情色 | 俺也去com |