
树莓派 - JS 驱动 LCD1602
树莓派使用 johnny-five.js 库驱动 LCD1602 输出文字。
<封面摄于浙江·安吉的凤凰山,大一在这些玩了半年树莓派,现在用树莓派来写毕设,不忘初心,笑。>
最近想用树莓派驱动 IoT 写个毕设,经过一番调研选择了 Johnny-Five 库,咱前端人必须用 JS 干啥都行。开始前先驱动个 LCD1602 试试。 LCD1602 我选择的是 I2C 驱动的,既省线,又不用拖个面包板。
安装 Node.js
这里我们选择用 nvm 安装,执行以下命令:
|
执行一下 node -v
和 npm --version
查看是否安装成功。
编译 pigpio
Johnny-Five 依赖于 pigpio,但是 Johnny-Five 库中集成的 pigpio 版本太老,不支持 64 位的系统,使用我们需要手动编译最新版本的 pigpio。
|
安装 Johnny-Five
Johnny-Five 需要两个 JS 依赖,johnny-five.js
和 raspi-io.js
。
|
输入以下内容并保存:
|
请查看板子背部芯片上刻着的型号正确填写,PCF8574、PCF8574A、PCF8574T、PCF8574AT。
Johnny-Five 有个坑,会导致文字无法正确输出只会输出一个个方块,需要修复一下,详见:Raspberry and I2C LCD1602 with PCF8574T controller does not show text but only squares
cd 到 node_modules/johnny-five/lib/lcd.js
,将 this.io.i2cWrite(this.address, this.memory);
改成 this.io.i2cWrite(this.address, [this.memory]);
,保存即可。
运行
接线
LCD1602 有四根引脚,按如关联方式接入树莓派:
LCD | 树莓派 | 备注 |
---|---|---|
GND | 6 | 接地 |
VCC | 4 | 电源(5v or 3.3v) |
SDA | 3 | 数据信号 |
SCL | 5 | 控制信号 |
连接完成后命令行输入 sudo raspi-config
,Interface Options => I2C,启动 I2C 并重启。
重启后命令行输入 i2cdetect -y -r 1
,若显示如下则说明 I2C 连接成功。
|
运行
输入 sudo node index.js
运行程序即可看到 LCD 输出了字符。
输出字符
这里只是简单的做了个输出示范,开发中对应的 API 可以查看官方文档。
Johnny-Five 这个库还是挺厉害的,基本可以无脑驱动周边常用的元器件,python 能干的事儿,咱 JS 肯定要更优雅。也可以尝试一下 Cylon.js 这个库,博主试了一下有坑,对新版系统支持不好。
踩坑指北
记录一下踩过的坑:
- pigpio 需要手动编译最新版本,否则无法驱动 64 位系统。
- Johnny-Five 需要修改源码,否则会导致输出不正确。
- 板子型号确认正确。
- 运行程序需要 root 权限,请跟
sudo
命令。 - 运行程序后可能板子上啥也没有,试着拨一下板子背部的旋钮调节一下亮度。
(博主调了一天源码没输出,就差给作者打电话了,晚上发现原来板子亮度没开,吐了……)
- 本文作者:zhaoo
- 本文链接:https://www.izhaoo.com/2021/02/03/raspi-johnny-five-lcd1602/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
