学物联网,来万物简单IoT物联网!!
I2C 介绍
- 模块功能:
I2C Master设备驱动
接口说明
I2C - 构建硬件I2C对象
- 函数原型:I2C(id, scl, sda, freq)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
id | int | Y | I2C外设,esp32有两个外设(id = 0/1) |
scl | int | N | 对应I2C的时钟线,可以定义任意脚 默认(不选参数) I2C0:Pin(18) I2C1:Pin(9) |
sda | int | N | 对应I2C的时钟线,可以定义任意脚 默认(不选参数) I2C0:Pin(19) I2C1:Pin(8) |
freq | int | N | I2C通信频率 |
- 返回值:
构建的I2C对象。
SoftI2C - 构建软I2C对象
- 函数原型:SoftI2C(scl, sda, freq)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
scl | int | Y | 对应I2C的时钟线,可以定义任意脚 |
sda | int | Y | 对应I2C的时钟线,可以定义任意脚 |
freq | int | Y | I2C通信频率 |
- 返回值:
构建的SoftI2C对象。
scan - 扫描从设备
- 函数原型:scan()
- 参数说明:
无
- 返回值:
无
start - 起始位信号
- 函数原型:start()
- 参数说明:
无
- 返回值:
无
stop - 停止位信号
- 函数原型:stop()
- 参数说明:
无
- 返回值:
无
readfrom - 从I2C总线读取数据
- 函数原型:readfrom(devAddr,number)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
devAddr | int | Y | I2C总线上从设备地址 |
number | int | Y | 需要从总线上读取的数据字节数 |
- 返回值:
buffer - 总线上读取的数据缓冲区,长度为参数number
writeto - 向I2C总线写数据
- 函数原型:writeto(devAddr,buffer)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
devAddr | int | Y | I2C总线上从设备地址 |
buffer | array[] | Y | 发送数据的缓冲区,期待发送的字节数为buffer的长度 |
- 返回值:
无
readfrom_mem - 从I2C设备指定地址读取数据
- 函数原型:readfrom_mem(devAddr, memaddr, number)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
devAddr | int | Y | I2C总线上从设备地址 |
memaddr | int | Y | 起始地址 |
number | int | Y | 需要从总线上读取的数据字节数 |
- 返回值:
buffer - 指定地址读取的数据缓冲区,长度为参数number
writeto_mem - 向I2C设备指定地址写数据
- 函数原型:writeto_mem(devAddr, memaddr,buffer)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
devAddr | int | Y | I2C总线上从设备地址 |
memaddr | int | Y | 起始地址 |
buffer | array[] | Y | 发送数据的缓冲区,期待发送的字节数为buffer的长度 |
- 返回值:
无 - 案例代码
from machine import Pin, SoftI2C, I2C
# 构建1个I2C对象
i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=100000)
# 构建一个硬件 I2C 总线
i2c = I2C(0)
i2c = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
i2c.scan() # 扫描从设备
i2c.readfrom(0x3a, 4) # 从地址为0x3a的从机设备读取4字节数据
i2c.writeto(0x3a, '12') # 向地址为0x3a的从机设备写入数据"12"
buf = bytearray(10) # 创建1个10字节缓冲区
i2c.writeto(0x3a, buf) # 向地址为0x3a的从机设备写入缓冲区数据