樹莓派 3   Raspberry Pi 3  完整教學

<< 前言 >>

     本篇是寫給沒玩過樹莓派又想學習的人看的,若是熟手、高手、高高手,也歡迎瀏覽指教,

若有錯誤或建議,請用 pony@ponyjiang.com 與我連絡,謝謝。

 

<< 本文 >>

樹莓派 3 Model B 長像:

樹莓派官網樹莓派 wiki

(一)樹莓派硬體說明及準備

     上圖是樹霉派 3 Model B 的正面,樹莓派 3 Model B 是「一台」電腦, 它是 all-in-one 的主機板,主機板上的介面說明如下:

1. 4 個 USB 2.0 連接埠。

2. 10/100 Ethernet RJ45 接頭。

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

4. CSI S5 (Socket 5) 攝影機接頭 (CSI - Camera Serial Interface)。

5. HDMI 輸出端子。

6. micro USB 5V 2A 電源接頭。

7. DSI S2 (Socket 2) 螢幕端子 (DSI - Display Serial Interface)。

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

    上圖是樹莓派 3 Model B 的背面,樹莓派有一個 micro SD 插槽,位置就在樹莓派的背面。

 

     樹莓派 3 Model B 採用 64 bit 四核心的 ARM Cortex-A53 CPU,RAM 為 1Gb,

GPU 則是VideoCore IV,只支援較舊的Open GL ES 2.0繪圖,硬體影像解碼只支援 H.264 (Full HD 30p high-profile),

並不支援 H.265; 樹莓派內建 IEEE802.11 b/g/n無線網路 及 藍牙4.1。

 

    就硬體規格來看,樹莓派在 IoT (Internet of Things,物聯網)的運用,具有很高的優勢,因為:

1.樹莓派內建 wifi、藍牙及有線網路。 

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

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

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

 

    樹莓派3 官方公佈的售價是 35美金,但在台灣是買不到這個價錢,若由國外買回來,則要再加上運費,

除非一次購買很多東西來分攤運費,否則還是在國內買比較不那麼麻煩,國內價格 NT$1500 以內,就可以購買,

本人由 AdafruitPIMORONI 購買,攤了運費之後,價格大概在 NT$1200 左右,但要等待約兩週的運送時間。

 

     在開始使用樹莓派3 (後面用 RPI3 稱呼)之前,有一些周邊要準備:

1. SD 卡,RPI3 用 SD 卡取代硬碟,所以 SD 卡必備,目前我在樹莓上使用過最大的 SD 卡是用到 256G,

     但 RPI3 用 8G SD 卡就能運作,給初學者建議是 8G 或 16 G。

 

2. USB電源線,RPI3 用的是 micro USB 的接頭,就是一般 Android 手機用的 USB 電源接頭,

     但要注意的是,RPI3 本身沒有電源開關,當它插上電源就開始開機,拔掉電源就沒電,

    所以可以找找看有附開關的 USB 線材(參考),或是有附開關的 USB 電源插座。

 

3. 螢幕,RPI3 沒有特別要求什麼螢幕,但是它的顯示輸出端子是 HDMI,所以如果要接 VGA 螢幕,

    那需要準備 HDMI 轉 VGA 的轉換頭,RPI3沒有螢幕也能運作,但RPI3在網路功能設定好之前,螢幕是必備。

4. 滑鼠及鍵盤,滑鼠非必備,但接上滑鼠會比較方便,在初期設定階段,鍵盤則是必需;

     設定好的RPI3可以不用滑鼠及鍵盤,滑鼠必須是有線滑鼠,雖然 RPI3 有藍牙,但是在系統設定好之前,

     光有藍牙滑鼠也無法操作 RPI3 進行配對。

 

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

 

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

 

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

 

(二)樹莓派 Raspbian OS 系統安裝

    樹莓派官方指定與建議使用的作業系統是 Raspbian,它是 Linux 作業系統,安裝 Raspbian 有兩種方式,

第一種,使用 Raspberry 官方提供的 NOOBS (New Out Of Box Software)來安裝作業系統,

NOOBS是個簡易的開機系統,開機後再選擇要安裝的目的作業系統。

 

     NOOBS 可以在 Raspbarry 的官網下載取得,在下載頁面中,有兩組(四個)下載供選擇:

    我各人喜好是選擇 ZIP 檔案下載,用 Torrent 下載或許速度比較快,但我感覺要做很多的操作(我承認...我懶 XD),

而 ZIP 下載就滑鼠按一下就開始下載會比較方便。

 

     Noobs 及 Noobs Lite,兩個的差異在官網下載頁面的上方已經清楚的說明,左邊的下載,

就是已經預先載入了 Raspbian 作業系統的 Image,所以用左邊的下載來開機,會如下圖:

如果用右邊的下載來開機,會如下圖:

Lite 就是只有 NOOBS 空殼;所以左邊的連結下載下來的檔案有 1.26 Gb 大,右邊的連結下載後只有 33Mb。

 

     NOOBS Lite 是個空殼?那我下載它做什麼?

不管是 NOOBS 或 NOOBS Lite,當它開機後,都會嘗試連上 Raspberry 的官網,尋找可安裝的作業系統清單,

然後列表給使用者選擇安裝,而被選擇的作業系統如果不在 SD 卡上,NOOBS 則會先下載該作業系統的 Image 再進行安裝。

 

     所以要用 NOOBS Lite,最好要有 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 程式,並將你的 SD Format 成 FAT 或 FAT32 格式。

 

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

最後將 USB 電源插上,RPI3 就會開機了。

 

     開機後,所看到的畫面一定跟剛剛上圖不一樣,應該長的像這樣:

這是因為 RPI3 只要連上 Internet,NOOBS 就會去搜尋被樹莓派官方放進 NOOBS 的作業系統,

移動 Scrollbar,就可以看到可透過NOOBS安裝的作業系統;其中比較有趣的:

OSMC --> 安裝它,可以讓樹莓派變成一台多媒體播放器,網路上有中文教學,請自行搜尋 "樹莓派 OSMC"。

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

Windows 10 IoT Core --> Microsoft 也在樹莓派上出了 Windows 10 的核心,不過真的是核心,裝起來後,連檔案總管都沒有,

                                         這是 Microsoft IoT 的 Solution,給熟悉 Microsoft 平台的開發族群(MS VS.net)使用。

所以,會用 NOOBS 來安裝作業系統,就是針對上述三個作業系統比較多,

但 OSMC、recalboxOS 也有單一的 image 檔可下載安裝,並非一定要透過 NOOBS,若有興趣就請自行上網尋找。

若對 OSMC 有興趣,請自行 Google 「樹莓派 多媒體播放器」「樹莓派 OSMC」等,

若對遊戲機模擬器有興趣,請 Google 「樹莓派 月光寶盒」「樹莓派 潘多拉盒」但記得,自己動手做才有樂趣!

 

    再來就選擇我們要裝的目標作業系統 -- Raspbian;請看下圖:

     請選擇要安裝的作業系統,再點選 左上角的「Install」,Noobs 就會進行安裝。

但是眼尖的你可能會注意到:Raspbian有兩個耶!一個上面有 [RECOMMENDED](推薦),一個是 Raspbina Lite;

Recommended 是官方建議的做業系統,而 Lite 則是裝起來後,沒有 X-Window,它是純文字模式的 Raspbian;

其實在 RPI3 上面,使用 X-Windows 的機會並不大,因為做為一台 IoT 電腦,當你將你的 IoT 架設起來後,

也不大有機會再去使用這台電腦,所以,安不安裝 X-Window 端看個人。

 

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

 

     接下來就講解怎麼用 Image 來安裝 Raspbian 。Raspbian 的 Image 檔可以由 官網下載取得。

     下載頁面裡,一樣有兩個選擇四個連結,兩個選則分別是:

RASPBIAN STRETCH WITH DESKTOP

RASPBIAN STRETCH LITE

它的差別就是 -> Lite 為純文字模式,而 With Desktop 就是包含 X-Window,並且開機後會進入X-Window,

在還沒熟悉 Linux 的操作前,我們就先下載有 X-Window 的版本,所以點選左邊的下載連結,

要直接用網頁下載,就點 「Download ZIP」,要用 Torrent 下載,就選 「Download Torrent」。

 

     完成下載後,將檔案解開,會得到一個 .img 的 Image 檔,而這次的下載得到的是:

2018-03-13-raspbian-stretch.img 這個檔案,因為 Raspbian 是隨時在維護、更新這個系統,

所以在官網的下載頁面中看到的下載內容會隨著時間而有所不同,例如 Raspbian Stretch 這個版本,

是2017年底才推出的,之前的版本叫做 Raspbian Jessie,並且 Jessie 也有好幾個不同日期的版本!

 

    解開的 Image 檔要用「燒錄」的方式燒到 SD 卡裡,用 Copy 的是沒用的,所以我們要準備燒錄軟體,

我用的是 Win32 Disk Imager 這套軟體來將 Image 寫到 SD 卡,這個軟體可以由這裡下載 或是由 這裡下載

下載完成後,請進行安裝,之後將程式開啟,畫面如下:

在裝置的地方,它應該會自己抓你的 SD 卡磁碟機代號,但為了保險起見,要檢查一下是否正確,

映像檔欄位,請選擇剛剛下載並解開的映像檔,選好之後應該像下圖:

確認沒有問題後,按下『寫資料到「裝置」』按鈕,確認寫入後,程式就會開始將 Image 檔寫到 SD 卡。

完成如下圖:

Win32 Disk Imager 還有一個功能,它能把 SD 卡內容讀取出來,建立成 Image 檔,

所以當一個系統建立後,可以用這套軟體來備份,若是要發佈一套已建置的系統,

也可以透過這個功能來達到。

 

    樹莓官方在 Image 檔的安裝方式也有說明, 它也針對 SD 卡燒錄做出了建議:

官方建議使用 Etcher 這套軟體,我個人是沒使用過所以就不搬門弄斧,

如果要用 Etcher 請自行使用、測試。

 

     將 Raspbian 寫到 SD 卡後,請把 SD 卡插入 RPI3:

並將 RPI3 接上 Keyboard、Mouse、Monitor、網路線後,插上電源便會開始開機,開機完成畫面應該如下:

看到上圖,那就是 RPI3 已經裝好 Raspbian Linux。我們接下來要進行作業系統的設定。

 

(三)樹莓派 3  Raspbian 更新與網路設定

    剛裝好的 Raspbian  要做的第一件事就是更新系統;如上面所說的,樹莓派隨時都有可能在維護系統,

所以下載下來的 Image 有些元件可能已經不是最新的,因此我們安裝好 Raspbian 後,就先更新系統,

更新要用命令列來進行,所以我們要先開一個 Terminal,請參考下圖:

點擊上圖標示的地方後,會開啟一個 Terminal,出現命令列模式:

pi@raspberrypi:~$

進行更新請輸入下列指令:

sudo apt-get update

輸入完按下 Enter 後,Raspbian 將下載元件清單準備更新,當下載完成,又會出現命令列,這時請下:

sudo apt-get upgrade

按下 Enter 後,將開始進行 upgrade 更新,當它問你

Do you want to continue[Y/n]

請回答大寫的 Y 及 Enter,更新就正式開始,更新完成後,會再出現命令列等待指令,

我個人習慣是更新完,讓它重新開機,如果要重新開機,請用下列指令:

sudo reboot

 

     系統完成更新重新啟動後, 接下來我們要設定 SSH 登入,能夠 SSH 登入後,

我們的 RPI3 就不再需要 Keyboard、Mouse 及 Monitor,並且後續所有的設定、控制都能在遠端進行,

包括寫 Code、Compiler 等,也就是說,設定好 SSH 後,就可以回到你熟悉的 Windows 操作 RPI3。

 

     大部分的 Linux 操作模式就是在 Windows 裡開 Terminal 來進行,

 使用 Linux 很少很少會需要到本機端進行操作,這也是為什麼官網的 Raspbian 會有 Lite 版,

因為 X-Window 幾乎用不到啊!當然世事無絕對,你要在 X-Window 安裝中文字型、注音輸入法、

用 LibreOffice 來寫文件等,也無不可;在國外網站也有很多教學文,教你如何將 RPI3 變成一台 PDA。

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

 

     要完成 RPI3 SSH 的設定,有三個步驟要做:

1.啟用 RPI3 的 SSH 服務。

2.設定帳號密碼。

3.設定 RPI3 的網路環境。

 

     要啟用 RPI3 的 SSH,可用命令列或圖型介面進行;命令列:

sudo raspi-config

用鍵盤的上下鍵選擇 「Interfacing Options 」按 Enter。

選擇 「SSH」按 Enter。

當然 Yes...

告知你 SSH 已經開啟,請按 Enter。

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

 

     圖型介面操作方式:

點擊畫面左上角「樹莓派」圖示->「Preferences」->「Raspberry Pi Configuration」,

啟動 Raspberry Pi Config 後畫面如下圖:

點選「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)作業系統,而 Unix Base 的作業系統下是沒有「磁碟機」這樣東西的,

它不像 Windows 有 C: 或 D: 等,或是插上 USB 隨身碟後就會多一個 G: 或 I:!

Linux 只有 「目錄」,所有的儲存裝置都要經過「掛載」(Mount) 這個動作才能使用。

 

    如果像是 USB 隨身碟或外接光碟機被插入 Linux 的機器,Linux 是在 「/dev」目錄下多出一個 Device,

而要使用這個 Device 則要經過 mount 這個動作,將 Device mount 成某個目錄,然後才針對那個目錄來存取相對的磁碟機。

 

     我們先介紹一個簡單的 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 符號與 MS Windows 是相反的,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) 來使用:有線網路接中華電信的 ADSL MODEM 撥接上網 (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 是中華電信的 ADSL MODEM 所給的 IP。

 

     要更改網路設定可由 /etc/network/interfaces 這個檔案來變更,/etc/network/interfaces 這個檔案是系統檔案,

所以 pi 這個帳號只能看它,沒有權限去修改它,要用 pi 去修改上述檔案,需要用 sudo 來進行修改。

 

    這邊...再離題一次,Raspbian 內建有兩個命令列的文字編輯軟體,一個叫 nano,一個叫 vi,

等會我們修改 /etc/network/interfaces 將用到文字編輯器;有國外網站指出,對初學者來說 nano 親合力較強,

適合初學者使用;vi 是較老派的編輯器,功能較強大,甚至有些 Linux 熟手,整個軟體開發都在 vi 內進行,

我就遇過一個軟工,在 windows 裡灌 vi for windows 版本進行軟體開發,他說他只會 vi。

 

    vi 後來又有一個改良版叫做 vim,vim 除了繼承 vi 的功能外,更將一些電腦語言的語法加入檢查,

讓 vim 可以當成電腦語言編輯器來使用;Raspberry 內建並沒有 vim 這個強大的文字編輯器,

所以我們先安裝 vim (vim 指令說明):

指令行:sudo apt-get install vim -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 的部分因人而異,我的中華電信 ADSL MODEM 是 192.168.1.1,但一般多數是 254,所以這部分要注意。

 

 

     Linux 要看文字檔可以用 「cat」指令,所以我們就用 cat /etc/network/interfaces 來看一看剛才的編輯是否有存檔:

 

沒有問題後,sudo reboot 讓系統重新啟動:

 

系統重新啟動後,可以用 ifconfig 來看看目前設定是否為剛剛修改的設定:

可以看到 eth0 確實變為我所設定的 IP 位置,gateway 的部分可介由 「ping」來確認是否正確:

我去 ping 中華電信 「www.hinet.net」,可以看到中華電信的 WEB 主機給了回應。

若下了 ping 指令,你會發現 Linux 它會一直 ping 下去,與 MS Windows 不同,

Linux 的 ping 要用 「Ctrl」+「C」鍵來中斷它。

     到這邊,RPI3 的 SSH 已經完成了準備,但還缺少 Clinet 端的 SSH 軟體,所以必須安裝 MS Windows 端的 SSH 軟體,

如果在 Google 上搜尋 SSH,可找到很多不用錢的 SSH Client 端可下載使用,我個人是習慣使用 「pietty」這套 SSH Client,

pietty 的下載頁面在這裡,它是免費軟體,自由捐款...

 

    下載安裝完成後,開啟 pietty: 

在「主機名稱或 IP 位址(N)」輸入 RPI3 的 IP 位置,因為 RPI3 使用的是 SSH,所以 Port 不要改,SSH 就是用 Port 22,

按下連線後畫面如下:

其意思是說收到 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 會進入編輯模式,之後在最後面加入:alias ll = 'ls -l' :

新增完畢後,按下「Esc」,然後「Shift」+「:」,再 wq,Enter 後存檔離開。

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

這次登入會載入環境變數,ll 就會生效:

.profile 就是使用者環境變數設定檔,它在每個使用者的使用者根目錄下,它是個隱藏檔,

現在我們可以用 ll -a 來查看,就可以看到它。

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

 

(五) gcc 及 Hello World 

     後面要進行 RPI3 的 GPIO,會用到 C 語言,所以我們先確認 C 的 Compiler :gcc 是否已經安裝與存在,

我們用 whereis 這個指令來找找看 gcc:

可以看到 whereis gcc 之後系統告訴你 gcc 在哪裡,

之後可以用 gcc --version 來查看 gcc 的版本,得到上圖的回應,那就確認 gcc 是已經存在,並可以運作。

 

     我們到 /home/pi/Templates/ 目錄下:

用 vim 編輯一個 hello.c 檔案 vim hello.c:

編輯好了之後 「Esc」然後「Shift」+「:」接著 wq & Enter 存檔離開,我們先用 ll 查看,

就可以看到 /home/pi/Templates 目錄下已經產生一個 hello.c 檔案,

接著我們用 gcc -o hello hello.c 來將 hello.c Compiler 成 hello 的檔案:

按下 Enter 後,gcc 就會將 hello.c Compiler 成 hello,之後可透過 ll 看到:

用 ./hello 就可執行剛剛我們寫的並 Compiler 的 hello 檔:

這就是我們的第一隻程式,Hello World!

 

(六) RPI3 的 GPIO 及點亮 LED

    樹莓派與一般的電腦最大不同的地方,就是樹莓派有 GPIO 接腳,這也是樹莓派常常被拿來跟 Arduino 相互比較的地方,

但樹莓派與 Arduino 本質上是兩個不同的東西,Arduino  是微控制器,而樹莓派是一台電腦,只是附帶有 GPIO 的電腦, 

樹莓派上面可以安裝資料庫,可以在 X Window 上做文書處理、試算表、繪圖,甚至於能在上面玩 Games

所以拿 Arduino 與樹莓派做比較,是很奇怪的想法!應該換個角度:當我有微控制的需求時,

在什麼環境下適合用 Arduino?什麼環境下用樹莓派比較洽當?

這裡讓你有個觀念,一般我們在家使用的 PC 一樣可以加裝 I/O 卡,讓一般 PC 可以控制一些接點,

市面上更有一些 I/O 控制盒,只要透過 Ethernet 網路,就能讓一般電腦控制 I/O 接點,

只是這樣的做法其「總成本」與「效益」不見得比 PLC 來的便宜。

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

 

    接著我們來講解 RPI3 上面的 GPIO,並做幾個簡單的範例來了解 GPIO 的控制與應用,

下圖是 RPI3 的 GPIO 接腳:

RPI3 的 GPIO 接腳共有 40 pin,我們在 Term 中下 gpio readall 指令可以得到下圖:

這個表是 RPI3 目前 GPIO 的狀態與說明,這裡就帶大家來讀這張表,首先要看該表最中間那排:

可以看到它有 1~40 實體(Physical)接腳,而要對照到這張表,RPI3 需要這樣擺放:

其實只要這樣對應,應該就一目了然!但對初次接觸的使用者來說,接下來還是一一說明。

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

 

     看完中間那排,並了解其表示什麼後,再來是由中間算來第二排:

V 的就是 Value,也就是說若寫程式去讀取將會讀到的值;在 Digital I/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 隻腳中有兩組 I2C Bus,第一組是實體腳位的第27及28接腳,但是這一組 I2C 只能給 EEPROM 使用,

也就是說若把 27、28 腳當 I2C 來用時,只能接 EEPROM,反過來說,RPI3 要接 EEPROM 時,只能接這兩腳;

另一組就是實體接腳的 3、5 兩隻接腳,這一組才能接其他 I2C Bus 的 I/O 裝置,I2C 是由 SDA 及 SCL 兩腳構成,

所以可以看到上述的腳位在 Name 欄位被標為 SDA 或 SCL。

 

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

 

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

 

     RPI3 實體接腳的第 12 腳可以做 PWM 輸出,但是 RPI3 並沒有類比 (Analog) 接腳,所以RPI3 的 PWM 是由軟體模擬出來的,

但是別擔心,即使是模擬的 PWM,也一樣能控制 PWM 裝置,例如:伺服馬達

 

     最後兩欄:一欄為 wPi,另一欄則為 BCM,兩個欄位一起做說明,這兩欄分別是兩套 Library 的腳位名稱,

BCM 是廣泛的通用於自動控制的 Library,它早在樹莓派前就已經存在,所以在工業開發領域較資深的工程師比較習慣使用 BCM,

而 BCM 欄位就告訴使用者,若你使用 BCM Library 時,它的腳位名稱;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 實體接腳的 16 Digital I/O 連接 LED 的正極。

這裡初學者應該會有一個疑問,LED 的正極為什麼不是接 5V 或 3.3V 的電源輸出?而是接 GPIO?

那是因為 RPI3 的 GPIO 接腳當 On 的時候,本身就是用 3.3V 的電壓輸出,GPIO 接腳就是正極輸出。

 

    在此做一個提醒,在這個範例中,我所用的 LED 最大可以接受 6V DC 電源的 LED,若是使用較小的 LED:

就要加上電阻,否則 3.3V 可能會燒掉上面圖片中的 LED。

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

 

    完成硬體的連接後,接著我們要寫軟體,所以先將 RPI3 插上電源開機,之後開 Term,

登入之後進入 /home/pi/Templates 目錄,接著用 vim 編輯一個 led.c 檔:

編輯程式:

就程式碼來說明:

2 #include <stdio.h>  -> c 語言標準 IO 的檔頭。

3 #include <stdlib.h> -> c 語言標準 Library 的檔頭。

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

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

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

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

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

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

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

19 一個執行 3 次的迴圈。

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

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

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

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

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

 

     程式寫好後,存檔離開,/home/pi/Templates 目錄看起來應該長這樣:

我們來編譯剛剛寫的 led.c,編譯命令:「gcc -o led led.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 檔 「vim led2.c」:

編輯程式:

程式碼說明:

7 #define Sin  5 -> 定義 "Sin" 為 5,5 為 RPI3 實體腳位 18 的 wPi 編號,就是光遮斷開關的訊息接腳。

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

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

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

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

 

    存檔離開後,進行編譯 gcc -o led2 led2.c -lwiringPi:

之後,可看到多了一個 led2 的執行檔,執行結果程式碼

因為我們用的是 while 迴圈,並且迴圈判斷式永遠為 1,也就是無窮迴圈,

所以要離開程式只能用「Ctl」+「C」來中斷程式。

 

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

 

(七) 用 RPI3 控制電器

    這是很精彩的一個實做範例,我們將實做用 RPI3 控制家電;能用 RPI3 控制家電後,

接著就能 IoT 的實踐。

 

     這個實做我們將用到下列物品:

1. 電線與插頭

2. Relay

上面的物品:電線、插頭座、Relay 在一般的電料行都有賣,電線與插頭的部分,要買現成的延長線也可以,

但是我們必需在電線上面做加工,用延長線在加工這部分就比較困難,並且上述電線在電料行買應該在 30~40 元之間。

 

     首先我們先將電線與插頭座合體:

絕緣體剝開約 1~1.5公分。

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

 

    電線部分處理好之後,我們來說明 Relay,Relay 中文叫「繼電器」,一個 Relay 能控制一路電路迴路,

目前市面上容易買到的有一路、兩路、四路及八路的 Relay,

Relay 可以控制的電路,在中間四方型的上面都會清楚告知,我們等一下拿來實做的這顆1路 Relay,

上面就寫著 3A 250V AC 及 3A 30V DC,這就是它能接受的最大 AC/DC 電壓及電流。

1個 Relay 在輸出迴路上都有三個接點,下圖就是這三個接點的說明:

當 DAT 被 On 起來時,上圖的中間與左邊兩個接點將接通,

當 DAT 被 Off 時,中間與右邊的接點會接通。

但這不是通則,所以拿到 Relay 時,最好接上 VCC (5v) 及 GND ,然後用三用電表量一下三個接點之間的接通關係,

而不是直接接上輸出迴路;電這種東西,輕則人被電到或燒壞東西,重則會出人命,所以再小心都不為過,切記!

 

     講完 Relay 之後,我們要將剛才那條電線接到 Relay 的輸出迴路,來朋友,我們看圖說故事:

量出適當長度,這個長度,是由插頭端插上電源插座之後再拉到 RPI3 所在位置的長度。

剪斷單邊電線;上面有提到,若是用一般的延長線,那這裡就費工了!

將剪斷的電線兩頭都剝開,約 0.5 公分。

鬆開 Relay 上面的端子螺絲。

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

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

 

     將 Relay 接到 RPI3 :

 

    程式部分:

pi@raspberrypi:~ $ cd Templates/

pi@raspberrypi:~/Templates $ vim wonoff.c

 

    編輯程式:

    程式碼說明:

#include <stdlib.h>      // C 標準函數庫檔頭
#include <stdio.h>       // C 標準 I/O 函數庫檔頭
#include <wiringPi.h>  // Raspbian 內建 GPIO wiringPi 函數庫檔頭

int main (int argc, char *argv[])  

main 主函數,這次使用的 GPIO 腳位沒有寫死,GPIO 要 On 或 Off 也沒有寫死,而是啟動程式時,以參數的型式傳進來;

int argc -> 命令列的個數;例如:「./wonoff ABC DEF GHI JKL 」那 argc 就會是 5!

char *argv[] -> 接收的啟動命令列;以上面的例子,它將會是:

argv[0] = "./wonoff"

argv[1] = "ABC"

argv[2] = "DEF"

argv[3] = "GHI"

argv[4] = "JKL"

這是 C 語言接收參數的標準用法。

 

 int pin, value;                                 // 宣告變數 pin 用來接收腳位;變數 value 用來接收腳位的值

if (wiringPiSetup () == -1)             // 初始 wiringPi 函數,若失敗將傳回 -1
{
    printf ("Setup GPIO Fail!\n");      // 在畫面上 Show 啟動 GPIO 失敗
    exit (1);                                      // 程式結束,傳回 1 給作業系統,告知非正常結束
}

 

 if (argc < 3)                                    // 如果傳入的參數個數小於 3
{
    printf ("Usage :\n");                                                 // 顯示程式的用法
    printf ("wonoff [wpi Pin Number] [Value 1/0]\n");    // 顯示程式的用法
    exit (0);                                                                    // 結束程式
}

pin = atoi (argv[1]);                                                     // 將傳入的第一個參數轉為數字型態,並且用 pin 變數接收
value = atoi (argv[2]);                                                  // 將傳入的第二個參數轉為數字型態,並且用 value 變數接收

pinMode (pin, OUTPUT);                                             // 將傳入的腳位編號設定為輸出

if (value == 1)                                                             // 如果傳入的 value 為 1
{
    printf ("Set Pin:%d to ON...\n", pin);                         //  畫面顯示將傳入的腳位設為 ON
    digitalWrite (pin, HIGH);                                          //  將傳入的腳位設為 ON
}
else if (value == 0)                                                       // 如果傳入的 value 不是 1 而是 0
{
    printf ("Set Pin:%d to OFF...\n", pin);                         //  畫面顯示將傳入的腳位設為 OFF
    digitalWrite (pin, LOW);                                            //  將傳入的腳位設為 OFF
}
else                                                                              // 傳入的 value 不是 0 也不是 1
{
    printf ("Input Value error!\n");                                    // 畫面顯示輸入的值錯誤
    exit (1);                                                                      // 結束程式
}

exit (0);                                                                          // 結束程式

 

stdlib.h、stdio.h 這兩個檔頭幾乎在寫 C 程式是必須 include 的。

 

     編輯好程式,存檔離開後,進行編譯 gcc -o wonoff wonoff.c -lwiringPi:

編譯完成,可以看到多了 wonoff 的執行檔,因為我們這隻程式沒有將腳位與 on/off 寫死,

所以這隻程式可以用來啟動或關閉任何一腳的 GPIO 接點,也就是能拿來當一個 GPIO 的開關程式用;

依照上面我們 Relay 與 RPI3 的腳位接法,要啟動 Relay 的話就用 「./wonoff 1 1」,要關掉 Relay 就用 「./wonoff 1 0」。

 

     我將我們製作的延長線接上電源,再將電風扇接上延長線插座:

    把電風扇的開關打開後,當我們對 RPI3下「./wonoff 1 1」時,電風扇就開始轉動;

對 RPI3 下「./wonoff 1 0」電風扇就停止轉動,這就是用 RPI3 來控制家電。

 

     注意,在一般電子材料行買的這種電線,應該是 SPT1 或 SPT2 的規格,

也就是說最大能承受 1100~1320 瓦的電流,我們用的 Relay 則只到 750 瓦,

所以在接電器時要注意,只能用 750 瓦以下的電器,一些高用電量的電器產品如:

電鍋、吹風機、微波爐、電冰箱、冷氣機..等,它們的用電量都是 1500 瓦以上,如果接上 SPT1、SPT2

的電線,電線及 Relay 是有燒掉的可能!所以我們做出來的程控電源線只能提供:電風扇、檯燈這類小電流的電器用電。

 

    wonoff 程式碼,下面說明 Raspbian 內建驅動 GPIO 的函數庫 wiringPi 常用的函數:

#include <wiringPi.h>   --> 檔頭

 

int wiringPiSetup ();

 使用 wPi 接腳編號進行初始化,只能 root 權限執行程式

 

int wiringPiSetupGpio ();

使用 BCM 接腳編號進行初始化,只能 root 權限執行程式

 

void pinMode (int pin_number, int Mode);

將腳位設為輸入或輸出,Mode = INPUT/OUTPUT

 

void digitalWrite (int pin_number, int Value);

設定接腳的值,Vaoue = HIGH/LOW

 

int digitalRead (int pin_number);

讀取接腳的值

 

void pwmWrite (int pin_number, int Value);

寫值到 PWM 接腳,Value = 0~1024

 

void analogWrite (int pin_number, int Value);

寫值到 Analog 接腳,Raspberry Pi 沒有 Analog 接腳

 

int analogRead (int pin_number);

從接腳讀 Analog 值,Raspberry Pi 沒有 Analog 接腳

 

int softPwmCreate (int pin_number, int initialValue, int pwmRange);

建立軟體模擬 PWM,initialValue = PWM初值,pwmRange = PWM 輸出上限值

 

void softPwmWrite (int pin_number, int Value);

 軟體模擬PWM輸出

 

     整個範例先到這裡稍稍停一陣子,因為接下來在工作上我將很忙碌,很忙碌的上班,假日則需要好好休息,

所以等過一陣子有空時再繼續教學;用 C 語言怎麼去使用 RPI3 的網路功能,做到真正的 IoT,等我較閒的時候再繼續...

 

    我小休息的這期間,你可以發揮你的創意,讓樹莓派接上其他 Sensor,然後與 Relay 連動,上面我們有用到光遮斷開關,

那就是 Sensor 的一種;電子材料行能買到的 Sensor 非常的多,可嘗試各種控制的組合,

例如:用光感 Sensor 加上檯燈,當傍晚光線暗下來時,RPI3 就自動開啟檯燈電源...

 

    我用這個加上這個實作,接著:

To be Continue...