首頁 > 軟體

如何用樹莓派控制 GOIO 引腳並操作繼電器

2020-06-16 17:12:55

學習如何用 PHP 和溫度感測器實現樹莓派控制 GPIO 並操作繼電器,你是否曾經想知道怎樣使用手機或者電腦在任何地方控制你的風扇和燈等一些家用電器?

我現在想控制我的聖誕彩燈,是使用手機呢,還是使用平板電腦呢,或者是使用筆記型電腦呢?都不是,而是僅僅使用一個樹莓派。讓我來告訴你如何使用 PHP 和溫度感測器實現樹莓派控制 GPIO 引腳並操作繼電器。我使用 AJAX 把它們整合在了一起。

 

硬體要求:

  • 樹莓派
  • 安裝有 Raspbian 系統的 SD 卡(任何一張 SD 卡都可以,但是我更偏向使用大小為 32GB 等級為 class 10 的 SD 卡)
  • 電源介面卡
  • 跳線(母對母跳線和公轉母跳線)
  • 繼電器板(我使用一個用於 12V 繼電器的繼電器板)
  • DS18B20 溫度感測器
  • 樹莓派的 Wi-Fi 介面卡
  • 路由器(為了存取網際網路,你需要有一個擁有埠轉發的路由器)
  • 10KΩ 的電阻

 

軟體要求:

  • 下載並安裝 Raspbian 系統到你的 SD 卡
  • 有效的網際網路連線
  • Apache web 伺服器
  • PHP
  • WiringPi
  • 基於 Mac 或者 Windows 的 SSH 用戶端

 

一般的設定和設定

1、 插入 SD 卡到樹莓派,然後使用乙太網網線將它連線到路由器;

2、 連線 WiFi 介面卡;

3、 使用 SSH 方式登入到樹莓派,然後使用下面的命令編輯 interfaces 檔案:

  1. sudonano/etc/network/interfaces

這個命令會用一個叫做 nano 的編輯器開啟這個檔案。它是一個非常簡單又易於使用的文字編輯器。如果你不熟悉基 Linux 的作業系統,可以使用鍵盤上的方向鍵來操作。

nano 開啟這個檔案後,你會看到這樣一個介面:

File editor nano

4、要設定你的無線網路,按照下面所示修改這個檔案:

  1. iface lo inet loopback
  2. iface eth0 inet dhcp
  3. allow-hotplug wlan0
  4. auto wlan0
  5. iface wlan0 inet dhcp
  6. wpa-ssid "Your Network SSID"
  7. wpa-psk "Your Password"

5、 按 CTRL+O 儲存,然後按 CTRL+X 退出編輯器。

到目前為止,一切都已經設定完成,接下來你需要做的就是使用命令重新載入網路:

  1. sudo service networking reload

(警告:如果你是使用遠端連線的方式連線的樹莓派,連線將會中斷。)

 

軟體設定

 

安裝 Apache web 伺服器

Apache 是一個受歡迎的伺服器應用,你可以在樹莓派安裝這個程式讓它提供網頁服務。Apache 原本就可以通過 HTTP 方式提供 HTML 檔案服務,新增其他模組後,Apache 還可以使用像 PHP 這樣的指令碼語言來提供動態網頁的服務。

可以在命令列輸入下面命令安裝 Apache:

  1. sudoapt-get install apache2 -y

安裝完成後,可以在瀏覽器位址列輸入樹莓派的 IP 地址來測試 web 伺服器。如果你可以獲得下面圖片的內容,說明你已經成功地安裝並設定好了你的伺服器。

Successful server setup

要改變這個預設的頁面和新增你自己的 html 檔案,進入 var/www/html 目錄:

  1. cd/var/www/html

新增一些檔案來測試是否成功。

 

安裝 PHP

PHP 是一個前處理器,這意味著它是當伺服器收到網頁請求時才會執行的一段程式碼。它開始執行,處理網頁上需要被顯示的內容,然後把網頁傳送給瀏覽器。不像靜態的 HTML,PHP 在不同的環境下可以顯示不同的內容。其他的語言也可以做到這一點,但是由於 WordPress 是用 PHP 編寫的,有些時候你需要使用它。PHP 是 web 上一種非常受歡迎的語言,像 Facebok 和 Wikipeadia 這樣的大型專案都是用 PHP 編寫的。

使用下面的命令安裝 PHP 和 Apache 軟體包:

  1. sudoapt-get install php5 libapache2-mod-php5 -y

 

測試 PHP

建立檔案 index.php

  1. sudonano index.php

在裡面寫入一些 PHP 內容:

  1. <?php echo"hello world";?>

儲存檔案,接下來刪除 index.html,因為它比 index.php 的優先順序更高:

  1. sudorm index.html

重新整理你的瀏覽器,你會看到 “hello world”。這並不是動態的,但是它仍然由 PHP 提供服務。如果你在上面看到提原始的 PHP 檔案而不是“hello world”,重新載入和重新啟動 Apahce(LCTT 譯注,重新啟動即可):

  1. sudo/etc/init.d/apache2 reload
  2. sudo/etc/init.d/apache2 restart

 

安裝 WiringPi

為了可以對程式碼的更改進行跟蹤,WiringPi 的維護採用 git。但假如你因為某些原因而沒法使用 git,還有一種可以替代的方案。(通常你的防火牆會把你隔離開來,所以請先檢查一下你的防火牆的設定情況!)

如果你還沒有安裝 git,那麼在 Debian 及其衍生版本中(比如 Raspbian),你可以這樣安裝它:

  1. sudoapt-get install git-core

若是你遇到了一些錯誤,請確保你的樹莓派是最新版本的 Raspbian 系統:

  1. sudoapt-get update sudoapt-get upgrade

使用 git 獲取最 WiringPi:

  1. sudogitclonegit://git.drogon.net/wiringPi

如果你之前已經使用過 clone 操作,那麼可以使用下面命令:

  1. cd wiringPi &&git pull origin

這個命令會將會獲取更新的版本,你然後可以重新執行下面的構建指令碼。

有一個新的簡化的指令碼來構建和安裝:

  1. cd wiringPi &&./build

這個新的構建指令碼將會為你完成編譯和安裝 WiringPi。它曾一度需要使用 sudo 命令,所以在執行這它之前你可能需要檢查一下這個指令碼。

 

測試 WiringPi

執行 gpio 命令來檢查安裝成功與否:

  1. gpio -v gpio readall

這將給你一些信心,軟體執行良好。

 

連線 DS18B20 感測器到樹莓派

  • 感測器上的黑線用於 GND。
  • 紅線用於 VCC。
  • 黃線是 GPIO 線。

GPIO image

連線:

  • VCC 連線 3V 的 1 號引腳。
  • GPIO 線連線 7 號引腳(GPIO4)。
  • 地線連線 GND 的 9 號引腳。

 

軟體設定

為了用 PHP 使用 DS18B20 溫度感測器模組,你需要執行下面的命令來啟用用於樹莓派上 GPIO 引腳和 DS18B20 的核心模組:

  1. sudomodprobe w1-gpio
  2. sudomodprobe w1-therm

你不想每次 Raspberry 重新啟動後都手動執行上述命令,所以你想每次開機能自動啟動這些模組。可以在檔案 /etc/modules 中新增下面的命令列來做到:

  1. sudonano/etc/modules/

新增下面的命令列到它裡面:

  1. w1-gpio
  2. w1-therm

為了測試,輸入:

  1. cd/sys/bus/w1/devices/

現在輸入 ls

你會看到你的裝置資訊。在裝置驅動程式中,你的 DS18B20 感測器應該作為一串字母和數位被列出。在本例中,裝置被記錄為 28-000005e2fdc3。然後你需要使用 cd 命令來存取感測器,用你自己的序列號替代我的: cd 28-000005e2fdc3

DS18B20 會周期性的將資料寫入檔案 w1_slave,所以你只需要使用命令 cat來讀出資料: cat w1_slave

這會生成下面的兩行文字,輸出中 t= 表示攝氏單位的溫度。在前兩位數後面加上一個小數點(例如,我收到的溫度讀數是 30.125 攝氏度)。

 

連線繼電器

1、 取兩根跳線,把其中一根連線到樹莓派上的 GPIO24(18 號引腳),另一根連線 GND 引腳。你可以參考下面這張圖。

2、 現在將跳線的另一端連線到繼電器板。GND 連線到繼電器上的 GND,GPIO 輸出線連線到繼電器的通道引腳號,這取決於你正使用的繼電器型號。記住,將樹莓派上的 GND 與繼電器上的 GND 連線連線起來,樹莓派上的 GPIO 輸出連線繼電器上的輸入引腳。

Headers

注意!將繼電器連線樹莓派的時候小心一些,因為它可能會導致電流回流,這會造成短路。

3、 現在將電源連線繼電器,可以使用 12V 的電源介面卡,也可以將 VCC 引腳連線到什麼破上的 3.3V 或 5.5V 引腳。

 

使用 PHP 控制繼電器

讓我們先寫一個藉助於 WiringPi 軟體用來控制 Paspberry Pi 上 GPIO 引腳的 PHP 指令碼。

1、在 Apache 伺服器的網站根目錄下建立一個檔案,使用下面命令切換到該目錄:

  1. cd/var/www/html

2、 新建一個叫 Home 的資料夾:

  1. sudomkdirHome

3、 新建一個叫 on.php的指令碼

  1. sudonano on.php

4、 在指令碼中加入下面的程式碼:

  1. <?php
  2. system("gpio-g mode 24 out");
  3. system("gpio-g write 24 1");
  4. ?>

5、 使用 CTRL+O 儲存檔案,CTRL+X 退出。

上面的程式碼中,你在第一行使用命令將 24 號 GPIO引腳設定為 output 模式:

  1. system("gpio-g mode 24 out");

在第二行,你使用 1 將 24 號引腳 GPIO 開啟,在二進位制中"1"表示開啟,"0"表示關閉。

6、 為了關閉繼電器,可以建立另外一個 off.php 檔案,並用 0 替換 1

  1. <?php
  2. system(" gpio-g mode 24 out ");
  3. system(" gpio-g write 24 1 ");
  4. ?>

7、 如果你已經將繼電器連線了樹莓派,可以在瀏覽器中輸入你的樹莓派的 IP 地址,並在後面加上目錄名和檔名來進行存取:

  1. http://{IPADDRESS}/home/on.php

這將會開啟繼電器。

8、 要關閉它,可以存取叫 off.php 的檔案:

  1. http://{IPADDRESS}/home/off.php

現在你需要能夠在一個單獨的頁面來控制這兩樣事情,而不用單獨的重新整理或者存取這兩個頁面。你可以使用 AJAX 來完成。

9、 新建一個 HTML 檔案,並在其中加入下面程式碼:

  1. <html>
  2. <scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  3. <scripttype="text/Javascript">// <![CDATA[
  4. $(document).ready(function(){
  5. $('#on').click(function(){
  6. var a=newXMLHttpRequest();
  7. a.open("GET","on.php"); a.onreadystatechange=function(){
  8. if(a.readyState==4){
    if(a.status ==200){
  9. }else alert ("http error");
    }
    }
  10. a.send();
  11. });
  12. });
  13. $(document).ready(function()
  14. {
    $('#Off').click(function(){
  15. var a=newXMLHttpRequest();
  16. a.open("GET","off.php");
  17. a.onreadystatechange=function(){
  18. if(a.readyState==4){
  19. if(a.status ==200){
  20. }else alert ("http error");
    }
    }
  21. a.send();
  22. });
  23. });
  24. </script>
  25. <button id="on" type="button"``Switch Lights On </button>
  26. <button id="off" type="button"``Switch Lights Off </button>

10、 儲存檔案,進入你的 web 瀏覽器目錄,然後開啟那個網頁。你會看到兩個按鈕,它們可以開啟和關閉燈泡。基於同樣的想法,你還可以使用 bootstrap 和 CSS 來建立一個更加漂亮的 web 介面。

 

在這個網頁上觀察溫度

1、 新建一個 temperature.php 的檔案:

  1. sudonano temperature.php

2、 在檔案中加入下面的程式碼,用你自己的裝置 ID 替換 10-000802292522

  1. <?php
  2. //File to read
  3. $file ='/sys/devices/w1_bus_master1/10-000802292522/w1_slave';
  4. //Read the file line by line
  5. $lines =file($file);
  6. //Get the temp from second line
  7. $temp = explode('=', $lines[1]);
  8. //Setup some nice formatting (i.e., 21,3)
  9. $temp = number_format($temp[1]/1000,1,',','');
  10. //And echo that temp
  11. echo $temp ." °C";
  12. ?>

3、 開啟你剛剛建立的 HTML 檔案,並建立一個新的帶有 id 為 “screen” 的 <div>標籤

  1. <divid="screen"></div>

4、 在這個標籤後或者這個文件的尾部下面的程式碼:

  1. <script>
  2. $(document).ready(function(){
  3. setInterval(function(){
  4. $("#screen").load('temperature.php')
  5. },1000);
  6. });
  7. </script>

其中,#screen 是標籤 <div>id ,你想在它裡面顯示溫度。它會每隔 1000 毫秒載入一次 temperature.php 檔案。

我使用了 bootstrap 框架來製作一個漂亮的面板來顯示溫度,你還可以加入多個圖示和圖形讓網頁更有吸引力。

這只是一個控制繼電器板並顯示溫度的基礎的系統,你可以通過建立基於定時和從恆溫器讀數等基於事件觸發來進一步地對系統進行開發。

( 題圖:opensource.com)


作者簡介:

Abdul Hannan Mustajab: 我 17 歲,生活在印度。我正在追求科學,數學和電腦科學方面的教育。我在 spunkytechnology.com 上發表關於我的專案的部落格。我一直在對使用不同的微控制器和電路板的基於物聯網的 AI 進行研究。


via: https://opensource.com/article/17/3/operate-relays-control-gpio-pins-raspberry-pi

作者:Abdul Hannan Mustajab 譯者:zhousiyu325 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-06/144743.htm


IT145.com E-mail:sddin#qq.com