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

资讯详情

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

IoT-For-Beginners 起步指南:从硬件选型到 MQTT 云控的第一盏智能夜灯

IoT-For-Beginners 起步指南:从硬件选型到 MQTT 云控的第一盏智能夜灯 IoT-For-Beginners 起步指南从硬件选型到 MQTT 云控的第一盏智能夜灯【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文基于 IoT-For-Beginners 课程仓库的第一项目 Getting Started with IoT其阿拉伯语版本位于 translations/ar/1-getting-started/README.md展开你将了解物联网的基本概念、微控制器与单板计算机的差异、传感器与执行器的工作原理并跟随课程亲手搭建一个夜灯项目——光线变暗时 LED 自动点亮最终通过 MQTT 把控制逻辑迁移到云端完成第一个连接云端的 Hello World IoT 应用。一、课程定位一个贯穿四课的夜灯项目本项目的学习路径由四节课程组成全部围绕同一个渐进式项目展开夜灯nightlight。它由一个光线传感器和一个 LED 组成当传感器测得的环境光照低于阈值时LED 点亮。课程主题在夜灯项目中的角色第 1 课认识物联网IoT 概念、设备选型与设备初始化完成硬件Hello World第 2 课深入理解 IoT微控制器/单板计算机原理深挖理解你手中的硬件第 3 课传感器与执行器模拟/数字信号、ADC、PWM夜灯本地联动光暗则灯亮第 4 课设备接入互联网MQTT、遥测telemetry、命令commands夜灯云端控制仓库为每条课程路径提供三套实现代码Wio TerminalArduino/C、Raspberry PiPython以及基于 CounterFit 模拟器的虚拟设备Python代码按每加一个功能就复制一份的方式存放在code-*目录中便于对比演进。课程还提供课前/课后测验与作业多语言译文可在 translations 目录下按语言子目录ar、zh-CN、ja、de 等 40 多个语言目录找到对应版本。二、第一课什么是 IoT以及你会用什么设备IoT 的定义Internet of Things一词由 Kevin Ashton 于 1999 年提出指通过传感器把互联网与物理世界连接起来。课程给出的界定是传感器sensors从世界收集信息速度、温度、位置等执行器actuators把电信号转化为现实世界的动作触发开关、点亮 LED、发声、向其他硬件发送控制信号。课程同时强调IoT 不只是设备它还包括处理传感器数据、向执行器下发请求的云端服务以及无需联网、依靠云端训练好的 AI 模型在本地做决策的边缘设备edge devices。课程引用的行业估算是截至 2020 年底约有 300 亿台 IoT 设备在线到 2025 年 IoT 数据量可能接近 80 ZB80 万亿 GB。微控制器MCUvs 单板计算机SBC开发者入门一般从开发套件开始它们分为两类微控制器Microcontroller / MCU一个CPU 内存 可编程 I/O的小计算机用于执行有限但非常具体的任务不能接显示器键盘做通用计算。典型特征是便宜定制硬件中 MCU 均价可低至 0.5 美元、功耗低、通常用 C/C 编程。课程选用的 Wio Terminal 是一块 Seeed Studio 的微控制器开发板集成传感器、执行器、WiFi 和屏幕售价约 30 美元。单板计算机Single-board computer一块板上装下完整计算机要素、可跑完整操作系统的小型设备规格接近台式机/笔记本但更小更省电。课程选用 Raspberry Pi 4运行 Raspberry Pi OS即 Debian Linux 的一个发行版IoT 应用通常用 Python 编写。课程后续所有练习同时支持三种设备选择ArduinoWio Terminal、树莓派 4、以及运行在 PC/Mac 上的虚拟单板计算机——用 Python 实现的硬件模拟器CounterFit 项目可自定义传感器数值并在屏幕上显示执行器效果无需购买任何硬件即可完成全部练习。完整采购清单与两套 Starter Kit 见 hardware.md。三、第二课IoT 应用的组成与硬件原理深挖IoT 应用 The Thing The Internet课程以智能恒温器为例拆解应用架构设备侧The Thing由温度传感器、设定温度的旋钮/触屏和连接暖通系统的执行器组成云端The Internet一侧则是负责安全、接收遥测、回发指令的云服务以及数据库、手机 App、甚至天气/日历等数据源的决策服务。图中模式正是第 4 课 MQTT 通信的基础设备与云服务都连接到同一个 broker设备发布遥测、订阅命令云服务订阅遥测、向设备发布命令。更进一步的聪明恒温器会引入云端 AI结合占用传感器、天气和日历数据做更精细的决策。课程还讨论了边缘计算在本地网关处理数据以获得速度、离线能力与隐私如智能音箱的本地唤醒词检测与IoT 安全设备安全性取决于云服务的安全历史上出现过 Stuxnet、婴儿监视器被入侵等真实案例部分场景采用与互联网完全隔离的 air-gapped 网络。微控制器CPU、内存、I/OCPU靠时钟周期执行指令fetch-decode-execute 循环。速度单位是赫兹Wio Terminal 的 CPU 主频为 120MHz远低于 PC 的多 GHz 多核更低的时钟意味着更低的功耗与发热——微控制器没有散热片风扇也能靠小电池运行数月到数年部分 MCU 还内置高低功耗多核切换。内存分为非易失的程序内存存代码断电不丢和易失的RAM存变量与数据断电即失。课程用了一个直观对比Wio Terminal 有 192KB RAM192,000 字节和 4MB 程序存储比一台 8GB RAM 的典型 PC 小 4 万多倍。I/OGPIO 引脚在软件中配置为输入读传感器或输出驱动执行器。框架MCU 不跑桌面意义上的操作系统内存与算力都不够常用轻量框架或 RTOS实时操作系统提供多线程、网络、GUI 支持。Arduino是最流行的 MCU 框架一个 sketch 由setup()上电执行一次做 WiFi 连接、引脚初始化等和loop()无限循环执行读传感器、发数据两个函数构成属于典型的事件循环event loop架构。Arduino 标准库如delay、digitalRead屏蔽底层差异同一份代码可重编译到不同板子上运行。单板计算机以 Raspberry Pi 为例Raspberry Pi 4B四核 1.5GHz CPU、2/4/8GB RAM、千兆以太网、WiFi、双 HDMI支持 4K、2 个 USB 2.0 2 个 USB 3.0、40 个 GPIO 引脚、摄像头接口与 SD 卡槽板卡尺寸 88mm × 58mm3A USB-C 供电起价 35 美元。Pi Zero单核 1GHz CPU、512MB RAM、零版尺寸 65mm × 30mm × 5mm5 美元带 WiFi 的 Zero W 10 美元。两者均为ARM 处理器而非 PC 的 x86/x64运行 Raspberry Pi OS有带桌面的完整版与适合无头headless项目的 Lite 版因为是 Debian Linux任何为 ARM 构建的 Debian 软件包都能安装。SBC 是完整计算机任何语言皆可编程Pi 生态中大量硬件以 Python 库形式提供许多外设通过hat戴在 GPIO 排针上的扩展板如屏幕、传感器、标准线缆转接板接入。在生产级 IoT 部署中 SBC 同样常见例如 Compute Module 4 就是把 Pi 4 的算力做成紧凑板卡嵌入定制硬件中。四、第三课传感器与执行器——让夜灯动起来传感器把物理世界变成电信号传感器测量一个或多个物理属性并发送给 IoT 设备常见类型包括温度常与气压、湿度集成、按钮、光线可见光/UV/IR/特定颜色、摄像头、加速度计、麦克风。所有传感器的共同点是把所感知的量转换为设备可解读的电信号。模拟传感器设备给传感器施加一个电压传感器内部元件改变该电压回读电压即为测量值。课程用电位器potentiometer举例输入 5V旋钮打到中间时输出约 3.8V打到 0 输出 0V打到 11 输出 5V。温度传感器则基于热敏电阻thermistor随温度变化的电阻输出电压再由代码换算为 K/°C/°F。由于 IoT 设备只能处理数字信号模拟值必须经过模数转换ADC设备自带 ADC或通过带 ADC 的转接板如 Seeed Grove 生态中坐在树莓派 GPIO 上的 hat。课程给出的换算示例一个 3.3V 供电的 Grove 光线传感器输出 0–1023 的数字量1V 电压对应约 300Grove hat 将其转换为 300 的二进制0000000100101100再交给设备处理。写代码时这些细节被库封装Grove 光线传感器在 Python 里读light属性在 Arduino 里调用analogRead。数字传感器直接输出数字信号最简单的就是按钮/开关——只读通/断两态。GPIO 直接测 0 或 1树莓派 3.3V 引脚高于 1.8V 判为 1低于判为 0存在容差。更高级的数字传感器内部自带 ADC仍用热电偶测电阻变化但由板载 ADC 转换成 0/1 序列发出因此可以携带更复杂甚至加密的数据——摄像头就是典型它以 JPEG 等压缩格式发送图像或视频流。执行器把电信号变回物理动作执行器与传感器相反LED、扬声器、步进电机、继电器用小电压信号控制大电压回路的开关、屏幕。同样分模拟与数字两类模拟执行器如可调光灯光亮度随电压变化。设备是数字的需要DAC数模转换把 0/1 转成电压输出。PWM脉宽调制另一种数字模拟化手段——快速切换高/低电平脉冲等效于模拟信号。课程的经典算例5V 供电的电机高电平持续 0.02s转 0.1 圈即 36°、低电平 0.02s一个周期 0.04s则每秒 25 个脉冲 × 0.1 圈 2.5 圈/秒 150rpm保持周期不变但把高电平减半到 0.01s占空比从 50% 降到 25%每个脉冲只转 0.05 圈得到 1.25 圈/秒 75rpm。只改脉冲宽度就改变模拟电机转速。数字执行器两态设备直接由高低电平驱动最简单的就是 LED——发 1 加高电压点亮发 0 熄灯。动手本地版夜灯第 3 课的任务是把 LED 接上、由光线传感器控制构建 IoT 夜灯流程即读光照 → 判断 → 控 LED。仓库中虚拟设备路径的最终代码在 code-actuator/virtual-device/nightlight/app.pyimport time from counterfit_connection import CounterFitConnection from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor from counterfit_shims_grove.grove_led import GroveLed CounterFitConnection.init(127.0.0.1, 5000) light_sensor GroveLightSensor(0) # 接在 Grove 端口 0 的光线传感器 led GroveLed(5) # 接在 Grove 端口 5 的 LED while True: light light_sensor.light print(Light level:, light) if light 300: # 光照低于阈值 3000-1023 量程 led.on() else: led.off() time.sleep(1) # 每秒循环一次从源码结构看CounterFitConnection.init(127.0.0.1, 5000)连接的是本地 CounterFit 模拟器GroveLightSensor/GroveLed是 Grove 硬件的 Python shim垫片库light属性读到的正是前面 ADC 章节中 0–1023 量程的数字值——阈值 300 与此量程直接对应。Pi 路径的代码在 code-actuator/pi/nightlight/app.pyWio Terminal 路径则在 code-actuator/wio-terminal/nightlight/src/main.cpp。五、第四课接入互联网——MQTT、遥测与命令IInternet是 IoT 的另一半。课程定义遥测telemetry是传感器采集并上传云端的数据命令command是云端发给设备的指令通过执行器输出或让设备自身重启/收集额外遥测。MQTT发布/订阅的消息协议设备与云通常不直连而是经过broker消息代理做发布/订阅设备发布遥测、订阅命令云服务订阅全部遥测、向特定设备或设备组发布命令。MQTT 是最流行的轻量级开放标准消息协议1999 年为监控输油管道设计15 年后由 IBM 发布为开放标准。课程给出的 MQTT 要点主题topic可分层并支持通配符如把温度发到/telemetry/temperature、湿度发到/telemetry/humidity云端订阅/telemetry/*即可一次收全。服务质量QoS三档At most once发一次不确认fire and forgetAt least once重发直到确认Exactly once两级握手保证只收一份。名字里有 Queue 但没有消息队列断线重连后收不到离线期间发的消息可用retained 标志让 broker 保存某主题的最后一封消息新订阅者立即拿到最新值。Keep alive机制在消息长间隔时检查连接是否存活。MQTT 走 TCP/IP与 HTTP 相同底层协议、不同端口也可经 WebSocket 供浏览器使用连接可以是匿名的也可用用户名/密码或证书加密。实操中课程不建议自己搭 broker而是直接用 Eclipse Mosquitto 的公开测试 brokertest.mosquitto.org开源、免账号注意它是公开不安全的任何人可监听不能传隐私数据。想自建时可用 Mosquitto默认禁止匿名与外部连接可通过mosquitto.conf打开listener 1883 0.0.0.0 allow_anonymous true动手第 1 步设备端发布遥测设备代码虚拟设备路径code-mqtt/virtual-device/nightlight/app.py在第 3 课基础上加入了 paho-mqtt 客户端把光照值作为 JSON 遥测发布到ID/telemetry主题import time from counterfit_connection import CounterFitConnection from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor from counterfit_shims_grove.grove_led import GroveLed import paho.mqtt.client as mqtt CounterFitConnection.init(127.0.0.1, 5000) light_sensor GroveLightSensor(0) led GroveLed(5) id ID # 替换为你自定义的唯一设备 ID client_name id nightlight_client mqtt_client mqtt.Client(client_name) mqtt_client.connect(test.mosquitto.org) mqtt_client.loop_start() print(MQTT connected!) while True: light light_sensor.light print(Light level:, light) if light 300: led.on() else: led.off() time.sleep(1)⚠️ 设备端与服务端必须使用同一个ID否则订阅/发布的主题对不上。动手第 2 步写一个本地服务端收遥测所谓服务端代码就是将来会部署到云服务的处理逻辑这里先在本地电脑上跑。先配置 Python 虚拟环境并安装 MQTT 库pip 包默认装到整机会造成版本冲突虚拟环境把依赖隔离在专用目录里mkdir nightlight-server cd nightlight-server # 显式用 python3 建环境防止误用 Python 2 python3 -m venv .venv激活虚拟环境注意始终在创建环境的那个目录里操作不要进入.venvWindows 命令行.venv\Scripts\activate.batWindows PowerShell.\.venv\Scripts\Activate.ps1macOS / Linuxsource ./.venv/bin/activate验证与安装python --version # 3.6 以上即可 pip install paho-mqtt # 只装进当前虚拟环境然后创建并打开app.pyWindows 用type nul app.pymacOS/Linux 用touch app.pycode .打开当前目录。仓库中对应的完整服务端代码在 code-server/server/app.pyimport json import time import paho.mqtt.client as mqtt id ID client_telemetry_topic id /telemetry client_name id _nightlight_server mqtt_client mqtt.Client(client_name) mqtt_client.connect(test.mosquitto.org) mqtt_client.loop_start() def handle_telemetry(client, userdata, message): payload json.loads(message.payload.decode()) print(Message received:, payload) mqtt_client.subscribe(client_telemetry_topic) mqtt_client.on_message handle_telemetry while True: time.sleep(2)逐行要点mqtt.Client(client_name)创建带唯一客户端名的 MQTT 客户端loop_start()在后台线程里跑消息处理循环这样主线程不会被阻塞subscribe订阅遥测主题并注册on_message回调——收到消息时handle_telemetry把 JSON payload 解码后打印最后的无限循环只是让进程保持存活。VS Code 打开项目时会自动激活虚拟环境状态栏可见若旧终端没加载环境点Kill the active terminal instance杀掉后开新终端提示符应带(.venv)。运行python app.py后调整设备的光照终端输出形如(.venv) ➜ nightlight-server python app.py Message received: {light: 0} Message received: {light: 400}遥测数据以JSONJavaScript Object Notation键/值对文本编码标准发送。课程还以恒温器为例展示了遥测表的典型形态thermostat_temperature: 18°C、livingroom_temperature: 19°C…并给出两个工程判断多久发一次遥测取决于场景恒温器几分钟一次足够每秒一次会浪费带宽、电池与云资源工厂关键设备则可能要每秒多次宁可浪费带宽不能漏掉停机信号。断线期间数据丢还是存也取决于场景恒温器只需现在的温度可丢机器故障趋势分析异常检测、预测性维护则需要重连后补发离线期间全部遥测。MQTT 本身不负责断线补传需设备/服务端自行实现如约定回复主题 手动队列重放。动手第 3 步服务端回发命令实现云端控灯assignment-1-internet-flow.png服务端要做的就是读到遥测 → 判断 → 发布命令。在client_telemetry_topic声明之后增加命令主题并在handle_telemetry末尾追加回发逻辑仓库完整版见 code-commands/server/app.pyserver_command_topic id /commandscommand { led_on : payload[light] 300 } print(Sending message:, command) client.publish(server_command_topic, json.dumps(command))逻辑与第 3 课的本地判断完全相同——只是把if light 300从设备搬到了服务器光照低于 300 时发led_on: true否则false。运行后输出形如Message received: {light: 0} Sending message: {led_on: True} Message received: {light: 400} Sending message: {led_on: False}设备端再补一段订阅ID/commands主题、解析led_on并驱动 LED 的代码即可闭环Wio Terminal 路径见 wio-terminal-commands.md单板计算机/虚拟设备路径见 single-board-computer-commands.md。关于主题设计课程提醒当前所有设备共用一个 telemetry 主题、一个 commands 主题——若想给某台特定设备单独发命令可用含设备唯一 ID 的主题如/commands/device1、/commands/device2让每台设备只监听属于自己的主题。命令的断线语义同样看场景如果最新命令覆盖旧命令开→关旧的可以不重发如果是顺序敏感的指令机械臂先抬起再夹取则恢复连接后必须按序重放。六、小结与后续路径至此第一项目的四课完成了 IoT 入门的完整闭环概念与硬件选型课 1、课 2→ 本地传感与控制课 3本地阈值 300 直接控 LED→ 云端控制课 4MQTT 遥测上行 命令下行阈值判断迁到服务端。这个夜灯就是本课程的 Hello World其架构设备 ↔ broker ↔ 云服务会在后续项目中反复出现。按课程路线图12 周、24 课接下来会进入真实业务场景农场预测植物生长与自动灌溉、交通位置追踪与地理围栏、制造水果质量检测、零售货架库存检测、消费电子语音识别与多语言支持。每课同样提供 Wio Terminal、Raspberry Pi 与虚拟设备三条实现路径可直接查看本仓库对应code-*目录下的代码对照学习。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表