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

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

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

阮一峯的樹莓派入門前端

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

ssh連接樹莓派node

ssh pi@dd.dd.dd.dd(ip)
密碼:raspberrylinux

設置顯示設備git

推薦選購3.5吋或者5吋的HDMI顯示設備,我第一次買的3.2吋的串口顯示器,佔用了我20個串口的針腳。github

設備連接見這裏npm

使用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
}

更多內容詳見個人博客

相關文章
相關標籤/搜索