news 2026/9/14 15:41:28

在虚拟 IoT 设备上集成 VL53L0X 距离传感器:IoT-For-Beginners 水果质量检测项目实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在虚拟 IoT 设备上集成 VL53L0X 距离传感器:IoT-For-Beginners 水果质量检测项目实战

在虚拟 IoT 设备上集成 VL53L0X 距离传感器:IoT-For-Beginners 水果质量检测项目实战

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

本篇技术指南围绕开源课程项目 IoT-For-Beginners 第 4 章「Trigger fruit quality detection from a sensor」中的虚拟设备环节展开,讲解如何在 CounterFit 模拟器中创建一个虚拟距离传感器,并通过distance-sensor.py以每秒一次的频率读取距离数据。读完本文后,你将掌握 CounterFit 虚拟硬件的工作原理、VL53L0X 飞行时间(Time-of-Flight)传感器的 I2C 配置要点,以及如何用「距离读数」作为水果质量检测系统的触发信号。

背景:距离传感器在水果质量检测中的角色

在完整的果蔬品控原型中,传送带上的水果需要被自动检测、拍照、分类。整个应用可抽象为「Things(设备)— Insights(洞察)— Actions(动作)」三层:带接近传感器的 IoT 设备负责检测水果是否到达拍照位置,这是整个流水线第一环的触发器。正如 4-trigger-fruit-detector 课程说明 所描述,传感器通过测量与水果之间的距离来判断其是否到达传送带上的正确位置,一旦距离满足阈值即可触发相机拍照与边缘端图像分类。

接近传感器的工作原理是发射一束电磁辐射(如激光或红外光),再检测物体反射回来的信号,通过发射与回波之间的时间差计算距离。VL53L0X 正是这样一颗基于激光测距模块的飞行时间传感器。在真实硬件上它通过 I2C 总线与开发板通信,而在虚拟设备方案中,我们使用 CounterFit 模拟器配合 shim 库来模拟同样的行为。

前置条件:虚拟 IoT 硬件方案与 CounterFit

本环节面向「单板计算机 - 虚拟设备」路径,也就是说你不需要真实的 Raspberry Pi 或 Wio Terminal 硬件,只需:

  • 已创建好的fruit-quality-detectorPython 项目(VS Code 中打开,并激活虚拟环境);
  • 正在运行的CounterFit Web 应用——它是一个图形化模拟器,可创建虚拟传感器并随机或手动调整读数;
  • 额外的 shim 包counterfit-shims-rpi-vl53l0x,用于在 CounterFit 中模拟rpi-vl53l0xPip 包的行为。

💡 用 CounterFit 模拟多个 IoT 设备有一个简单技巧:把每个设备写成独立的 Python 文件,然后同时运行它们。这样单台开发机即可模拟「距离传感器设备 + 相机设备 + LED 通知设备」的完整多设备架构。

第一步:在 CounterFit 中添加虚拟距离传感器

fruit-quality-detector项目中,按以下步骤在 CounterFit 中创建距离传感器:

  1. 打开 VS Code 中的fruit-quality-detector代码,确保虚拟环境已激活;

  2. 已激活虚拟环境的终端中安装 shim 包:

    pip install counterfit-shims-rpi-vl53l0x

    该包模拟的是 rpi-vl53l0x——一个与 VL53L0X 飞行时间距离传感器交互的 Python 包,而 VL53L0X 对应 Grove Time of Flight 距离传感器;

  3. 确保 CounterFit Web 应用已运行;

  4. Sensors面板的Create sensor区域创建距离传感器:

    • Sensor type下拉框中选择Distance
    • Units保持默认的Millimeter(毫米);
    • 将 I2C 地址设为0x29。若使用真实的 VL53L0X 传感器,该地址同样是硬编码的;
    • 点击Add按钮完成创建。

创建成功后,传感器会出现在传感器列表中,可随时修改其读数以模拟水果靠近/远离。

第二步:编写 distance-sensor.py 读取距离

fruit-quality-detector项目中新建文件distance-sensor.py,逐段加入以下代码。

1. 建立与 CounterFit 的连接

from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)

这里通过本机127.0.0.1:5000端口连接 CounterFit 服务。

2. 导入 shim 传感器库

import time from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X

该导入引用的是 VL53L0X 飞行时间传感器的 CounterFit shim 库,API 与真实硬件库保持一致,便于日后无缝迁移到物理设备。

3. 声明并初始化传感器

distance_sensor = VL53L0X() distance_sensor.begin()

声明一个距离传感器实例,然后调用begin()启动传感器。

4. 无限循环读取距离

while True: distance_sensor.wait_ready() print(f'Distance = {distance_sensor.get_distance()} mm') time.sleep(1)

wait_ready()等待传感器产生一个可读的测量值,get_distance()返回以毫米为单位的距离,随后每秒打印一次。

5. 运行并验证

运行前请注意:文件名为distance-sensor.py,务必用 Python 直接运行它,而不是app.py

python distance-sensor.py

在 CounterFit 中手动修改距离值或开启随机值,控制台会实时更新输出:

(.venv) ➜ fruit-quality-detector python distance-sensor.py Distance = 37 mm Distance = 42 mm Distance = 29 mm

至此,你的虚拟接近传感器程序已经成功运行。

仓库源码佐证:完整实现与多平台对照

本教程的完整可运行代码已保存在仓库中,可直接对照阅读:

  • 虚拟设备版本:distance_sensor.py 与上文代码完全一致,包含 CounterFit 连接初始化、VL53L0X()实例化、begin()wait_ready()/get_distance()循环的完整调用链;
  • Raspberry Pi 版本:pi 版本 distance_sensor.py 展示了从虚拟到真实的迁移方式——将counterfit_shims_rpi_vl53l0x替换为真实的rpi_vl53l0x.vl53l0xgrove.i2c.Bus,并通过VL53L0X(bus = Bus().bus)传入 I2C 总线。两者的while True读取循环结构完全相同,这正是 shim 方案的设计价值:应用层代码无需大改即可切换硬件
  • Wio Terminal 版本:wio-terminal 工程 使用 C++ 与 PlatformIO,在platformio.ini中通过lib_deps引入seeed-studio/Grove Ranging sensor - VL53L0X,在setup中调用VL53L0X_common_init()VL53L0X_high_accuracy_ranging_init(),在loop中用PerformSingleRangingMeasurement()获取RangeMilliMeter读数——三种平台实现同一逻辑,便于理解底层 SDK 的异同。

传感器规格与使用要点

结合 pi-proximity.md 和 wio-terminal-proximity.md,真实 Grove VL53L0X 传感器有以下值得注意的规格:

  • 测量范围:10mm ~ 2000mm(1cm ~ 2m),在此范围内读数较为准确;
  • 超量程表现:距离超过 1000mm 时,传感器会报出8109mm的固定值,这在编写触发逻辑时需要作为边界情况处理;
  • I2C 设备:通过 I2C 总线通信,地址硬编码为0x29
  • 方向性:激光测距模块位于传感器背面(与 Grove 接口相反的一侧),测量时务必朝向正确的一面。

从读数到触发:数据与架构思考

仅仅读到距离还不够——你需要决定在哪里判断「水果已到达」。课程 README 给出了两种权衡方案:

  • 云端决策:设备持续上传多个距离测量值,由 IoT Hub 侧判断。缺点是消息量增大,会提高 IoT Hub 成本与设备带宽消耗(在拥有海量设备的工厂中尤其明显),也可能拖慢设备;
  • 设备端决策:设备本地判断距离阈值,只上报「已检测到水果」这一事件。缺点是需要提供配置手段来微调设备参数。

这也引出了消息结构设计的重要性——在搭建完整应用前先约定好 JSON 字段名与单位,避免出现temperaturetemp这类不一致导致的排查成本。从生产化角度看,距离阈值不应硬编码,而应通过云端配置(例如设备孪生 device twin)按不同水果类型动态调整。

后续延伸

本环节是 4-trigger-fruit-detector 课程 的虚拟设备实现路径之一。完成距离读取后,可继续:

  • 用 assignment.md 中的任务构建完整的水果质量检测器;
  • 结合 clean-up.md 在完成实验后清理云服务资源;
  • 对比 树莓派实现 与 Wio Terminal 实现,理解同一功能在不同硬件栈上的落地差异。

在虚拟设备上验证通过的距离读取逻辑,可以无缝迁移到真实 VL53L0X 传感器上,这正是 CounterFit + shim 方案在原型验证阶段的核心价值。

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 15:40:50

遥感影像镶嵌:GDAL Python批量处理实战指南

简介:本资源是一份面向遥感、GIS及地理信息开发者的Python实战脚本工具包,聚焦遥感影像自动化镶嵌这一高频处理需求,适用于环境监测、地图制图、农业遥感分析等实际项目场景。压缩包为6KB的ZIP文件,共含2个Python源码文件&#xf…

作者头像 李华
网站建设 2026/9/14 15:39:08

icloudpd iCloud照片本地备份实操:从首次认证到定时同步

icloudpd iCloud照片本地备份实操:从首次认证到定时同步 【免费下载链接】icloud_photos_downloader A command-line tool to download photos from iCloud 项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader 你手里的 iCloud 照片…

作者头像 李华
网站建设 2026/9/14 15:39:01

欧姆龙NJ与EtherCAT多轴伺服控制:ST语言编程与调试实战要点

最近刚交付了一条新能源电池方向的产线改造,核心是1台欧姆龙NJ系列PLC,EtherCAT总线挂了24台伺服,程序主体用ST语言来写。整套系统从选型到调试做了将近两个月,中间换过思路、踩过不少坑,也沉淀出一套适合中大型多轴项…

作者头像 李华
网站建设 2026/9/14 15:38:29

Windows下RFID读写器SDK集成指南:从DLL配置到EPC盘点排错

简介:一份面向Windows平台的RFID阅读器SDK开发包,对应Impinj RM2000读写器,版本1.2.5.2。它主要为需要将RFID读写能力集成到桌面应用的开发者准备,覆盖物流、零售、资产管理与门禁等非接触式识别场景,适合具备C#或Java…

作者头像 李华