
Intel Edison Grove 继电器控制实战Johnny-Five 与 Edison-IO 集成指南【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-fiveJohnny-Five 是运行在 Node.js 上的 JavaScript 机器人与物联网编程框架本指南围绕其 Grove 传感器生态中的继电器Relay模块展开演示如何在Intel Edison Arduino Breakout 板上通过 Grove Base Shield v2 的 D6 插口控制继电器通断。读完本文你将掌握 Edison 平台的 Johnny-Five 环境搭建、Grove Relay 的接线方式以及five.Relay的open()/close()/toggle()三个核心方法在真实代码与底层实现中的完整工作方式。硬件与平台说明Grove 是 Seeed Studio 推出的标准化传感器/执行器连接体系通过统一接口的 Base Shield 与各类模块即插即用。本文示例将 Grove Relay 模块插入Grove Base Shield v2再叠加到Intel Edison Arduino Breakout板上。正如原文档所强调的这种 Shield 与模块的组合适用于任何与 Arduino 引脚布局兼容的硬件平台因此本文的接线与代码思路也可迁移到其他 Arduino 兼容板卡。运行该程序需要以下硬件Intel Edison Arduino Breakout 板Grove Base Shield v2提供 D2D8 等标准 Grove 插口Grove Relay 模块继电器模块环境准备安装 Johnny-Five 与 Edison-IOEdison 在 Johnny-Five 生态中通过edison-io库作为底层 IO 插件IO Plugin接入Board构造时需显式注入该实例。根据 Edison Arduino 开发文档使用 Edison-IO 前需要先在 Edison 上刷写 Intel IoTDevKit 系统镜像随后在项目目录安装两个依赖npm install johnny-five edison-io安装完成后即可编写并运行程序。核心示例通过 Grove D6 插口控制继电器完整示例代码位于 eg/grove-relay-edison.js从命令行运行node eg/grove-relay-edison.js代码逐段拆解如下。1. 创建以 Edison 为 IO 层的 Boardvar five require(johnny-five); var Edison require(edison-io); var board new five.Board({ io: new Edison() });require(edison-io)引入 Edison 平台驱动new five.Board({ io: new Edison() })将 Board 的底层通信交给 Edison-IO 处理之后所有 Johnny-Five 组件Led、Relay、Servo 等都能以统一 API 操作 Edison 引脚。2. 在 ready 回调中实例化继电器board.on(ready, function() { // 将 Grove Relay 模块插入 Grove Shield 的 D6 插口 var relay new five.Relay(6); // 从终端手动控制继电器 this.repl.inject({ replay: relay }); });new five.Relay(6)以数字 6 作为引脚号构造继电器对应Grove Shield 的 D6 插口。Johnny-Five 的Board.Options会将该数值参数归一化为{ pin: 6 }形式的配置对象见 lib/board.options.js 的Options类。this.repl.inject({ replay: relay })把继电器实例注入 Johnny-Five 内置的 REPL。程序运行后你无需修改代码直接在终端输入relay.close()、relay.open()、relay.toggle()即可实时控制继电器通断非常适合在面包板或原型机上快速验证。深入源码Relay 的底层实现与行为语义要真正用好这个示例理解five.Relay的实现细节至关重要。其完整实现位于 lib/relay.js核心要点如下。构造参数与 NO / NC 类型构造函数支持两种传参方式直接传引脚号如new five.Relay(6)或传对象如new five.Relay({ pin: 6, type: NC })const pinValue typeof options object ? options.pin : options; options.type options.type || NO; const state { isInverted: options.type NC, isClosed: false, value: null, };type默认值为NONormally Open常开继电器未通电时电路断开若指定type: NCNormally Closed常闭则逻辑取反isInverted为true。close / open / toggle 三个方法方法行为底层调用close()闭合继电器电路isClosed置为true常开型写HIGH常闭型写LOWopen()断开继电器电路isClosed置为false常开型写LOW常闭型写HIGHtoggle()翻转当前通断状态内部根据isClosed决定调用open()或close()以close()为例源码通过this.io.digitalWrite直接对引脚写电平close() { const state priv.get(this); this.io.digitalWrite( this.pin, state.isInverted ? this.io.LOW : this.io.HIGH ); state.isClosed true; return this; }三个方法均返回this支持链式调用open()/toggle()的写法与之对称。此外实例还暴露三个只读属性valueisClosed的数值化1 或 0、typeNO或NC、isClosed布尔值。模拟引脚的自动映射Relay 还支持使用模拟引脚例如new five.Relay({ pin: A2 })。在 Firmata 类平台下源码会自动把A2转换为对应的模拟引脚索引并切换为输出模式if (Pins.isFirmata(this) (typeof pinValue string pinValue[0] A)) { this.pin this.io.analogPins[pinValue.slice(1)]; this.io.pinMode(this.pin, this.io.MODES.OUTPUT); }相关用法可参考 eg/relay-on-analog-pin.js 与 docs/relay-on-analog-pin.md。测试验证源码行为有据可依Relay 的上述行为并非孤证仓库在 test/relay.js 中用 Mock Firmata 提供了完整测试用例可直接印证代码逻辑close用例断言digitalWrite(10, 1)常开继电器闭合时引脚写HIGHopen用例断言digitalWrite(10, 0)断开时写LOWtoggle用例验证在open状态下调用toggle()后写HIGH再调用则写LOW即状态正确翻转NC用例验证常闭型反转逻辑close()时写 0、open()时写 1模拟引脚用例A2验证pinMode被调用一次且数字写操作落到正确的模拟引脚索引16上。这些断言与 lib/relay.js 的实现一一对应说明示例代码中继电器的通断行为是框架层面稳定保证的而非依赖具体硬件平台。扩展多继电器与定时翻转当需要同时控制多个继电器时可以使用five.Relays集合。参考 eg/relay-collection.js 与 docs/relay-collection.mdvar relays new five.Relays([3, 4, 5]); board.loop(2000, function() { // 翻转所有继电器的状态 relays.toggle(); });Relay.Collection通过Collection.installMethodForwarding将open/close/toggle等方法转发到集合中的每个实例见 lib/relay.js因此一行relays.toggle()即可同步控制多路继电器适合扩展到电灯、水泵等多路开关场景。注意事项驱动继电器模块通常需要外接电源切勿直接用开发板 3.3V/5V 引脚驱动大功率负载接线时请确认 Grove Relay 模块插入的插口号与new five.Relay(pin)的引脚参数一致本示例为 D6若继电器为常闭型NC请在构造时显式传入{ pin: 6, type: NC }否则通断逻辑会与预期相反文中代码使用 CommonJS 的require写法与仓库 eg 目录下示例保持一致运行前请确认已完成npm install johnny-five edison-io。结合本指南你可以在 Intel Edison 上快速搭建基于 Grove 生态的继电器控制原型并借助 REPL 实时调试或按需扩展为多路继电器定时控制方案。【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-five创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考