资讯动态

Wio Terminal 板载光传感器编程实战:用 analogRead 构建 IoT 夜灯

发布时间:2026/9/16 16:35:07 来源:尧图企业网站定制
Wio Terminal 板载光传感器编程实战用 analogRead 构建 IoT 夜灯【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文以 Azure IoT-For-Beginners 课程第 3 课传感器与执行器为背景完整讲解如何在 Wio Terminal 上驱动其板载光传感器从硬件原理光电二极管与模拟信号、pinMode/analogRead编程步骤到 PlatformIO 编译上传与 Serial Monitor 验证的全流程。读完本文你将能亲手把“读取光强数值”这一核心能力接入自己的 IoT 设备程序并为后续添加 LED 执行器、完成“黑暗环境自动亮灯”的夜灯应用打下基础。硬件认识 Wio Terminal 的板载光传感器本课使用的传感器是光传感器light sensor其核心元件是一枚光电二极管能够把入射光转换为电信号。这是一枚模拟传感器analog sensor它向微控制器输出一个01,023 的整数表示“相对光量”。需要注意的是这个数值并不对应任何标准度量单位例如光照度 lux它只是一个相对量用于比较当前光照的强与弱。在 Wio Terminal 上这枚光传感器是板载内置的不需要额外接线——透过设备背面半透明的塑料窗口即可看到它。与需要外接 Grove 线缆才能使用的传感器相比板载传感器让“读取环境光”成为零布线成本的入门实验。 关于模拟传感器的背景知识传感器从设备获得电压传感器元件改变该电压设备再测量返回的电压从而得到传感值。由于 IoT 设备本质是数字的只能处理 0 和 1模拟值需要经过**模数转换器ADC**才能被处理。Wio Terminal 内部已经集成了 ADC因此在代码中只需调用analogRead就能直接拿到 01,023 的数字量而无需关心底层电压转换细节。更完整的模拟/数字传感器理论可参阅 1-getting-started/lessons/3-sensors-and-actuators/README.md。前置准备nightlight 项目与 PlatformIO 环境本课的编程任务是接着上一课更深入地了解 IoT / 微控制器创建的nightlight 项目继续开发。该项目基于 PlatformIO Arduino 框架目标环境配置可在仓库自带的 code-sensor/wio-terminal/nightlight/platformio.ini 中查看[env:seeed_wio_terminal] platform atmelsam board seeed_wio_terminal framework arduinoplatform atmelsamWio Terminal 采用的 Atmel SAMD51 系列芯片平台board seeed_wio_terminal指定目标开发板为 Seeed Wio Terminalframework arduino使用 Arduino 框架编写 C/C 代码包含setup与loop两个核心函数。在 VS Code 中打开已创建的 nightlight 项目WIO Terminal目录下的项目即可开始修改src/main.cpp。编程光传感器逐行解析完整代码第一步在setup中把光传感器引脚配置为输入在setup函数末尾追加一行pinMode(WIO_LIGHT, INPUT);这行代码配置了与传感器硬件通信所使用的引脚。WIO_LIGHT是连接板载光传感器的 GPIO 引脚编号将其设置为INPUT意味着该引脚连接的是传感器程序将从引脚读取数据。第二步在loop中读取并输出光强值清空loop函数原有内容写入以下代码int light analogRead(WIO_LIGHT); Serial.print(Light value: ); Serial.println(light);analogRead(WIO_LIGHT)从WIO_LIGHT引脚读取一次模拟值返回 01,023 的整数Serial.print(Light value: )向串口输出文本且不带换行使每一行以Light value:开头Serial.println(light)紧接着输出实际光强值并换行。第三步在loop末尾加入一秒延时delay(1000);光照强度并不需要被连续不间断地检测因此在每次循环末尾暂停1,000ms1 秒。这不仅减少无效采样还能降低设备功耗——这在电池供电的 IoT 场景中是重要习惯。完整代码与仓库示例一致将以上内容组合后完整的src/main.cpp与仓库示例 code-sensor/wio-terminal/nightlight/src/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); }注意setup中的几个细节Serial.begin(9600)以9600 波特率初始化串口与下文 Serial Monitor 的监视速率一致while (!Serial);等待串口就绪确保后续输出不会丢失delay(1000)在配置完引脚后短暂等待让传感器与串口稳定。上传固件并验证Serial Monitor 中的光强读数完成代码修改后按如下步骤验证将 Wio Terminal 重新连接到电脑像上一课那样编译并上传新固件打开 Serial Monitor波特率 9600即可看到光强值持续输出用手遮挡、再移开Wio Terminal 背面的光传感器观察数值随之变化。遮挡与暴露传感器时串口输出大致如下 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可以看到当光传感器被遮住时读数接近45接近黑暗移开遮挡后读数迅速上升到158、343、348等较高数值。这验证了analogRead读取的是相对光强数值越大代表光照越强。 完整示例代码位于仓库的 code-sensor/wio-terminal 目录可对照阅读。延伸从“读光强”到“自动夜灯”在真实 IoT 场景中单纯的传感器读数通常要驱动某个决策。课程在下一部分wio-terminal-actuator.md中就利用本节读取到的light值通过右侧 Grove 接口的D0数字引脚控制外接 Grove 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/nightlight/src/main.cpppinMode(D0, OUTPUT); // 在 setup 中配置 D0 为输出连接 LED // 在 loop 中读取 light 之后 if (light 300) { digitalWrite(D0, HIGH); // 光强小于 300点亮 LED } else { digitalWrite(D0, LOW); // 光强不低于 300熄灭 LED }这里有两个值得注意的要点阈值 300 是经验值从 Serial Monitor 中观察到的读数遮挡时约 4暴露时 300来看300 恰好能把“黑暗”与“光亮”两种状态区分开。你可以根据自己的实际环境调整这个阈值这也正是先完成传感器读数实验的意义所在数字输出语义向执行器发送数字值时LOW代表 0VHIGH代表设备最高电压对 Wio Terminal 而言HIGH为3.3V。传感器→判断→执行器这条链路正是物联网设备感知物理世界并作出反应的最小闭环。本节完成的“读取光强并打印到串口”就是这条链路的第一环。小结与故障排查提示关键点说明传感器类型板载模拟光传感器光电二极管输出 01,023 相对值引脚配置pinMode(WIO_LIGHT, INPUT)在setup中完成一次读数 APIanalogRead(WIO_LIGHT)返回 01,023串口输出Serial.printSerial.println波特率 9600采样节流delay(1000)降低功耗阈值判断光强 300 视为黑暗可用于驱动 LED 执行器如果 Serial Monitor 中没有输出请依次检查固件是否已成功上传、串口波特率是否为 9600、while (!Serial);等待逻辑是否阻塞部分系统需要先打开 Serial Monitor 再复位设备。遮挡/移开传感器时数值应明显变化若读数恒定不变则需确认WIO_LIGHT引脚配置与代码未被意外改动。至此你已经完成了“为 Wio Terminal 添加光传感器”的全部实验为后续构建完整的自动夜灯项目做好了准备。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价