ARTICLE DETAIL

资讯详情

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

Johnny-Five 实战:在 Intel Edison 上驱动 Grove RGB LCD 实现旋钮调色

Johnny-Five 实战:在 Intel Edison 上驱动 Grove RGB LCD 实现旋钮调色 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载导读本文以 Johnny-Five 官方示例 docs/grove-lcd-rgb-edison.md 为主线完整讲解如何在 Intel Edison Arduino Breakout 开发板上通过 Grove Base Shield 连接 RGB 背光 LCDJHD1313M1与旋转电位器Rotary Angle Sensor实现转动旋钮实时改变 LCD 背光颜色的完整方案。读完本文你将掌握 Johnny-Five 的Sensor与LCD组件在 Edison 平台上的接线方法、I2C 控制器选型、scale()数值映射以及线性插值驱动bgColor()的实战写法。硬件与平台概览该示例基于 Johnny-Five 的通用抽象层设计Grove RGB LCD 组件可以在任何 Arduino 引脚兼容的硬件平台上工作本文使用的平台是 Intel Edison 的 Arduino Breakout 扩展板。程序通过edison-io这一 IO 插件将 Johnny-Five 与 Edison 的硬件能力桥接起来。需要准备的四件硬件硬件说明Intel Edison Arduino BreakoutEdison 的 Arduino 兼容扩展板提供标准引脚布局Grove Base Shield v2插接在 Breakout 上提供 Grove 标准 4-pin 接口含 I2C 与模拟口Grove - LCD RGB w/ Backlight即 JHD1313M1 控制器驱动的 RGB 背光字符 LCD16×2Grove - Rotary Angle Sensor旋转角度传感器电位器输出 0~5V 模拟电压接线要点来自 eg/grove-lcd-rgb-edison.js 的注释Rotary Angle Sensor 模块→ 插入 Grove Shield 的A0模拟口RGB LCD 模块→ 插入 Grove Shield 的任意I2C 接口LCD 通过 I2C 总线通信无需占用数字引脚。运行示例程序在项目根目录已npm install安装依赖的前提下执行node eg/grove-lcd-rgb-edison.js对应的官方文档命令为node eg/grove-lcd-rgb-edison.js见 docs/grove-lcd-rgb-edison.md两者完全等价。示例源码位于 eg/grove-lcd-rgb-edison.js程序启动后会持续监听 A0 口的旋钮变化并实时刷新 LCD 背光颜色。注意示例依赖外部模块edison-io需要预先通过npm install edison-io安装同时你的 Edison 需要刷入支持 Firmata/I2C 的标准固件。程序结构逐段解析1. 初始化 Board 与 Edison IO 插件var five require(johnny-five); var Edison require(edison-io); var board new five.Board({ io: new Edison() });five.Board接收一个 IO 插件实例new Edison()Johnny-Five 通过该插件向 Edison 发送标准指令。这一模式同样出现在 eg/grove-lcd-rgb-temperature-display-edison.js 等 Edison 平台示例中是 Johnny-Five 平台无关架构的典型体现——Board组件在 lib/board.js 中统一封装了io适配层上层组件Sensor、LCD只面向io接口编程。2. 创建旋转电位器传感器var rotary new five.Sensor(A0);Sensor构造函数在 lib/sensor.js 中实现默认按 10-bit ADC 分辨率0x3FF即 0~1023读取模拟输入并将引脚设置为ANALOG输入模式this.io.pinMode(this.pin, this.io.MODES.ANALOG)。也就是说旋钮在 A0 口上原始读数为 0~1023 之间的整数。3. 创建 JHD1313M1 RGB LCDvar lcd new five.LCD({ controller: JHD1313M1 });LCD组件lib/lcd.js通过controller选项选择驱动协议。JHD1313M1控制器在源码中注册为两个 I2C 地址// LCD: 0x3E // RGB: 0x62 this.address { lcd: options.address || 0x3E, rgb: 0x62 };也就是说一个模块内部实际上是两个 I2C 从设备0x3E负责字符显示HD44780 兼容指令集0x62负责 RGB 背光控制。初始化时源码会执行标准 HD44780 初始化序列sleep(50)等待上电稳定、连续发送功能设置命令、开启显示、清屏、归位随后开启背光并将默认背景色设为黑色this.bgOn(); this.bgColor(options.color || black);默认行列为lines 2、cols 1616×2 字符屏可通过rows、cols等选项覆盖。4. 旋钮值映射与背光调色核心逻辑rotary.scale(0, 255).on(change, function() { var r linear(0xFF, 0x4B, this.value, 0xFF); var g linear(0x00, 0x00, this.value, 0xFF); var b linear(0x00, 0x82, this.value, 0xFF); lcd.bgColor(r, g, b); });这段代码是本示例的精华分三步理解第一步scale(0, 255)线性映射。Sensor.prototype.scale(low, high)在 lib/sensor.js 中实现将 ADC 原始读数0~1023等比例映射到 0~2558-bit区间并存入状态同时把this.isScaled置为true。this.value返回的即映射后的值。第二步change事件监听。源码中Sensor在读回调里对模拟读数做中位数滤波state.median median(samples)以抑制噪声然后发射data事件只有当滤波后的值与上一次相差超过threshold默认1时才发射change事件lib/sensor.js。因此这里用change监听旋钮的实质性转动避免背光被抖动频繁刷新。第三步线性插值计算 RGB。辅助函数linear实现标准线性插值function linear(start, end, step, steps) { return (end - start) * step / steps start; }旋钮在 0~255 范围内转动时RGB 三分量分别从「红色0xFF,0x00,0x00」向「紫色0x4B,0x00,0x82」平滑过渡中间经过黄、绿、青、蓝等中间色实现整段可见光谱的渐变。5.bgColor()的底层实现LCD.prototype.bgColor(red, green, blue)在 lib/lcd.js 中实现接收三种调用形式三个数值、色名如black或 16 进制色值统一经RGB.ToRGB()归一为{ red, green, blue }分量然后通过 I2C 向背光控制器0x62依次写入寄存器this.io.i2cWrite(address, [0x00, 0]); // 模式寄存器选择 RGB 模式 this.io.i2cWrite(address, [0x01, 0]); // 使能寄存器 this.io.i2cWrite(address, [0x04, rgb.red]); // 红色分量 this.io.i2cWrite(address, [0x03, rgb.green]); // 绿色分量 this.io.i2cWrite(address, [0x02, rgb.blue]); // 蓝色分量每次调用返回this支持链式调用例如示例 eg/grove-lcd-rgb-temperature-display-edison.js 中的lcd.bgColor(r, g, b).cursor(0, 0).print(f)。同时 LCD 还提供bgOn()与bgOff()控制背光开关分别向0x62写入0xAA与0x00。延伸字符显示与背光联动的另一种玩法同为 Edison 平台的 eg/grove-lcd-rgb-temperature-display-edison.js 展示了同一块 LCD 的进阶用法使用Thermometercontroller: GROVE接 A0读取温度根据温度区间让背光在「冷→蓝→紫」与「热→红→黄」之间变化同时调用lcd.cursor(0, 0).print(f)在首行打印华氏温度值。其颜色映射同样是linear()线性插值。如果你的项目需要在显示文本的同时用背光做状态指示可直接参考该示例。排错与注意事项I2C 接线必须接 I2C 口JHD1313M1 走 I2C 总线内部地址0x3E0x62接到 Grove Shield 的数字/模拟口无法工作模拟口选择旋钮接 A0Sensor(A0)中的引脚名要与实际接口一致依赖完整性确保johnny-five与edison-io均已安装且 Edison 固件支持标准 I2C 通信背光默认状态初始化时若未传color选项背光默认为黑色bgColor(black)属正常现象首次转动旋钮后颜色即开始变化事件频率change事件带阈值去抖若觉得响应过灵敏或过迟钝可调整Sensor的threshold或freq选项。总结本文围绕 docs/grove-lcd-rgb-edison.md 的官方示例打通了「Intel Edison Grove Shield RGB LCD 旋钮」的完整链路从edison-io的 Board 初始化到Sensor的scale()映射与change事件、LCD的JHD1313M1双 I2C 地址结构再到bgColor()的寄存器级写入。掌握了这套模式你就可以在任意 Arduino 引脚兼容平台上自由组合 Grove 传感器与 RGB LCD快速构建带可视化反馈的物联网交互界面。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐基于 Johnny-Five 在 Intel Edison 上驱动 Grove RGB LCD全量 CSS 颜色名背景色预览实战基于 Johnny Five 在 Intel Edison 上驱动 Grove RGB LCD全量 CSS 颜色名背景色预览实战 本篇技术指南讲解如何用 JoIoT机器人嵌入式Johnny-Five 在 Intel Edison 上驱动 Grove 气压计BMP180实战指南Johnny Five 在 Intel Edison 上驱动 Grove 气压计BMP180实战指南 本文基于 Johnny Five 仓库中的 groveIoT机器人嵌入式Johnny-Five × Intel Edison 旋钮电位器实战用 Grove Rotary Angle Sensor 控制 LED 亮度Johnny Five × Intel Edison 旋钮电位器实战用 Grove Rotary Angle Sensor 控制 LED 亮度 本篇指南基于IoT机器人嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表