Jetson-nano 通过 I2C 使用 HMC5883

Jetson-nano 通过 I2C 使用 HMC5883
一、开启 I2C

因为默认 I2C 是关闭,需要通过下列步骤开启 I2C

  1. 在 /etc/modprobe.d/blacklist.conf 中,注释掉 blacklist i2c_i801
# lacklist i2c_i801
  1. 在 /etc/modules 的最后面追加
i2c-dev
  1. 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 的值
三、连接
  1. 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)

发布了18 篇原创文章 · 获赞 1 · 访问量 956

猜你喜欢

转载自blog.csdn.net/ManWZD/article/details/103147985
今日推荐