本文作者:劉觀宇,360 奇舞團高級前端工程師、技術經理,曾參加 360 導航、360 影視、360 金融、360 遊戲等多個大型前端項目。關注 W3C 標準、IOT、人工智慧與機器學習的最新進展,W3C CSS 工作組成員。
何處望神州?滿眼風光北固樓。千古興亡多少事?悠悠。不盡長江滾滾流。年少萬兜鍪,坐斷東南戰未休。天下英雄誰敵手?曹劉。生子當如孫仲謀。 ——宋·辛棄疾《南鄉子·登京口北固亭有懷》
源起2016 年前後,在技術論壇裡面看到 Raspberry Pi(樹莓派)的廣告的時候,這種小巧、廉價、便攜的設備,深深打動了筆者。積習慢慢侵襲,二話不說果斷地入手一臺。在短暫的折騰了一陣之後,就放在了一邊。近期,WoT 大潮正以迅雷不及掩耳之勢席捲而來,筆者想到這個躲在角落吃灰的玩意兒,立馬翻出來,吹一吹上面的灰塵.
半個小時後,當塵煙漸漸散去,一個乾淨如新的 Raspberry Pi 2 躍然眼前,雖然型號已經有一些過時,但是,鑑於硬體架構是類似的,這個「中年」還是可以充分發揮餘熱的。是的,正如網上流行的觀點,「不要大聲責罵年輕人,他們會立刻辭職的,但是你可以往死裡罵那些中年人」。那吾輩在此,不妨往死裡糙磨這個「中年」樹莓派。
但是,這番折騰,還是需要一些目標的。這樣,我們就可以不斷地從目標的達成中,獲得正反饋,進而給堅持不斷探索以堅實的理由——在用拖把擦拭地板時候,我這樣想。
創意總是豐富的,搜索知乎上可以找到不少相關的問題,比如這個:有哪些對樹莓派的有趣改造和擴展應用1。筆者從這裡找到很多好玩的創意,非常希望能將這些創意在樹莓派上實現。為此,開設這個系列,希望能夠記錄一些小創意的動手實現過程,並且給讀者今後做這些應用一些借鑑。
認識樹莓派樹莓派,最早由英國劍橋某實驗室由物理學家埃本·阿普頓花費六年時間研製,於 2012 年 3 月開始正式發售。樹莓派外形僅有一張信用卡大小,卻具有電腦的所有基本功能。
大多數的樹莓派都支持多個 USB 接口,以及乙太網接口。樹莓派的 CPU 架構為 ARM,與傳統意義上的個人電腦的 x86 架構不同。這篇文章2詳述了兩種架構的區別。體積小、低功耗、低成本的 ARM 架構 CPU 在行動裝置、單片機等設備上已經得到了廣泛使用。ARM 架構的這些優點也正是和樹莓派的研發目的高度契合的。
樹莓派最新的版本是 3B+,有著更強勁的處理器,更快的網絡支持,同時直接整合了藍牙適配器,支持藍牙 4.2 協議。目前很多物聯網的研究也基於樹莓派實現。
作為一個單板計算機,樹莓派有很多作業系統可供使用。這裡推薦樹莓派官方的 Raspbian,這個系統基於 Linux 的發行版 Debian 進行了深度定製。安裝上這個系統,你的樹莓派可以獲得 Linux 的系統能力、基礎設備的驅動,以及浩如煙海的高質量軟體包。
樹莓派包含有 40 組 GPIO 輸入輸出引腳,通過高低電平的變化感知,可以與傳感器配合做出一系列非常有意思的應用。很多高級語言(環境)如 C/C++、Python 和 NodeJS 都支持對 GPIO 操控的封裝。這也是樹莓派的一個非常吸引人的特色。
除了樹莓派,還有很多類似的單板計算機產品,如香蕉派、Arduino 等,有興趣的讀者可以延伸閱讀相關資料。
需要購置的最少設備讓我們開始我們的樹莓派之旅。
不同於其他的軟體實踐,第一個攔路虎就是需要購置一定的設備。還是之前的原則,新手上路,可以循序漸進。先讓樹莓派「跑起來」,然後在不斷的正向反饋中,慢慢入坑。
為了確定最少的設備投入,需要先來確認這一次要做什麼,達成哪些目標。
經過一番審慎的計劃,筆者把這次的目標定為:使用樹莓派,搭建一個內網可以訪問的 NodeJS 網站開發環境。
首先,我們需要一個樹莓派主機,即一塊單板,最新版的是 3B+。筆者這邊是之前的樹莓派 2。
其次,為了保證主機可以免受周圍環境的影響,同時也保證取用放置方便,所以我們需要給主機一個外殼。
再有,為了散熱方便,你可以購置一些散熱片或散熱風扇。考慮散熱效果和操作便利性,建議購買散熱風扇。
另外,樹莓派的系統一般燒錄在 SD 卡上。卡的讀取速度,會影響整個樹莓派的運行效率,因此建議使用高速卡。卡的大小最好大於 4GB(話說現在已經很少見到這個容量以下的卡了,也很少見到低速卡了),同時還需要一個讀卡器。如果筆記本電腦已經配備了讀卡器,則這項開支時可以剩下的。
為了第一次將樹莓派連上網,請準備一條網線。
同時,如果有無線路由器,為了操作方便,建議再購置一個無線網卡。
最後,如果你不想每次關機就大把抓拔電源,可以買一個帶開關的電源。
OK 了,上述東西已經足夠完成這次的目標了。
讀者可以從某寶某東上搜索相關的產品進行購買,或者從官網的購買3連結點擊到對應購買頁面,原則上這些東西 200-400 大洋就能搞定。
來吧,上面這些東西來個開箱照片。
將它們攢起來,還是很妥帖的。
當然,後面我們的系列文章中會出現傳感器、跳線等小元件。筆者感覺周期性的購置那些,才是最燒錢的環節:-)
安裝系統你的樹莓派和你的小宇宙都準備好爆發了麼?在爆發之前,先把作業系統安好。
如前文所說,建議先安裝官方推薦的 Raspbian。讀者可以去這裡4下載安裝包。目前有兩個版本,一個是包含桌面版的,安裝包比較大,如果你配置好了相關的顯示器和鍵盤滑鼠可以考慮這一版。如果暫時不需要桌面支持(需要時候可以再安裝),可以考慮下載 Lite 版。
這裡,我們以 Lite 版為例。
下載回來的是一個 Zip 包,藉助壓縮包查看工具看到,壓縮包裡面包含一個.img 文件,我們將把它燒錄到 SD 卡上面。
完成這項工作,需要藉助一些工具。這裡,官方推薦的是 Etcher。這個軟體是一個圖形化的寫卡工具,有 Mac、Linux 以及 Windows 的對應版本。讀者遵循下列步驟即可完成燒錄。
從這裡5下載符合你的系統的 Etcher,並安裝之。
連接讀卡器,插入待寫入的 SD 卡
運行 Etcher,選擇剛剛下載的 Zip 文件或解壓過的.img 文件。
選擇待寫入的 SD 卡。
點擊「Flash」,然後去泡一杯茶或者咖啡,等待燒錄完成。
初始化系統確認 IP裝好了系統之後,我們將其通過網線接入路由器。此時,樹莓派會自動連接上網絡。因為沒有購買顯示屏和鍵盤滑鼠,可以通過 SSH 遠程連接到樹莓派進行操作。現在的問題在於如何確認樹莓派的 IP。
有幾種方案,這裡介紹一種最簡便的方案:用手機或 PC(如果沒有.,那還是給樹莓派配上顯示器和鍵盤滑鼠吧)打開路由器的管理界面(不了解這個界面的,可以諮詢路由器廠商。如果沒有特殊設置過,一般是 http://192.168.0.1/admin ),並轉到設備管理頁面,此時會發現名為 raspberry 設備,此時可以記下它的 IP (如 192.168.0.10)
用戶設置現在可以用 SSH 客戶端連接樹莓派,如果讀者使用的是 Mac 或者 Linux ,系統會自帶 SSH 連接終端,如果是 windows,請讀者下載安裝 Putty 等 SSH 連接軟體。
如果樹莓派的 SSH 服務沒有打開,在燒錄好鏡像之後,在boot分區中新建一個名為ssh的文件夾,正常開機,通過 SSH 即可連接到樹莓派。
默認地,樹莓派分配了一個用戶 pi,默認密碼是:raspberry。因為是默認的,為了安全第一步應該把登錄上去把它的密碼修改掉。
ssh pi@192.168.0.10
在提示符下我們可以輸入 raspberry 完成登錄。立即修改密碼。
passwd
此時,根據彈出的提示,修改掉默認的密碼。這樣可以在一定程度上,提高樹莓派的安全性。
另外,建議新建一個用戶作為常用帳戶,如:
sudo adduser leon
sudo passwd leon
這樣就建立了一個名為 leon 的新用戶,同時可以為 leon 設置帳號密碼。
為了能夠進行系統級的操作,可以將 leon 加入 sudoer。
sudo visudoer
在編輯界面下,將 leon 加入列表並保存。以後,SSH 登錄樹莓派就可以使用 leon 作為用戶名了。
配置工具樹莓派本身也提供一個配置工具界面。在命令行下鍵入命令sudo raspi-config。顯示如下圖。
在中國大陸的同學,建議更換國內的源,以保證更快的下載速度。這裡使用阿里的源,如果讀者有更好的源,可以類似地更換。
因為我們安裝的系統是以 Debian 發行版作為基礎。所以 Debian 的軟體包管理工具在這裡是可用的。同理可知,換源的方法也是類似的。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
下面,注釋掉原來的源,添加以下兩行
deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
這裡需要注意的是,不同的 Raspbian 系統版本, wheezy這一列可能會變成 Jessies。造成這種變化的原因是,基於不同的 Debian 系統,系統的名稱不同。穩妥的辦法是參照原來的源的寫法,僅僅修改掉域名即可。
修改完畢後,可以運行sudo apt-get upgrade完成軟體包資源索引的更新。成功更新後,就可以高速下載對應的軟體了。
關於中文亂碼解決的辦法是安裝中文字庫和輸入法,同時修改系統的默認字符集。
sudo apt-get install ttf-wqy-zenhei
sudo apt-get install scim-pinyin
在上面所說的配置工具中,選擇第 5 項,根據提示進行配置。接下來的屏幕,選擇 Change Locale
在接下來的屏幕中,去掉 en_GB.UTF-8 UTF-8,選中「en_US.UTF-8 UTF-8」、「zh_CN.UTF-8 UTF-8」和「zh_CN.GBK GBK」。並在下一屏幕默認語言選 zh_CN.UTF-8。
重啟樹莓派,使得結果生效。
更換時區默認地,樹莓派的時區是 UTC0,對於時間相關的應用會造成問題。中國大陸位於東八區,我們可以通過sudo raspi-config來設置。
選擇 亞洲 > ShangHai 切回主頁面後按 Finish 保存退出。 即可完成設置。
無線網卡配置如果你沒有移動樹莓派的需求,那麼插著網線就能解決網絡的問題了,如果是這種情況,讀者可以跳過這一節。不過,如果今後有想法做需要移動的應用,或者不喜歡插網線,還是推薦裝好無線網卡。
首先,你需要確認你的無線網卡已經被正確驅動。可以通過連接樹莓派,輸入ifconfig命令查看所有樹莓派的網絡設備。不能找到網卡的情況很少見,如果不幸遇到,請先確認網卡可用,並尋找對應的驅動程序安裝。
下面,準備好相應的 WIFI 信息。編輯wpa_supplicant.conf文件。sudo vim /etc/wpa_supplicant/wpa_supplicant.conf,在此文件結尾增加,如下代碼:
network={
ssid="WIFI名稱"
key_mgmt=WPA-PSK
psk="WIFI密碼"
}
這裡注意:
ssid 名稱不推薦中文
最好不要帶有.等特殊符號
此時即可重啟網絡 /etc/init.d/networking restart
可以再次使用ifconfig查看網絡。同時可以打開上面提到的路由器管理頁面,查看是否有新設備加入。如果你的無線網卡被發現了,你就可以:
放心的拔掉網線
連接 IP,使用無線網卡的 IP。
安裝 Web 伺服器軟體上面我們已經把系統的主要功能做了配置。下面我們開始進行 Web 伺服器軟體的配置。這裡我們使用 Nginx 作為伺服器軟體。
因為系統是基於 Debian 的,並且已經配置了較快的軟體源,所以下面的操作是比較愉快的。
sudo apt-get install nginx -y
此時,Nginx 的默認 www 根目錄在/usr/share/nginx/www,你可以修改 /etc/nginx/sites-available/default 來配置網站的目錄、埠、代理等等。
配置 NodeJS 開發環境理論上,可以通過sudo apt-get install nodejs來安裝。但是,這種方法安裝的 NodeJS 版本可能會比較舊。如果從源碼安裝,鑑於樹莓派的處理能力比較弱,故而不推薦。
這裡推薦一種比較省力和完善的方法。
使用uname -a 查詢系統版本,找到 arm***字樣。
打開 https://nodejs.org/dist/latest/ 找到符合這個「arm」的軟體包,下載之。
解壓縮。
將解壓過的 node 文件夾,如「node-v10.10.0-linux-armv7l」移動到/usr/local/目錄下,將其重命名為 node。
運行echo PATH=$PATH:/usr/local/node/bin >> ~/.bashrc; source ~/.bashrc
如此即可完成 NodeJS 的安裝。
安裝完成後,我們就可以自由發揮創造力來構建基於 NodeJS 的網站。這裡推薦一下奇舞團出品的 NodeJS 框架 ThinkJS,最新的版本是 3.2.8。官網是:https://www.thinkjs.org/ 。我們基於這個框架可以快速的搭建網站。
看,下面就是 ThinkJS 的表演時間,美滋滋 :-)
本篇文章中,筆者帶大家簡單了解了樹莓派,並詳述了系統安裝和一些系統初始化配置,安裝了網站伺服器環境和 NodeJS 開發環境,建立了一個 NodeJS 網站開發環境。藉此完成了樹莓派的新手上路。有關傳感器等更加有趣的內容,將在今後的系列文字中不斷出現。筆者也會加緊時間,給大家呈現更有意思的樹莓派。
感謝何文力為本文提出的修改建議。設計師王旋mm,為本文設計的精美題圖,在此一併表示誠摯的謝意。
文內連結https://www.zhihu.com/question/20697024/answer/15888489
http://m.elecfans.com/article/678193.html
https://www.raspberrypi.org/products/#buy-now-modal
https://www.raspberrypi.org/downloads/raspbian/
https://etcher.io/
關於奇舞周刊《奇舞周刊》是360公司專業前端團隊「奇舞團」運營的前端技術社區。關注公眾號後,直接發送連結到後臺即可給我們投稿。