I2C用户总线接口(Python)
概要
小龟小车支持一路用户I2C总线,默认是管脚SCL、SDA,小伙伴也可以自由指定其它管脚。
主控板背面金手指处的I2C总线是系统总线,相关的使用方法请参考系统I2C总线接口章节
打开总线(open)
语法:
- car.i2c.open()
- car.i2c.open(speed)
- car.i2c.open(speed, pin_scl)
- car.i2c.open(speed, pin_scl, pin_sda)
说明:
以指定的参数打开用户I2C总线。
如果在使用读写接口前,没有打开用户I2C总线,则小龟小车会以默认参数自动打开总线。
默认速率100kbps,默认SCL管脚为SCL,默认SDA管脚为SDA。
参数:
- speed 指定I2C用户总线的通讯速率,默认100kbps。
- pin_scl 指定I2C总线的SCL管脚,默认SCL。
- pin_sda 指定I2C总线的SDA管脚,默认SDA。
- 返回值 打开是否成功
范例:
#以400kbps速率,SCL对应SCL,SDA对应SDA,方式打开用户总线
car.i2c.open(400000, SCL, SDA)
扫描总线(scan)
语法:
- car.i2c.scan()
说明:
扫描当前用户总线,并返回发现的传感器地址。
大部分传感器是一个传感器一个地址,但也有不少传感器会存在多个地址
参数:
- 返回值 发现的传感器地址列表
范例:
#扫描用户I2C总线
car.i2c.scan()
#返回 [0, 11, 59]
读取数据(read)
语法:
- car.i2c.read(addr:int, reg:int)
- car.i2c.read(addr:int, reg:int, count:int)
说明:
从指定地址的传感器的指定内部数据寄存器位置读入指定数量的数据。
参数:
- addr 需要读取的传感器I2C地址。
- reg 需要读取的传感器内部数据寄存器地址。
- count 需要读取的数据个数,默认1字节。
- 返回值 读到的数据
范例:
#读取地址为109的传感器的内部数据寄存器位置为11处1个字节数据
car.i2c.read(109, 11, 1)
不指定寄存器读取数据(read_raw)
语法:
- car.i2c.read_raw(addr:int)
- car.i2c.read_raw(addr:int, count:int)
说明:
从指定地址的传感器的读入指定数量的数据。
参数:
- addr 需要读取的传感器I2C地址。
- count 需要读取的数据个数,默认1字节。
- 返回值 读到的数据
范例:
#读取地址为109的传感器的1个字节数据
car.i2c.read(109, 1)
写入数据(write)
语法:
- car.i2c.write(addr:int, reg:int)
- car.i2c.write(add:int, reg:int, count:int)
说明:
向指定地址的传感器内部指定位置的数据寄存器写入指定长度的数据。
参数:
- addr 需要写入的传感器I2C地址。
- reg 需要写入的传感器内部数据寄存器地址。
- count 需要写入的数据个数,默认1字节。
- 返回值 处理是否成功
范例:
#向地址为105的传感器的第57个内部数据寄存器写入1个字节的数据19
car.i2c.write(105, 57, [19])
不指定寄存器写入数据(write_raw)
语法:
- car.i2c.write(addr:int, reg:int)
- car.i2c.write(add:int, reg:int, count:int)
说明:
向指定地址的传感器写入指定长度的数据。
参数:
- addr 需要写入的传感器I2C地址。
- reg 需要写入的传感器内部数据寄存器地址。
- count 需要写入的数据个数,默认1字节。
- 返回值 处理是否成功
范例:
#向地址为105的传感器写入2个字节的数据19和36
car.i2c.write(105, [19, 36])