哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

使用Python開(kāi)發(fā)OpenHarmony設(shè)備程序-I2C應(yīng)用實(shí)例分享

OpenAtom OpenHarmony ? 來(lái)源:OpenAtom OpenHarmony ? 作者:唐佐林 ? 2021-12-07 11:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在上一篇帖子《使用Python開(kāi)發(fā)OpenHarmony設(shè)備程序(1-GPIO外設(shè)控制)》中,已經(jīng)成功的使用 Python 對(duì) GPIO 上的外設(shè)進(jìn)行了控制。這是非常重要的一個(gè)里程碑:在OpenHarmony上用使用 Python 進(jìn)行物聯(lián)網(wǎng)編程。并且加上 Python 語(yǔ)言天生的優(yōu)勢(shì)(易于掌握,開(kāi)發(fā)效率高),可以通過(guò)深入打造,將OpenHarmony上的 Python 進(jìn)行到底。

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

外設(shè)板上的 SHT30 是一個(gè)溫度濕度傳感器,它通過(guò) I2C 與主控板(Hi3861)進(jìn)行連接。因此,SHT30 是一種 I2C 設(shè)備,只需要通過(guò) I2C 接口就能輕易對(duì)它進(jìn)行控制。

什么是 I2C ?一般能查到的定義都會(huì)是:I2C ( Inter-Integrated Circuit ) 是一種由 PHILIPS 公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其外圍設(shè)備。所以,可以把 I2C 直接看作總線(xiàn),即:SHT30 與 Hi3861 直接通過(guò) I2C 總線(xiàn)相連。除此之外,也可以把 I2C 看作一種通信協(xié)議,即:SHT30 與 Hi3861 通過(guò) 2 根信號(hào)線(xiàn)連接在一起,并遵守預(yù)定義的規(guī)則,進(jìn)而能夠交換信息。

按照常規(guī)想法,要使用 I2C 作為通信協(xié)議,那么必須的需要有相應(yīng)的物理連接。而在當(dāng)前的硬件設(shè)計(jì)上,通常的做法是進(jìn)行引腳復(fù)用,即:同一個(gè)物理引腳,可以用作 GPIO,也可以用來(lái)實(shí)現(xiàn) I2C 通信。

因此,在代碼層面可以復(fù)用 GPIO 實(shí)現(xiàn) I2C 通信!

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

sht30_addr = 0x44 《《 1 # SHT30 設(shè)備地址

def init(): gpio.gpio_init(0) # 初始化 GPIO_0 func = gpio.query_func_value(0, ‘I2C1_SDA’)

gpio.set_func(0, func) # 設(shè)置 GPIO_0 的功能為 I2C1_SDA # I2C1_SDA: I2C_1的串行數(shù)據(jù)線(xiàn) gpio.gpio_init(1) # 初始化 GPIO_1

func = gpio.query_func_value(1, ‘I2C1_SCL’)

gpio.set_func(1, func) # 設(shè)置 GPIO_1 的功能為 I2C1_SCL # I2C1_SCL: I2C_1的串行時(shí)鐘線(xiàn)

i2c.i2c_init(1, 400000) # 初始化 I2C_1, 波特率為 400000

i2c.write(1, sht30_addr, [0x22, 0x36]) # 向 I2C_1 上的 SHT30 發(fā)送 # 初始化命令

在原理上,I2C 需要 2 根信號(hào)線(xiàn)完成設(shè)備間的通信;其中 SDA 為串行數(shù)據(jù)線(xiàn),用來(lái)傳輸起始標(biāo)志、應(yīng)答標(biāo)志和數(shù)據(jù);而 SCL 為串行時(shí)鐘線(xiàn),用來(lái)對(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è)備間無(wú)法進(jìn)行通信。

當(dāng) GPIO 的初始化完成,接下來(lái)對(duì) I2C1 進(jìn)行初始化,方法如下:將 I2C1 的 ID 和波特率作為參數(shù)調(diào)用 i2c_init()。

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

相信上述操作初始化代碼大家可以快速理解,接下來(lái)推理另一個(gè)問(wèn)題: 除了有 I2C1,是否有 I2C0 呢?

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

當(dāng)初始化正確完成,接下來(lái)讀取 SHT30 上的實(shí)時(shí)數(shù)據(jù):

def read(): r , d = i2c.write_read(1, sht30_addr, [0xE0, 0x00], 6) if r == 0: t = (d[0] 《《 8) | d[1] # 溫度數(shù)據(jù) h = (d[3] 《《 8) | d[4] # 濕度數(shù)據(jù) return cal_t(t), cal_h(h) # 格式化數(shù)據(jù)并返回else: return None, None # 讀取失敗返回 None

上面的代碼非常簡(jiǎn)潔,但似乎不那么好理解!首先我們熟悉一下目前 Python 提供的 I2C 接口函數(shù)。

c54e372c-55c2-11ec-b2e9-dac502259ad0.png

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

完整交互過(guò)程如下圖所示:

c6005b50-55c2-11ec-b2e9-dac502259ad0.png

這里對(duì) SHT30 返回的數(shù)據(jù)做一點(diǎn)說(shuō)明。如果讀取成功,SHT30 會(huì)返回 6 個(gè)字節(jié)的數(shù)據(jù),其中前 3 個(gè)字節(jié)表示溫度數(shù)據(jù),后 3 個(gè)字節(jié)表示濕度數(shù)據(jù);并且,d[2] 和 d[5] 分別表示溫度和濕度的校驗(yàn)字節(jié),通過(guò)這兩個(gè)字節(jié)即可判斷讀取到的溫濕度數(shù)據(jù)是否有效(注:本文的示例中,為了方便大家理解,沒(méi)有做數(shù)據(jù)校驗(yàn)的工作。)

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

def cal_t(t): # 計(jì)算溫度,單位 ℃ t = t & ~0x3 t = t * 175 // 65536 - 45 return t

def cal_h(h): # 計(jì)算濕度,單位 % h = h & ~0x3 h = h * 100 // 65536 return h

完成如上工作,接下來(lái)只需循環(huán)調(diào)用 read() 即可完成最終目標(biāo):獲取當(dāng)前環(huán)境溫濕度。

while True: t , h = read() if t != None: print(‘temperature = ’ + str(t)) if h != None: print(‘humidity = ’ + str(h)) os.sleep(5)

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

c634a504-55c2-11ec-b2e9-dac502259ad0.png

更新提示

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

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

1.0:

。/applications/sample/wifi-iot/app

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

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

1.0:

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

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

3) libdtpython.a 路徑

1.0:

。/vendor/hisi/hi3861/hi3861/build/libs

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

4) 根據(jù)代碼版本修改應(yīng)用 BUILD.gn (路徑示例:。/applications/sample/BearPi/BearPi-HM_Nano/dt_python_demo/BUILD.gn)

static_library(“dt_python_demo”) { sources = [ “dt_python_demo.c”, # “sdk_adapter_1.0.c”, “test.c” ]

代碼開(kāi)源地址: https://gitee.com/delphi-tang/python-for-hos

編輯:jq

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

    關(guān)注

    28

    文章

    1562

    瀏覽量

    131642
  • 主控板
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    6104
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3967

    瀏覽量

    21329

原文標(biāo)題:使用Python開(kāi)發(fā)OpenHarmony設(shè)備程序-I2C應(yīng)用實(shí)例

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何使用 PythonI2C LCD 與 VIsionFive 一起使用?

    以使用新的 VisionFive.gpio 庫(kù)。 讓我們連接 LCD 來(lái)監(jiān)控事物 By Hamzah。 如何使用 PythonI2C LCD 與 VIsionFive 一起使用:I2c LCD 是當(dāng)今非常
    發(fā)表于 03-30 06:52

    RK3576平臺(tái)PCA9548 I2C開(kāi)關(guān)設(shè)備樹(shù)配置與生效全解析

    嵌入式開(kāi)發(fā)中,單路I2C總線(xiàn)往往無(wú)法滿(mǎn)足多外設(shè)的掛載需求,NXP的PCA9548(8通道I2C Switch)是解決該問(wèn)題的常用方案,尤其在RK3576等嵌入式平臺(tái)的攝像頭、VCM等多I2C
    的頭像 發(fā)表于 02-28 11:18 ?1751次閱讀
    RK3576平臺(tái)PCA9548 <b class='flag-5'>I2C</b>開(kāi)關(guān)<b class='flag-5'>設(shè)備</b>樹(shù)配置與生效全解析

    RK平臺(tái)I2C開(kāi)發(fā):從硬件原理到實(shí)戰(zhàn)排查

    在嵌入式開(kāi)發(fā)中,I2C 總線(xiàn)是連接外設(shè)的 “橋梁”—— 小到傳感器、EEPROM,大到 LCD 驅(qū)動(dòng)器、音頻芯片,都離不開(kāi)它的控制。而瑞芯微(Rockchip)系列芯片作為主流嵌入式方案,其 I2C 控制器的
    的頭像 發(fā)表于 02-05 13:42 ?2171次閱讀
    RK平臺(tái)<b class='flag-5'>I2C</b><b class='flag-5'>開(kāi)發(fā)</b>:從硬件原理到實(shí)戰(zhàn)排查

    I2C 為什么只要兩根線(xiàn)就能搞定通信?

    到目前為止,我們已經(jīng)討論了SPI通信和UART通信的基礎(chǔ)知識(shí),現(xiàn)在讓我們討論本系列的最后一個(gè)協(xié)議,即集成電路間協(xié)議(I2C)。如果您曾經(jīng)構(gòu)建過(guò)使用OLED顯示器、氣壓傳感器或陀螺儀/加速度計(jì)模塊
    的頭像 發(fā)表于 01-04 09:14 ?1981次閱讀
    <b class='flag-5'>I2C</b> 為什么只要兩根線(xiàn)就能搞定通信?

    基于FPGA的I2C控制模塊設(shè)計(jì)

    I2C_WRITE_WDATA.v模塊實(shí)現(xiàn)I2C寫(xiě)時(shí)序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發(fā)表于 12-26 09:48 ?5765次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設(shè)計(jì)

    AS32X601的I2C模塊操作EEPROM詳解

    國(guó)科安芯推出的AS32X601系列MCU芯片內(nèi)置的I2C模塊提供了符合工業(yè)標(biāo)準(zhǔn)的兩線(xiàn)串行制接口,可用于MCU和外部I2C設(shè)備的通訊。I2C總線(xiàn)使用兩條串行線(xiàn):串行數(shù)據(jù)線(xiàn)SDA和串行時(shí)鐘
    的頭像 發(fā)表于 12-21 21:39 ?1476次閱讀
    AS32X601的<b class='flag-5'>I2C</b>模塊操作EEPROM詳解

    I2C死鎖的問(wèn)題

    在實(shí)際使用過(guò)程中,I2C比較容易出現(xiàn)的一個(gè)問(wèn)題就是死鎖 ,死鎖在I2C中主要表現(xiàn)為:I2C死鎖時(shí)表現(xiàn)為SCL為高,SDA一直為低。 在I2C設(shè)備
    發(fā)表于 12-04 06:00

    I2C的優(yōu)點(diǎn)介紹

    位)可實(shí)現(xiàn)更快的數(shù)據(jù)傳輸,使其適合中速設(shè)備。高速模式(高達(dá)每秒 3.4Mbits)可滿(mǎn)足需要設(shè)備之間快速數(shù)據(jù)交換的高性能應(yīng)用程序的需求。選擇合適的速度模式取決于系統(tǒng)的具體要求。 同步通信:
    發(fā)表于 11-27 07:49

    I2C的缺點(diǎn)介紹

    影響信號(hào)完整性并導(dǎo)致通信錯(cuò)誤。上拉電阻值的計(jì)算取決于總線(xiàn)電容、所需上升時(shí)間和電源電壓等因素。 尋址限制: I2C 協(xié)議支持有限數(shù)量的唯一地址,通常為 7 或 10 位長(zhǎng),這限制了可連接到單個(gè)總線(xiàn)的設(shè)備
    發(fā)表于 11-27 06:10

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】I2C使用

    RA6M4有2路硬件I2C,對(duì)于應(yīng)用而言,軟件和硬件都是一樣的。 1 RT-Thread 的I2C簡(jiǎn)介 I2C(Inter Integrated Circuit)總線(xiàn)是 PHILIP
    發(fā)表于 11-09 21:58

    深入剖析I2C協(xié)議

    I2C是由Philips開(kāi)發(fā)的簡(jiǎn)單的雙向兩線(xiàn)總線(xiàn),在深入淺出理解SPI協(xié)議中,我們區(qū)分了單工,半雙工,全雙工協(xié)議數(shù)據(jù)流向的區(qū)別,根據(jù)特征,I2C協(xié)議屬于半雙工協(xié)議(即同一時(shí)刻,數(shù)據(jù)單向流動(dòng))。此外
    的頭像 發(fā)表于 08-21 15:10 ?3845次閱讀
    深入剖析<b class='flag-5'>I2C</b>協(xié)議

    第十八章 I2C通信測(cè)試

    本章介紹了I2C協(xié)議,其物理層用SDA和SCL雙線(xiàn),支持多設(shè)備:協(xié)議層含起始/停止信號(hào)、應(yīng)答機(jī)制等。還講解W55MH32的I2C外設(shè)及初始化,并進(jìn)行了通信測(cè)試代碼的分析。
    的頭像 發(fā)表于 06-19 17:07 ?1432次閱讀
    第十八章 <b class='flag-5'>I2C</b>通信測(cè)試

    第十六章 一文淺談I2C

    本篇文章介紹了W55MH32的I2C總線(xiàn),其由SDA和SCL構(gòu)成,具設(shè)備尋址等特點(diǎn),協(xié)議含起始 / 停止信號(hào)等。闡述主從模式,介紹了相關(guān)例程,用于驗(yàn)證 I2C 通信功能。
    的頭像 發(fā)表于 05-28 16:07 ?1596次閱讀
    第十六章 一文淺談<b class='flag-5'>I2C</b>

    簡(jiǎn)單了解I2C接口

    在電子電路的復(fù)雜世界里,各種電路模塊設(shè)備需要相互通信才能協(xié)同工作 ,I2C接口就像是電路模塊設(shè)備間的溝通橋梁,今天就帶大家深入了解它。
    的頭像 發(fā)表于 05-08 14:15 ?2763次閱讀
    簡(jiǎn)單了解<b class='flag-5'>I2C</b>接口

    基于RT-Thread的I2C(軟件) 實(shí)踐 | 技術(shù)集結(jié)

    ,我們可以通過(guò)菜單配置工具menuconfig快速設(shè)置軟件I2C的引腳,并借助其內(nèi)部已實(shí)現(xiàn)的驅(qū)動(dòng)程序,方便快捷地完成調(diào)用與開(kāi)發(fā)。(二)FRDM-MCXA153FR
    的頭像 發(fā)表于 05-06 18:44 ?1189次閱讀
    基于RT-Thread的<b class='flag-5'>I2C</b>(軟件) 實(shí)踐 | 技術(shù)集結(jié)
    馆陶县| 龙南县| 东兰县| 册亨县| 鹤峰县| 乌海市| 安西县| 雷州市| 浑源县| 双牌县| 武邑县| 普格县| 桦甸市| 佛冈县| 宣武区| 开封县| 广河县| 嵊州市| 雅安市| 和顺县| 昌乐县| 青铜峡市| 平舆县| 南华县| 沁水县| 固始县| 马关县| 涞水县| 南京市| 宜都市| 万山特区| 灵寿县| 富裕县| 连城县| 旺苍县| 镇康县| 乌什县| 湘西| 晋中市| 饶河县| 常熟市|