Ameba MicroPython: [RTL8722CSM] [RTL8722DM] I2C

class I2C – 積體匯流排電路
示例
I2C 發送與接收:
• 準備材料: Ameba x 1, Arduino UNO x 1
• 步驟:
        I2C是一個微控制器上非常常見的模塊,它只需要兩根綫就可以實現最大3.4Mbps的傳輸速度。它使用主從模式,一個主機可以同時連接最多128個從機,因此經常用在微控制器與感應器之間的數據傳輸。
這裏我們使用ameba作爲主機來連接從機Arduino UNO,來驗證I2C的發送和接受。
在連接之前,請先將以下代碼上傳到Arduino UNO中,“Examples -> Wire -> Slave_receiver”
接下來,請按以下所示來連接,此處我們選擇PA_26 作爲 SDA引脚,PA_25 作爲 SCL.
注意: 目前僅支持一組I2C在MicroPython上使用,引脚如下
Unit SDA SCL
0
PA_26
PA_25
1
請一行接一行地複製粘貼以下代碼到REPL上,來觀察代碼效果。
from machine import Pin, I2C
i2c = I2C(scl = "PA_25", sda = "PA_26", freq=100000) # configure I2C with pins and freq. of 100KHz
i2c.scan()
i2c.writeto(8, 123) # send 1 byte to slave with address 8
i2c.readfrom(8, 6) # receive 6 bytes from slave
API 文件
構造函數
I2C(unit_id [選填], “sda_pin” [必填], “scl_pin” [必填], frequency [選填])
創建一個I2C對象並關聯其到所給的引脚上,使用別的參數來配置該對象。如此便可在I2C上發送以及接收數據。
• unit_id: 硬件I2C的組號, 如不填則使用默認值
• “sda_pin”: SDA引脚名
• “scl_pin”: SCL引脚名
• frequency: I2C 的運行頻率, 如不填則使用默認值
注意:所有選填參數的默認值如下
參數 默認值
Unit_id
0
Frequency
100000 (Hz)
方法
I2C.reset()
該方法取消I2C 設備的初始化.
 
I2C.scan()
該方法掃描並返回可用I2C地址.
 
I2C.readinto( buf [必填], flag [選填])
該方法讀取I2C緩存器中的數據並存入用戶定義的緩存器中
• buf: 一個string / array /byte array 類型的緩存器
• flag: 一個布爾標記, 如果是True則在數據末尾發送 NACK, 反則反之
 
I2C.write(buf [必填])
該方法發送已存在buf中的數據
• buf: 一個string / array /byte array 類型的緩存器
 
I2C.readfrom(addr [required], len [required], stop [optional])
該方法從所給的地址上讀取len長度的數據。如果stop值爲真,則在傳輸結尾發送STOP字節。
• addr: 讀取的地址
• len: 要讀取的數據長度
• stop: 布爾標記,若True則在傳輸結束發送STOP字節
 
I2C.readfrom_into(addr [必填], buf [必填], stop [選填])
該方法從所給的地址上讀取數據並存入用戶自建的緩存器中,如果stop值爲真,則在傳輸結尾發送STOP字節。
• addr: 讀取的地址
• buf: 一個string / array /byte array 類型的緩存器
• stop: 布爾標記,若True則在傳輸結束發送STOP字節
 
I2C.writeto(addr [必填], value [必填], stop [選填])
該方法發送一個整數數據到所給的地址上。如果stop值爲真,則在傳輸結尾發送STOP字節。
• addr: 讀取的地址
• value: 要發送的整數數值
• stop: 布爾標記,若True則在傳輸結束發送STOP字節
請先確認已安裝QQ通訊軟體