經過上週末兩天的焊接, 終於完成了433MHZ的發射模組連接, 但是接收模組卻始終無法正確接收信號。 本週末再看如何重新連接電路了。
那麼我們再講一下如何使用樹莓派pi4j來控制樹莓派GPIO引腳。
因為pi4j需要依賴java環境和wiringPi庫, Java環境我們可以直接通過sudo apt-get install oracle-java8-jdk命令來安裝, wiring Pi安裝命令如下:
點選連結:https://git.drogon.net/?p=wiringPi;a=summary, 在這裡我們選擇一個最新版的wiringPi, 點擊SNAPSHOT, 便可下載, 假設我們下載的包是wiringPi-98bcb20.tar.gz。 實際中這個包會可能不同。
下載完畢後導入到樹莓派中, 執行下麵命令:
$ tar xfz wiringPi-98bcb20.tar.gz
$ cd wiringPi-98bcb20
$ ./build
等待build完畢。
下麵安裝pi4j, 執行下麵命令:
sudo curl -s get.pi4j.com | sudo bash
等待pi4j安裝完畢即可。
庫函數安裝好了, 那我們需要在eclipse中導入pi4j-core的jar包,
但是最新版的樹莓派系統如果使用1.1版本會報一個錯誤:
Unable to determine hardware version. I see: Hardware : BCM2835- expecting BCM2708 or BCM2709.
這是因為1.1版本不支援最新版的樹莓派系統, 我們這時候需要使用1.2-SNAPSHOT版本。 這個版本在很多maven庫裡還沒有收錄, 所以將其分享出來, 連結如下:
http://lst.wting.me/wp-content/uploads/2017/09/pi4j-core-1.2-SNAPSHOT.zip
好了, 現在我們集成了jar包, 就能直接開發應用了。 新建一個APP類, 寫入下面的方法:
public class App {
public static void main( String[] args ){
String get=args[0];
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_00, "LED", PinState.HIGH);
if(get.equals("h"))
pin.high();
else
pin.low();
}
}
在這裡附一個圖:
根據這張圖我們這個例子就很好理解了, 找到GPIO_00, 即11號引腳, 設置預設值高電平, 然後根據傳入參數設置高電平和低電平。
其實到這裡我們就可以控制繼電器控制燈光了, 但是很遺憾, 如果這樣做我們只能使用很長很長的線連接到我們的開關處, 對智慧家居來講很不友好, 所以我們需要使用無線把這個引腳的信號發射出去。
那麼我們介紹一下當前的設計:
樹莓派控制引腳輸出高電平, 高電平啟動EV1527晶片進行編碼, 編碼後的資料傳送給433MHZ的H34B無線發射模組將資料發送出去。 接收端是一個LR43B的無線接收模組, 接收到的資料使用RFE273解碼晶片進行解碼, 解碼後的引腳一定會有一個高電平,
我們先介紹一下EV1527的連接電路吧。
EV1527 是一片由 CMOS 設計製造的可預燒內碼的學習碼編碼晶片, 由軟體解碼, 內碼共有 20 位元可預燒 100 萬組內碼組合, 大大降低了使用編碼上重複的機率。 更重要的是其不可複製性, 並且由於可以自學習, 當發射模組丟了, 只要對接收模組進行自學習就可以使原先的發射模組失效, 大大提高了安全性。
電路圖如下圖所示。 圖中 ev1527 的第 5 腳至第 8 腳是按鍵輸入腳 , 內含接地電阻 , 外接一個4. 7 kΩ的電阻 ,再通過按鍵連到電源上。
為了能夠更好的集成這些晶片, 我們需要購置PCB雙面鍍錫板和一定的電阻, 篇幅有限, 接下來慢慢講解關於發射模組的基本內容。