前段時間集團舉行前端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燈
如上所示。這樣的燈點亮的教程比較少。
第一步選擇對應的串口針腳,首先不要把插針腳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 }
更多內容詳見個人博客