[Python玩轉(zhuǎn)物聯(lián)網(wǎng)]Micropython I2C實(shí)驗(yàn)

本文將介紹如何使用ESP8266 Nodemcu的I2C模塊讀取VOC傳感器模塊的VOC數(shù)據(jù)。面包板的連接如下圖:

面包板連接示意圖
ESP8266 Nodemcu引腳圖

I2C是飛利浦公司發(fā)明的一種總線協(xié)議,在硬件方面有大量的運(yùn)用,這個(gè)協(xié)議需要用到兩根數(shù)據(jù)線如下:

i2c.png

一個(gè)總線上只能有一個(gè)Master,Master負(fù)責(zé)總線的控制和仲裁。ESP 8266即可以初始化為Master也可以作為client,今天我們會(huì)使用Master功能來(lái)讀取VOC傳感器的數(shù)據(jù),GPIO14作為SDA,GPIO12作為SCL,CLK為50KHz:

import machine
voc_dev = machine.I2C(scl = machine.Pin(14), sda = machine.Pin(12), freq = 50000)

這個(gè)時(shí)候我們用scan功能可以快速確認(rèn)總線上一共有多少個(gè)設(shè)備:

print(voc_dev.scan())

結(jié)果為:[47]
所以我們可以直接讀取四個(gè)字節(jié)的結(jié)果數(shù)據(jù):

buf = voc_dev.readfrom(47, 4, True)

4個(gè)字節(jié)的數(shù)據(jù)格式如下:

數(shù)據(jù)格式.png

針對(duì)數(shù)據(jù)格式的解析我這邊用到了ustruct庫(kù)來(lái)解析:

    fmt = '>BHB'
    addr,ppm,chk_val = ustruct.unpack(fmt,buf)
    #print (addr,ppm, chk_val)
    if ppm == 65535:
        pass
    voc = ppm*0.1
    print(voc)

傳感器預(yù)熱的時(shí)候VOC的值為65535所以這個(gè)不處理,完整的代碼如下:

import machine
import ustruct
voc_dev = machine.I2C(scl = machine.Pin(14), sda = machine.Pin(12), freq = 50000)
print(voc_dev.scan())

while True:
    oc = 0.0
    buf = voc_dev.readfrom(47, 4, True)
    #print(ubinascii.hexlify(buf, ))
    fmt = '>BHB'
    addr,ppm,chk_val = ustruct.unpack(fmt,buf)
    #print (addr,ppm, chk_val)
    if ppm == 65535:
        pass
    voc = ppm*0.1
    print(voc)
    gc.collect()

運(yùn)行效果圖為:

運(yùn)行效果圖.png

以上主要講解了I2C Master的用法,關(guān)于Micropython I2C的用法請(qǐng)參考:
https://docs.micropython.org/en/latest/esp8266/library/machine.I2C.html?highlight=i2c
如果想更詳細(xì)的了解I2C協(xié)議,請(qǐng)參考:
https://en.wikipedia.org/wiki/I%C2%B2C
原文地址:http://www.lxweimin.com/p/2334368fa402

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 在使用單片機(jī)的過(guò)程中,I2C 通信可以說(shuō)是最被廣泛使用和采納的協(xié)議之一,采用 I2C 協(xié)議可以占用更少的資源,鏈接...
    noparkinghere閱讀 2,221評(píng)論 0 8
  • IIC通信實(shí)驗(yàn) IIC簡(jiǎn)介 I2C(Inter-Integrated Circuit)字面上的意思是集成電路之間,...
    btskyrmb閱讀 1,954評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評(píng)論 18 139
  • 親愛(ài)的們,這篇文章已經(jīng)決定參賽,所以會(huì)放在參賽網(wǎng)站上去。應(yīng)主編要求后面再添一些片段,所以,真正的結(jié)尾還沒(méi)有來(lái)臨哦!...
    黃泉花開(kāi)閱讀 518評(píng)論 8 4
  • 從進(jìn)入親子晨讀群,這是我第一次寫(xiě)感賞日記。感賞自己做了這個(gè)重大決策,放下自己的一些事業(yè),陪兒子到河西讀書(shū)。感謝親子...
    子云朵閱讀 220評(píng)論 1 4