引言
我身邊大部分朋友是使用JAVA的咧欣,他們都對(duì)樹(shù)莓派有不少興趣完域,所以我干脆也探索一下如何使用JAVA來(lái)操作樹(shù)莓派的GPIO接口赘来,并寫(xiě)此文給想嘗試樹(shù)莓派的JAVA程序員參考。
Pi4j簡(jiǎn)要說(shuō)明
要使用JAVA操作樹(shù)莓派的GPIO呛梆,要借助一個(gè)第三方庫(kù):PI4J膀捷。以下是PI4J的官方說(shuō)明:
This project is intended to provide a friendly object-oriented I/O API and implementation libraries for Java Programmers to access the full I/O capabilities of the Raspberry Pi platform. This project abstracts the low-level native integration and interrupt monitoring to enable Java programmers to focus on implementing their application business logic.
Pi4j是依賴wiringpi封裝而成的,不僅能操作GPIO削彬,還能使用I2C協(xié)議和SPI協(xié)議與硬件設(shè)備進(jìn)行交互全庸。
安裝
安裝PI4J之前,你需要先在樹(shù)莓派里面安裝兩樣?xùn)|西:
最新版的Raspbian系統(tǒng)貌似已經(jīng)默認(rèn)安裝這兩樣?xùn)|西了的融痛。
安裝PI4J有兩種方式:
- 方式一(推薦)壶笼,執(zhí)行以下命令即可安裝完成:
curl -s get.pi4j.com | sudo bash
- 方式二,下載安裝包來(lái)安裝雁刷,下載地址為http://get.pi4j.com/download/pi4j-1.1.deb覆劈,下載完畢后執(zhí)行以下命令,即可完成安裝:
sudo dpkg -i pi4j-1.1.deb
安裝之后沛励,PI4J的庫(kù)放在以下目錄:
/opt/pi4j/lib
如果你想更新PI4J责语,可以執(zhí)行以下命令:
sudo apt-get install pi4j
或者
pi4j --update
如果想要卸載PI4J,可以執(zhí)行以下命令
sudo apt-get remove pi4j 或 pi4j --uninstall
完全卸載方式:
curl -s get.pi4j.com/uninstall | sudo bash
PI4J的官方demo
安裝PI4J之后目派,就應(yīng)該盡快入門(mén)PI4J了坤候,而學(xué)習(xí)PI4J最好的辦法就是一邊看著官方demo,一邊動(dòng)手寫(xiě)代碼企蹭。
如果你按照上面的方式安裝PI4J白筹,那么官方文檔在以下目錄:
/opt/pi4j/examples
進(jìn)入該目錄智末,執(zhí)行以下命令,可編譯源代碼:
sudo /opt/pi4j/examples/build
編譯之后徒河,你可以隨意運(yùn)行某個(gè)demo系馆,比如這里運(yùn)行BlinkGpioExample,那么執(zhí)行以下命令:
./run BlinkGpioExample
demo簡(jiǎn)要解析
畢竟大家都是新手顽照,光有代碼恐怕還不能困惑由蘑,所以這里就拿一個(gè)例子講解一下代碼,方便大家入門(mén)代兵。
在講解之前尼酿,大家除了準(zhǔn)備樹(shù)莓派,還要先自備好led燈奢人,以及一個(gè)開(kāi)關(guān)按鈕(某寶上搜有很多)谓媒,因?yàn)榇蠖嗟墓俜嚼永锒际褂玫健?/p>
好了淆院,大家先看看兩個(gè)圖何乎,這兩個(gè)圖表示這樹(shù)莓派2(樹(shù)莓派3點(diǎn)此)上的針腳。也就是我們所說(shuō)的GPIO土辩。
圖一是真實(shí)樹(shù)莓派的針腳圖支救,圖一的箭頭1,箭頭2指向圖二頂頭的兩個(gè)針腳拷淘。這里需要注意的是各墨,圖二兩邊的粗體數(shù)字,這是PI4J的針腳編號(hào)启涯。
好了贬堵,我們開(kāi)始看代碼,打開(kāi)/opt/pi4j/examples/ControlGpioExample.java:
/*
* #%L
* **********************************************************************
* ORGANIZATION : Pi4J
* PROJECT : Pi4J :: Java Examples
* FILENAME : ControlGpioExample.java
*
* This file is part of the Pi4J project. More information about
* this project can be found here: http://www.pi4j.com/
* **********************************************************************
*/
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
/**
* This example code demonstrates how to perform simple state
* control of a GPIO pin on the Raspberry Pi.
*
* @author Robert Savage
*/
public class ControlGpioExample {
public static void main(String[] args) throws InterruptedException {
System.out.println("<--Pi4J--> GPIO Control Example ... started.");
// create gpio controller
final GpioController gpio = GpioFactory.getInstance();
// provision gpio pin #01 as an output pin and turn on
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);
// set shutdown state for this pin
pin.setShutdownOptions(true, PinState.LOW);
System.out.println("--> GPIO state should be: ON");
Thread.sleep(5000);
// turn off gpio pin #01
pin.low();
System.out.println("--> GPIO state should be: OFF");
Thread.sleep(5000);
// toggle the current state of gpio pin #01 (should turn on)
pin.toggle();
System.out.println("--> GPIO state should be: ON");
Thread.sleep(5000);
// toggle the current state of gpio pin #01 (should turn off)
pin.toggle();
System.out.println("--> GPIO state should be: OFF");
Thread.sleep(5000);
// turn on gpio pin #01 for 1 second and then off
System.out.println("--> GPIO state should be: ON for only 1 second");
pin.pulse(1000, true); // set second argument to 'true' use a blocking call
// stop all GPIO activity/threads by shutting down the GPIO controller
// (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks)
gpio.shutdown();
System.out.println("Exiting ControlGpioExample");
}
}
連接圖
要查看上面代碼的運(yùn)行效果结洼,需要按照如下圖所示接入LED燈:
執(zhí)行
連接之后黎做,執(zhí)行命令:
./run ControlGpioExample
輸出
這個(gè)例子的LED輸出應(yīng)該是這樣的:
Turn ON for 5 seconds
Turn OFF for 5 seconds
Turn ON for 5 seconds
Turn OFF for 5 seconds
Turn ON for 1 second
Turn OFF
更多的例子解析,可以直接看PI4J的官方網(wǎng)站松忍,非常詳細(xì)蒸殿。官方網(wǎng)站:http://pi4j.com/index.html
開(kāi)發(fā)maven環(huán)境
這里簡(jiǎn)要說(shuō)一下maven開(kāi)發(fā)環(huán)境。畢竟如果真要做一些好東西出來(lái)鸣峭,自然少不了用maven來(lái)管理項(xiàng)目宏所。
在樹(shù)莓派上安裝maven,參考官方文檔:http://maven.apache.org/install.html
PI4J的maven配置是:
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-core</artifactId>
<version>1.1</version>
</dependency>
我的樹(shù)莓派學(xué)習(xí)項(xiàng)目github地址:https://github.com/dasheng523/pi
我會(huì)一直學(xué)習(xí)摊溶,并加入一些模塊的驅(qū)動(dòng)開(kāi)發(fā)代碼爬骤。有興趣的同學(xué)可以加入進(jìn)來(lái)一起玩轉(zhuǎn)樹(shù)莓派。