樹莓派3 By Pony Jiang

文章推薦指數: 80 %
投票人數:10人

不管是NOOBS 或NOOBS Lite,當它開機後,都會嘗試連上Raspberry 的官網,尋找可安裝的作業系統清單,. 然後列表給使用者選擇安裝,而被選擇的作業系統如果不在SD 卡上, ... 樹莓派3  RaspberryPi3 完整教學 <>      本篇是寫給沒玩過樹莓派又想學習的人看的,若是熟手、高手、高高手,也歡迎瀏覽指教, 若有錯誤或建議,請用 [email protected]與我連絡,謝謝。

  <> 樹莓派3ModelB長像: 樹莓派官網、樹莓派wiki (一)樹莓派硬體說明及準備     上圖是樹霉派3ModelB的正面,樹莓派3Model B是「一台」電腦, 它是all-in-one的主機板,主機板上的介面說明如下: 1.4個USB2.0連接埠。

2.10/100EthernetRJ45接頭。

3.音源輸出--3.5mm立體聲接頭。

4.CSIS5(Socket5)攝影機接頭(CSI-CameraSerial Interface)。

5.HDMI輸出端子。

6.microUSB5V2A電源接頭。

7.DSIS2(Socket2)螢幕端子(DSI-DisplaySerial Interface)。

8.GPIO接腳,GPIO各腳位及使用方式,在後面會有詳細介紹。

   上圖是樹莓派3ModelB的背面,樹莓派有一個microSD 插槽,位置就在樹莓派的背面。

      樹莓派3ModelB採用64bit四核心的ARM Cortex-A53CPU,RAM為1Gb, GPU則是VideoCoreIV,只支援較舊的OpenGLES2.0繪圖,硬體影像解碼只支援H.264 (FullHD30phigh-profile), 並不支援H.265;樹莓派內建IEEE802.11b/g/n無線網路及藍牙4.1。

     就硬體規格來看,樹莓派在IoT(Internetof Things,物聯網)的運用,具有很高的優勢,因為: 1.樹莓派內建wifi、藍牙及有線網路。

  2.樹莓派體積小,不到香煙盒大小(吸煙有礙健康)。

3.就IoT的運用,樹莓派不用特別處理散熱問題。

4.樹莓派使用5V2A的電源,屬於低功耗。

     樹莓派3官方公佈的售價是 35美金,但在台灣是買不到這個價錢,若由國外買回來,則要再加上運費, 除非一次購買很多東西來分攤運費,否則還是在國內買比較不那麼麻煩,國內價格NT$1500以內,就可以購買, 本人由Adafruit或 PIMORONI購買,攤了運費之後,價格大概在NT$1200左右,但要等待約兩週的運送時間。

      在開始使用樹莓派3(後面用RPI3 稱呼)之前,有一些周邊要準備: 1.SD卡,RPI3用SD卡取代硬碟,所以SD卡必備,目前我在樹莓上使用過最大的SD卡是用到256G,     但RPI3用8GSD卡就能運作,給初學者建議是8G 或16G。

  2.USB電源線,RPI3用的是microUSB的接頭,就是一般Android手機用的USB 電源接頭,     但要注意的是,RPI3本身沒有電源開關,當它插上電源就開始開機,拔掉電源就沒電,     所以可以找找看有附開關的USB線材(參考),或是有附開關的 USB電源插座。

  3.螢幕,RPI3沒有特別要求什麼螢幕,但是它的顯示輸出端子是HDMI,所以如果要接VGA螢幕,    那需要準備HDMI轉VGA 的轉換頭,RPI3沒有螢幕也能運作,但RPI3在網路功能設定好之前,螢幕是必備。

4.滑鼠及鍵盤,滑鼠非必備,但接上滑鼠會比較方便,在初期設定階段,鍵盤則是必需;     設定好的RPI3可以不用滑鼠及鍵盤,滑鼠必須是有線滑鼠,雖然RPI3 有藍牙,但是在系統設定好之前,     光有藍牙滑鼠也無法操作RPI3進行配對。

  5.網路:樹莓派有wifi及EthernetRJ45接頭,在網路設定好之前,最好有 DHCP的網路環境。

  6.最後,當然要有一片樹莓派3,目前最新的樹莓派型號是 RaspberryPi3ModelB+(2018/3/14公佈)。

     以上若準備妥善,就可開始樹莓派的作業系統安裝及設定。

  (二)樹莓派RaspbianOS系統安裝    樹莓派官方指定與建議使用的作業系統是Raspbian,它是Linux 作業系統,安裝Raspbian有兩種方式, 第一種,使用Raspberry官方提供的NOOBS(NewOutOfBox Software)來安裝作業系統, NOOBS是個簡易的開機系統,開機後再選擇要安裝的目的作業系統。

      NOOBS可以在Raspbarry的官網下載取得,在下載頁面中,有兩組(四個)下載供選擇:    我各人喜好是選擇ZIP檔案下載,用Torrent 下載或許速度比較快,但我感覺要做很多的操作(我承認...我懶XD), 而ZIP下載就滑鼠按一下就開始下載會比較方便。

      Noobs及Noobs Lite,兩個的差異在官網下載頁面的上方已經清楚的說明,左邊的下載, 就是已經預先載入了Raspbian作業系統的Image,所以用左邊的下載來開機,會如下圖: 如果用右邊的下載來開機,會如下圖: Lite就是只有NOOBS空殼;所以左邊的連結下載下來的檔案有1.26Gb 大,右邊的連結下載後只有33Mb。

      NOOBSLite是個空殼?那我下載它做什麼? 不管是NOOBS或NOOBSLite,當它開機後,都會嘗試連上Raspberry 的官網,尋找可安裝的作業系統清單, 然後列表給使用者選擇安裝,而被選擇的作業系統如果不在SD卡上,NOOBS則會先下載該作業系統的Image 再進行安裝。

      所以要用NOOBSLite,最好要有DHCP 的環境,如果沒有DHCP,那還是建議使用1.26Gb的NOOBS比較方便, 因為Raspbian的Image已經預載在SD卡上了。

      用左邊還是右邊的下載,端看個人,不過上面有說過,Raspbian 的安裝方式有兩種, 我是建議用第二種安裝方式,所以這邊請自行選擇,其實用NOOBS安裝樹莓派, 最主要的目標作業系統並不是Raspbian,下面會說明原因。

      現在請將下載下來的檔案解壓縮,將它解到一個叫NOOBS的目錄,解壓縮後看起來應該長這樣:    在上面的檔案中,有一個檔案值的關注一下,就是INSTRUCTIONS-README.txt,這個檔案是安裝說明, 該檔案提到SD卡需要8GB以上,但若你使用的是高容量的SD卡,將會遇到一個問題: 全新的高容量SD卡,它的Partition 是用exFAT格式,但是RPI3並不認識這種Partition! 所以該文件中也告訴使用者,去哪裡下載SD卡Format的工具;在繼續操作之前, 請先檢查一下你的SD卡的Partition是哪一種格式?如果是FAT或FAT32那沒有問題,如果不是這兩種格式的Partition, 那請依文件中的說明,到這裡(可變更為繁中介面)下載 SD卡Format程式,並將你的SDFormat成FAT或FAT32格式。

      以上準備完成後請將這些檔案複製到SD卡的根目錄下,接著將SD卡插進RPI3再接好鍵盤、滑鼠、螢幕、網路, 最後將USB電源插上,RPI3就會開機了。

      開機後,所看到的畫面一定跟剛剛上圖不一樣,應該長的像這樣: 這是因為RPI3只要連上Internet,NOOBS就會去搜尋被樹莓派官方放進NOOBS 的作業系統, 移動Scrollbar,就可以看到可透過NOOBS安裝的作業系統;其中比較有趣的: OSMC-->安裝它,可以讓樹莓派變成一台多媒體播放器,網路上有中文教學,請自行搜尋"樹莓派 OSMC"。

recalboxOS -->安裝它,可以讓數莓派變成一台遊戲機模擬器!這在國外的青少年間非常流行,一樣的請自行上網搜尋相關教學。

Windows10IoTCore-->Microsoft 也在樹莓派上出了Windows10的核心,不過真的是核心,裝起來後,連檔案總管都沒有,                                          這是MicrosoftIoT的Solution,給熟悉Microsoft平台的開發族群(MSVS.net)使用。

所以,會用NOOBS來安裝作業系統,就是針對上述三個作業系統比較多, 但OSMC、recalboxOS也有單一的image檔可下載安裝,並非一定要透過 NOOBS,若有興趣就請自行上網尋找。

若對OSMC有興趣,請自行Google「樹莓派多媒體播放器」「樹莓派OSMC」等, 若對遊戲機模擬器有興趣,請Google「樹莓派月光寶盒」「樹莓派潘多拉盒」但記得,自己動手做才有樂趣!      再來就選擇我們要裝的目標作業系統--Raspbian;請看下圖:     請選擇要安裝的作業系統,再點選 左上角的「Install」,Noobs就會進行安裝。

但是眼尖的你可能會注意到:Raspbian有兩個耶!一個上面有[RECOMMENDED](推薦),一個是 RaspbinaLite; Recommended是官方建議的做業系統,而Lite則是裝起來後,沒有X-Window,它是純文字模式的 Raspbian; 其實在RPI3上面,使用X-Windows的機會並不大,因為做為一台IoT電腦,當你將你的IoT 架設起來後, 也不大有機會再去使用這台電腦,所以,安不安裝X-Window端看個人。

      NOOBS的安裝方式,就介紹到此,因為安裝之後,就跟用 Image安裝之後完全一樣。

      接下來就講解怎麼用 Image來安裝Raspbian。

Raspbian的Image檔可以由 官網下載取得。

    下載頁面裡,一樣有兩個選擇四個連結,兩個選則分別是: RASPBIANSTRETCHWITHDESKTOP RASPBIANSTRETCHLITE 它的差別就是->Lite為純文字模式,而WithDesktop就是包含 X-Window,並且開機後會進入X-Window, 在還沒熟悉Linux的操作前,我們就先下載有X-Window的版本,所以點選左邊的下載連結, 要直接用網頁下載,就點「DownloadZIP」,要用Torrent下載,就選「Download Torrent」。

      完成下載後,將檔案解開,會得到一個.img的Image 檔,而這次的下載得到的是: 2018-03-13-raspbian-stretch.img這個檔案,因為Raspbian 是隨時在維護、更新這個系統, 所以在官網的下載頁面中看到的下載內容會隨著時間而有所不同,例如RaspbianStretch這個版本, 是2017年底才推出的,之前的版本叫做RaspbianJessie,並且Jessie也有好幾個不同日期的版本!      解開的Image檔要用「燒錄」的方式燒到SD卡裡,用Copy 的是沒用的,所以我們要準備燒錄軟體, 我用的是Win32DiskImager這套軟體來將Image寫到SD卡,這個軟體可以由這裡下載 或是由這裡下載, 下載完成後,請進行安裝,之後將程式開啟,畫面如下: 在裝置的地方,它應該會自己抓你的SD卡磁碟機代號,但為了保險起見,要檢查一下是否正確, 映像檔欄位,請選擇剛剛下載並解開的映像檔,選好之後應該像下圖: 確認沒有問題後,按下『寫資料到「裝置」』按鈕,確認寫入後,程式就會開始將Image檔寫到SD卡。

完成如下圖: Win32DiskImager還有一個功能,它能把SD卡內容讀取出來,建立成Image檔, 所以當一個系統建立後,可以用這套軟體來備份,若是要發佈一套已建置的系統, 也可以透過這個功能來達到。

     樹莓官方在Image檔的安裝方式也有說明, 它也針對SD 卡燒錄做出了建議: 官方建議使用Etcher 這套軟體,我個人是沒使用過所以就不搬門弄斧, 如果要用Etcher請自行使用、測試。

      將Raspbian寫到SD卡後,請把SD卡插入 RPI3: 並將RPI3接上Keyboard、Mouse、Monitor、網路線後,插上電源便會開始開機,開機完成畫面應該如下: 看到上圖,那就是RPI3已經裝好RaspbianLinux。

我們接下來要進行作業系統的設定。

  (三)樹莓派3 Raspbian更新與網路設定    剛裝好的Raspbian  要做的第一件事就是更新系統;如上面所說的,樹莓派隨時都有可能在維護系統, 所以下載下來的Image有些元件可能已經不是最新的,因此我們安裝好Raspbian後,就先更新系統, 更新要用命令列來進行,所以我們要先開一個Terminal,請參考下圖: 點擊上圖標示的地方後,會開啟一個Terminal,出現命令列模式: pi@raspberrypi:~$ 進行更新請輸入下列指令: sudoapt-getupdate 輸入完按下Enter後,Raspbian將下載元件清單準備更新,當下載完成,又會出現命令列,這時請下: sudoapt-getupgrade 按下Enter後,將開始進行upgrade更新,當它問你 Doyouwanttocontinue[Y/n] 請回答大寫的Y及Enter,更新就正式開始,更新完成後,會再出現命令列等待指令, 我個人習慣是更新完,讓它重新開機,如果要重新開機,請用下列指令: sudoreboot       系統完成更新重新啟動後, 接下來我們要設定 SSH登入,能夠SSH登入後, 我們的RPI3就不再需要Keyboard、Mouse及 Monitor,並且後續所有的設定、控制都能在遠端進行, 包括寫Code、Compiler等,也就是說,設定好SSH後,就可以回到你熟悉的Windows操作 RPI3。

      大部分的Linux操作模式就是在Windows裡開 Terminal來進行,  使用Linux很少很少會需要到本機端進行操作,這也是為什麼官網的Raspbian會有Lite版, 因為X-Window幾乎用不到啊!當然世事無絕對,你要在X-Window安裝中文字型、注音輸入法、 用LibreOffice來寫文件等,也無不可;在國外網站也有很多教學文,教你如何將RPI3變成一台 PDA。

所以你當然也可以這樣用。

      要完成RPI3SSH的設定,有三個步驟要做: 1.啟用RPI3的SSH服務。

2.設定帳號密碼。

3.設定RPI3的網路環境。

      要啟用RPI3的SSH,可用命令列或圖型介面進行;命令列: sudoraspi-config 用鍵盤的上下鍵選擇「InterfacingOptions」按Enter。

選擇「SSH」按Enter。

當然Yes... 告知你SSH已經開啟,請按Enter。

用鍵盤的左右方向鍵,選擇「Finish」然後按下Enter。

      圖型介面操作方式: 點擊畫面左上角「樹莓派」圖示->「Preferences」->「RaspberryPiConfiguration」, 啟動RaspberryPiConfig後畫面如下圖: 點選「Interfaces」頁籤。

不管圖型或命令列,經過上面操作就開啟了RPI3的SSH服務。

      接下來就設定RPI3的帳號與密碼,本篇教學文只會簡單的教你設定、更改帳號密碼, 但是Linux的帳密與權限是一門學問,在這裡建議你搜尋「鳥哥的Linux私房菜」! 在台灣本土學習Linux的人一定都知道鳥哥的Linux私房菜,大家或多或少一定在那裡找過資料, 我個人對這個網站是極力推薦,我也認為「鳥哥的Linux私房菜」對台灣的資訊發展絕對功不可沒! 在台灣要學Linux,其實不用買書,只要上鳥哥的Linux私房菜,什麼都學的到, 並且裡面一些原理講述會比市面上的書籍還要深入,他是台灣最優質的網站, Linux的帳號與權限就請自行學習!          Raspbian內建了一個使用者帳號「pi」並且將root帳號關閉,是否要啟用root 帳號就端看個人, 我是沒有啟用過,因為用pi登入時,只要加上sudo就可以用root權限來執行指令, 並且一般Linux的使用上,是禁止root用SSH登入的,所以我認為沒必要啟用root。

     Linux裡權限最高的使用者就是root,它是Linux的管理者帳號,無法更名,所以為什麼要限制root用SSH 登入, 就是防止駭客暴力侵入。

        pi的內建密碼是「raspberry」,這個密碼是地球上60億人口玩過樹莓派的人都知道的, 所以啟用了SSH後,在設定好網路環境前,就要先將pi的密碼改掉,Linux更改密碼的指令是:passwd 下完指令,Raspbian會告訴你,你要更改的是pi這個使用者的密碼,並且會要求你輸入現在的密碼, 所以就輸入pi預設的密碼「raspberry」;對第一次使用Linux的人來說,一定非常不習慣Linux輸入密碼的方式, 因為你會發現,不管你在鍵盤上敲了幾個鍵,那游標都不會動!請習慣它吧,這就是Linux! 輸入完原本的密碼按下Enter後,Raspbian會請你輸入新的密碼。

要求你再輸入一次,兩次的新密碼輸入一樣,那就完成密碼變更,至於如何變更使用者名稱或建立新的使用者, 請自行學習,因為那不是本篇的重點,到此,帳密的設定部份就已經完成。

      Raspbian網路內建是用DHCP來取得動態IP,所以剛裝好Raspbian的RPI3 就能上網, 用DHCP上網對家用電腦來說是沒有問題的,但是我們的RPI3將會是IoT控制器,或是當Server來使用, 所以RPI3必須是固定IP,這樣才方便操作;我們接著就設定RPI3的網路環境,讓它使用固定IP。

      Raspbian有X-Window所以就有圖形介面來設定,如果要用圖形介面來設定,請自行嘗試,因為不難, 本文教學主要是以命令列為主,我們就以命令列來設定與教學。

     在開始講解如何更改網路設定前,有些觀念要先讓初次使用Linux的使用者知道,這樣比較有利後面的教學; Linux是「類Unix」(Unix-like)(Linux wiki)作業系統,而UnixBase的作業系統下是沒有「磁碟機」這樣東西的, 它不像Windows有C:或D:等,或是插上USB隨身碟後就會多一個G:或I:! Linux只有「目錄」,所有的儲存裝置都要經過「掛載」(Mount)這個動作才能使用。

     如果像是USB隨身碟或外接光碟機被插入Linux的機器,Linux是在「/dev」目錄下多出一個Device, 而要使用這個Device則要經過mount這個動作,將Devicemount成某個目錄,然後才針對那個目錄來存取相對的磁碟機。

      我們先介紹一個簡單的Linux指令「pwd」,pwd這個指令會顯示使用者目前所在的目錄, 我們先開一個Terminal(後面簡稱為Term),然後我們在命令列上輸入pwd: 可以看到Raspbian回應的是「/home/pi」,所以/home/pi就是我們所在的目錄。

      承上所說,如果我們在Raspbian加掛一顆硬碟,並且把硬碟掛載到/home/pi/newdisk 目錄, 那當我們對/home/pi/newdisk做存取,就是在使用這顆新加載的硬碟。

Linux沒有磁碟機代號,只有目錄。

至於真實上要怎麼掛載硬碟或隨身碟?在後面我會詳解並實做。

      Linux的根目錄就是「/」,所以可以用「ls-l/」來查看根目錄: 可以看到根目錄下有很多資料夾,其中一個資料夾叫做「home」,home就是使用者資料夾, 每當Linux建立一個使用者,Linux就會自動在/home/下面建立一個該使用者名稱的資料夾, 例如你在Raspbian建立一個「abc」的使用者,那Raspbian就會自動建立一個「/home/abc」的資料夾, 當abc這個使用者登入系統後,其所在的目錄就是「/home/abc」,並且abc將無法存取/home/pi, 一樣的,pi這個使用者也無權存取/home/abc目錄, 所以「/home/pi」這個資料夾就是pi這個使用者專用的目錄。

      在根目錄下面看到的那麼多資料夾,除了/home以外,其他都是Linux系統特定在使用, 所以系統既然給了使用者專用的資料夾,那我們在使用上,就不應該任意的將資料放置到使用者目錄以外的地方, 而未來所有產出的資料,都不應該離開使用者自己的資料夾,除非你是Linux的熟手、高手、高高手,知道自己在做什麼。

     Linux的Path符號與MSWindows是相反的,Linux的Path符號是「/」與Internet 上的是一樣的。

Linux的根目錄與Windows也不同,Windows的根目錄,會是「C:\」或是「D:\」, Linux的根目錄只有一個,就是「/」,所以「cd/」就是回到根目錄;Raspian也貼心的把使用者目錄定義為「~」, 以pi這個帳號而言,不管在任何地方,只要「cd~」就是會回到「/home/pi」目錄,這個「~」有的Linux有, 有的Linux沒有「~」而是使用「$HOME」。

     未來在RPI3上面寫程式,我建議檔案的放法應該依專案建立目錄,例如我要寫一個LED的專案, 就應該建立「/home/pi/led」然後該專案用到的相關資料再往下發展,其目錄架構應該像這樣: 這樣的目錄分配與放法,也是我們目前在專案執行上的實際做法。

      回來講Raspbian的網路設定,Linux設定網路的方法有很多種,我下面要介紹的設法並不是唯一的方式, 這只是我個人習慣這樣使用。

      RPI3有兩組網路可以使用,無線及有線,這是RPI3讓我非常喜歡的其中一個設計,因為這樣的設計, 讓RPI3可以當橋接器(Bridge)來使用:有線網路接中華電信的ADSLMODEM撥接上網(Internet),無線網路連接家裡的無線AP, 這樣,我在地球上(中國大陸除外,因為中國封鎖台灣IP),只要能上Internet,我就能透過RPI3存取我家裡的網路,  這樣是不是很酷!?是不是好棒棒!?      事實上,我人在外面就能透過手機控制家裡的客廳、房間及浴廁的燈、大門及房間鎖頭,IoT在我家裡早就落實,而不是口號。

怎麼做到的?後面的教學,慢慢的將會串起來。

      在Linux下要查看目前的網路狀態,可以使用「ifconfig」這個指令來查看: 我們可以看到剛裝好Raspbian的RPI3目前的網路狀態: eth0--就是有線網路。

wlan0--就是wifi。

lo--這是Linux內部網路迴路(Loopback),千萬不要去動它! 目前我們尚未設定wifi網路,所以它並沒有IP位置,而eth0藉由DHCP得到192.168.1.106的IP, 這個IP是中華電信的ADSLMODEM所給的IP。

      要更改網路設定可由/etc/network/interfaces 這個檔案來變更,/etc/network/interfaces這個檔案是系統檔案, 所以pi這個帳號只能看它,沒有權限去修改它,要用pi去修改上述檔案,需要用 sudo來進行修改。

     這邊...再離題一次,Raspbian內建有兩個命令列的文字編輯軟體,一個叫nano,一個叫vi, 等會我們修改/etc/network/interfaces將用到文字編輯器;有國外網站指出,對初學者來說nano親合力較強, 適合初學者使用;vi是較老派的編輯器,功能較強大,甚至有些Linux熟手,整個軟體開發都在vi內進行, 我就遇過一個軟工,在windows裡灌viforwindows版本進行軟體開發,他說他只會vi。

     vi後來又有一個改良版叫做vim,vim 除了繼承vi的功能外,更將一些電腦語言的語法加入檢查, 讓vim可以當成電腦語言編輯器來使用;Raspberry內建並沒有vim這個強大的文字編輯器, 所以我們先安裝vim(vim指令說明): 指令行:sudoapt-getinstallvim-y 其中的參數-y的意義是告訴apt-get在安裝過程中,不要再問我要不要之類的問題,直接都是用「接受」,來進行安裝。

安裝過程與結果:     安裝完成後,我們用sudo來取得系統權限,並用vim來修改/etc/network/interfaces: 按下Enter後,vim會開啟/etc/network/interfaces檔: 在vim裡,可以用方向鍵來移動游標,按下i會進入Insert編輯模式; 網路的 設定方法請看這裡。

      若修改完成,要將檔案存檔,並將Raspbian重新啟動才會生效;因為vim目前在編輯模式, 所以先按「ESC」鍵離開編輯模式,然後按組合鍵「SHIFT」+「:」這時會跳到vim最下方,進入命令模式, 接著輸入wq: wq-w為write,q為quit,就是寫入並離開; 上圖,我將Raspbian的IP設為192.168.1.123,網路遮罩255.255.255.0,gateway為192.168.1.1; gateway的部分因人而異,我的中華電信ADSLMODEM是192.168.1.1,但一般多數是254,所以這部分要注意。

        Linux要看文字檔可以用「cat」指令,所以我們就用cat /etc/network/interfaces來看一看剛才的編輯是否有存檔:   沒有問題後,sudoreboot讓系統重新啟動:   系統重新啟動後,可以用ifconfig來看看目前設定是否為剛剛修改的設定: 可以看到eth0確實變為我所設定的IP位置,gateway的部分可介由「ping」來確認是否正確: 我去ping中華電信「www.hinet.net」,可以看到中華電信的WEB主機給了回應。

若下了ping指令,你會發現Linux它會一直ping下去,與MSWindows不同, Linux的ping要用「Ctrl」+「C」鍵來中斷它。

    到這邊,RPI3的SSH已經完成了準備,但還缺少Clinet端的SSH軟體,所以必須安裝MS Windows端的SSH軟體, 如果在Google上搜尋SSH,可找到很多不用錢的SSHClient端可下載使用,我個人是習慣使用「pietty」這套SSHClient, pietty的下載頁面在這裡,它是免費軟體,自由捐款...      下載安裝完成後,開啟pietty:  在「主機名稱或IP位址(N)」輸入RPI3的IP位置,因為RPI3使用的是SSH,所以Port不要改,SSH就是用Port22, 按下連線後畫面如下: 其意思是說收到Server丟過來加密的Key,你是否接受?回答「是」之後就進入RPI3的登入畫面: 輸入帳號pi後,會問密碼: 輸入正確的密碼後就能登入RPI3: 到此,RPI3的SSH已經完全可以運作,RPI3後續操作都可以在pietty裡進行, 所以RPI3的Keyboard、Mouse、Monitor 都可以移除。

  (四)使用者環境變數    在Term裡可以用ls來查看目前目錄下的檔案: 用ls來查看檔案清單,它的排列方式是橫的排列,我個人並不習慣這樣的排列法,所以可以用ls-l來查看: 可以看到ls-l的結果,改為直的顯示,並且多了一些資訊,其實ls-l在有的Linux已經被設定為ll這個別名, 我個人比較習慣用ll來查看檔案清單,但Raspbian並未設定ls-l的別名,在這裡我們就設定ll為ls-l的別名, 並將它設定在使用者環境檔裡,這樣每次用pi這個使用者登入,就能使用ll。

      用vim.profile指令: 按下Enter後會進入vim並開啟.profile這個檔案: 按下i會進入編輯模式,之後在最後面加入:aliasll='ls-l': 新增完畢後,按下「Esc」,然後「Shift」+「:」,再wq,Enter後存檔離開。

接著下:exit離開並結束Term,然後重開pietty再次登入RPI3。

這次登入會載入環境變數,ll就會生效: .profile就是使用者環境變數設定檔,它在每個使用者的使用者根目錄下,它是個隱藏檔, 現在我們可以用ll-a來查看,就可以看到它。

使用者環境變數的設定,可參閱「鳥哥的Linux私房菜」裡面有詳細的介紹。

  (五)gcc及HelloWorld      後面要進行RPI3的GPIO,會用到C語言,所以我們先確認C的Compiler:gcc 是否已經安裝與存在, 我們用whereis這個指令來找找看gcc: 可以看到whereisgcc之後系統告訴你gcc在哪裡, 之後可以用gcc--version來查看gcc的版本,得到上圖的回應,那就確認gcc是已經存在,並可以運作。

       我們到/home/pi/Templates/目錄下: 用vim編輯一個hello.c檔案vimhello.c: 編輯好了之後「Esc」然後「Shift」+「:」接著wq&Enter存檔離開,我們先用ll查看, 就可以看到/home/pi/Templates目錄下已經產生一個hello.c檔案, 接著我們用gcc-ohellohello.c來將hello.cCompiler成hello的檔案: 按下Enter後,gcc就會將hello.cCompiler成hello,之後可透過ll看到: 用./hello就可執行剛剛我們寫的並Compiler的hello檔: 這就是我們的第一隻程式,HelloWorld!   (六)RPI3的GPIO及點亮LED    樹莓派與一般的電腦最大不同的地方,就是樹莓派有GPIO接腳,這也是樹莓派常常被拿來跟Arduino相互比較的地方, 但樹莓派與Arduino本質上是兩個不同的東西,Arduino 是微控制器,而樹莓派是一台電腦,只是附帶有GPIO的電腦,  樹莓派上面可以安裝資料庫,可以在XWindow上做文書處理、試算表、繪圖,甚至於能在上面玩 Games; 所以拿Arduino與樹莓派做比較,是很奇怪的想法!應該換個角度:當我有微控制的需求時, 在什麼環境下適合用Arduino?什麼環境下用樹莓派比較洽當? 這裡讓你有個觀念,一般我們在家使用的PC一樣可以加裝 I/O卡,讓一般PC可以控制一些接點, 市面上更有一些 I/O控制盒,只要透過Ethernet網路,就能讓一般電腦控制I/O接點, 只是這樣的做法其「總成本」與「效益」不見得比PLC來的便宜。

樹莓派的出現,讓電腦控制I/O有了一個簡單、多元、低成本的Solution。

     接著我們來講解RPI3上面的GPIO,並做幾個簡單的範例來了解GPIO的控制與應用, 下圖是RPI3的GPIO接腳: RPI3的GPIO接腳共有40pin,我們在Term中下gpioreadall指令可以得到下圖: 這個表是RPI3目前GPIO的狀態與說明,這裡就帶大家來讀這張表,首先要看該表最中間那排: 可以看到它有1~40實體(Physical)接腳,而要對照到這張表,RPI3需要這樣擺放: 其實只要這樣對應,應該就一目了然!但對初次接觸的使用者來說,接下來還是一一說明。

實體接腳的腳位命名,單號在左邊,雙號在右邊,依序排列1~40腳。

      看完中間那排,並了解其表示什麼後,再來是由中間算來第二排: V的就是Value,也就是說若寫程式去讀取將會讀到的值;在DigitalI/O接點上,一般我們有兩種表示方式: 1或High就表示「開」、「On」、「接通」或「輸出」... 0或Low就表示「關」、「Off」、「關閉」或「不輸出」... 所以,看上表的「V」欄位,那就知道什麼意思了。

      接著是由中間算來的第三排: Mode就是模式;GPIO、GPIO,都說是I/O了,所以它會有Input跟Ouput兩種模式; Mode中的IN就是Input,表示該腳位在接收訊號, 若是出現OUT就表示該腳位在輸出訊號; RPI3的I/O接腳要IN還是OUT,是可以被改變的,後面會有教學。

     接著是由中間算來的第四排: Name是名子、名稱,但實際上這裡是標註每個角位的用途,它的名子是最中間那排,或是最外側那兩排。

其實我們在稱呼RPI3的GPIO接腳,為了不會產生混淆,還是以實體接腳來稱呼比較多,最外面那兩排有其它用途, 後面會解釋。

     RPI3的GPIO接腳可分為兩大類,第一類就是電源輸出,RPI3的電源輸出是DC電源,也就是直流電源, 共有兩種直流電源輸出,一種是5V電源,分別為實體接腳的第2、4兩腳,另外就是3.3V,分別為實體接腳的1及17兩腳, 由上圖還可以找到實體接腳的第9、25、39、6、14、20、30及34共8隻接腳為0V; 0V就是接地:Ground(Gnd)或稱負極,上面講到的5V及3.3V就是正極;正負極就成為一個電源迴路, 上面的5V 可以跟任何的0V接成迴路,3.3V也可跟任何0V接成回路。

所以RPI3的電源接腳共有12隻腳, 其他的才是GPIO接腳。

      RPI3上的40隻腳扣掉電源12隻腳後,還有28隻接腳,這28隻腳都可以當Digital I/O來使用; 這28隻腳中有兩組I2CBus,第一組是實體腳位的第27及28接腳,但是這一組 I2C只能給EEPROM使用, 也就是說若把27、28腳當I2C來用時,只能接EEPROM,反過來說,RPI3要接EEPROM時,只能接這兩腳; 另一組就是實體接腳的3、5兩隻接腳,這一組才能接其他I2CBus的I/O裝置,I2C是由SDA及SCL兩腳構成, 所以可以看到上述的腳位在Name欄位被標為SDA或SCL。

      RPI3提供一組 SPIBus,SPI接腳為實體腳位的 19-MOSI、21-MISO、23-SCLK、24-CE0、26-CE1。

      RPI3提供有一組 UART腳位,又稱為SerialPort,它分别為實體接腳的8-TX(傳送)、10-RX(接收)。

      RPI3實體接腳的第12腳可以做 PWM輸出,但是RPI3並沒有類比(Analog) 接腳,所以RPI3的PWM是由軟體模擬出來的, 但是別擔心,即使是模擬的PWM,也一樣能控制PWM裝置,例如:伺服馬達。

       最後兩欄:一欄為wPi,另一欄則為BCM,兩個欄位一起做說明,這兩欄分別是兩套Library的腳位名稱, BCM是廣泛的通用於自動控制的Library,它早在樹莓派前就已經存在,所以在工業開發領域較資深的工程師比較習慣使用BCM, 而BCM欄位就告訴使用者,若你使用BCMLibrary時,它的腳位名稱;wPi則是樹莓的另一套Library「WiringPi」使用的腳位名稱, 在後續的教學裡,我們就是使用WiringPi這套Library,它是內建的,若要用BCM則需要另外安裝。

      最後就是整張表的讀法: 它的閱讀方式如上圖框框,應該是要橫著看,例如: 實體第11腳,它目前是輸入,它的值是0,若是用WiringPi來開發,它在程式裡的腳位是0; 實體第32腳,它目前是輸入,它的值是0,若是用BCM來開發,它在程式裡的腳位是12。

最後附上下圖,那是自己畫的簡圖,方便開發時使用:       上面講解完RPI3的接腳後,接著我們要來實做,而第一課就是點LED燈,這個實做我們要用到: 上面的物品,就LED及麵包板做說明:LED有正負腳,長的那隻要接正極,短的那隻要接負極。

麵包板是個簡易的萬用電路板,它的電路如下圖說明: 左右兩邊有標示+、-者為整條相通,中間黃線部分則橫條相通,但兩個區塊並不貫穿,如果依上面的英文字母來看, abcde為互通,fghij互通,但e及f則不通。

  上圖是麵包板與洞洞板之合體產品,介由此產品就能看出麵包板的孔洞間電路相連方式。

      我們開始實做,先將LED插在麵包板上: 然後用杜邦線連接麵包板與RPI3,在連接杜邦線與RPI3前,請先確認RPI3已經關機,並拔掉電源: 這裡使用RPI3實體接腳的第14腳0v連接LED的負極,RPI3實體接腳的16DigitalI/O連接LED的正極。

這裡初學者應該會有一個疑問,LED的正極為什麼不是接5V或3.3V的電源輸出?而是接GPIO? 那是因為RPI3的GPIO接腳當On的時候,本身就是用3.3V的電壓輸出,GPIO接腳就是正極輸出。

     在此做一個提醒,在這個範例中,我所用的LED最大可以接受6VDC電源的LED,若是使用較小的LED: 就要加上電阻,否則3.3V可能會燒掉上面圖片中的LED。

上圖:用一般的LED正極端要先接電阻,我用的是510 Ω(歐姆)的電阻(電阻本身沒有正負極之分)。

     完成硬體的連接後,接著我們要寫軟體,所以先將RPI3插上電源開機,之後開Term, 登入之後進入/home/pi/Templates目錄,接著用vim編輯一個led.c檔: 編輯程式: 就程式碼來說明: 2#include ->c語言標準IO的檔頭。

3#include->c語言標準Library的檔頭。

4#include->程式中有用usleep()函數,必須引用的檔頭。

5#include->使用Raspbian內建的GPIO相關函數的檔頭。

7intmain()->c的起頭函數,因為程式會用exit()來離開程式,會傳回值給系統,所以會回傳int。

9宣告一個integeri,當迴圈的控制子,因為程式簡單,所以就宣告為i。

11if(wiringPiSetup()==-1)要使用RaspberryPi的GPIO函數前,一定要先呼叫Setup,若傳回-1 表示失敗。

12~15當呼叫wiringPiSetup失敗時的處理。

17pinMode(4,OUTPUT);->設定GPIO實體腳位第16腳,wPi腳位第4腳為輸出。

19一個執行3次的迴圈。

21digitalWrite(4,HIGH);->將實體腳位第16腳On起來,LED就會亮。

22usleep(1000000);->停一秒,usleep()是LinuxC特有的函數,它能控制到1/1000000秒(微秒10-6 次方)。

24digitalWrite(4,LOW);->將實體腳位第16腳Off掉,LED就會熄滅。

25usleep(1000000);->停一秒。

28exit(0);->程式結束,傳0給系統(正常結束)。

      程式寫好後,存檔離開,/home/pi/Templates目錄看起來應該長這樣: 我們來編譯剛剛寫的led.c,編譯命令:「gcc-oledled.c-lwiringPi」: 如果編譯過程程式沒有出錯,就什麼都沒顯示,所以我們用ll來查看,會看到多出了一個led的執行檔, 用./led來執行,就可以看到LED依我們的程式做閃爍。

ˊ 執行結果,程式碼。

     聰明的你,依照我的範例點亮LED後,就可以嘗試更改LED閃爍次數,閃爍頻率等, 甚至讓LED由慢到快的閃爍,然後再慢慢的越閃越慢。

學習程式,就是要多寫,無其他加快學習的方法。

     接著我們要由上面的範例再加上一個 「光遮斷開關」,利用光遮斷開關來控制LED的明滅。

光遮斷開關: 上圖兩個都是光遮斷開關,兩者除了Size不同外,其餘的完全一樣,我們就用你手邊有的光遮斷開關來做範例。

      我們先看一下光遮斷開關的背面: 可以看到右方有標示「-」,左方標示「S」,-就是負極也就是負極接腳,S就是Signal也就是訊號接腳, 中間未標示,當然就是正極接腳,所以從正面看,左邊接腳為負極,中間接腳為正極,右邊接腳為訊號輸出,       這次我們要用到RPI3的實體腳位的2(5v)、14(Gnd)、16、18共4隻腳,接法如下圖: 1接RPI3實體腳位14;2接RPI3實體腳位2;3接RPI3實體腳位18;4接RPI3實體腳位16,對應下圖。

      硬體連線接好後,一樣的在/home/pi/Templates目錄下用vim建立一個led2.c檔 「vimled2.c」: 編輯程式: 程式碼說明: 7#defineSin 5->定義"Sin"為5,5為RPI3實體腳位18的wPi編號,就是光遮斷開關的訊息接腳。

8#defineLout 4->定義"Lout"為4,4為RPI3實體腳位16的wPi編號,就是LED燈的正極輸出。

20pinMode(Sin,INPUT);->將wPi編號5腳位設為輸入。

26value=digitalRead(Sin);->用value變數去讀取Sin接腳的訊號。

28~31當讀到的值為1時,亮LED;讀到的值為0時,將LEDOff。

     存檔離開後,進行編譯gcc-oled2led2.c-lwiringPi: 之後,可看到多了一個led2的執行檔,執行結果,程式碼, 因為我們用的是while迴圈,並且迴圈判斷式永遠為1,也就是無窮迴圈, 所以要離開程式只能用「Ctl」+「C」來中斷程式。

      之前一直忘了說明,要離開Term請用exit指令;在Term中要關掉RPI3請用sudo shutdownnow。

  (七)用RPI3控制電器    這是很精彩的一個實做範例,我們將實做用RPI3控制家電;能用RPI3控制家電後, 接著就能IoT的實踐。

      這個實做我們將用到下列物品: 1.電線與插頭 2.Relay 上面的物品:電線、插頭座、Relay在一般的電料行都有賣,電線與插頭的部分,要買現成的延長線也可以, 但是我們必需在電線上面做加工,用延長線在加工這部分就比較困難,並且上述電線在電料行買應該在30~40元之間。

      首先我們先將電線與插頭座合體: 絕緣體剝開約1~1.5公分。

電線鎖上時要注意兩邊的電線不能相互碰觸到另一邊的銅座!若兩邊相互碰觸,在插上電源時就會發生短路。

     電線部分處理好之後,我們來說明Relay,Relay中文叫「繼電器」,一個 Relay能控制一路電路迴路, 目前市面上容易買到的有一路、兩路、四路及八路的Relay, Relay可以控制的電路,在中間四方型的上面都會清楚告知,我們等一下拿來實做的這顆1路Relay, 上面就寫著3A250V AC及3A30VDC,這就是它能接受的最大AC/DC電壓及電流。

1個Relay在輸出迴路上都有三個接點,下圖就是這三個接點的說明: 當DAT被On起來時,上圖的中間與左邊兩個接點將接通, 當DAT被Off時,中間與右邊的接點會接通。

但這不是通則,所以拿到Relay時,最好接上VCC(5v)及GND,然後用三用電表量一下三個接點之間的接通關係, 而不是直接接上輸出迴路;電這種東西,輕則人被電到或燒壞東西,重則會出人命,所以再小心都不為過,切記!       講完Relay之後,我們要將剛才那條電線接到Relay的輸出迴路,來朋友,我們看圖說故事: 量出適當長度,這個長度,是由插頭端插上電源插座之後再拉到RPI3所在位置的長度。

剪斷單邊電線;上面有提到,若是用一般的延長線,那這裡就費工了! 將剪斷的電線兩頭都剝開,約0.5公分。

鬆開Relay上面的端子螺絲。

電線插入端子頭,我們要讓RelayOn的時候電線通電,所以是用中間及左邊的端子孔,然後將螺絲鎖緊。

完工後,整條電線看起來長這樣。

      將Relay接到RPI3 :      程式部分: pi@raspberrypi:~$cdTemplates/ pi@raspberrypi:~/Templates$vimwonoff.c      編輯程式:    程式碼說明: #include     //C 標準函數庫檔頭 #include      //C標準I/O函數庫檔頭 #include //Raspbian內建GPIOwiringPi函數庫檔頭 intmain(intargc,char*argv[])   main主函數,這次使用的GPIO腳位沒有寫死,GPIO要On或Off 也沒有寫死,而是啟動程式時,以參數的型式傳進來; intargc->命令列的個數;例如:「./wonoffABCDEFGHIJKL」那argc 就會是5! char*argv[]->接收的啟動命令列;以上面的例子,它將會是: argv[0]="./wonoff" argv[1]="ABC" argv[2]="DEF" argv[3]="GHI" argv[4]="JKL" 這是C語言接收參數的標準用法。

   intpin,value;                                 //宣告變數pin用來接收腳位;變數value用來接收腳位的值 if(wiringPiSetup()==-1)             //初始wiringPi函數,若失敗將傳回-1 {    printf("SetupGPIOFail!\n");      //在畫面上Show啟動GPIO失敗    exit(1);                                      //程式結束,傳回1給作業系統,告知非正常結束 }    if(argc<3)                                    //如果傳入的參數個數小於3 {    printf("Usage:\n");                                                 //顯示程式的用法    printf("wonoff[wpiPinNumber][Value1/0]\n");    //顯示程式的用法    exit(0);                                                                    //結束程式 } pin=atoi(argv[1]);                                                     //將傳入的第一個參數轉為數字型態,並且用pin變數接收 value=atoi(argv[2]);                                                  //將傳入的第二個參數轉為數字型態,並且用value變數接收 pinMode(pin,OUTPUT);                                             //將傳入的腳位編號設定為輸出 if(value==1)                                                             //如果傳入的value為1 {    printf("SetPin:%dtoON...\n",pin);                         // 畫面顯示將傳入的腳位設為ON    digitalWrite(pin,HIGH);                                          // 將傳入的腳位設為ON } elseif(value==0)                                                       //如果傳入的value不是1而是0 {    printf("SetPin:%dtoOFF...\n",pin);                         // 畫面顯示將傳入的腳位設為OFF    digitalWrite(pin,LOW);                                            // 將傳入的腳位設為OFF } else                                                                              //傳入的value不是0也不是1 {    printf("InputValueerror!\n");                                    //畫面顯示輸入的值錯誤    exit(1);                                                                      //結束程式 } exit(0);                                                                          //結束程式   stdlib.h、stdio.h這兩個檔頭幾乎在寫C程式是必須include的。

      編輯好程式,存檔離開後,進行編譯gcc-owonoff wonoff.c-lwiringPi: 編譯完成,可以看到多了wonoff的執行檔,因為我們這隻程式沒有將腳位與on/off寫死, 所以這隻程式可以用來啟動或關閉任何一腳的GPIO接點,也就是能拿來當一個GPIO的開關程式用; 依照上面我們Relay與RPI3的腳位接法,要啟動Relay的話就用「./wonoff1 1」,要關掉Relay就用「./wonoff10」。

      我將我們製作的延長線接上電源,再將電風扇接上延長線插座:    把電風扇的開關打開後,當我們對RPI3下「./wonoff1 1」時,電風扇就開始轉動; 對RPI3下「./wonoff10」電風扇就停止轉動,這就是用RPI3來控制家電。

      注意,在一般電子材料行買的這種電線,應該是 SPT1或SPT2的規格, 也就是說最大能承受1100~1320瓦的電流,我們用的Relay則只到750瓦, 所以在接電器時要注意,只能用750瓦以下的電器,一些高用電量的電器產品如: 電鍋、吹風機、微波爐、電冰箱、冷氣機..等,它們的用電量都是1500瓦以上,如果接上SPT1、SPT2 的電線,電線及Relay是有燒掉的可能!所以我們做出來的程控電源線只能提供:電風扇、檯燈這類小電流的電器用電。

     wonoff 程式碼,下面說明Raspbian內建驅動 GPIO的函數庫wiringPi常用的函數: #include  -->檔頭   intwiringPiSetup();  使用wPi接腳編號進行初始化,只能root權限執行程式   intwiringPiSetupGpio(); 使用BCM 接腳編號進行初始化,只能root權限執行程式   voidpinMode(intpin_number,intMode); 將腳位設為輸入或輸出,Mode=INPUT/OUTPUT   voiddigitalWrite(intpin_number,intValue); 設定接腳的值,Vaoue=HIGH/LOW   intdigitalRead(intpin_number); 讀取接腳的值   voidpwmWrite(intpin_number,intValue); 寫值到PWM接腳,Value=0~1024   voidanalogWrite(intpin_number,intValue); 寫值到Analog接腳,RaspberryPi沒有Analog接腳   intanalogRead(intpin_number); 從接腳讀Analog值,RaspberryPi沒有Analog接腳   intsoftPwmCreate(intpin_number,intinitialValue,intpwmRange); 建立軟體模擬PWM,initialValue=PWM初值,pwmRange=PWM輸出上限值   voidsoftPwmWrite(intpin_number,intValue);  軟體模擬PWM輸出        整個範例先到這裡稍稍停一陣子,因為接下來在工作上我將很忙碌,很忙碌的上班,假日則需要好好休息, 所以等過一陣子有空時再繼續教學;用C語言怎麼去使用RPI3的網路功能,做到真正的 IoT,等我較閒的時候再繼續...      我小休息的這期間,你可以發揮你的創意,讓樹莓派接上其他Sensor,然後與 Relay連動,上面我們有用到光遮斷開關, 那就是Sensor的一種;電子材料行能買到的 Sensor非常的多,可嘗試各種控制的組合, 例如:用光感 Sensor加上檯燈,當傍晚光線暗下來時,RPI3就自動開啟檯燈電源...      我用這個加上這個的實作,接著: TobeContinue...                                                       



請為這篇文章評分?