Jetson-nano 通过 I2C 使用 HMC5883
一、开启 I2C
因为默认 I2C 是关闭,需要通过下列步骤开启 I2C
- 在 /etc/modprobe.d/blacklist.conf 中,注释掉
blacklist i2c_i801
# lacklist i2c_i801
- 在 /etc/modules 的最后面追加
i2c-dev
- sudo reboot 重启
二、安装相关库
sudo apt-get install i2c-tools
sudo apt-get install python3-smbus
sudo apt-get install libi2c-dev
# i2c-tools 命令简介
# i2cdetect – 用来列举 I2C bus 上面的所有装置
# i2cdump – 显示装置上所有 register 的值
# i2cget – 读取装置上某个 register 的值
# i2cset – 写入装置上某个 register 的值
三、连接
- nano 的 i2c 总线 0 的 (SDA/SCL) 对应引脚 27/28
四、测试
# -y 指忽略用户交互操作, -r 指扫描所有地址
sudo i2cdetect -y -r 0
0x1e 是 HMC5883 的 7 位地址
import smbus
import time
bus = smbus.SMBus(0)
address = 0x1E
def bearingX():
bear1 = bus.read_byte_data(address, 3)
bear2 = bus.read_byte_data(address, 4)
bear = (bear1 << 8) + bear2
return bear
def bearingY():
bear1 = bus.read_byte_data(address, 7)
bear2 = bus.read_byte_data(address, 8)
bear = (bear1 << 8) + bear2
return bear
def bearingZ():
bear1 = bus.read_byte_data(address, 5)
bear2 = bus.read_byte_data(address, 6)
bear = (bear1 << 8) + bear2
return bear
# 设置为连续测量模式
def setDefault():
bus.write_byte_data(address, 2, 0)
while True:
setDefault()
time.sleep(0.07)
x = bearingX()
z = bearingZ()
y = bearingY()
print("(%d, %d, %d)" % (x, y, z))
time.sleep(0.2)