第一步:打开 i2c 的配置
香橙派(OrangePi)开启i2c的方法是在 /boot/orangepiEnv.txt
中设置 overlays=i2c0 i2c1
就可以同时打开 i2c0 和 i2c1 的配置, 也可以只打开1个。
重启香橙派后生效。
overlays=i2c0 i2c1
其它Linux系统的配置方法我就不知道了。
第二步:安装i2c-tools
终端命令如下:
sudo apt update
sudo apt install i2c-tools
安装完,在板上i2c接口随便连接一个i2c设备,在终端输入命令:
sudo i2cdetect -y 0
(其中 0 表示 i2c0,若是i2c1 需要修改为 i2cdetect -y 1)
如果能检测到连接的 i2c 设备的地址,就说明 i2c 能正常使用,并且连接设备成功
如下图,我的i2c设备地址是0x68
第三步:安装smbus2
终端命令如下:
sudo pip install smbus2
安装成功提示:
Collecting smbus2
Downloading smbus2-0.4.2-py2.py3-none-any.whl (11 kB)
Installing collected packages: smbus2
Successfully installed smbus2-0.4.2
若安装失败,到官网下载安装包:https://pypi.org/project/smbus2/#files
下载页面选择smbus2-0.4.2-py2.py3-none-any.whl
下载,
然后复制.whl
文件到Linux(香橙派)
在.whl
文件所在目录下,终端执行:
sudo pip install smbus2-0.4.2-py2.py3-none-any.whl
第四步:测试
Python的smbus2
控制i2c非常简单,只要import smbus2
并实例化SMBus
对象之后,直接调用其读写函数就可以了。
我这边连接的设备是DS3231M
,一个时钟模块,设备地址是0x68
。
Python代码如下:
# I2C_test.py
# -*- coding:utf-8 -*-
import smbus2
import time
i2c_addr = 0x68
sec_addr = 0x00 # 秒 (低4位是秒, 高4位是x10秒 例如:0x00010010 表示12秒, 而不是18秒)
min_addr = 0x01 # 分 (低4位是分钟, 高4位是x10分钟)
hour_addr = 0x02 # 时 (低4位是小时, 第5位是x10小时, 第6位是x20小时, 第7位是12/24小时制选择)
day_addr = 0x03 # 星期 1-7
date_addr = 0x04 # 日 01-31 (低4位是天, 高4位是x10天)
mon_addr = 0x05 # 月 01-12+Century (低4位是月, 第5位是x10月, 第8位是Century)
year_addr = 0x06 # 年 0-99 (低4位是年, 高4位是x10年)
i2c_bus = smbus2.SMBus(0) # 其中 0 表示 i2c0
tData = [0,1,2,3,4,5,6]
def getTime(tData):
tData[0] = ((tData[0] & 0xF0) >> 4)*10 + (tData[0] & 0x0F)
tData[1] = ((tData[1] & 0xF0) >> 4)*10 + (tData[1] & 0x0F)
tData[2] = ((tData[2] & 0x10) >> 4)*10 + ((tData[2] & 0x20) >> 5)*20 + (tData[2] & 0x0F)
tData[4] = ((tData[4] & 0xF0) >> 4)*10 + (tData[4] & 0x0F)
tData[5] = ((tData[5] & 0x10) >> 4)*10 + (tData[5] & 0x0F)
tData[6] = ((tData[6] & 0xF0) >> 4)*10 + (tData[6] & 0x0F)
return tData
while True:
for i in range(7):
tData[i] = i2c_bus.read_byte_data(i2c_addr, i)
tData = getTime(tData)
print(tData)
time.sleep(1)
终端执行:
sudo python3 i2c_test.py
显示结果:
表示顺序:s m h week day month year
这边没有设置初始时间,时间与现实不符,这个我就不改了,可以根据数据手册自己改
附录: DS3231M设置为硬件时钟
请转至链接:https://blog.csdn.net/qq_34482285/article/details/130310020