pi4j是基於wiringpi開發的通過j**a來控制樹莓派gpio口的庫檔案。在j**a程式中引入相關類就可以使用已經封裝好的方法控制樹莓派gpio口。二、硬體連線pi4j官網:
pi4j安裝:install.html
pi4j文件:apidocs/index.html
編譯和執行:
使用了pi4j後,編譯.j**a檔案和執行.class檔案時,需要使用root許可權。例如:
編譯:
1
sudo
j**ac -classpath .:classes:/opt/pi4j/lib/
'*'
yourj**afile.j**a
執行:
1
sudo
j**a -classpath .:classes:/opt/pi4j/lib/
'*'
yourclassfile.class
如果使用sudo編譯和執行時提示找不到j**ac和j**a,這是由於root使用者沒有載入環境變數,所以找不到j**a的執行命令。可以使用如下命令切換到帶有環境變數的root使用者後,再執行編譯和執行:
1
sudo
su
- root
由於本人較懶,而且目前是新手狀態使用ubuntu,不知道用什麼軟體來做圖,所以用文字簡單描述一下硬體的連線。三、軟體編寫dht11引腳有格仔空的為正面,引腳朝下,從左數4個引腳分別為
dht11引腳名稱
dht11引腳功能
連線到樹莓派的gpio
1.vcc
正極,連線3.3v或5v
物理介面1,即3.3v
2.data
資料輸入輸出
物理介面7,即gpio 7
3.nc
懸空(就是不連任何地方)
不連4.gnd
負極物理介面 6,即gnd
此外按照dht11資料手冊要求,我在data和vcc之間連線了乙個4.7k歐姆的電阻,起到上拉作用。
使用wiringpi編寫c程式:使用pi4j編寫j**a程式:
01
#include
02
#include
03
#include
04
#include
05
#define max_time 85
06
#define dht11pin 7
07
#define attempts 5 //retry 5 times when no response
08
int
dht11_val[5]=;
09
10
int
dht11_read_val()
35
lststate=digitalread(dht11pin);
//read current state and store as last state.
36
if
(counter==255)
//if dht always high for 255 + 1 times, break this for circle
37
break
;
38
// top 3 transistions are ignored, maybe aim to wait for dht finish response signal
39
if
((i>=4)&&(i%2==0))
45
}
46
// verify checksum and print the verified data
47
if
((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xff)))
51
else
52
return
0;
53
}
54
55
int
main(
void
)
64
attempts--;
65
delay(2500);
66
}
67
return
0;
68
}
上述程式儲存為.c檔案後編譯成可執行檔案,執行後會在螢幕列印溫度和濕度。
程式中的資料接收處理部分細節如下:
1
if
((i>=4)&&(i%2==0))
1
if
((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xff))){
2
3
//這其中(dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xff)是將5個數相加,和1與。
4
//目的是防止讀出資料都為0,和為0,0和1與後得0,所以if判斷條件不成立,返回讀取失敗碼。
5
//如果讀出資料是不為0的正常資料,和1與後還得原數。
在使用pi4j編寫dht11要求的時序時,始終收不到dht11回應訊號,個人感覺是j**a達不到dht11要求的微秒級時序,所以j**a程式沒有成功。如果有哪位大神成功用j**a寫出dht11程式,希望能賜教一下。**:
樹莓派連線DHT11溫濕度感測器(python)
vcc接5v或者3.3v data接gpio 我接的是bcm的16號針腳,物理針腳是36 gnd接gnd codesyntax lang python usr bin python import rpi.gpio as gpio import time channel 16 引腳號16 data 溫...
樹莓派連線DHT11溫濕度感測器(python)
vcc接5v或者3.3v data接gpio 我接的是bcm的16號針腳,物理針腳是36 gnd接gnd codesyntax lang python python view plain copy usr bin python import rpi.gpio as gpio import time ...
DHT11溫濕度感測器
原理圖 資料傳輸 使用序列介面 單線雙向 data 用於微處理器與 dht11之間的通訊和同步,採用單匯流排資料格式,一次 通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數 部分用於以後擴充套件,現讀出為零.操作流程如下 一次完整的資料傳輸為40bit,高位先出。資料格式 ...