I2C接口介绍 micropython相关函数
i2c类实例化
I2C是设备之间的两线通信协议。在物理层它只需要两个信号线:SCL 和 SDA,分别是时钟和数据线。I2C 对象关联到总线,它可以在创建时初始化,也可以稍后初始化。
与I2C有关的类定义在machine中,我们可以通过
class machine.I2C(scl, sda, freq)
实例化一个I2C的类
其中
scl为i2c设备时钟引脚对象;sda为i2c设备数据线引脚对象;freq为SCL时钟频率(0 < freq ≤ 500000(Hz))。
i2c类中的函数介绍
I2C.init(scl, sda, freq)
函数说明:初始化i2c总线。
scl:SCL信号线的I/O口
sda:SDA信号线的I/O口
freq:SCL时钟频率
示例:
i2c.init(scl=Pin(22),sda=Pin(21))
I2C.scan()
函数说明:扫描0x08到0x77之间的I2C地址,并返回设备列表。
示例:
i2c.scan()
I2C.start()
函数说明:在总线上触发START状态(SCL为高电平时,SDA转为低电平)。
示例:
i2c.start()
I2C.stop()
函数说明:在总线上触发STOP状态 (SCL为高电平时,SDA转为高电平)。
示例:
i2c.stop()
I2C.write(buf)
函数说明:buf中的数据写入到总线,并返回写入的字节数。
buf:存储数据的缓冲区
注意:
使用write()函数时要与start函数一起使用,否则无法返回写入的字节数。
示例:
buf = b'123'
i2c.start()
i2c.write(buf)
I2C.readinto(buf, nack=True)
函数说明:从总线上读取数据并存放到buf,无返回值。
buf:存储数据的缓冲区
注意:
读取的字节数是buf的长度。在接收到最后一个字节之前,总线将发送ACK信号。在接收到最后一个字节后,如果nack为True,那么将发送一个NACK信号,否则将发送一个ACK信号。 示例:
buf=bytearray(3)
i2c.readinto(buf)
I2C.readfrom(addr, nbytes)
函数说明:从指定地址设备读取数据,返回读取对象,这个对象与I2C设备有关。
addr:i2c设备地址(可由scan函数读取出来)
nbytes:要读取数据的大小
示例:
data = i2c.readfrom(24, 8)
print(data)
运行结果:
b’\x00\x02\x00\x00\xe8\x03\xe8\x03’
I2C.readfrom_into(addr, buf)
函数说明:从指定地址设备读取buf.len()个数据到buf。
addr:i2c设备地址(可由scan函数读取出来)
buf:存储数据的缓冲区
示例:
buf = bytearray(8)
i2c.readfrom_into(24, buf)
print(buf)
运行结果:
bytearray(b’\x00\x02\x00\x00\xe8\x03\xe8\x03’)
I2C.writeto(addr, buf)
函数说明:将buf中的数据写入设备,并返回写入数据的大小。
addr:i2c设备地址(可由scan函数读取出来)
buf:存储数据的缓冲区
示例:
b = bytearray(3)
b[0] = 24
b[1] = 111
b[2] = 107
i = i2c.writeto(24,b)
I2C.readfrom_mem(addr, memaddr, nbytes, addrsize=8)
函数说明:从I2C设备的寄存器中读取并返回数据。
addr:i2c设备地址(可由scan函数读取出来)
memaddr:寄存器地址
nbytes:要读取的字节大小
addrsize:指定地址大小,默认为8位(在ESP8266上这个参数无效,地址大小总是8位)
示例:
b = i2c. readfrom_mem(24, &

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



