nodejs和樹莓派開發以及點亮RGB的LED燈程式碼

NO IMAGE

前段時間集團舉行前端IOT比賽,藉此機會熟悉了樹莓派相關的東西,特此記錄一些相關的文件和開發指南。

先介紹一些樹莓派的入門教程

阮一峰的樹莓派入門

微雪電子-樹莓派硬體中文官網

ssh連結樹莓派

ssh [email protected](ip)
密碼:raspberry

設定顯示裝置

推薦選購3.5吋或者5吋的HDMI顯示裝置,我第一次買的3.2吋的串列埠顯示器,佔用了我20個串列埠的針腳。

裝置連結見這裡

使用3.5吋顯示器

cd /boot/LCD-show/
./LCD35-show
使用HDMI輸出

cd /boot/LCD-show/
./LCD-hdmi
設定旋轉螢幕

設定顯示方向
安裝完觸控驅動後,可以通過執行以下命令修改螢幕旋轉方向。

旋轉0度:

cd /boot/LCD-show/
./LCD35-show 0
旋轉90度:

cd /boot/LCD-show/
./LCD35-show 90
旋轉180度:

cd /boot/LCD-show/
./LCD35-show 180
旋轉270度:

cd /boot/LCD-show/
./LCD35-show 270
聲音設定為非HDMI輸出

Bash
sudo amixer cset numid=3 1
需要注意的是如果你是瀏覽器播放聲音。。拔掉顯示器後貌似瀏覽器就進入後臺模式不播放聲音了。

介紹一些相關的nodejs的庫

https://github.com/rwaldron/j…

一個適配各種板子的串列埠的基礎庫,當你需要點亮LED小燈泡的時候需要用到它

Raspi-io

Raspi-io is a Firmata API compatible library for Raspbian running on the Raspberry Pi that can be used as an I/O plugin with Johnny-Five.

和上面一個庫搭配使用。

rpio

https://github.com/jperkin/no…

This is a high performance node.js addon which provides access to the Raspberry Pi GPIO interface, supporting regular GPIO as well as i²c, PWM, and SPI.

一個控制開啟某個串列埠針腳的基礎庫。

serialport

https://github.com/EmergingTe…

一個連結控制硬體的基礎庫,比如控制USB串列埠,和連結USB串列埠的裝置進行通訊等,他有很多版本,樹莓派的版本見這裡

https://www.npmjs.com/package…

安裝有點,麻煩。我折騰了3小時、、、、

點亮一個LED燈

LED燈分為簡單的兩個針腳的二極體燈,點亮見前面阮一峰部落格,下面重點介紹一下RGB的LED燈

TB1KFkTSXXXXXcxXXXXXXXXXXXX-772-570.jpg
如上所示。這樣的燈點亮的教程比較少。

第一步選擇對應的串列埠針腳,首先不要把插針腳2,即: 5V口那個。

我插了兩個分別是RGB為:[29,31,33],[36,38,40]

程式碼如下

var five = require("johnny-five");
var Raspi = require('raspi-io')
var rpio = require('rpio');
var isLED1On=false;
var isLED2On=false;
var LED = {
LED1:null,
LED2:null,
init(LED1=[29,31,33],LED2=[36,38,40]){
var board = new five.Board({
io:new Raspi({enableSoftPwm:true})
});
this.LED1=LED1;
this.LED2=LED2
board.on('ready',function(){
return new Promise(function(resolve,reject){
var led1 =  new five.Led.RGB({
pins: {
red: `P1-${LED1[0]}`,
green: `P1-${LED1[1]}`,
blue:`P1-${LED1[2]}`,
}
})
var led2 =  new five.Led.RGB({
pins: {
red: `P1-${LED2[0]}`,
green: `P1-${LED2[1]}`,
blue:`P1-${LED2[2]}`,
}
})
// 開啟 11 號針腳(GPIO17) 作為輸出
rpio.open(LED1[0], rpio.OUTPUT);
rpio.open(LED1[1], rpio.OUTPUT);
rpio.open(LED1[2], rpio.OUTPUT);
rpio.open(LED2[0], rpio.OUTPUT);
rpio.open(LED2[1], rpio.OUTPUT);
rpio.open(LED2[2], rpio.OUTPUT);
rpio.open(LED1[0], rpio.HIGH);
rpio.open(LED1[1], rpio.HIGH);
rpio.open(LED1[2], rpio.HIGH);
resolve(board);
})
})
},
openLED1(){
console.log('led1' JSON.stringify(this))
rpio.write(this.LED1[0], rpio.HIGH);
rpio.write(this.LED1[1], rpio.HIGH);
rpio.write(this.LED1[2], rpio.HIGH);
isLED1On=true;
},
openLED2(){
rpio.write(this.LED2[0], rpio.HIGH);
rpio.write(this.LED2[1], rpio.HIGH);
rpio.write(this.LED2[2], rpio.HIGH);
isLED2On=true;
},
closeLED1(){
console.log('led1' JSON.stringify(this))
rpio.write(this.LED1[0], rpio.LOW);
rpio.write(this.LED1[1], rpio.LOW);
rpio.write(this.LED1[2], rpio.LOW);
isLED1On=false;
},
closeLED2(){
rpio.write(this.LED2[0], rpio.LOW);
rpio.write(this.LED2[1], rpio.LOW);
rpio.write(this.LED2[2], rpio.LOW);
isLED2On=false;
},
flashLED1(){
if(isLED1On){
return;
}
var self = this;
self.openLED1();
setTimeout(function () {
self.closeLED1();
},3000);
},
flashLED2(){
if(isLED2On){
return;
}
var self = this;
self.openLED2();
setTimeout(function () {
self.closeLED2()
},3000);
},
}
module.exports={
led:LED
}

更多內容詳見我的部落格