- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
ADS1115 16位ADC传感器演示
一、功能模块介绍
1.1 核心主程序模块
- main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
- ads1115_demo.lua - ADS1115 功能演示模块,包含数据读取、多通道扫描、比较器中断、PGA 增益切换等所有功能的演示用例
1.2 扩展库模块
- exs_ads1115 - ADS1115 扩展库,提供初始化、电压读取、通道切换、PGA 增益配置、数据速率配置、比较器中断、校准等 API
1.3 I2C 模式说明
推荐使用硬件 I2C 模式:Air780EPM 使用 I2C1(PIN66=SDA, PIN67=SCL),占用 CPU 少、通信稳定。本 demo 默认使用硬件 I2C 模式演示,也支持软件 I2C 模式(任意 GPIO 接线,通过 ads1115_demo.lua 中 MODE 变量切换)。
二、演示流程介绍
本 demo 按顺序演示 exs_ads1115 扩展库的 4 项功能:HELLO → [1/4] → [2/4] → [3/4] → [4/4] → End
2.1 功能演示项说明
- [1/4] 初始化与数据读取 - 初始化 ADS1115 传感器并读取 AIN0 电压数据(单位 V)
- [2/4] 多通道扫描 - 依次切换 AIN0~AIN3 四路单端通道读取电压
- [3/4] 比较器中断报警 - 窗口比较器(阈值 2.0V~3.0V),电压越界时 ALERT/RDY 引脚下降沿中断触发
- [4/4] PGA 增益切换 - 在 PGA=1(±4.096V)和 PGA=2(±2.048V)之间切换,观察分辨率与满量程变化
三、演示硬件环境
3.1 硬件清单
- Air780EPM 核心板 × 1
- ADS1115 16 位 I2C ADC 传感器模块 × 1
- 母对母杜邦线 × 7根
- TYPE-C 数据线 × 1
- 直流稳压源 × 1
3.2 接线配置
3.2.1 ADS1115 模块接线
| Air780EPM 核心板 | ADS1115 模块 |
| 3.3V(VDD_EXT) | VCC |
| GND | GND |
| PIN67(I2C1_SCL) | SCL |
| PIN66(I2C1_SDA) | SDA |
| GND | ADDR(设备地址 0x48) |
| GPIO22 | ALERT/RDY(比较器中断,[3/4] 使用) |
| 被测电压(0~3.3V) | AIN0 |
说明:接线时注意杜邦线不宜过长,以免通信不稳定。被测电压超过 3.3V 时必须电阻分压后接入 AIN 引脚(芯片模拟输入上限为 VDD+0.3V)。
3.2.2 外部电源接线(AIN0 测试电压源)
使用可调直流电源给 AIN0 提供测试电压时,外部电源的负极(-)必须接到核心板 GND(共地),否则 AIN0 与 ADS1115 之间没有参考电位,读数会乱飘、无意义。
完整接线图(含外部电源):
外部电源(+) ────────────────→ ADS1115 模块: AIN0
外部电源(-) ────────────────→ Air780EPM 核心板: GND ← 共地!
核心板 3.3V (VDD_EXT) ──────→ ADS1115 模块: VCC
核心板 GND ─────────────────→ ADS1115 模块: GND
核心板 PIN67 (I2C1_SCL) ────→ ADS1115 模块: SCL
核心板 PIN66 (I2C1_SDA) ────→ ADS1115 模块: SDA
核心板 GND ─────────────────→ ADS1115 模块: ADDR(地址 0x48)
核心板 GPIO22 ──────────────→ ADS1115 模块: ALERT/RDY(比较器中断)
| 接线对象 | 接到哪里 | 说明 |
|---|---|---|
| 外部电源正极(+) | ADS1115 模块 AIN0 | 测试电压 0~3.3V(超出需分压) |
| 外部电源负极(-) | 核心板 GND | 必须共地,与模块 GND 同一点 |
共地关系:外部电源负极 → 核心板 GND → 模块 GND,三者是同一电位。若使用电池做测试源,电池负极同样要接到核心板 GND。
四、演示软件环境
4.1 开发工具
- Luatools下载调试工具 - 固件烧录和代码调试
4.2 内核固件
- 点击下载Air780EPM系列最新版本内核固件,demo所使用的是 LuatOS@Air780EPM base 26.04 bsp V2050
4.3 脚本文件
- main.lua - 程序入口
- ads1115_demo.lua - ADS1115 功能演示模块
- exs_ads1115 - ADS1115 扩展库
五、演示核心步骤
5.1 硬件准备
- 按照接线表将 ADS1115 模块连接到核心板
- 确保电源连接正确,通过 TYPE-C USB 口供电
- 检查所有接线无误,避免短路
5.2 软件配置
在 main.lua 中加载对应的演示模块:
-- 加载 ads1115_demo.lua 演示模块
require "ads1115_demo"
5.3 软件烧录
- 使用 Luatools 选择最新内核固件
- 下载本项目所有脚本文件
- 将固件和脚本一起烧录到设备
- 烧录成功后设备自动重启后开始运行
5.4 功能测试
5.4.1 初始化与数据读取演示
- 设备启动后打印 "HELLO",随后自动进入 [1/4] 初始化与数据读取
- 观察日志输出,确认初始化成功
- 观察 AIN0 电压数据(单位 V)的连续读取
5.4.2 多通道扫描演示
- 自动进入 [2/4] 多通道扫描
- 依次观察 AIN0~AIN3 四路通道的电压数据
- 未接信号的通道读数接近 0V(悬空漂移属正常现象)
5.4.3 比较器中断报警演示
- 自动进入 [3/4] 比较器中断报警
- 先将输入电压调到 2.5V(阈值窗口内),观察日志提示
- 保持电源开启,调节电压越过 3.0V 或低于 2.0V,观察 ALERT 中断触发
5.4.4 PGA 增益切换演示
- 自动进入 [4/4] PGA 增益切换
- 观察 PGA=1(满量程 ±4.096V)下的电压读数
- 观察 PGA=2(满量程 ±2.048V)下的电压读数(若输入电压超过 ±2.048V,读数会钳位到满量程)
5.5 预期效果
- 初始化与数据读取:ADS1115 初始化成功,AIN0 电压数据正常输出
- 多通道扫描:4 路通道均能正常读取电压
- 比较器中断报警:电压越过阈值(>3.0V 或 <2.0V)时 ALERT 中断触发
- PGA 增益切换:PGA 切换后分辨率与满量程随之变化
- 日志如下:
[2026-08-24 15:39:43.507][000000000.216] I/user.main ADS1115_Demo 001.000.000
[2026-08-24 15:39:48.659][000000006.640] I/user.ads1115_demo ===== [1/4] 初始化与数据读取 =====
[2026-08-24 15:39:48.689][000000006.661] I/user.ads1115_demo ADS1115 初始化成功,版本: 202608241540
[2026-08-24 15:39:48.705][000000006.679] I/user.ads1115_demo AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:50.255][000000008.230] I/user.ads1115_demo 第1次读取: AIN0 = 2.7828 V (raw=22262)
[2026-08-24 15:39:50.749][000000008.731] I/user.ads1115_demo 第2次读取: AIN0 = 2.7819 V (raw=22255)
[2026-08-24 15:39:51.274][000000009.248] I/user.ads1115_demo 第3次读取: AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:51.290][000000009.264] I/user.ads1115_demo ---- [1/4] 完成 ----
[2026-08-24 15:39:51.433][000000009.416] I/user.ads1115_demo ===== [2/4] 多通道扫描 =====
[2026-08-24 15:39:51.546][000000009.516] I/user.ads1115_demo AIN0 = 2.7828 V (raw=22262)
[2026-08-24 15:39:51.561][000000009.533] I/user.ads1115_demo AIN1 = 0.5946 V (raw=4757)
[2026-08-24 15:39:51.563][000000009.534] I/user.ads1115_demo AIN2 = 0.6086 V (raw=4869)
[2026-08-24 15:39:51.565][000000009.534] I/user.ads1115_demo AIN3 = 0.6180 V (raw=4944)
[2026-08-24 15:39:51.567][000000009.534] I/user.ads1115_demo ---- [2/4] 完成 ----
[2026-08-24 15:39:51.274][000000009.248] I/user.ads1115_demo ===== [3/4] 比较器中断报警 =====
[2026-08-24 15:39:51.290][000000009.264] I/user.ads1115_demo 电压 2.782 V,ALERT=1
[2026-08-24 15:39:51.433][000000009.416] I/user.ads1115_demo 收到 ALERT 中断:电压超阈值报警!
[2026-08-24 15:39:51.546][000000009.516] I/user.ads1115_demo 当前电压 = 3.077 V (raw=24618)
[2026-08-24 15:39:51.561][000000009.533] I/user.ads1115_demo ---- [3/4] 完成 ----
[2026-08-24 15:39:51.563][000000009.534] I/user.ads1115_demo ===== [4/4] PGA 增益切换 =====
[2026-08-24 15:39:51.565][000000009.534] I/user.ads1115_demo 切换 PGA 为 1(满量程 ±4.096V,分辨率 125μV)
[2026-08-24 15:39:51.567][000000009.534] I/user.ads1115_demo PGA=1 下: AIN0 = 2.7818 V (raw=22254)
[2026-08-24 15:39:51.574][000000009.534] I/user.ads1115_demo 切换 PGA 为 2(满量程 ±2.048V,分辨率 62.5μV,输入超过 ±2.048V 会钳位)
[2026-08-24 15:39:51.575][000000009.534] I/user.ads1115_demo PGA=2 下: AIN0 = 2.0479 V (raw=32767)
[2026-08-24 15:39:51.577][000000009.534] I/user.ads1115_demo 恢复 PGA 为 1(满量程 ±4.096V)
[2026-08-24 15:39:51.579][000000009.534] I/user.ads1115_demo ---- [4/4] 完成 ----
[2026-08-24 15:39:51.581][000000009.534] I/user.ads1115_demo ===== [演示完毕] =====
[2026-08-24 15:39:51.583][000000009.534] I/user.exs_ads1115 已关闭
[2026-08-24 15:39:51.585][000000009.534] I/user.ads1115_demo End
5.6 故障排除
-
传感器初始化失败:
- 检查 ADS1115 接线是否正确(SCL、SDA、VCC、GND)
- 确认 ADDR 引脚接 GND(地址 0x48),不能悬空
- 确认 SCL/SDA 上拉电阻已接(4.7kΩ 到 3.3V)
- 检查电源电压是否稳定(3.3V)
-
读取数据始终为零:
- 检查输入信号是否接入(AIN 悬空时读数漂移,属正常现象)
- 检查传感器供电是否正常
- 确认接线无松动
-
比较器中断不触发:
- 确认 ALERT/RDY 引脚已接 GPIO22,并核对
ALERT_GPIO常量 - 确认电压真正越过阈值(先用万用表确认 AIN0 实际电压)
- 若进入 [3/4] 时电压已在阈值外,先调回 2.5V 左右再越过阈值(下降沿触发)
- 确认 ALERT/RDY 引脚已接 GPIO22,并核对
5.7 扩展功能建议
exs_ads1115 更多接口的使用可以查看 exs_ads1115 扩展库说明
