티스토리 뷰
728x90
출처 : java - read temperature from DHT11, using pi4j - Stack Overflow
pi4j 다운로드
$ mkdir pi4j $ cd pi4j $ wget http://get.pi4j.com/download/pi4j-1.0.zip --2016-07-09 16:59:31-- http://get.pi4j.com/download/pi4j-1.0.zip Resolving get.pi4j.com (get.pi4j.com)... 54.231.114.185 Connecting to get.pi4j.com (get.pi4j.com)|54.231.114.185|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3807428 (3.6M) [application/zip] Saving to: ‘pi4j-1.0.zip.1’ pi4j-1.0.zip.1 100%[=====================>] 3.63M 544KB/s in 6.4s 2016-07-09 16:59:38 (581 KB/s) - ‘pi4j-1.0.zip.1’ saved [3807428/3807428] $ unzip pi4j-1.0.zip
핀 연결
DHT11.java
import java.util.List; import java.util.ArrayList; import com.pi4j.wiringpi.Gpio; import com.pi4j.wiringpi.GpioUtil; public class DHT11 { private static final int MAXTIMINGS = 85; private int[] dht11_dat = { 0, 0, 0, 0, 0 }; public DHT11() { // setup wiringPi if (Gpio.wiringPiSetup() == -1) { System.out.println(" ==>> GPIO SETUP FAILED"); return; } GpioUtil.export(3, GpioUtil.DIRECTION_OUT); } public void getTemperature() { int laststate = Gpio.HIGH; int j = 0; dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0; StringBuilder value = new StringBuilder(); Gpio.pinMode(3, Gpio.OUTPUT); Gpio.digitalWrite(3, Gpio.LOW); Gpio.delay(18); Gpio.digitalWrite(3, Gpio.HIGH); Gpio.pinMode(3, Gpio.INPUT); for (int i = 0; i < MAXTIMINGS; i++) { int counter = 0; while (Gpio.digitalRead(3) == laststate) { counter++; Gpio.delayMicroseconds(1); if (counter == 255) { break; } } laststate = Gpio.digitalRead(3); if (counter == 255) { break; } /* ignore first 3 transitions */ if ((i >= 4) && (i % 2 == 0)) { /* shove each bit into the storage bytes */ dht11_dat[j / 8] <<= 1; if (counter > 16) { dht11_dat[j / 8] |= 1; } j++; } } // check we read 40 bits (8bit x 5 ) + verify checksum in the last // byte if ((j >= 40) && checkParity()) { float h = (float)((dht11_dat[0] << 8) + dht11_dat[1]) / 10; if ( h > 100 ) { h = dht11_dat[0]; // for DHT11 } float c = (float)(((dht11_dat[2] & 0x7F) << 8) + dht11_dat[3]) / 10; if ( c > 125 ) { c = dht11_dat[2]; // for DHT11 } if ( (dht11_dat[2] & 0x80) != 0 ) { c = -c; } float f = c * 1.8f + 32; System.out.println( "Humidity = " + h + " Temperature = " + c + "(" + f + "f)"); }else { System.out.println( "Data not good, skip" ); } } private boolean checkParity() { return (dht11_dat[4] == ((dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF)); } public static void main (String ars[]) throws Exception { DHT11 dht = new DHT11(); for (int i=0; i<10; i++) { Thread.sleep(2000); dht.getTemperature(); } System.out.println("Done!!"); } }
컴파일
$ javac -cp pi4j-1.0/lib/pi4j-core.jar DHT11.java
실행
$ sudo java -cp .:pi4j-1.0/lib/pi4j-core.jar DHT11 Humidity = 56.0 Temperature = 32.0(89.6f) Data not good, skip Humidity = 53.0 Temperature = 31.0(87.8f) Data not good, skip Humidity = 52.0 Temperature = 31.0(87.8f) Humidity = 52.0 Temperature = 31.0(87.8f) Data not good, skip Humidity = 51.0 Temperature = 31.0(87.8f) Humidity = 51.0 Temperature = 31.0(87.8f) Data not good, skip Done!!
GPIO 핀 배열
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- koba2010
- MySQL
- Delphi Tip
- BPI-M4
- NDK
- Linux
- ble
- SAS
- Mac
- 전예희
- android
- ffmpeg
- KOBA
- Spring
- Java
- 서울오토살롱
- 동경
- Spring MVC
- 레이싱모델 익스트림 포토 페스티벌
- Delphi
- 송주경
- oracle
- sas2009
- JavaScript
- 일본여행
- 튜닝쇼 2008
- Xcode
- 지스타2007
- flex
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함