[Raspberry Pi(樹莓派)](https://www.raspberrypi.org/),是英國的樹莓派基金會所開發的單板計算機,它是由 Eben Upton 以及他的同事設計的,最初的目的是以低價硬件及自由軟件促進學校的基礎計算機科學教育。

*樹莓派 Model B+*
在物聯網(IoT)高速發展的今天,樹莓派以低廉的價格、開放的硬件/軟件生態、靈活的通用輸入輸出(GPIO)接口,成為學習、研究物聯網和萬維物聯網(WoT)的理想設備。
樹莓派不是單片機,不同于嵌入式硬件設備,它不是為集成于單一智能產品而設計的。它實際上是一臺完整的電腦,只不過這臺電腦只有一張 IC 卡片大小,用 5V 直流電源供電,并且有可以用程序來控制邏輯電平輸出的通用接口。這意味著,如果你要為單一智能產品設計集成一體的智能電路,那么你應該選擇一款可編程的 Arduino 或者其他微控制器芯片(不過樹莓派也可以用作輔助開發工具),而如果你想做分布式的傳感器和執行器網絡,以便實現與萬維網連接的智能家居系統,那么樹莓派當然是再好不過的選擇。
大約三年前我就接觸了[樹莓派](https://zh.wikipedia.org/zh-cn/%E6%A0%91%E8%8E%93%E6%B4%BE),我的同事[阿肆](https://www.ivershuo.com/)更曾經仔細研究過,并分享了文章[《在樹莓派上使用 node.js 控制步進電機》](https://www.ivershuo.com/2012/12/motor_ctrl_by_nodejs_in_pi/)。
不過我之前一直沒怎么研究,直到最近因為翻譯一本 WoT 的書加上一些其他原因,而且樹莓派經過這些年的發展也更加成熟,于是就重新入手最新版的[樹莓派 Model B+](http://item.jd.com/1646034971.html),開始正式寫一些東西玩,比如:[操控 LED 燈](http://weibo.com/p/230444b61b180608f1b819e75bbab1772d45b3)。
樹莓派可以用 Scratch、Python、C/C++ 等各種語言進行編程,而因為我這些年研究最多的語言是 JavaScript,所以也就自然希望使用 JavaScript 作為首選的編程語言。幸運地是,Node.js 在樹莓派 Model 3B 下運行表現好的超出我的意料,在樹莓派下跑?[Node.js 4.4.7 LTS](https://nodejs.org/en/download/),無論是易用性、穩定性還是性能,都非常出色。
其實除去上面介紹的這些,最關鍵的一點是:樹莓派真的非常有趣,想象一下,你有一臺只有一張 IC 卡片大小的低功耗廉價電腦(Model 3B 在京東上的售價是 298 元),它可以跑幾乎一切 ARM 6 架構下可以運行的軟件,同時還可以擁有操控硬件的能力,你可以用它來控制溫度濕度傳感器,檢測你房間內的溫度濕度,并智能指揮你的空調該在什么時候開關機,更進一步,你還可以收集和存儲從傳感器獲得的數據,然后將它用 ECharts 在 瀏覽器上用好看的圖表展現出來!
## 澄清幾個誤區
在探索樹莓派之前,我們先一一澄清幾個常見的誤區:
* ~~樹莓派只是一個單板,入手之后還得給它配置許多外設才能使用。~~
* ~~樹莓派安裝、配置起來很麻煩,只適合專業人士。~~
* ~~樹莓派只有專用軟件,和我的PC、移動設備不兼容。~~
* ~~沒有必要的硬件知識很難上手樹莓派硬件開發。~~
### 要購買外設嗎?
要運行樹莓派,實際上并不需要入手太多外設,我們先大致看一下樹莓派(Model 3B)本身集成了哪些資源:
* CPU 和 GPU:?[Broadcom BCM2835](http://www.farnell.com/datasheets/1521578.pdf)
* 內存:1024 MB(LPDDR2)
* 視頻輸入: 15-針頭 MIPI 相機 (CSI) 界面,可被樹莓派相機或樹莓派相機(無紅外線版)使用
* 視頻輸出: HDMI 可接入大多數通用 HDMI 接口的顯示設備
* 音源輸入:I2S
* 音源輸出:HDMI 電子輸出或I2S
* 板載存儲:MicroSD 卡插槽
* 板載網卡:10/100Mbps 以太網接口(RJ45接口),支持802.11n無線網絡及藍牙4.1
* 通用外設:14 個 GPIO
* 電源輸入:5V 電壓 (通過 MicroUSB 或經 GPIO 輸入)
可以看一下入手樹莓派后幾個關鍵的“輔助設備”:
首先樹莓派電源支持 MicroUSB,絕大多數 Android 手機使用的充電器都可以給樹莓派供電,相信很少有人手邊沒有,因此不需要額外購買此外設。
顯示器,其實可以不需要(后面會說),實在想要用顯示器的話,大多數支持 HDMI 輸入的顯示器都可以直接使用。如果想要單獨配置的話,可以考慮小型車載高清液晶顯示器,好一點一臺四五百塊錢,效果如下:

我使用一款車載 LCD 顯示器作為樹莓派顯示器
鍵盤鼠標,其實也可以不需要(后面會說),想要的話,普通的 USB 鍵盤鼠標就可以。不過樹莓派是低功耗的,驅動能力有限,如果接了多臺 USB 外設,最好配置自帶供電的 USB 集線器,如果要玩硬件開發的話,還是應該把功率留給 GPIO 使用。
存儲設備,采用 8GB 以上的 MicroSD Card,甚至在很多舊手機上就可以找到。
聲音輸出,如果用 HDMI 設備,是視頻音頻集成的,不需要額外的接入。
網卡和藍牙,Model B/B+ 內置了無線網卡,Model 3B 還集成了藍牙,所以這些理論上都不需要額外購買。
以上是主要輔助設備,其實基本上都有或者容易找到,那么我們要買些什么呢?如果你要好好玩的話,建議你買:
* 自帶供電的 USB 集線器,如果你想要使用一些 USB 外設的話。
* 幾塊散熱片(一般幾塊錢就夠了),因為樹莓派 Model 3B 的 CPU 和 GPU 運算能力比較強,發熱量還是比較高的,可以給它們貼上散熱片。
* 通用的電子元件可以提前準備一些,但是也不是必須的,要做東西的時候再買也可以(這時候有點懷念在深圳的時候,如果在深圳,自己周末可以去華強北逛,隨時買各種元件,種類豐富,非常便宜,現在大部分只能網購,送貨比較慢)。通用元件大部分都很便宜,各種常用0.25w電阻(幾百個也才幾塊錢),電容、晶體管、LED燈、排線(杜邦線)、面包板、PCB電路板、按鍵開關等等。剩下的特定元件就等做東西的時候再買,或者提前購買一些也行。
* 工具箱/收納盒:因為元件比較散,如果家里沒地方放,再買個工具箱放起來是個好習慣。
* 電工工具:如萬用表、電烙鐵等
差不多這些就夠了,這是對于玩硬件的同學來說購買的東西,如果不打算玩硬件(有的同學拿它做服務器用,其實也可以),最后三條都可以不買。
### 樹莓派系統的安裝
樹莓派的芯片是 ARM 6 架構的處理器(Broadcom 公司的 BCM2835),在它上面可以跑各種版本為 ARM 6 發布的 Linux 系統。官方推薦的系統是 Raspbian。從它的名字就可以看出,這個系統是 Debian 的一個分支(這意味著足夠標準和通用了,Debian 的另一個著名分支是很多人,包括我在內,最喜歡用的 Ubuntu)。
樹莓派的系統安裝也非常簡單,對于熟悉 Linux 系統的同學來說,只不過從官方下載最新的 Raspbian 鏡像,然后寫入一張空白的 MicroSD 卡里,將這張卡放入樹莓派板底部的卡槽里,然后給樹莓派接上電源就可以了。
如果你有配 HDMI 顯示器和鍵盤鼠標,你就可以看到系統的啟動畫面,幾秒鐘后就能進入 Raspbian 系統的圖形化 UI 界面。而事實上,通常我不推薦配置鍵盤鼠標這樣的通用外設(還是把 USB 留給其他用途吧)。我們可以通過網線將樹莓派和路由器連接起來,然后查看一下 IP 地址,從電腦上用終端 SSH 登錄上樹莓派就可以很愉快地玩耍了。
*樹莓派 Raspbian 系統的默認用戶賬號是 pi,初始密碼是 raspberry*
### 樹莓派的軟件安裝
Rasbian 系統是 Debian 系統的分支,所以支持萬能的 apt-get。大多數軟件都支持 ARM6 編譯,包括 Node.js,所以安裝軟件不是什么問題。唯一可能的問題大概是樹莓派功耗低,I/O 操作較慢,所以一些軟件編譯的時間長一些。
*在樹莓派下給 Node.js 安裝 npm 軟件包的時候,請帶上 --production 參數,這樣會省掉很多 devDependancies 安裝,大大提升速度!*
### 驅動無線網卡
樹莓派 Model 3B 板上集成了無線網卡,直接編輯?`/etc/wpa_supplicant/wpa_supplicant.conf`?配置:
~~~
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf
~~~
編輯為:
~~~
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="<wifi名稱1>"
scan_ssid=1
psk="<wifi密碼1>"
priority=5
}
network={
ssid="<wifi名稱2>"
psk="<wifi密碼2>"
priority=1
}
~~~
如果有多個 wifi 網絡,你可以設置多個不同的連接,通過優先級 priority 來指定先連接哪個(數字越大優先級越高),這樣做尤其方便你把樹莓派帶來帶去。
連接了 wifi 之后,就可以省掉一條網線,通過無線連接 ssh 登錄樹莓派進行操作了。
### 樹莓派和 GPIO 編程
樹莓派的開發基礎是用程序來控制板上的 GPIO 引腳的邏輯值(也就是電平高低)。

*這一排中右側標記為橙色的引腳就是 GPIO*
GPIO 引腳可以設置為輸入和輸出兩種狀態,輸出狀態即是由程序控制引腳的輸出,0表示低電平,1表示高電平(此時該引腳為+3.3V電壓)。輸入狀態是由外接設備給該引腳引入信號,輸入狀態下的引腳是只讀的不可寫,可以讀取狀態。此時的引腳還有上拉或下拉電阻可以設置。
GPIO 編程的基本原理就是這樣,本文暫不做太詳細的介紹,后續文章里我會詳細介紹。
下面我們通過一個直觀的例子就可以體會用樹莓派控制硬件設備有多簡單:
1. 取一個發光二極管元件
2. 將它的正極連接 P36 腳(即 GPIO 16),將它的負級接旁邊的 P34 腳(GND,接地)
3. 編寫程序 blink.js:
~~~
//blink.js
var Gpio = require("rpio2");
var led = new Gpio(36); //創建 P36 引腳
led.open(Gpio.OUTPUT, Gpio.LOW); //設置為 OUTPUT、默認低電平
for(var i = 0; i < 10; i++){
led.toggle(); //切換 led 的電平狀態
led.sleep(500); //等待 500ms
}
led.close();
~~~
安裝?[rpio2](https://github.com/akira-cn/rpio2)?庫,執行?`node blink.js`,就會看到連接的 LED 元件閃爍 5 下,每次閃爍 1s。
## 總結
不得不說,樹莓派是一個很好玩的電子設備,如果你學習做和硬件相關的編程,打算涉足 IoT,或者 WoT(Web of Thing),那么樹莓派是一個很好的選擇。
你入手樹莓派了嗎?你用樹莓派來玩什么?歡迎在底下評論區討論。
后續文章里我會詳細介紹用 Node.js 開發 GPIO 的細節,除了軟件編程外,還包括一些硬件基本概念比如上拉、下拉電阻,系統中斷調用,I2C,等等。
讓我們一起來玩樹莓派吧~
本文鏈接:[http://www.75team.com/post/raspberry-pi.html](http://www.75team.com/post/raspberry-pi.html)
--?EOF?--
作者?[`akira_cn`?](https://75team.com/author/akira_cn)發表于?*2016-07-27 18:57:49*?,最后修改于?*2016-07-27 20:03:59*