Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/sensor/vl6180x
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00
..

VL6180X 飞行时间(ToF)测距传感器演示

一、功能模块介绍

1.1 核心主程序模块

  1. main.lua - 主程序入口,负责项目初始化、版本定义和任务调度
  2. vl6180x_app.lua - VL6180X 功能演示模块,包含标准测距、持续测距等所有功能的演示用例

1.2 扩展库模块

  1. exs_vl6180x - VL6180X 扩展库,提供初始化、测距数据读取、睡眠/唤醒/关闭等 API

1.3 I2C 模式说明

推荐使用软件 I2C 模式VL6180X 使用标准 I2C 接口通信,软件 I2C 模式无需指定 I2C 控制器,任意 GPIO 均可模拟 I2C 时序,灵活性更高。本 demo 默认使用软件 I2C 模式(SCL=GPIO31, SDA=GPIO30)演示,也可通过 vl6180x_app.lua 中的 MODE 变量切换为硬件 I2C 模式。

二、演示流程介绍

本 demo 按顺序演示 exs_vl6180x 扩展库的 2 项功能:HELLO → [1/2] → [2/2] → End

2.1 功能演示项说明

  1. [1/2] 标准测距 - 初始化传感器,连续读取 5 次距离数据
  2. [2/2] 持续测距 - 每隔 1 秒读取一次距离数据,共 5 次

三、演示硬件环境

3.1 硬件清单

  • Air780EPM 核心板 × 1
  • VL6180X 飞行时间测距传感器模块(如 GY-VL6180X 等) × 1 demo所演示的 VL6180X 飞行时间测距传感器模块购买链接
  • 母对母杜邦线 × 4
  • TYPE-C 数据线 × 1

3.2 接线配置

3.2.1 I2C 模式接线

Air780EPM 核心板
VL6180X 模块
32/GPIO31
SCL
31/GPIO30
SDA
VDD_EXT
VCC3.3V
GND
GND

说明:接线时注意杜邦线不宜过长,以免通信不稳定。VL6180X 模块上的 SCL/SDA 通常已集成上拉电阻,无需额外配置。

四、演示软件环境

4.1 开发工具

4.2 内核固件

4.3 脚本文件

  1. main.lua - 程序入口
  2. vl6180x_app.lua - VL6180X 功能演示模块
  3. exs_vl6180x - VL6180X 扩展库

五、演示核心步骤

5.1 硬件准备

  1. 按照接线表将 VL6180X 模块连接到核心板
  2. 确保电源连接正确,通过 TYPE-C USB 口供电
  3. 检查所有接线无误,避免短路

5.2 软件配置

main.lua 中加载对应的演示模块:

-- 加载 vl6180x_app.lua 演示模块
require "vl6180x_app"

如需切换通信模式,修改 vl6180x_app.lua 中的 MODE 变量(1=软件 I2C,2=硬件 I2C)。

5.3 软件烧录

  1. 使用 Luatools 选择最新内核固件
  2. 下载本项目所有脚本文件
  3. 将固件和脚本一起烧录到设备
  4. 烧录成功后设备自动重启后开始运行

5.4 功能测试

5.4.1 标准测距演示

  1. 设备启动后打印 "HELLO",随后自动进入 [1/2] 标准测距
  2. 观察日志输出,确认初始化成功(应看到 芯片识别成功 Model ID=0xB4
  3. 观察距离数据(单位 mm)的连续读取,共 5 次

5.4.2 持续测距演示

  1. 自动进入 [2/2] 持续测距演示
  2. 每隔 1 秒读取一次距离数据,共 5 次
  3. 观察数据稳定性与状态码

5.5 预期效果

  • 标准测距:初始化成功,距离数据正常输出(0~255mm 范围)

  • 持续测距:每秒一帧数据,状态码 0(测距成功)

  • 日志如下:

[2026-08-20 21:30:06.039][000000000.246] I/user.main BME680_Demo 001.999.000
[2026-08-20 21:30:06.044][000000000.263] D/user.exs_bme680 version -> 202608080000
[2026-08-20 21:30:06.048][000000000.265] I/user.bme680_demo HELLO
[2026-08-20 21:30:06.172][000000001.265] I/user.bme680_demo ===== [1/5] 初始化与数据读取 =====
[2026-08-20 21:30:06.176][000000001.271] I/user.exs_bme680 I2C总线恢复完成
[2026-08-20 21:30:06.181][000000001.334] I/user.exs_bme680 BME680 @ I2C 0x77, CHIP_ID=0x61
[2026-08-20 21:30:06.194][000000001.347] I/user.exs_bme680 raw_T1=25923 raw_P1=36006 raw_T2=26603 raw_P2=-10347
[2026-08-20 21:30:06.215][000000001.347] I/user.exs_bme680 校准数据: T1=25923 T2=26603 T3=3 P1=36006 P2=-10347 H1=667 H2=1031 GH1=-34 GH2=-6023 GH3=18
[2026-08-20 21:30:06.233][000000001.355] I/user.exs_bme680 BME680 初始化完成, os_temp=4 os_pres=3 os_hum=2 filter=3 heater_temp=320°C heater_dur=150ms
[2026-08-20 21:30:06.241][000000001.355] I/user.exs_bme680 加热器校准: res_heat_range=1 res_heat_val=40 range_sw_err=1 heatr_res=0x76
[2026-08-20 21:30:06.250][000000001.355] I/user.exs_bme680 气体预热提示: 新板首次上电 MOX 气体传感器需预热 20~30 分钟,
[2026-08-20 21:30:06.258][000000001.355] I/user.exs_bme680 电阻会从低值缓慢爬升直至稳定,稳定前 gas_resistance  0 或数值不可信
[2026-08-20 21:30:06.270][000000001.355] I/user.bme680_demo BME680 初始化成功,版本: 202608080000
[2026-08-20 21:30:06.390][000000002.048] I/user.bme680_demo 温度=24.12°C 气压=1008.40hPa 湿度=66.6%RH 气体=2.4
[2026-08-20 21:30:09.534][000000005.241] I/user.bme680_demo 1次读取: 温度=24.12°C 气压=1008.4hPa 湿度=66.4%RH 气体=3.4
[2026-08-20 21:30:11.735][000000007.434] I/user.bme680_demo 2次读取: 温度=24.14°C 气压=1008.4hPa 湿度=66.3%RH 气体=4.6
[2026-08-20 21:30:13.922][000000009.627] I/user.bme680_demo 3次读取: 温度=24.16°C 气压=1008.4hPa 湿度=66.1%RH 气体=5.9
[2026-08-20 21:30:13.929][000000009.628] I/user.bme680_demo ---- [1/5] 完成 ----
[2026-08-20 21:30:14.421][000000010.128] I/user.bme680_demo ===== [2/5] IIR 滤波器切换演示 =====
[2026-08-20 21:30:14.427][000000010.128] I/user.bme680_demo 设置滤波器 filter=0
[2026-08-20 21:30:14.437][000000010.136] I/user.exs_bme680 IIR 滤波器系数设为 0 (0次平均)
[2026-08-20 21:30:14.716][000000010.428] I/user.bme680_demo filter=0: 温度=24.58°C 气压=1008.42hPa 湿度=66.1%RH
[2026-08-20 21:30:15.723][000000011.429] I/user.bme680_demo 设置滤波器 filter=1
[2026-08-20 21:30:15.729][000000011.436] I/user.exs_bme680 IIR 滤波器系数设为 1 (1次平均)
[2026-08-20 21:30:16.019][000000011.729] I/user.bme680_demo filter=1: 温度=24.45°C 气压=1008.44hPa 湿度=65.8%RH
[2026-08-20 21:30:17.026][000000012.730] I/user.bme680_demo 设置滤波器 filter=2
[2026-08-20 21:30:17.033][000000012.737] I/user.exs_bme680 IIR 滤波器系数设为 2 (3次平均)
[2026-08-20 21:30:17.322][000000013.030] I/user.bme680_demo filter=2: 温度=24.45°C 气压=1008.40hPa 湿度=65.5%RH
[2026-08-20 21:30:18.330][000000014.031] I/user.bme680_demo 设置滤波器 filter=3
[2026-08-20 21:30:18.336][000000014.038] I/user.exs_bme680 IIR 滤波器系数设为 3 (7次平均)
[2026-08-20 21:30:18.628][000000014.331] I/user.bme680_demo filter=3: 温度=24.43°C 气压=1008.40hPa 湿度=65.3%RH
[2026-08-20 21:30:19.620][000000015.332] I/user.bme680_demo 设置滤波器 filter=4
[2026-08-20 21:30:19.634][000000015.339] I/user.exs_bme680 IIR 滤波器系数设为 4 (15次平均)
[2026-08-20 21:30:19.930][000000015.632] I/user.bme680_demo filter=4: 温度=24.42°C 气压=1008.36hPa 湿度=65.0%RH
[2026-08-20 21:30:20.921][000000016.633] I/user.bme680_demo 设置滤波器 filter=5
[2026-08-20 21:30:20.937][000000016.640] I/user.exs_bme680 IIR 滤波器系数设为 5 (31次平均)
[2026-08-20 21:30:21.231][000000016.933] I/user.bme680_demo filter=5: 温度=24.43°C 气压=1008.40hPa 湿度=64.9%RH
[2026-08-20 21:30:22.234][000000017.934] I/user.bme680_demo 设置滤波器 filter=6
[2026-08-20 21:30:22.240][000000017.941] I/user.exs_bme680 IIR 滤波器系数设为 6 (63次平均)
[2026-08-20 21:30:22.527][000000018.234] I/user.bme680_demo filter=6: 温度=24.44°C 气压=1008.42hPa 湿度=64.7%RH
[2026-08-20 21:30:23.534][000000019.235] I/user.bme680_demo 设置滤波器 filter=7
[2026-08-20 21:30:23.540][000000019.242] I/user.exs_bme680 IIR 滤波器系数设为 7 (127次平均)
[2026-08-20 21:30:23.829][000000019.535] I/user.bme680_demo filter=7: 温度=24.46°C 气压=1008.40hPa 湿度=64.7%RH
[2026-08-20 21:30:24.831][000000020.536] I/user.bme680_demo ---- [2/5] 完成 ----
[2026-08-20 21:30:25.326][000000021.036] I/user.bme680_demo ===== [3/5] 过采样率切换演示 =====
[2026-08-20 21:30:25.331][000000021.036] I/user.bme680_demo 切换到低功耗模式(1X过采样
[2026-08-20 21:30:25.342][000000021.043] I/user.exs_bme680 温度过采样率设为 1
[2026-08-20 21:30:25.349][000000021.051] I/user.exs_bme680 气压过采样率设为 1
[2026-08-20 21:30:25.357][000000021.058] I/user.exs_bme680 湿度过采样率设为 1
[2026-08-20 21:30:25.621][000000021.326] I/user.bme680_demo 低功耗: 温度=24.46°C 气压=1008.40hPa 湿度=64.7%RH
[2026-08-20 21:30:26.621][000000022.327] I/user.bme680_demo 切换到高精度模式(16X过采样
[2026-08-20 21:30:26.626][000000022.334] I/user.exs_bme680 温度过采样率设为 5
[2026-08-20 21:30:26.636][000000022.342] I/user.exs_bme680 气压过采样率设为 5
[2026-08-20 21:30:26.642][000000022.349] I/user.exs_bme680 湿度过采样率设为 5
[2026-08-20 21:30:26.993][000000022.705] I/user.bme680_demo 高精度: 温度=24.46°C 气压=1008.40hPa 湿度=64.7%RH
[2026-08-20 21:30:26.998][000000022.706] I/user.bme680_demo ---- [3/5] 完成 ----
[2026-08-20 21:30:27.504][000000023.206] I/user.bme680_demo ===== [4/5] 气体加热器切换演示 =====
[2026-08-20 21:30:27.512][000000023.206] I/user.bme680_demo 低温短时(250°C/100ms
[2026-08-20 21:30:27.518][000000023.214] I/user.exs_bme680 气体加热器设为 250°C, 100ms
[2026-08-20 21:30:27.919][000000023.620] I/user.bme680_demo 气体=32.2 温度=24.46°C 湿度=64.7%RH
[2026-08-20 21:30:28.909][000000024.621] I/user.bme680_demo 默认配置(320°C/150ms
[2026-08-20 21:30:28.925][000000024.628] I/user.exs_bme680 气体加热器设为 320°C, 150ms
[2026-08-20 21:30:29.374][000000025.085] I/user.bme680_demo 气体=16.6 温度=24.46°C 湿度=64.6%RH
[2026-08-20 21:30:30.382][000000026.086] I/user.bme680_demo 高温长时(350°C/200ms
[2026-08-20 21:30:30.389][000000026.093] I/user.exs_bme680 气体加热器设为 350°C, 200ms
[2026-08-20 21:30:30.894][000000026.600] I/user.bme680_demo 气体=14.4 温度=24.46°C 湿度=64.6%RH
[2026-08-20 21:30:31.888][000000027.601] I/user.bme680_demo ---- [4/5] 完成 ----
[2026-08-20 21:30:32.387][000000028.101] I/user.bme680_demo ===== [5/5] 海拔高度测量与关闭 =====
[2026-08-20 21:30:32.700][000000028.409] I/user.bme680_demo 温度=24.46°C 气压=1008.4hPa 湿度=64.6%RH 气体=16.8 海拔=40.5
[2026-08-20 21:30:32.706][000000028.409] I/user.exs_bme680 传感器已关闭
[2026-08-20 21:30:32.712][000000028.410] I/user.bme680_demo ---- [5/5] 完成 ----
[2026-08-20 21:30:33.210][000000028.910] I/user.bme680_demo ===== [演示完毕] =====
[2026-08-20 21:30:33.215][000000028.910] I/user.bme680_demo End

5.6 故障排除

  1. 传感器初始化失败

    • 检查 VL6180X 接线是否正确(SCL、SDA、VCC、GND
    • 确认 GPIO 引脚配置与接线一致
    • 检查电源电压是否稳定(3.3V
    • 确认 exs_vl6180x 扩展库已正常加载
  2. 读取数据始终为 0 或异常

    • 检查传感器供电是否正常
    • 确认 I2C 地址是否正确(默认 0x29)
    • 确认接线无松动
  3. 测距状态码异常

    • 状态码 1/5(系统错误):芯片异常,可尝试重新上电
    • 状态码 7(未检测到目标):目标超出 255mm 量程或反射率过低
    • 状态码 11(环境光过强):环境光太强影响测量,可遮挡环境光

5.7 扩展功能建议

exs_vl6180x 更多接口的使用可以查看 exs_vl6180x 扩展库说明