一個熱愛技術的人必定向往有一個科技感十足的環境吧,那何不親自實踐一下屬於技術人的座右銘:「技術改變世界」。html
就讓咱們一步步動手搭建一個屬於本身的「智能家居平臺」吧(不要對這個名詞擡槓啦,技術在手,怎麼設計實現因人而異),本文只作拋磚引玉,各路大神若是有更好的想法能夠各顯神通,固然能在評論區留下更好的想法讓你們共同窗習是再好不過啦。python
在文章最後附有全部源代碼,有須要的能夠自行下載,感謝Star~git
要作一些神奇的騷操做,好比環境數據採集,智能控制等,最終仍是要落地到設備上。要和各類各樣的設備打交道,確定是離不開電子元件的。市場上有大量的開箱即用的封裝的很好的硬件,可是都是獨立的或者是集成了某些功能於一身的,並不能本身靈活的進行擴展。程序員
若是咱們要本身靈活地配置各類各樣的功能組合,本身操做原始的電子元件或許是更明智的選擇。在咱們這個項目中,咱們將採用樹莓派+一系列電子元件來構建咱們的整個系統。github
樹莓派是什麼這裏只作簡單介紹,貼個不帶殼子的圖~npm
加上殼子能夠長這樣,固然了殼子是變幻無窮的,不可"以貌取派「編程
Raspberry Pi(中文名爲「樹莓派」,簡寫爲RPi,(或者RasPi / RPI) 是爲學習計算機編程教育而設計),只有信用卡大小的微型電腦,其系統基於Linux。 隨着Windows 10 IoT的發佈,咱們也將能夠用上運行Windows的樹莓派。windows
說白了就是迷你電腦,固然電腦能幹的事樹莓派均可以幹,瀏覽網頁,看視頻,玩一些對性能要求不高的遊戲都是能夠的。甚至還能夠當服務器,多個樹莓派搭建一個集羣(樹莓派官網就是部署在一堆樹莓派組成的集羣上)。服務器
那麼,GPIO又是什麼呢?編程語言
GPIO(英語:General-purpose input/output),通用型之輸入輸出的簡稱。說白了,就是一堆針腳,能夠自由地經過編程手段控制其輸入仍是輸出。
樹莓派自帶了不少針腳,給程序員提供電子元件控制的出入口。以「3代B+」型號樹莓派爲例,自己提供了兩排共40個針腳,從上面不帶殼的樹莓派圖片中能夠看到上面有兩排裸露的針腳。下面是針腳分佈圖:
第三列和第六列(表頭爲功能名)展現了40個針腳的做用,綠色的是開放通用的輸入輸出針腳,黑色的是接地,5V和3.3V高電平輸出,其餘顏色的針腳用在一些特殊場合,好比輸出視頻流什麼的,並不十分經常使用。咱們目前關注 輸出電壓/接地/通用針腳 這幾種。
樹莓派用不一樣的編碼規則給40個針腳起制定了編碼,方便咱們對針腳的輸入輸出進行開發。常見的編碼規則有:BOARD編碼規則,見上圖中的BOARD編碼對應的40個針腳的位置;還有BCM編碼規則,也可根據上圖找到對應針腳。
樹莓派GPIO通常採用 Arduino腳本或者python腳本進行控制,也有少數人使用C或者其餘編程語言,理論上講,越高級的語言API每每封裝的越完善,代碼也越簡潔容易,咱們的系列文章採用python腳本進行開發。
RPI.GPIO是python下控制GPIO的模塊,能夠經過命令 「npm install RPI.GPIO」 進行安裝。注意:該命令務必在有GPIO的環境下安裝,好比樹莓派設備上能夠順利安裝成功,可是在windows下沒有GPIO設備,所以安裝會出現各類問題,不建議在windos上開發時安裝這個包,咱們能夠直接遠程 PI 邊寫邊執行測試效果。
導入 RPi.GPIO 模塊:
import RPi.GPIO as GPIO
下面是一段簡單的python代碼,用來展現若是使用RPI.GPIO控制樹莓派的針腳
# 設置GPIO佈局編碼,這裏採用BOARD編碼風格,也可使用BCM風格,注意針腳編碼規則是不一樣的 GPIO.setmode(GPIO.BOARD) # 關閉警告,若是設置某個針腳爲非默認狀態,可能會獲得警告 GPIO.setwarnings(False) # 設置某個針腳的用途 # 下面例子:設置BOARD編碼風格的12號(對應GPIO.1)針腳爲讀取模式 GPIO.setup(12, GPIO.IN) # 讀取BOARD-12針腳的電平值 GPIO.input(12) #設置BOARD編碼風格的12號(對應GPIO.1)針腳爲輸出模式 GPIO.setup(12, GPIO.OUT) # 輸出BOARD-12針腳爲低電平,這裏GPIO.LOW/0/False,三種參數是等效的 GPIO.output(12,GPIO.LOW) # 在任何程序結束後,請養成清理用過的資源的好習慣 # 注意:這行代碼會將針腳狀態恢復成默認值,若是要保持狀態,請不要執行該命令 GPIO.cleanup()
上面代碼是最經常使用的控制各個針腳輸入輸出的命令,咱們能夠靈活組合基本命令完成更復雜的功能。
本節內容是咱們後續搭建系統的基礎,經過學習樹莓派的GPIO使用,爲咱們後續的溫溼度採集,電路控制等準備了充足的條件。