覆盆子 PI – 實施可負擔得起的家庭自動化系統 [第三部分]

幾個月後,我決定返回到 此專案 與我打算創建的 免費的家庭自動化系統, 和 經適房; 此微機為基礎的低消費, 但 跨平臺 可擕式 到任何設備與作業系統 GNU/Linux 可從 GPIO.前面的帖子 我們學會了如何控制模組 繼電器 optoacoplados覆盆子 PI 通過 bash, PHP, 和 Python; 在這個場合 我已經優化自動化系統, 順便說一句我已經遷移到 覆盆子 PI 3 處置 無線連接, 但是,如果你希望你可以使用任何以前的模型.

硬體 它是由兩個模組的八個繼電器 每個, 這使總數的 十六出局 控制 電器, 電動千斤頂, 照明; 並沒有結束 設備 將它轉換成這小 覆盆子 PI 3, 在你需要的一切 domotic 的房子 u 辦公室 常規.

樓宇自動化計畫

斷路開關圖 domotic DIY.

控制台被程式設計中 PHP, 和是一種優化的代碼 以前的版本 但用於進行管理 GPIO 直接通過 bash 大大加快這一進程; 一定要來, 因為我們將為此服務通過頁 Wifi 上網.

FremooticsPI

自動化系統 web 控制台.

事實 沒有附加檔 管理埠輸出 GPIO覆盆子 通過 Python; 將轉換這個簡單 web 頁, 單個檔, 在真正的起始點的已成為某一天在 全套家居自動化系統 我將開發 在一起.

<html>
<head>
<title>Panel de control - Sistema domotico libre</title>
</head>

<body>
<div align="center">
<br></br>

 <!--GPIO4/IN1-->
 <form action="" method="post">
 Interruptor 01 &nbsp;<input type="submit" name="encender4" value="Encender">
 <input type="submit" name="apagar4" value="Apagar">

 <!--GPIO17/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 02 &nbsp;<input type="submit" name="encender17" value="Encender">
 <input type="submit" name="apagar17" value="Apagar">

<br></br>

 <!--GPIO27/IN3-->
 <form action="" method="post">
 Interruptor 03 &nbsp;<input type="submit" name="encender27" value="Encender">
 <input type="submit" name="apagar27" value="Apagar">

 <!--GPIO22/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 04 &nbsp;<input type="submit" name="encender22" value="Encender">
 <input type="submit" name="apagar22" value="Apagar">

<br></br>

 <!--GPIO18/IN5-->
 <form action="" method="post">
 Interruptor 05 &nbsp;<input type="submit" name="encender18" value="Encender">
 <input type="submit" name="apagar18" value="Apagar">

 <!--GPIO23/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 06 &nbsp;<input type="submit" name="encender23" value="Encender">
 <input type="submit" name="apagar23" value="Apagar">

<br></br>

 <!--GPIO24/IN7-->
 <form action="" method="post">
 Interruptor 07 &nbsp;<input type="submit" name="encender24" value="Encender">
 <input type="submit" name="apagar24" value="Apagar">

 <!--GPIO25/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 08 &nbsp;<input type="submit" name="encender25" value="Encender">
 <input type="submit" name="apagar25" value="Apagar">

<br></br>

 <!--GPIO5/IN1-->
 <form action="" method="post">
 Interruptor 09 &nbsp;<input type="submit" name="encender5" value="Encender">
 <input type="submit" name="apagar5" value="Apagar">

 <!--GPIO6/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 10 &nbsp;<input type="submit" name="encender6" value="Encender">
 <input type="submit" name="apagar6" value="Apagar">

<br></br>

 <!--GPIO13/IN3-->
 <form action="" method="post">
 Interruptor 11&nbsp;<input type="submit" name="encender13" value="Encender">
 <input type="submit" name="apagar13" value="Apagar">

 <!--GPIO12/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 12 &nbsp;<input type="submit" name="encender12" value="Encender">
 <input type="submit" name="apagar12" value="Apagar">

<br></br>

 <!--GPIO19/IN5-->
 <form action="" method="post">
 Interruptor 13 &nbsp;<input type="submit" name="encender19" value="Encender">
 <input type="submit" name="apagar19" value="Apagar">

 <!--GPIO16/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 14 &nbsp;<input type="submit" name="encender16" value="Encender">
 <input type="submit" name="apagar16" value="Apagar">

<br></br>

 <!--GPIO20/IN7-->
 <form action="" method="post">
 Interruptor 15 &nbsp;<input type="submit" name="encender20" value="Encender">
 <input type="submit" name="apagar20" value="Apagar">

 <!--GPIO21/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 16 &nbsp;<input type="submit" name="encender21" value="Encender">
 <input type="submit" name="apagar21" value="Apagar">

</div>
</body>
</html>

<?php

// Funciones PHP del pin GPIO 4

 if ($_POST[encender4]) {
 $a- exec("echo 4 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio4/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

 if ($_POST[apagar4]) {
 $a- exec("echo 0 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 4

// Funciones PHP del pin GPIO 17

 if ($_POST[encender17]) {
 $a- exec("echo 17 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio17/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio17/value");
 echo $a;
 }

 if ($_POST[apagar17]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio17/value");
 $a- exec("echo 17 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 17

// Funciones PHP del pin GPIO 27

 if ($_POST[encender27]) {
 $a- exec("echo 27 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio27/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio27/value");
 echo $a;
 }

 if ($_POST[apagar27]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio27/value");
 $a- exec("echo 27 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 27

// Funciones PHP del pin GPIO 22

 if ($_POST[encender22]) {
 $a- exec("echo 22 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio22/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio22/value");
 echo $a;
 }

 if ($_POST[apagar22]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio22/value");
 $a- exec("echo 22 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 22

// Funciones PHP del pin GPIO 18

 if ($_POST[encender18]) {
 $a- exec("echo 18 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio18/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio18/value");
 echo $a;
 }

 if ($_POST[apagar18]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio18/value");
 $a- exec("echo 18 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 18

// Funciones PHP del pin GPIO 23

 if ($_POST[encender23]) {
 $a- exec("echo 23 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio23/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio23/value");
 echo $a;
 }

 if ($_POST[apagar23]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio23/value");
 $a- exec("echo 23 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 23

// Funciones PHP del pin GPIO 24

 if ($_POST[encender24]) {
 $a- exec("echo 24 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio24/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio24/value");
 echo $a;
 }

 if ($_POST[apagar24]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio24/value");
 $a- exec("echo 24 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 24

// Funciones PHP del pin GPIO 25

 if ($_POST[encender25]) {
 $a- exec("echo 25 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio25/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio25/value");
 echo $a;
 }

 if ($_POST[apagar25]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio25/value");
 $a- exec("echo 25 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 25

// Funciones PHP del pin GPIO 5

 if ($_POST[encender5]) {
 $a- exec("echo 5 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio5/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio5/value");
 echo $a;
 }

 if ($_POST[apagar5]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio5/value");
 $a- exec("echo 5 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 5

// Funciones PHP del pin GPIO 6

 if ($_POST[encender6]) {
 $a- exec("echo 6 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio6/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio6/value");
 echo $a;
 }

 if ($_POST[apagar6]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio6/value");
 $a- exec("echo 6 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 6

// Funciones PHP del pin GPIO 13

 if ($_POST[encender13]) {
 $a- exec("echo 13 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio13/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio13/value");
 echo $a;
 }

 if ($_POST[apagar13]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio13/value");
 $a- exec("echo 13 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 13

// Funciones PHP del pin GPIO 12

 if ($_POST[encender12]) {
 $a- exec("echo 12 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio12/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio12/value");
 echo $a;
 }

 if ($_POST[apagar12]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio12/value");
 $a- exec("echo 12 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 12

// Funciones PHP del pin GPIO 19

 if ($_POST[encender19]) {
 $a- exec("echo 19 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio19/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio19/value");
 echo $a;
 }

 if ($_POST[apagar19]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio19/value");
 $a- exec("echo 19 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 19

// Funciones PHP del pin GPIO 16

 if ($_POST[encender16]) {
 $a- exec("echo 16 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio16/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio16/value");
 echo $a;
 }

 if ($_POST[apagar16]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio16/value");
 $a- exec("echo 16 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 16

// Funciones PHP del pin GPIO 20

 if ($_POST[encender20]) {
 $a- exec("echo 20 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio20/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio20/value");
 echo $a;
 }

 if ($_POST[apagar20]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio20/value");
 $a- exec("echo 20 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 20

// Funciones PHP del pin GPIO 21

 if ($_POST[encender21]) {
 $a- exec("echo 21 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio21/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio21/value");
 echo $a;
 }

 if ($_POST[apagar21]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio21/value");
 $a- exec("echo 21 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 21

?>

若要執行 覆盆子和繼電器之間的連接, 你必須 以下各表去山腳下這封信 基於架構 GPIO BCM; 因為否則你就不得不修改檔中的行 PHP, 在中和替換 代碼 數目 PIN 雇員.

覆盆子 PI 模型 B + / 2/3 繼電器模組 1
+ 5V + 5V
GPIO 4
在 1
GPIO 17
在 2
GPIO 27 在 3
GPIO 22
在 4
GPIO 18 在 15
GPIO 23
IN1 6
GPIO 24
IN1 7
GPIO 25
IN1 8
吉安達 吉安達
覆盆子 PI 模型 B + / 2/3 繼電器模組 2
+ 5V + 5V
GPIO 5
在 1
GPIO 6
在 2
GPIO 13
在 3
GPIO 12
在 4
GPIO 19
IN1 5
GPIO 16
IN1 6
GPIO 20
IN1 7
GPIO 21
IN1 8
吉安達 吉安達

一旦連接了所有 針腳覆盆子 對各自 VCC, 吉安達, e 投入 的的 繼電器; 剩下的只是 將 PHP 檔案複製 覆盆子 PI, 什麼用 SCP 這將使我們能夠這樣做 遠端.

usuario@maquina:~ $ scp index.php pi@192.168.1.*:/home/pi/
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo mv /home/pi/index.php /var/www/html/

遠端 我們將該檔移到 web 伺服器的目錄, 和我們將指派由業主 SSH使用者和組 www 資料; 會將其添加到 組 gpio, 然後 我們重新開機以應用所做的更改.

usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo chown www-data:www-data /var/www/html/index.php
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo usermod -a -G gpio www-data
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo reboot

最後 我們用 230V 繼電器喂 正如我們看到的 以前的文章 製作 入口處和其他陽性兩極之間的橋樑,, 若要使用單個 插頭, 或切換 小型斷路器; 但是,如果我們想要連接 十六個設備 高消費是 建議使用兩個, 或更多插頭.

relespuenteados

積極的兩極之間的中繼模組橋方案.

其餘的電線, 對應于 負極 及至 需要的 地球, 我們會將它們連接 直接到設備 想要通過控制 繼電器模組, 在我的例子 插頭 domotic DIY; 我們亦應謹記一點, 為了安全我們繼電器均應具有 1A 退出, 所以對於 16 產出將需要的繼電器 16自.

繼電器圖插頭

圖插頭 domotic DIY.

在以下 視頻 你可以看到這性能 十六個輸出系統 通過檢查他們, 通過演示 用低能量燈; 如果你喜歡不要忘記 按照我上 YouTube 為了不錯過任何的 未發佈的視頻 我要發佈.

如果你願意,你可以跟著我 推特, Facebook, 谷歌 +, LinkedIn, Feedly, 或它分享這份出版物下方的按鈕, 如果您有任何疑問或建議,請不要猶豫,置評.

説明我們達成更多的讀者 Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

15 思考"覆盆子 PI – 實施可負擔得起的家庭自動化系統 [第三部分]

  1. Peatonet 的問題, 我已複製的代碼是和一切工作正常, 除了那去的後退按鈕, 打開關閉下降,反之亦然.

    謝謝你的所有輝煌的博客.

      • 我正在測試連接到連絡人之前 230 V 和紅帶領的繼電器轉身的時候關閉脈衝. 我略有修改代碼以扭轉這種局面和看起來很好, 但懷疑真理出現了我. 謝謝你的回答.

  2. 好的貢獻. 我需要類似的東西為灌溉控制,但有一個條件: 如果一個 n 輸出處於 1 然後,GPIOx 將在 1. 骨 GPIO 如果只有當所有輸出 = 0 = 0. 任何想法?? 電磁閥和 GPIOx 泵輸出在哪裡. 從已經謝謝你.

  3. 你好, 我對此感興趣,因為我想要控制一些外國從移動的燈.
    它將是第一次嘗試與覆盆子.
    但引起我懷疑,當調用這個帖子 “第三部分”.
    只有那 PHP 代碼已經不會缺乏使用什麼第一和第二的部分?
    我明白,此代碼將 index.php, 在哪裡放置莎?
    多謝!

      • 非常感謝您的及時反應.
        我已與八個繼電器單剪板連接.
        但一件罕見的事發生在我身上,找不到解決方案.
        使 web 按鈕的, GPIO 是啟動我完美, 給予其相應的電壓和保持,直到將其關閉, 但另一方面,繼電器使其 “按一下” 運行但不是開關. 聲音是好像繼電器是劍和停用, 它是如此之快米沒有檢測到任何更改.
        這可能是由於?
        謝謝.

        Salu2!

        • 我發現 bug.
          在 PHP 代碼中, 關閉命令, 刪除 $a 代碼- exec(“回聲 18 > /sys/類/gpio/匯出”); , 因為你有第一個交換器上和現在的作品我.
          現在是什麼讓, 第一次你打開覆盆子; 8 個 led 到中等強度的光, 你要打開和關閉一次,然後你打開 led 好和現在的作品正確.

          Salu2!

          • 抱歉我說得太重了這麼多評論,但這是我跟我的 raspery 的第一個專案,它是令人驚歎和非常非常簡單! 是本教程.
            打開與此設備的世界是 inmeso!
            在 web 上, 無需離開 PHP, 你可以看到那個開關處於活動狀態?
            開關, 能達到處理與時間安排和時間安排?
            真理的,我已經打開了一個新的世界, 非常有趣和經濟.

            Salu2 和感謝!

          • 你好巴勃羅 · 氣相色譜法.

            我認為在注釋中,我解釋作為檢查那個開關是活躍的閱讀,通過 PHP 的 GPIO 的狀態.

            以程式設計方式控制時間簡單的就是要使用系統的 CRON 守護進程運行你想要什麼, 在哪個侯爵樂倍.

            非常感謝你的評論.

          • 已經相當雨篷工程, 要讀取的 gpio 狀態就足夠使用
            exec ( “GPIO 閱讀 29”, $status21 );
            如果 ($status21[0] == 0) {
            }
            並把你想要如果它打開顯示的括弧或 = = 地位 1 關閉.

            閱讀的 gpio 的編號不匹配 gpio 埠編號, 如果你想要放在這裡的每個埠與讀過其編號等價表.

            唯一的一點,我還是不懂, 是的因為 1 它是關閉和 0 位於.
            和上覆盆子為什麼, 所有的輸出都是無國籍, 離開到中等電壓和輸出不工作,直到你把他們兩次.

            創建網站重置, 它的作用是的順序給所有產出, 一個 “睡眠” 和另一個時間又要給他們所有關閉的順序, 此過程完成後已經是所有功能.

            它可能是,他們通過這兩件事?

            Salu2!

          • 嗨,保羅 ·, 對不起,但我拖延我最近很少的時間之間的工作和研究.

            首先我要感謝你,你有與其他博客的讀者分享你的進步, 當我有閒置時間我所具有的掛起繼續本節的教程在家裡自動化方便且經濟實惠, 但它真的驕傲的我看到你跟自己提出該專案,並會使每一個在您自己的自訂系統.

            通過分配一個邏輯的低值繼電器連接 (0), 並把他們與高一個邏輯值 (1) 它是可能的由於那你已經連接中繼到 230V 作為常開而不是通常閉路, 正如我告訴讀者 XuFLes 這篇文章的第一個批註; 如果它測試和問題仍然存在, 隨意評論,試著想想任何其他可能性.

            要避免做輸出重置後每個 Raspbian 點火, 您可以創建簡單的腳本,匯出並設置您想要重新開機的針腳, 和從為 rc.local 例如啟動它.

          • 你好!
            那天下午在答覆中沒有什麼!
            它是邏輯採取你的時間,尤其是在這些日期.
            點火和關機, 它的工作周圍的其他方式, 我有繼電器連接.

            和什麼為 rc.local, 可以避免不得不轉到重置頁面, 像你一樣.

            Salu2!

  4. 好的行人, 我一直在讀 3 家庭自動化部分教程, 可是在其程式設計去非常快,我, 主題似乎超級有趣,但我認為我們需要一個完整的家庭自動化系統的細節,而是從外部接收輸入, ( 按鈕, 光感應器, 等). 我想要進行協作和思考,電氣部分,我可以説明,我則反過來要求説明,以瞭解整個程式設計. 我的電子郵件 tecnico.antono.raya@gmail.com

    一句問候和祝賀 web

留言