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

2021-03-02 Linux中國

學習如何用 PHP 和溫度傳感器實現樹莓派控制 GPIO 並操作繼電器

你是否曾經想知道怎樣使用手機或者電腦在任何地方控制你的風扇和燈等一些家用電器?

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

硬體要求:

樹莓派

安裝有 Raspbian 系統的 SD 卡(任何一張 SD 卡都可以,但是我更偏向使用大小為 32GB 等級為 class 10 的 SD 卡)

電源適配器

跳線(母對母跳線和公轉母跳線)

繼電器板(我使用一個用於 12V 繼電器的繼電器板)

DS18B20 溫度傳感器

樹莓派的 Wi-Fi 適配器

路由器(為了訪問網際網路,你需要有一個擁有埠轉發的路由器)

10KΩ 的電阻

軟體要求:

一般的配置和設置

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

2、 連接 WiFi 適配器;

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

sudo nano /etc/network/interfaces

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

用 nano 打開這個文件後,你會看到這樣一個界面:

File editor nano

4、要配置你的無線網絡,按照下面所示修改這個文件:

iface lo inet loopback

iface eth0 inet dhcp

allow-hotplug wlan0

auto wlan0

iface wlan0 inet dhcp

  wpa-ssid "Your Network SSID"

  wpa-psk "Your Password"

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

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

sudo service networking reload

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

軟體配置

安裝 Apache web 伺服器

Apache 是一個受歡迎的伺服器應用,你可以在樹莓派安裝這個程序讓它提供網頁服務。Apache 原本就可以通過 HTTP 方式提供 HTML 文件服務,添加其他模塊後,Apache 還可以使用像 PHP 這樣的腳本語言來提供動態網頁的服務。

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

sudo apt-get install apache2 -y

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

Successful server setup

要改變這個默認的頁面和添加你自己的 html 文件,進入 var/www/html 目錄:

cd /var/www/html

添加一些文件來測試是否成功。

安裝 PHP

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

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

sudo apt-get install php5 libapache2-mod-php5 -y

測試 PHP

創建文件 index.php:

sudo nano index.php

在裡面寫入一些 PHP 內容:

<?php echo "hello world"; ?>

保存文件,接下來刪除 index.html,因為它比 index.php 的優先級更高:

sudo rm index.html

刷新你的瀏覽器,你會看到 「hello world」。這並不是動態的,但是它仍然由 PHP 提供服務。如果你在上面看到提原始的 PHP 文件而不是「hello world」,重新加載和重啟 Apahce(LCTT 譯註,重啟即可):

sudo /etc/init.d/apache2 reload

sudo /etc/init.d/apache2 restart

安裝 WiringPi

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

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

sudo apt-get install git-core

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

sudo apt-get update sudo apt-get upgrade

使用 git 獲取最 WiringPi:

sudo git clone git://git.drogon.net/wiringPi

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

cd wiringPi && git pull origin

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

有一個新的簡化的腳本來構建和安裝:

cd wiringPi && ./build

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

測試 WiringPi

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

gpio -v gpio readall

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

連接 DS18B20 傳感器到樹莓派

傳感器上的黑線用於 GND。

紅線用於 VCC。

黃線是 GPIO 線。

GPIO image

連線:

VCC 連接 3V 的 1 號引腳。

GPIO 線連接 7 號引腳(GPIO4)。

地線連接 GND 的 9 號引腳。

軟體配置

為了用 PHP 使用 DS18B20 溫度傳感器模塊,你需要執行下面的命令來激活用於樹莓派上 GPIO 引腳和 DS18B20 的內核模塊:

sudo modprobe w1-gpio

sudo modprobe w1-therm

你不想每次 Raspberry 重啟後都手動執行上述命令,所以你想每次開機能自動啟動這些模塊。可以在文件 /etc/modules 中添加下面的命令行來做到:

sudo nano /etc/modules/

添加下面的命令行到它裡面:

w1-gpio

w1-therm

為了測試,輸入:

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 伺服器的網站根目錄下創建一個文件,使用下面命令切換到該目錄:

cd /var/www/html

2、 新建一個叫 Home 的文件夾:

sudo mkdir Home

3、 新建一個叫 on.php的腳本

sudo nano on.php

4、 在腳本中加入下面的代碼:

<?php

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

       system("gpio-g write 24 1");

?>

5、 使用 CTRL+O 保存文件,CTRL+X 退出。

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

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

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

6、 為了關閉繼電器,可以創建另外一個 off.php 文件,並用 0 替換 1。

<?php

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

       system(" gpio-g write 24 1 ");

?>

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

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

這將會打開繼電器。

8、 要關閉它,可以訪問叫 off.php 的文件:

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

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

9、 新建一個 HTML 文件,並在其中加入下面代碼:

<html>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">// <![CDATA[

$(document).ready(function() {

 $('#on').click(function(){

 var a= new XMLHttpRequest();

 a.open("GET", "on.php"); a.onreadystatechange=function(){

   if (a.readyState==4){
     if(a.status ==200){

     } else alert ("http error");
     }
   }

   a.send();

 });

});

$(document).ready(function()

 {
   $('#Off').click(function(){

     var a= new XMLHttpRequest();

     a.open("GET", "off.php");

     a.onreadystatechange=function(){

       if(a.readyState==4){

         if(a.status ==200){

         } else alert ("http error");
         }
       }

     a.send();

   });

 });

</script>

<button id="on" type="button"``Switch Lights On </button>

<button id="off" type="button"``Switch Lights Off </button>

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

在這個網頁上觀察溫度

1、 新建一個 temperature.php 的文件:

sudo nano temperature.php

2、 在文件中加入下面的代碼,用你自己的設備 ID 替換 10-000802292522:

<?php

//File to read

$file = '/sys/devices/w1_bus_master1/10-000802292522/w1_slave';

//Read the file line by line

$lines = file($file);

//Get the temp from second line

$temp = explode('=', $lines[1]);

//Setup some nice formatting (i.e., 21,3)

$temp = number_format($temp[1] / 1000, 1, ',', '');

//And echo that temp

echo $temp . " °C";

?>

3、 打開你剛剛創建的 HTML 文件,並創建一個新的帶有 id 為 「screen」 的 <div>標籤

<div id="screen"></div>

4、 在這個標籤後或者這個文檔的尾部下面的代碼:

<script>

$(document).ready(function(){

 setInterval(function(){

   $("#screen").load('temperature.php')

 }, 1000);

});

</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[1] 譯者:zhousiyu325 校對:wxy

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

貢獻時間:2017-03-23 -> 2017-06-11

相關焦點

  • 使用樹莓派的GPIO
    國外嵌入式開源領域具有良好的分享精神,樹莓派的GPIO各種集成庫也層出不窮,下面推薦幾個。    【python GPIO】    【開發語言】——python    【簡單介紹】——該庫更確切的名稱為raspberry-gpio-python,樹莓派官方資料中推薦且容易上手。
  • 利用樹莓派GPIO串口控制485繼電器
    我用的是樹莓派4B 8G版1. 8路485繼電器2.TTL 485轉換板樹莓派設置我用的是樹莓派4B 8G版 因為新版的樹莓派佔用了串口,需要禁用藍牙終端執行,TxD -> DIRxD -> RO5V -> VCC0V -> GND轉換板和8路485繼電器A -> AB -> B測試代碼import RPi.GPIO
  • 樹莓派搭建Homebridge 組件家庭控制中心
    通過 Homebridge 的橋接,可以讓 Siri 控制完全不支持 HomeKit 的設備。硬體設備:樹莓派3B、ESP8266、ws2812燈帶、繼電器;軟體部分:homebrigde伺服器、mqtt伺服器、arduino IDE基本功能:使用Iphone語音或軟體控制燈帶、繼電器開關、檯燈。
  • 樹莓派用gpiozero庫控制LED燈
    準備硬體樹莓派一個,我的是3B+閃迪SD卡(class10),不小於8G樹莓派電源,電流2.5A以上,否則供電不足軟體給樹莓派刷好系統,這部分網上教程有非常多。如果你用的不是 noobs,那麼建議使用 Etcher這個鏡像燒錄軟體:安裝gpiozero庫gpiozero庫介紹和一些廢話zero是零的意思,也有初級入門的含義,所以gpiozero庫的宗旨就是為了降低使用樹莓派gpio的門檻,相比於其他操縱樹莓派引腳gpio的庫,gpiozero用戶體驗更加友好,更加直觀和簡單。
  • 用樹莓派改造站立式辦公桌:在隨機時間升降,還有阻力檢測功能
    當把左邊第三個針腳和右邊第二個針腳連接起來時,按鈕2的信號被發送到了控制書桌的微控制器上。他在這兩個針腳上各焊了一根線,連接起來時,就可以使桌子升高。那麼,我們怎麼以自動化的方式連接這些電線呢。我們知道,繼電器是一種簡單的晶片,當在控制引腳上發送一個小電流時,它允許你連接兩條線。
  • 樹莓派GPIO最入門教程:先從控制一個LED小燈開始
    GPIO口的使用非常廣泛,掌握了GPIO,差不多相當於掌握了操作硬體的能力。40根引腳如何進行編號呢?如果按照物理位置來編號,只要掌握一個規則就容易記住: 最靠近角上的那一根引腳為2號引腳。旁邊的就是1號引腳,具體請看上圖示意圖。
  • 玩轉樹莓派(四)使用Python 通過RPi.GPIO庫控制GPIO
    ) GPIO.cleanup()print("gpio out end\r\n")三、運行代碼Python是腳本語言,不需要編譯,可以直接運行運行pypi@raspberrypi:~/PythonWorkSpace $ python gpio_out.py gpio out : 0gpio out
  • 樹莓派JAVA開發串口(RXTX)和GPIO(pi4j)
    在RPI上完成了一個用JAVA開發的智能家居小項目,將RPI與單片機結合後可以對一些設備進行簡單的控制。
  • 樹莓派使用入門:進入物理世界 —— 如何使用樹莓派的 GPIO 針腳 | Linux 中國
    到目前為止,本系列文章主要專注於樹莓派的軟體方面,而今天我們將學習硬體。
  • 【.NET 與樹莓派】使用 GPIO 庫
    樹莓派自身把電平拉高或者拉低,以此來告訴連接的電子模塊要幹什麼活,這是發送信號;當一個觸摸開關被你的嬌美的小手觸碰後,模塊把電平拉高(高電平狀態),告訴樹莓派有人按了按鈕,這時候樹莓派的接口就是接收狀態,然後樹莓派可以控制另一個設備去做其他事情(比如,衝馬桶)。
  • 樹莓派實現溫度監控並控制風扇散熱
    為解決這個問題,下面使用了一個三極體來控制樹莓派散熱風扇。當樹莓派CPU溫度超過設定的值時,就開啟風扇進行散熱;當溫度降到設定值時,就關閉風扇,減少風扇運轉的噪音。連接原理圖三極體的三個管腳分別為發射極、基極和集電極,我使用的時D8550,其封裝圖為:
  • 項目分享| 夢幻聯動,用樹莓派遠程開發單片機
    小夥不想錯過我的推送,記得右上角-查看公眾號-設為星標,摘下星星送給我樹莓派、51單片機,看上去不相關的兩個平臺,經過一番折騰,居然可以利用樹莓派遠程開發單片機了
  • 亂七八糟的樹莓派+Arduino Nano+5v繼電器澆花
    1v繼電器最開始的時候買的是12v的電磁繼電器,對於繼電器不了解,打算用12v水泵驅動。其實用樹莓派或者Arduino驅動,買5v的繼電器就可以了。樹莓派GPIO的坑樹莓派GPIO的坑樹莓派GPIO引腳輸出電壓為3.3v,5v的繼電器,3.3v不會觸發,所以一直吸合的狀態。
  • 嵌入式 | GPIO的使用
    既然一個引腳可以用於輸入、輸出或其他特殊功能,那麼一定有寄存器用來選擇這些功能。對於輸入,一定可以通過讀取某個寄存器來確定引腳電位的高低;對於輸出,一定可以通過寫入某個寄存器來讓這個引腳輸出高電位或者低電位;對於其他特殊功能,則有另外的寄存器來控制它們。
  • LinuxGPIO操作和MTK平臺GPIO
    Linux下有一個宏,GPIO_GPIO_SYSFS,打開這個宏後,編譯燒錄到設備端,去看看sys/class/gpio/這個目錄。你會發現很多驚喜。雖然是一個小知識點,但是我覺得對做Linux和安卓驅動開發的同學非常有用,當別人問你怎麼操作一個GPIO口的時候,你不妨直接把這個連結發給他。
  • Linux內核驅動之gpio子系統的使用
    gpio,gpio 使用0~MAX_INT 之間的整數標識,不能使用負數,gpio 與硬體體系密切相關的,不過 linux 有一個框架處理 gpio,能夠使用統一的接口來操作gpio 在講 gpio 核心(gpiolib.c)之前先來看看 gpio 是怎麼使用的二 內核中gpio的使用1 測試gpio埠是否合法int gpio_is_valid(int
  • 聖誕快樂——Keras+樹莓派:用深度學習識別聖誕老人
    這個樹莓派中有用 Keras 實現的 LeNet 的 Python 腳本,可以檢測聖誕老人。 如果你要按照這個教程進行操作(不加更改),你需要: 一塊樹莓派 3 開發板(或樹莓派 3 入門套件,強烈推薦)一個樹莓派相機模塊或一個 USB 攝像頭。
  • 初玩樹莓派BGPIO操作點亮LED燈(四)
    既然一個引腳可以用於輸入、輸出或其他特殊功能,那麼一定有寄存器用來選擇這些功能。對於輸入,一定可以通過讀取某個寄存器來確定引腳電位的高低;對於輸出,一定可以通過寫入某個寄存器來讓這個引腳輸出高電位或者低電位;對於其他特殊功能,則有另外的寄存器來控制它們。初學來說了解GPIO可以理解成由晶片引出的一些外部針腳,至少有兩個功能(輸入和輸出)。輸出怎麼解釋?
  • 樹莓派筆記08—Python流水燈
    關注、星標公眾號,不錯過精彩內RPI.GPIO「raspberry-gpio-python
  • 控制rk3399的某個GPIO
    ~D7 作為編號區分(不是所有 bank 都有全部編號,例如 GPIO4 就只有 C0~C7, D0~D2)。內核配置文件.config中CONFIG_DEBUG_FS=y,掛載debugfs,mount -t debugfs none /sys/kernel/debug3 操作3.1 /sys/class/gpio方式使用/sys/class