ARTICLE DETAIL

资讯详情

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

Johnny-Five 驱动 Grove LED 模块:从接线到闪烁的完整实战指南

Johnny-Five 驱动 Grove LED 模块:从接线到闪烁的完整实战指南 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载导读本文以 Johnny-Five 官方示例 grove-led 为主线完整讲解如何在 Grove 生态中接入 LED 模块从 Grove Base Shield 的 D6 插口接线、LED 正负极辨识到five.Led(6)的实例化与blink(500)闪烁控制。通过阅读本文你将掌握 Grove LED 模块的硬件连接方法、Led对象的核心 APIon/off/toggle/blink/stop并能对照 LED 源码 理解其底层实现原理最终可以独立把它移植到 Intel Edison、Arduino 等任意兼容引脚定义的单片机平台上。一、Grove LED 模块与 Johnny-FiveGrove 是 Seeed Studio 推出的一套模块化传感器/执行器生态其核心是统一的 4 针 Grove 接口VCC、GND 与信号线配合 Grove Base Shield 即可快速插接到 Arduino 引脚省去面包板和杜邦线的繁琐接线。Johnny-Five 是运行在 Node.js 之上的 JavaScript 机器人/物联网编程框架项目简介见 README.md它把硬件引脚抽象成Board与各类组件对象。Grove LED 模块在 Johnny-Five 中并不需要专门的驱动类——它本质就是一个普通的数字输出引脚因此直接使用通用的five.Led组件即可完成控制这也是该示例特别简洁的原因。本文对应的官方文档为 docs/grove-led.md仓库中还提供了基于 Intel Edison 的变体文档 docs/grove-led-edison.md两者核心代码完全一致仅在板卡 IO 适配层有所差异。二、硬件清单与接线准备运行本示例前需要准备以下硬件原文档 Additional Notes 一节所列一块兼容 Arduino 引脚定义的开发板如 Arduino UNO或 Intel Edison Arduino Breakout一块Grove Base Shield v2用于把 Grove 模块的信号映射到开发板数字引脚一个Grove - LED 模块Grove LED Module蓝色 PCB、带 Grove 接口的模块以及套件中的红、绿、蓝 LED 任选其一。接线要点直接继承自原文档注释将 LED 模块的 Grove 4 针线插入Grove Shield 的 D6 插口——D6 即 Arduino 的数字引脚 6代码中的引脚编号与之对应从套件中任选一颗 LED红/绿/蓝插入模块上的 LED 端子长引脚阳极接短引脚阴极接-插反不会亮。接线完成后实物形态可参考仓库中的示意图 docs/images/grove-led.jpgGrove LED 模块与配套红色 LED。三、完整示例代码与运行方式3.1 标准 Arduino 平台版本以下代码完整取自 eg/grove-led.js与文档 docs/grove-led.md 正文一致var five require(johnny-five); var board new five.Board(); board.on(ready, function() { // Plug the LED module into the // Grove Shields D6 jack. // // Select an LED from the kit // (red, green, blue) and insert // it into the LED module, with // the long pin in and short // pin in -. var led new five.Led(6); // This will blink the LED over // 500ms periods. led.blink(500); });3.2 运行命令在仓库根目录执行原文档给出的命令行方式node eg/grove-led.js说明示例代码中require(johnny-five)对应已安装 npm 包的形式仓库内的 eg/grove-led.js 实际写作require(../lib/johnny-five)即直接引用本仓库的源码入口二者等价。3.3 Intel Edison 平台变体若使用 Intel Edison 的 Arduino Breakout只需把 IO 适配层换成edison-io包LED 控制部分一字不改见 eg/grove-led-edison.jsvar five require(johnny-five); var Edison require(edison-io); var board new five.Board({ io: new Edison() }); board.on(ready, function() { var led new five.Led(6); led.blink(500); });正如 docs/grove-led-edison.md 所述该扩展板与 Grove 模块可以配合任何与 Arduino 引脚定义兼容的硬件平台使用——这正是 Johnny-Five 通过io插件抽象层实现跨平台的关键。四、Led 组件底层原理new five.Led(6) 发生了什么Led类定义在 lib/led/led.js并经由 lib/led/index.js 导出为Led主类及Led.Collection / Led.RGB / Led.Matrix / Led.Digits等子组件。4.1 构造函数与引脚模式判定从源码结构看lib/led/led.js构造函数new Led(6)的核心流程如下解析传入参数支持five.Led(pin)数字形式和five.Led({ pin: 6 })对象形式源码注释经Board.Options与Board.Controller初始化组件状态isOn、isRunning、interval等内部状态调用initialize在 DEFAULT 控制器中lib/led/led.js未显式指定引脚时默认回退到io.defaultLed || 13对应 Arduino 板载 LED根据引脚是否支持 PWM 选择PWM或OUTPUT模式并调用this.io.pinMode(pin, mode)完成初始化。Grove LED 模块在 D6 上属于普通数字输出OUTPUT 模式因此底层走的是io.digitalWrite路径lib/led/led.js。4.2 blink 的实现setInterval toggleblink的实现位于 lib/led/led.jsblink(duration, callback) { const state priv.get(this); // Avoid traffic jams this.stop(); if (typeof duration function) { callback duration; duration null; } state.isRunning true; state.interval setInterval(() { this.toggle(); if (typeof callback function) { callback(); } }, duration || 100); return this; }关键点解读led.blink(500)表示每个周期 500ms亮 500ms、灭 500ms一个完整闪烁周期为 1 秒未传参时默认 100msduration || 100blink内部先调用this.stop()清除已有定时器避免重复调用造成交通堵塞源码注释原文 Avoid traffic jams每次触发调用this.toggle()toggle依据isOn状态在off()与on()之间切换lib/led/led.js可以传入回调函数每次翻转时执行方便做状态计数或联动返回this支持链式调用文件末尾Led.prototype.strobe Led.prototype.blink;lib/led/led.js说明blink与strobe是完全等价的别名——这一点也被 test/led.js 的测试用例test.equal(this.led.blink, this.led.strobe)所验证。4.3 on / off / toggle 的状态机on()、off()与toggle()构成 LED 的基础状态机lib/led/led.json()OUTPUT 模式下写入io.HIGHPWM 模式下将亮度值置为 255全亮再调用update()off()把state.value置 0 并update()注意stop()并不等于灭灯——它只是清除定时器LED 会停在当前状态toggle()等价于isOn ? off() : on()。4.4 停止闪烁stop() 的正确姿势stop()lib/led/led.js会clearInterval并停止可能存在的动画state.animation.stop()随后把isRunning置为false。要彻底熄灭 LED需要在stop()之后再调用off()。这一点在文档 docs/led.md 的 REPL 备注中也有明确提示 led.stop() // to stop blinking then led.off() // to shut it off (stop doesnt mean off) then led.on() // to turn on, but not blink五、进阶玩法让 Grove LED 不只会闪烁blink只是 Led 众多能力的入门。在 Grove LED 模块上你还可以直接使用以下 API均有源码与测试支持API作用源码位置led.on()/led.off()常亮 / 熄灭lib/led/led.jsled.toggle()翻转当前状态lib/led/led.jsled.blink(ms, cb)/led.strobe(ms, cb)周期闪烁默认 100mslib/led/led.jsled.stop()停止闪烁/动画不改变当前亮度lib/led/led.jsled.brightness(0-255)设置模拟亮度仅 PWM 引脚lib/led/led.jsled.pulse(ms)呼吸灯效果PWM 引脚lib/led/led.jsled.fade(val, ms)/fadeIn/fadeOut渐变淡入淡出lib/led/led.js两点注意事项亮度/呼吸/渐变类 API 依赖 PWMD6 在多数 Arduino 兼容板上支持 PWM但若把模块换到非 PWM 引脚brightness等操作会触发Board.Pins.Error见 lib/led/led.js 的 PWM 错误检测逻辑Led.RGB是另一条路线Grove 也有 RGB LED 模块对应 lib/led/rgb.js但那需要分别占用多个引脚或 I2C不在本文 D6 单引脚示例的范围内。六、测试验证源码与测试用例互相印证仓库的单元测试 test/led.js 对strobe/blink行为做了精确断言可作为理解语义的权威参考test/led.jsstrobe用例led.strobe(100)后时钟拨动 100ms 断言写入HIGH(1)再拨 100ms 断言写入LOW(0)调用stop()后时钟再走 100ms断言digitalWrite调用次数不再增长——证实stop()能真正终止闪烁同时验证了回调函数每个周期触发一次test/led.jsblink用例断言led.blink led.strobe坐实二者是同一方法test/led.jsstop用例断言strobe()后isRunning为truestop()后回到false。这些测试使用的 mock 板卡环境可在 test/common 中找到说明 Johnny-Five 在无硬件环境下即可验证 Led 组件的逻辑行为。七、小结与常见问题排查围绕 Grove LED 的闪烁示例本文从硬件接线一路深入到 lib/led/led.js 的源码实现。最后给出几项实操排查要点灯不亮先检查 LED 是否插反——长脚、短脚-再确认 Grove 线插在 D6 插口而非 D5/D7没有输出或报错确认开发板固件已烧录 FirmataArduino 平台可通过 IDE 上传 StandardFirmata并确保node eg/grove-led.js时开发板已通过 USB 连接闪烁节奏不对blink(500)是亮 500ms、灭 500ms想要更快的默认节奏可直接调用led.blink()100ms跨平台复用把 eg/grove-led.js 的 IO 层替换为edison-io等插件参考 eg/grove-led-edison.js同一份 LED 代码即可在 Intel Edison 等其他板卡上运行。至此你已经掌握了 Johnny-Five 驱动 Grove LED 模块从接线到闪烁、再到按需扩展的全部要点可以在此基础上继续探索 docs/led.md 中更丰富的 LED 动画与 REPL 交互玩法。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐Johnny-Five 控制 Intel Edison Grove LED 闪烁从硬件接线到 Led 组件源码解析Johnny Five 控制 Intel Edison Grove LED 闪烁从硬件接线到 Led 组件源码解析 Johnny Five 是运行在 NoIoT机器人嵌入式Johnny-Five 驱动 RGB LEDLed.RGB接线、色彩控制与闪烁实战指南Johnny Five 驱动 RGB LEDLed.RGB接线、色彩控制与闪烁实战指南 本指南以 docs/led rgb.md https://linkIoT机器人嵌入式3 步装好猫抓插件网页视频、音频、M3U8 一键保存指南3 步装好猫抓插件网页视频、音频、M3U8 一键保存指南 猫抓插件cat catch是一款完全开源的浏览器资源嗅探扩展它在后台监听页面加载过程把藏在动IoT机器人嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表