LuatOS核心库API——【i2c】I2C 操作

在连接温度传感器、加速度计或实时时钟芯片时,I2C协议是首选通信方式。对开发者而言,掌握如何正确发起I2C操作------包括地址配置、读写模式切换和应答处理------是实现设备控制与数据采集的基础。本文提供一份实用的操作指南。

一、概述

I2C(Inter-Integrated Circuit)是一种两线式串行总线,用于连接微控制器及其外围设备。在嵌入式系统中,I2C 总线常用于连接各种传感器、显示器、存储器等设备。

LuatOS 提供了 I2C 核心库,支持硬件 I2C 和软件模拟 I2C 两种方式,可以方便地与各种 I2C 设备进行通信。

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

四、函数详解

i2c.exist(id)

功能

检查指定的 I2C 设备 ID 是否存在。

参数

id

返回值

local result = i2c.exist(id)

result

示例

i2c.setup(id, speed, polling)

功能

初始化指定的 I2C 设备,需在 I2C 读写操作之前调用。

注意:硬件I2C一定会发送stop信号,如果所用芯片规定不能有stop信号的话请用软件i2c。

参数

id

speed

polling

返回值

local result = i2c.setup(id, speed, polling)

result

示例

i2c.createSoft(scl, sda, delay)

功能

创建一个软件 I2C 对象,软件 I2C 的速率与模组 GPIO 速率相关(约100K),需注意 GPIO 驱动能力,AGPIO 驱动能力较弱,尽量选用普通 GPIO,适用于硬件 I2C 不够用的场景。

注:软件 I2C 受网络业务影响,通信时可能不准确。使用时需在插入SIM卡并且网络业务满载运行的环境下用逻辑分析仪来确认下精度是否符合要求,或者长时间运行软件i2c业务来观察下功能是否正常来确认下是否可以满足要求。

参数

scl

sda

delay

返回值

local softI2C = i2c.createSoft(scl, sda, delay)

softI2C

示例

i2c.send(id, addr, data, stop)

功能

通过 I2C 总线发送数据。

参数

id

addr

data

stop

返回值

local result = i2c.send(id, addr, data, stop)

result

示例

i2c.recv(id, addr, len)

功能

通过 I2C 总线接收数据。

参数

id

addr

len

返回值

local data = i2c.recv(id, addr, len)

data

示例

i2c.writeReg(id, addr, reg, data, stop)

功能

通过 I2C 总线写入寄存器数据。

参数

id

addr

reg

data

stop

返回值

local result = i2c.writeReg(id, addr, reg, data, stop)

result

示例

i2c.readReg(id, addr, reg, len, stop)

功能

通过 I2C 总线读取寄存器数据。

参数

id

addr

reg

len

stop

返回值

local data = i2c.readReg(id, addr, reg, len, stop)

data

示例

i2c.close(id)

功能

关闭指定的 I2C 设备,关闭后如需重新使用 i2c 功能,无需使用 i2c.setup() 重新初始化,i2c 读写操作的时候会自动重新打开 i2c。

参数

id

返回值

无返回值。

示例

i2c.readDHT12(id, addr)

功能

从 I2C 总线读取 DHT12 温湿度传感器的数据。

参数

id

addr

返回值

local result, humidity, temperature = i2c.readDHT12(id, addr)

result

humidity

temperature

示例

i2c.readSHT30(id, addr)

功能

从 I2C 总线读取 SHT30 温湿度传感器的数据。

参数

id

addr

返回值

local result, humidity, temperature = i2c.readSHT30(id, addr)

result

humidity

temperature

示例

i2c.transfer(id, addr, txBuff, rxBuff, rxLen)

功能

I2C 通用传输,支持三种功能:

发送 N 字节数据

发送 N 字节后接收 N 字节数据(在发送转接收过程中发送 reStart 信号)

接收 N 字节数据

特别说明 :该函数解决了类似 mlx90614 等设备必须带 restart 信号 (重启动信号) 但不能用 i2c.send 控制的问题

参数

id

addr

txBuff

rxBuff

rxLen

返回值

local result, rxdata = i2c.transfer(id, addr, txBuff, rxBuff, rxLen)

result

rxdata

示例

i2c.xfer(id, addr, txBuff, rxBuff, rxLen, transfer_done_topic, timeout)

功能

I2C 非阻塞通用传输,类似 transfer,但是不会等到 I2C 传输完成才返回,调用本函数会立刻返回,I2C 传输完成后,通过消息回调。

参数

id

addr

txBuff

rxBuff

rxLen

transfer_done_topic

timeout

返回值

local result = i2c.xfer(id, addr, txBuff, rxBuff, rxLen, transfer_done_topic, timeout)

result

示例

i2c.scan(id, speed)

功能

本函数用于在开发阶段扫描 I2C 总线上连接的设备,确认 I2C 设备是否正确连接、地址设置是否正确。

参数

id

speed

返回值

无返回值。

示例

五、模组支持说明

支持 LuatOS 开发的所有模组都支持 i2c 核心库。不同模组支持的硬件 i2c 接口数量和 gpio 引脚可能有所不同,请参考具体模组的硬件手册。

今天的内容就分享到这里了~

相关推荐
不悔哥2 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
未济2 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
调试优选官2 天前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
爱吃汽的小橘2 天前
自动售卖机状态机设计精解
硬件工程
爱吃汽的小橘2 天前
循环序列生成与并串转换模块设计
硬件工程
_艾伦 耶格尔.2 天前
进程间通信
linux
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展