ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

IoT-For-Beginners 实战:在 Wio Terminal 上编程内置光敏传感器,为夜灯项目添加“感知”能力

IoT-For-Beginners 实战:在 Wio Terminal 上编程内置光敏传感器,为夜灯项目添加“感知”能力 IoT-For-Beginners 实战在 Wio Terminal 上编程内置光敏传感器为夜灯项目添加“感知”能力【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文是微软开源课程 IoT-For-Beginners 第 3 课《使用传感器和执行器与物理世界交互》的 Wio Terminal 实操篇。你将基于上一课时创建的夜灯nightlight工程利用 Wio Terminal 内置的模拟光敏传感器通过analogRead读取光照强度并把数值打印到串口监视器。读完本文你将掌握光敏传感器的硬件原理、pinMode/analogRead/Serial的完整用法以及如何为下一步“用 LED 执行器构建完整夜灯”铺路。传感器与执行器课程背景本课所在的第 3 课围绕“传感器sensors与执行器actuators”两大核心概念展开传感器感知物理世界并将其转换为电信号执行器则把电信号转换为物理世界的交互发光、发声、转动等。课程目标是让你在 Wio Terminal 上完成一个完整的夜灯先用光敏传感器读取光照强度再用LED 执行器在光线过暗时自动点亮。课程总览可参考 第 3 课 README其中的“Use a sensor”一节为 ArduinoWio Terminal、树莓派与虚拟设备提供了三套平行的接入指南本文讲解的是 Wio TerminalArduino 路线的传感器部分。硬件Wio Terminal 内置光敏传感器本课使用的传感器是光敏传感器light sensor其核心元件是光电二极管photodiode能够把光线转换为电信号。需要特别说明的是这是一个模拟传感器返回 0 到 1,023 之间的整数表示相对光照强度该数值不对应任何标准计量单位如勒克斯 lux因此只能用于比较“更亮/更暗”而不能换算成物理亮度值。Wio Terminal 的光敏传感器直接集成在主板上透过机身背面的透明塑料窗口即可看到。这是本课中少见的“零接线”外设——不需要 Grove 线缆也不需要面包板。编写光敏传感器读取程序下面正式开始编程。假设你已经按照课程前一课时创建好了 Wio Terminal 的夜灯工程PlatformIO Arduino 框架并能在 VS Code 中打开它。第 1 步在setup中配置传感器引脚在setup函数末尾添加一行pinMode(WIO_LIGHT, INPUT);这行代码的作用是配置与传感器硬件通信的引脚。WIO_LIGHT是 Wio Terminal 板级定义中预置的宏指向连接内置光敏传感器的 GPIO 引脚编号将其配置为INPUT表示该引脚连接的是传感器数据将从这里读入。第 2 步清空并重写loop删除loop函数原有内容填入以下代码int light analogRead(WIO_LIGHT); Serial.print(Light value: ); Serial.println(light);逐行拆解analogRead(WIO_LIGHT)从WIO_LIGHT引脚读取模拟值返回 0~1,023 的整数代表当前光照强度Serial.print(Light value: )向串口写入文本但不追加换行符这样输出行以Light value:开头Serial.println(light)写入实际光照数值并换行与上一行拼接成完整的输出行。第 3 步加入采样延时在loop末尾追加delay(1000);光照强度不需要持续不断地轮询每秒采样一次即可。增加延时还能显著降低设备功耗这对电池供电的 IoT 设备尤其重要。第 4 步编译、上传并观察重新连接 Wio Terminal像之前一样编译并上传代码。随后打开 Serial MonitorPlatformIO 中通过platformio device monitor或 VS Code 的 PlatformIO 插件启动即可看到每秒一行的光照数值输出 Executing task: platformio device monitor --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- --- Quit: CtrlC | Menu: CtrlT | Help: CtrlT followed by CtrlH --- Light value: 4 Light value: 5 Light value: 4 Light value: 158 Light value: 343 Light value: 348 Light value: 344验证技巧用手遮住 Wio Terminal 背面的透明窗口数值会骤降到个位数如 4、5移开手让传感器暴露在光线中数值会迅速升高如 343、348。数值随环境光实时变化说明传感器程序已经生效。源码级验证完整工程长什么样上面的代码并非零散片段仓库中提供了可直接对照的完整工程 code-sensor/wio-terminal。其核心文件 main.cpp 内容如下#include Arduino.h void setup() { Serial.begin(9600); while (!Serial) ; // Wait for Serial to be ready delay(1000); pinMode(WIO_LIGHT, INPUT); } void loop() { int light analogRead(WIO_LIGHT); Serial.print(Light value: ); Serial.println(light); delay(1000); }对照这个工程可以印证几个实现细节串口波特率 9600Serial.begin(9600)与 Serial Monitor 输出中的9600,8,N,1完全一致串口就绪等待while (!Serial);确保 USB 串口初始化完成后再继续避免首条日志丢失引脚常量WIO_LIGHT由 Seeed 的板级支持库定义D0则对应右侧 Grove 数字引脚下一步 LED 会用到工程配置platformio.ini 指定了目标平台[env:seeed_wio_terminal] platform atmelsam board seeed_wio_terminal framework arduino即基于 Atmel SAM 平台的seeed_wio_terminal板卡、Arduino 框架这也是 Wio Terminal 能直接使用pinMode/analogRead等标准 Arduino API 的原因。深入原理模拟信号是如何被读成数字的为什么analogRead返回的是 0~1,023 的整数而不是连续的电压值这涉及本课 README 中详细讲解的**模数转换ADC**机制IoT 设备本质上是数字设备只能处理 0 和 1无法直接理解模拟电压因此模拟传感器返回的电压必须经过**模拟-数字转换器ADC**才能被设备处理光敏传感器输出的电压会按照设备/传感器的量程换算成整数。例如 Seeed Grove 光敏传感器输出 0~1,023在 3.3V 供电下若传感器返回 1V则换算值为 300其二进制表示为0000000100101100幸运的是从编码视角看这些转换通常由库函数封装完成——Arduino 侧只需调用analogRead即可拿到整数结果无需关心底层换算详见 第 3 课 README 的“Analog to digital conversion”小节。这也是为什么 Wio Terminal 的 12 位 ADC 会给出 0~1,023实际以平台实现为准而非以伏特为单位的读数模拟值是相对量反映的是电压在量程中的比例位置。下一步把传感器变成真正的夜灯传感器读取只是第一步本课后续要求你把它与执行器组合当光照低于阈值300时点亮 LED否则熄灭。夜灯逻辑的伪代码如下Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off对应的完整实现位于 code-actuator/wio-terminal 工程核心是在loop中加入阈值判断并用digitalWrite驱动右侧 Grove 插座的D0引脚if (light 300) { digitalWrite(D0, HIGH); } else { digitalWrite(D0, LOW); }这里的HIGH即逻辑 1Wio Terminal 上为 3.3V点亮 LEDLOW即 0V熄灭 LED。LED 通过 Grove 线缆连接到 Wio Terminal 屏幕朝上时的右侧Grove 插座——该插座同时支持模拟与数字外设左侧插座仅支持 I²C 与数字外设。完整接线与编程步骤见 wio-terminal-actuator.md。至此你已完成“传感器感知 执行器响应”的完整闭环光敏传感器负责测量环境光LED 根据阈值自动开关一个无需任何手工操作的物联网夜灯就此诞生。你可以继续沿课程路线把光照数据发布到云端完成后续的联网、数据处理与可视化练习。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表