尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

构建端到端 IoT 设备:基于 IoT-For-Beginners 农场项目实现传感器遥测与 Serverless 自动控制

构建端到端 IoT 设备:基于 IoT-For-Beginners 农场项目实现传感器遥测与 Serverless 自动控制 构建端到端 IoT 设备基于 IoT-For-Beginners 农场项目实现传感器遥测与 Serverless 自动控制【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners作为IoT-For-Beginners课程第 2 个项目数字农业的收官作业6-keep-your-plant-secure一课要求学习者综合运用前六课的全部知识独立构建一个「传感器 致动器 IoT Hub Serverless」的完整 IoT 设备采集遥测数据上云并由无服务器代码根据数据自动下发指令控制硬件。本文将围绕这一综合实战任务逐项拆解任务要求与评分标准并结合仓库内的设备端、云端函数代码给出可直接落地执行的构建路线图。作业背景一次覆盖全链路能力的综合大挑战在进入本作业前前六课依次带你完成了使用土壤湿度传感器采集数据并校准将遥测数据通过 MQTT 上报到云端 IoT Hub用 Azure Functions 处理遥测事件并下发直接方法Direct Method指令通过设备孪生等机制让云端与设备双向通信使用 X.509 证书等机制加固设备与云端之间的连接。本次作业的定位是项目结业综合训练不再按教程逐步照做而是要求你独立选型、独立编码、独立联调把「采集 → 上云 → 触发 → 回控」这条链路完整跑通。任务原文见 作业说明英文原版本文章对应其德文翻译版 translations/de/2-farm/lessons/6-keep-your-plant-secure/assignment.md。任务要求拆解四件事构成一个闭环作业的核心指令只有一句话使用你选择的传感器与致动器构建一个新的 IoT 设备向 IoT Hub 发送遥测数据并用这些数据通过 Serverless 代码控制致动器。拆解开来包含四个不可省略的环节环节具体动作前置知识点对应课程设备编程编写代码驱动一个传感器和一个致动器第 3 课传感器与致动器云端接入部署 IoT Hub设备向其发送遥测并接收指令第 4 课迁移到云端Serverless 逻辑部署 Azure Function被遥测事件触发第 5 课应用迁移到云端安全加固使用 X.509 证书等方式保障连接安全第 6 课本课关于设备选型作业给出了充分的自由度可以复用本课程或上一项目交通项目中用过的传感器与致动器也可以在手头有其他硬件的情况下尝试新器件。评判重点在于闭环是否完整而非硬件是否新奇。仓库中的参考实现一条可直接参照的完整链路仓库为这项作业提供了完整的三段式参考实现恰好对应任务要求的三个技术环节。理解这三段代码如何衔接是完成作业的捷径。环节一设备端采集遥测并监听指令以第 4 课移植到云端的设备端代码为例pi 版本 与 虚拟设备版本其核心循环做了三件事# 设备端主循环节选自第 4 课代码 while True: soil_moisture adc.read(0) # 1. 读取传感器 print(Soil moisture:, soil_moisture) message Message(json.dumps({ soil_moisture: soil_moisture })) device_client.send_message(message) # 2. 发送遥测 time.sleep(10) # 3. 节流采样同时设备端通过on_method_request_received回调注册了对直接方法的处理def handle_method_request(request): if request.name relay_on: relay.on() elif request.name relay_off: relay.off() method_response MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)从源码可以推断出参考实现中使用的传感器为 Grove 电容式土壤湿度传感器通过grove.adc.ADC读取模拟值致动器为 Grove 继电器GroveRelay(5)引脚 5遥测字段名为soil_moisture采样周期为 10 秒——这些命名约定直接决定了云端函数如何解析数据是构建自己设备时的最佳参照模板。环节二Serverless 代码根据遥测下发指令第 5 课提供了云端的 Azure Function 实现iot-hub-trigger/init.py它由 IoT Hub 事件触发根据土壤湿度阈值决定继电器的开与关def main(event: func.EventHubEvent): body json.loads(event.get_body().decode(utf-8)) device_id event.iothub_metadata[connection-device-id] soil_moisture body[soil_moisture] if soil_moisture 450: # 阈值判断 direct_method CloudToDeviceMethod(method_namerelay_on, payload{}) else: direct_method CloudToDeviceMethod(method_namerelay_off, payload{}) registry_manager_connection_string os.environ[REGISTRY_MANAGER_CONNECTION_STRING] registry_manager IoTHubRegistryManager(registry_manager_connection_string) registry_manager.invoke_device_method(device_id, direct_method) # 下发直接方法该函数的绑定配置位于同目录的 function.json使用eventHubTrigger绑定消费组为$Default设备凭据通过环境变量REGISTRY_MANAGER_CONNECTION_STRING注入避免将密钥硬编码进代码——这一点在作业的安全维度同样适用。注意阈值450是与特定传感器的原始 ADC 读数相关的经验值构建新设备时务必先采集自己的传感器数据标定出「干燥/湿润」分界后再写入函数。环节三用 X.509 证书替换连接字符串第 6 课将设备端升级为基于 X.509 证书认证pi 版本、虚拟设备版本与连接字符串方式相比仅需三处改动from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse, X509 x509 X509(./soil-moisture-sensor-x509-cert.pem, ./soil-moisture-sensor-x509-key.pem) device_client IoTHubDeviceClient.create_from_x509_certificate(x509, host_name, device_id)证书与私钥文件由 Azure CLI 生成。执行下面命令后当前目录会产出两个文件分别存放私钥与证书az iot hub device-identity create --device-id soil-moisture-sensor-x509 \ --am x509_thumbprint \ --output-dir . \ --hub-name hub_name其中soil-moisture-sensor-x509-key.pem是设备私钥严禁提交到公开的源代码仓库。完整的设备侧接入步骤见 单板计算机/虚拟设备 X.509 接入指南Wio Terminal 用户需注意写作本课时 Azure Arduino SDK 尚不支持 X.509 证书官方建议改用 Python SDK 的虚拟设备方案体验该特性见 Wio Terminal 说明。上图为「设备遥测 → 云端 → 无服务器处理」的整体消息流示意本作业的目标正是将这条链路以你自己的传感器与致动器复现出来。评分标准详解从「合格」到「典范」的三个维度作业给出了三张评分表这是唯一明确的「判分依据」也是自查清单。整理如下标准一编写使用传感器和致动器的 IoT 设备代码等级要求典范Exemplary编写的 IoT 设备同时驱动传感器和致动器合格Adequate编写的 IoT 设备仅驱动传感器或致动器待改进Needs Improvement无法编写出使用传感器或致动器的 IoT 设备代码标准二将 IoT 设备连接到 IoT Hub等级要求典范成功部署 IoT Hub既能向其发送遥测又能从中接收指令合格成功部署 IoT Hub但只能发送遥测或接收指令待改进无法部署 IoT Hub 并实现设备与它的通信标准三用 Serverless 代码控制致动器等级要求典范成功部署 Azure Function基于遥测事件触发并实际控制设备合格成功部署了由遥测事件触发的 Azure Function但无法控制致动器待改进无法部署 Azure Function三个标准呈现明显的阶梯关系设备端完整双器件→ 云端双工发收→ 自动化闭环触发控制。对照第 5 课函数代码可以看出「合格」与「典范」的关键差异在于registry_manager.invoke_device_method(device_id, direct_method)这一行是否真正生效——即函数是否拿到了正确的connection-device-id、设备是否正确注册了同名直接方法回调。从参考实现迁移到「你自己的设备」要拿到三个「典范」建议按下述顺序推进每一步都能复用仓库代码选型与标定确定传感器与致动器组合。若复用土壤湿度传感器 继电器可直接参照第 6 课代码若更换器件需要自行阅读其数据手册确定读取方式模拟/数字/I²C/SPI与控制方式GPIO/PWM/串口。设备端打通先只实现「传感器读取 串口打印」再叠加遥测上报与直接方法回调。参考 第 4 课设备端代码 的while True循环结构。云端函数调参复制第 5 课的函数骨架但重新标定触发阈值如湿度值域、距离值域、光照值域并确保CloudToDeviceMethod的method_name与设备端handle_method_request中判断的方法名完全一致。安全升级为设备生成独立身份的 X.509 证书并接入注意设备 ID、证书指纹与 IoT Hub 中的设备注册保持一致。端到端联调用 IoT Hub 的监控视图确认遥测到达用日志确认函数触发最终用物理观察继电器吸合、LED 点亮、电机转动确认回控成功。作业之外的补充视角安全是作业的隐含项第 6 课的主题是「保护你的植物」Keep your plant secure完整学习该主题可阅读 第 6 课主文档其中覆盖了对称/非对称加密、SAS 令牌与 X.509 证书的完整原理可作为作业安全环节的深度背景。完成作业后记得清理云资源本课是该项目最后一课作业完成后应参照 clean-up 指南 删除 IoT Hub、Azure Functions 等资源避免持续产生费用作业本身需要这些服务支撑因此务必先完成作业再做清理。虚拟硬件无障碍即使没有物理硬件也可使用 虚拟设备代码它通过 CounterFit 模拟传感器与致动器云端部分完全一致因此上述所有步骤对纯软件环境同样成立。结语「构建一个新的 IoT 设备」本质是一次从零到一的端到端工程实践设备端负责感知与执行云端负责接入与身份验证Serverless 层负责决策与下发。以仓库中第 4、5、6 课的三段参考代码为骨架将遥测字段名、直接方法名、触发阈值三处关键约定对齐你便能在自己的硬件或虚拟设备上完整复现这条数字农业自动化链路达成作业的「典范」标准。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表