IoT-For-Beginners 第 18 课实战作业基于边缘 AI 的端到端水果质量检测器原型构建指南【免费下载链接】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》的课后作业讲解如何把前几课所学全部能力串联起来构建一个可运行的水果质量检测器原型用距离传感器触发边缘设备上的图像分类把分类结果存入云存储并依据水果成熟度通过云到设备命令控制 LED 告警。读完本文你将掌握多组件 IoT 应用的端到端装配方法——含 IoT Hub、Azure Functions、Azure Storage 三大云服务的配置距离触发、摄像头拍照、边缘推理、命令下发四条消息链路以及如何在单片机上用单个程序模拟多台设备。作业目标把物、洞察、动作串成一个完整应用本作业要求你把此前所有课程中写过的代码拼接起来构建一个原型级的水果质量检测器。其核心链路如下触发用距离传感器检测水果是否到达传送带检测位边缘推理触发后命令摄像头拍照并由运行在边缘设备上的 AI 模型完成图像分类存储把分类结果发送到云端IoT Hub由 serverless 应用存入 Azure Storage 供后续分析执行根据分类结果水果是否未成熟通过云到设备命令控制 LED 亮起/熄灭提醒工人剔除未成熟水果。作业原文明确指出You should be able to piece this together using code you have previously written in all the lessons so far——本作业本身不引入新概念而是对 2-check-fruit-from-device摄像头与云端/边缘分类和 3-run-fruit-detector-edgeCustom Vision 模型导出并部署到 IoT Edge所学内容的综合集成而本课新增的距离传感器触发与多设备模拟则是串联起整条链路的粘合剂。先读懂架构把作业拆成 Things / Insights / Actions在动手之前先理解本课 README 给出的设计框架。一个复杂 IoT 应用可以被描述为things设备采集数据→insights服务产生洞察→actions洞察驱动行动的循环。本作业的原型系统在传送带质检场景下对应层级组成Things检测水果到达的距离传感器设备负责拍照并分类的摄像头设备运行分类器的边缘设备提示未成熟水果的 LED 告警设备Insights决定是否检查水果成熟度存储成熟度分类结果判断是否需要发出未成熟告警Actions向摄像头设备下发拍照并分类命令向告警设备下发水果未成熟命令本课的参考架构图iot-reference-architecture-fruit-quality.png清晰地描绘了四条消息链路距离传感器把检测结果发给 IoT Hub → serverless 应用向摄像头设备下发命令 → 摄像头拍照并把边缘分类结果发回云端 → serverless 应用存储结果若未成熟则向 LED 设备下发告警命令。 本课 README 特别说明整个应用完全可以做成单设备内聚逻辑用 IoT Hub 仅做计数与配置。这里刻意拆成多设备是为了演示大型 IoT 应用的分工模式。第一步配置全部云服务IoT Hub Functions Storage作业评分表的第一项标准是Configure all the services要求把三大云服务全部搭好IoT Hub作为所有设备遥测上报与云到设备命令的中枢。注册本课用到的 IoT 设备以及第 3 课中注册的边缘设备fruit-quality-detector-edge。若尚未创建可参照第 3 课 README 中在fruit-quality-detector资源组中创建 IoT Hub、用az iot hub device-identity create --edge-enabled注册设备、再取出设备连接字符串的完整命令序列。Azure Functions 应用作为 serverless 洞察层负责响应 IoT Hub 消息——收到水果到达消息时向摄像头设备下发命令、收到分类结果后写入存储并决定是否下发 LED 命令。Azure Storage保存每次分类结果如成熟/未成熟、时间戳供日后分析未成熟水果占比。⚠️ 本课 README 提醒这是该项目最后一课完成作业后务必清理云资源清理步骤参考 clean-up.md但在完成本作业之前这些服务仍需保留。第二步用距离传感器触发检测作业要求Monitor proximity and send the data to IoT Hub if an object is closer than a pre-defined distance and trigger the camera via a command。即设备持续测量距离当物体进入预设阈值范围内时向 IoT Hub 发送消息再由云端命令触发摄像头。距离传感器原理本课使用 Grove Time of FlightToF距离传感器VL53L0X 激光测距模组测量范围 10mm–2000mm1cm–2m超出 1000mm 后报告为 8109mm。其原理是发射激光/红外光束并计时直到光束被物体反射回来从而换算距离属于 I²C 接口传感器。三种硬件平台的实现代码仓库 code-proximity 目录下提供了三份可直接运行的参考实现分别对应 Wio Terminal、Raspberry Pi 与虚拟 IoT 设备。Raspberry Pi或真实 VL53L0X 传感器——对应指南 pi-proximity.md源码见 code-proximity/pi/fruit-quality-detector/distance_sensor.pypip install rpi-vl53l0ximport time from grove.i2c import Bus from rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X(bus Bus().bus) distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)虚拟 IoT 设备CounterFit——对应指南 virtual-device-proximity.md源码见 code-proximity/virtual-iot-device/fruit-quality-detector/distance_sensor.py。需要安装counterfit-shims-rpi-vl53l0x并在 CounterFit 应用中创建 Distance 传感器单位 MillimeterI²C 地址0x29与真实 VL53L0X 的硬编码地址一致pip install counterfit-shims-rpi-vl53l0xfrom counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000) import time from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X() distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)Wio Terminal单片机——对应指南 wio-terminal-proximity.md工程位于 code-proximity/wio-terminal/distance-sensor。先在其 platformio.ini 中声明 VL53L0X 库依赖[env:seeed_wio_terminal] platform atmelsam board seeed_wio_terminal framework arduino lib_deps seeed-studio/Grove Ranging sensor - VL53L0X ^1.1.1然后在 main.cpp 中初始化传感器并在主循环中读取距离#include Arduino.h #include Seeed_vl53l0x.h Seeed_vl53l0x VL53L0X; void setup() { Serial.begin(9600); while (!Serial) ; delay(1000); VL53L0X.VL53L0X_common_init(); VL53L0X.VL53L0X_high_accuracy_ranging_init(); } void loop() { VL53L0X_RangingMeasurementData_t RangingMeasurementData; memset(RangingMeasurementData, 0, sizeof(VL53L0X_RangingMeasurementData_t)); VL53L0X.PerformSingleRangingMeasurement(RangingMeasurementData); Serial.print(Distance ); Serial.print(RangingMeasurementData.RangeMilliMeter); Serial.println( mm); delay(1000); } 本课建议模拟多设备时把每台设备写成一个独立 Python 文件在不同终端同时运行即可而单片机无法并行运行多个程序只能把所有设备的逻辑放进同一个程序详见下文多设备模拟小节。第三步定义消息结构与决策边界本课 README 强调在动手前先定义好消息结构。四条链路对应的消息包括距离传感器 → IoT Hub距离测量值或水果已到达事件IoT Hub → 摄像头设备触发拍照与分类的命令摄像头设备 → IoT Hub图像分类结果成熟/未成熟IoT Hub → LED 设备控制 LED 状态的命令。定义消息时要明确字段命名与单位例如温度既可能叫temperature也可能叫temp还必须明确单位是 °C 还是 °F——历史上有著名的单位不一致导致 $1.25 亿美元探测器坠毁的教训火星气候探测者号。对于本作业还需提前决策距离判断在哪里做两种方案各有利弊决策放在云端IoT Hub需要设备持续上报多条距离测量值消息量大会抬高 IoT Hub 成本、占用设备带宽工厂里可能是数百万台设备也会拖慢设备决策放在设备端只在上报阈值事件但需要提供一种配置手段如设备孪生 device twin来微调触发距离。作业的要求是if an object is closer than a pre-defined distance即设备端做阈值判断并发送事件这正对应本课the decision is made on the device的讨论结论。第四步多设备模拟在单片机上模拟多台 IoT 设备由于作业要把距离传感器、摄像头、LED 控制器合体在开发套件上本课 README 给出了两种模拟策略Raspberry Pi / 虚拟设备单板计算机可同时运行多个应用把每台设备实现为独立的 Python 文件在各自的终端会话中并行运行即可。注意某些硬件不能被多个并发应用同时访问。Wio Terminal 等单片机无法并行运行多程序必须把全部设备逻辑塞进单一应用。建议做法为每台设备创建一个类如DistanceSensor、ClassifierCamera、LEDController每个类自带setup和loop方法由主setup/loop统一调用命令处理集中在单一位置再按需分发到对应设备类主loop里用最小公倍数原则规划各设备节奏——例如一个类需要每 10 秒处理一次、另一个每 1 秒处理一次则主循环用 1 秒延时用计数器在第 10 次循环时处理 10 秒周期的设备并复位计数器。第五步图像分类与 LED 控制的集成复用前课代码作业的第三、四项评分标准分别是边缘分类并上报结果与用命令控制 LED图像分类复用第 2 课 2-check-fruit-from-device 的摄像头 Custom Vision 调用代码第 3 课 3-run-fruit-detector-edge 则讲解把训练好的模型以容器形式部署到 IoT Edge 设备从而在边缘完成推理Local 推理不依赖公网、响应更快。作业要求classify it using an edge device所以单片机用户需要一个独立的边缘设备如 Raspberry Pi IoT Edge来跑分类容器。LED 控制复用第 1 课训练分类器与第 2 课设备端调用分类的代码结合本课新增的云到设备命令机制——Functions 收到分类结果后若判定水果未成熟就向 LED 所在设备发送命令设备端在回调中点亮 LED成熟则熄灭/保持关闭。整条链路的最终消息流如下从原型走向生产需要补充的工程化改造本课 README 指出原型只是生产系统的基础落地时还需考虑加固硬件改用能承受工厂噪声、高温、振动与冲击的工业级组件内部通信部分组件之间直接通信、绕开云端的往返仅把需存储的数据上云可用网关设备在边缘运行部分 IoT 服务可配置化不同工厂、不同水果的触发距离不同不应把触发距离硬编码在固件里而应通过设备孪生device twin等方式由云端动态下发配置自动化剔除生产线上用自动化机构替换 LED 告警直接移除未成熟水果。作业验收清单Rubric 对照对照作业的评分表自查完成度验收维度优秀Exemplary标准配置全部服务成功搭建 IoT Hub、Azure Functions 应用与 Azure Storage若三者缺一则为一般全部未搭则不合格距离监测与命令触发能测量距离物体进入预设阈值时向 IoT Hub 发送消息并能下发命令触发摄像头只测距不上报、或无法触发命令均扣分拍照、边缘分类与结果上报能拍照、在边缘设备上完成分类并把结果发给 IoT Hub若只做了云端分类或无法上报结果则降为一般LED 命令控制能在水果未成熟时通过命令点亮 LED命令能到达设备但控制不了 LED则降为一般小结本作业的本质是一次全链路集成训练从传感器遥测、云到设备命令、边缘 AI 推理到存储与告警执行横跨物、洞察、动作三层。动手前先想清楚消息结构与决策边界动手时按云服务 → 距离触发 → 摄像头命令 → 边缘分类 → LED 命令的顺序逐段打通并用串口/终端日志逐条验证最后对照评分表逐项验收。完成作业后别忘了按 clean-up.md 清理云资源。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考