为了运行 Node 脚本,树莓派必须安装 Node,可以参考 这篇文章。
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - $ sudo apt install nodejs
正常情况下,Node 版就已经安装成功了。
$ node -v v8.1.0
点亮 LED
树莓派提供了一组对外的 IO 接口,称为 GPIO( 通用 IO 接口,General-purpose input/output)。
它的 40 个脚的定义如下图。
注意,左上角的第1针(3.3V)是一个方块,其他针脚都是圆的。将树莓派翻过来,背后可以看到 GPIO 有一个角是方的,通过这种方法就可以确认哪一个针眼是3.3V。
通过 GPIO ,树莓派可以与其他电子元件连接。下面根据 Jonathan Perkin 的文章,使用树莓派连接 LED 二极管。
这里需要用到面包板。本质上,面包板就是几根导线,上面开了许多可以连到导线的孔。
+极和-极是两根垂直的导线,标着1、5、10这些数字的行,每一行都是一根水平的导线。导线与导线之间互不连接,另外,面包板的左右两半也是互不连接的。
然后,按照下面的图,将树莓派、面包板、LED 灯、电阻连起来。
上图中,红色导线表示电流的正极,从 GPIO 的第1针(3.3V)连到面包板。黑色导线表示电流的负极,从 GPIO 第三排的第6针(ground)连到面包板。它们连到面包板的哪个眼并不重要,但必须保证能组成一个完整的电路(上图的箭头流向)。注意,LED 二极管也有正负极,长脚表示正极,短脚表示负极。电阻没有正负极。
连接完成后,打开树莓派的电源,LED 应该就会亮起来了。
LED 控制脚本
下面,我们使用 Node 脚本控制 LED。
首先,将正极的导线从1号针脚(3.3V)拔出,插到第6排的11号针脚(上图的 GPIO 17)。这个针脚的电流是脚本可以控制的。
然后,在树莓派上新建一个实验目录,并安装控制 GPIO 的 Node 模块rpio。。
$ mkdir led-demo && cd led-demo $ npm init -y $ npm install -S rpio
接着,新建一个脚本led-on.js。
// led-on.js var rpio = require('rpio'); // 打开 11 号针脚(GPIO17) 作为输出 rpio.open(11, rpio.OUTPUT); // 指定 11 号针脚输出电流(HIGH) rpio.write(11, rpio.HIGH);
运行这个脚本,应该就会看到 LED 灯泡变亮了。
$ node led-on.js
再新建一个led-off.js脚本,只要改一行(完整代码看 这里)。
// led-off.js //... // 指定 11 号针脚停止输出电流(LOW) rpio.write(11, rpio.LOW);
运行这个脚本,LED 灯泡应该就会熄灭了。
$ node led-off.js
有了这两个脚本,让 LED 闪烁就轻而易举了。新建一个led-blink.js脚本。
// led-blink.js var rpio = require('rpio'); rpio.open(11, rpio.OUTPUT); function blink() { rpio.write(11, rpio.HIGH); setTimeout(function ledoff() { rpio.write(11, rpio.LOW); }, 50); } setInterval(blink, 100);
上面的脚本让 LED 每秒闪烁10次。
$ node led-blink.js
HTTP 服务器
通过控制 LED 可以做很多事,比如架设一个 HTTP 服务器,每当有人访问,LED 就闪烁一下。
首先,在刚才的目录里面装一个服务器模块。
$ npm install -S server
然后,新建一个脚本server.js(完整代码看 这里)。
// server.js var server = require('server'); var { get } = server.router; // ... server({ port: 8080 }, [ get('/' , ctx => { console.log('a request is coming...'); blink(); }), ]); console.log('server starts on 8080 port');
运行这个脚本。
$ node server.js
然后,再打开一个命令行终端,访问8080端口,LED 就会闪一下。
$ curl http://localhost:8080