樹莓派3QT+wiringPI控制GPIO輸入和輸出
今天和大家分享一下樹莓派上使用QT和wiringpi進行GPIO控制的相關知識,這裡面有很多需要我們注意的地方。在開始說明問題之前,我先介紹一下我的平臺,我是控制樹莓派的兩個GPIO埠,間隔500ms左右交替輸出高低電平,同時我使用STM32晶片去讀取我輸出的高低電平並顯示出來,用來檢驗樹莓派是否真的輸出了有效的電平訊號。我們使用QT來編寫和編譯我們的程式,但是這裡有一個需要注意的地方,那就是QT編寫出來的程式需要在中斷使用sudo命令來執行,而不能直接雙擊執行,因為wiringpi中的函式有些需要使用root許可權才能正常執行,這單需要各位注意。其實我的想法就是先用QT編寫和編譯好我們需要執行的程式碼,之後我們再去寫一個指令碼去呼叫這些程式,使這些程式獲得root許可權,從而可以正常的執行。
我們在編寫wiringpi的程式的時候需要注意的是wiringpi對GPIO的編碼方式以及BCM物理編碼方式的區別,如下圖給大家解釋一下:
我們把注意力放在紅色方框上,其他的分析方法也類似,其中physical兩列是對應樹莓派上引出的兩排排針,順序是拿著樹莓派網絡卡空對著我,然後排針從上往下數即為圖中的順序,wpi列對應的wirpingpi函式所傳遞的引數,而BCM列則為BCM編碼方式下的GPIO編號。其實我們在使用wiringpi開發我們的程式的時候我們只需要關注兩個引數,一個是wiringpi的GPIO編號,還有一個就是該GPIO對應在樹莓派實際的物理排針位置。這裡我們樹莓派舉個例子,比如我們需要操作樹莓派第11和12GPIO,就是對應樹莓派上,第6行上面的兩個排針,數好位置之後,我們發現樹莓派上第6行上面的兩個排針所對應的wpi編號為0和1,這是我們在使用wiringpi函式傳遞的引數為0和1即為操作物理上第11和12號GPIO。分析好GPIO的wiringpi和物理對應方式之後我們就可以開始使用QT進行程式設計了,開啟QT並建立工程,在主介面輸入一下程式碼(需要在QT中配置一下wiringpi的庫檔案),如下圖:
當編寫好函式,使用QT編譯完成之後我們可以發現目錄下有一個執行的檔案,這時候我們不能使用雙擊的執行(你使用雙擊方式執行可執行檔案,發現並不能達到預期的效果,原因上面已經闡述過了),我們使用終端的方式執行該程式。
cd 可執行檔案目錄
sudo ./可執行檔案
最終的執行效果如下:下面show一下執行的結果圖:
可以從STM32的LCD螢幕上看書,每個500ms左右,其電平從0跳變成1,或者從1跳變成0,完成整個GPIO的測試功能。