树莓派GPIO点灯
【準備工作】
首先準備一個能正常使用的樹莓派,遠程登錄或者接屏幕都隨意,這不是重要的。
(筆者使用的是樹莓派3B+)
焊接一個電阻+小燈珠的簡易電路,接到樹莓派對應的GPIO,類似下圖
【操作方法】
首先附上樹莓派的引腳對照表:(注意,下圖中每個GPIO對應了三種不同的編碼)
附帶介紹一種方法可以直接輸入命令查詢GPIO引腳編號:
此工具由GPIO Zero Python庫提供,默認情況下,它安裝在Raspbian桌面映像上,但不安裝在Raspbian Lite上。
打開終端輸入命令 pinout
看到引腳對照表中的3種編碼,實際上也對應了3種控制GPIO的方式,樹莓派內核中已經編譯自帶了 gpio 的驅動,我們只需通過一些第三方寫好的庫函數來完成具體的操作,即可控制相應外設,比較常見的操作庫函數有:
python GPIO
開發語言——python
簡單介紹——樹莓派官方資料中推薦且容易上手。python GPIO 是一個小型的 python 庫,可以幫助用戶完成 raspberry 相關 IO 口操作,但是 python GPIO 庫還沒有支持 SPI、I2C 或者 1-wire 等總線接口。
官方網站—— https://code.google.com/p/raspberry-gpio-python/
wiringPi
開發語言——C 語言
簡單介紹——wiringPi 適合那些具有 C 語言基礎,在接觸樹莓派之前已經接觸過單片機或者嵌入式開發的人群。wiringPi 的 API 函數和 arduino 非常相似,這也使得它廣受歡迎。作者給出了大量的說明和示例代碼,這些示例代碼也包括 UART 設備,I2C 設備和 SPI 設備等。
官方網站—— http://wiringpi.com/
BCM2835 C Library
開發語言——C 語言
簡單介紹——BCM2835 C Library 可以理解為使用C語言實現的相關底層驅動,BCM2835 C Library 的驅動庫包括 GPIO、SPI 和 UART 等,可以通過學習 BCM2835 C Library 熟悉 BCM2835 相關的寄存器操作。如果有機會開發樹莓派上的 linux 驅動,或自主開發 python 或 PHP 擴展驅動,可以從 BCM2835 C Library 找到不少的“靈感”。
官方網站—— http://www.airspayce.com/mikem/bcm2835/
本文暫時只介紹使用Python控制GPIO,樹莓派基本都預裝好了Python的GPIO庫。
1、安裝Python RPI.GPIO庫
帶桌面的版本已經安裝了Python RPI.GPIO庫,測試有沒有安裝:
在終端打開 Python3
在shell中輸入命令嘗試導入庫: import RPi.GPIO as GPIO 。如果沒有出現error,就表示已經安裝了,可以直接跳到下一步。
如果出現錯誤,則執行以下命令:
sudo apt-get update sudo apt-get install python3-rpi.gpio2、編寫代碼
在桌面新建文件led_test.py,名字和路徑隨意。新建完成后直接雙擊打開,也可以在SSH登錄操作,用nano或vim編輯即可。
編寫代碼如下:
注意:
GPIO.setmode() 有兩種參數可以選擇:可以使用 GPIO.BOARD 選項告訴庫根據 GPIO 接口的引腳號引用信號,或者使用 Broadcom 芯片的信號編號( GPIO.setmode(GPIO.BCM) )。
GPIO.cleanup() 用于重置 GPIO 接口,它把所有的 GPIO 引腳設置為低電平狀態,所以沒有多余的信號出現在界面上。在不使用改函數的情況下,如果試圖配置一個已分配信號值的 GPIO 信號引腳,那么 RPi.GPIO 模塊會產生一條警告信息。
3、運行程序
依次輸入命令
可以觀察到LED1s閃一次,一共閃爍5次。
上面是直接輸出高低電平的方法,下面還可以使用PWM完成LED閃爍:
#!/usr/bin/python3import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) blink = GPIO.PWM(17, 1) try:blink.start(50)while True:pass except KeyboardInterrupt:blink.stop() GPIO.cleanup()start() 方法指定了占空比(從 1 到 100)。在開始 PWM 信號后,程序就可以解放出來做其他事情了。GPIO 17 會持續發送 PWM 信號,直到停止它。 blink = GPIO.PWM(17, 1) 指定了 PWM 信號以 1HZ 的頻率發送,燈 1 秒閃爍一次。按 Control + C 中止閃爍退出。
【關于查詢GPIO pin腳位】
除了上面的方法,還介紹一種方法,使用WiringPi:
上面已經提過了,WiringPi是一個樹莓派使用的C語言編寫的BCM2835通用輸入輸出控制庫。以GNULGPLv3許可證發行,可用于C和C++以及很多其他語言(經過適當封裝),和Arduino的”wiring system1“相似。
筆者的系統貌似已經從官網下載下來已經默認安裝了WiringPi,命令gpio -v可以查詢版本。命令gpio readall可以查看pin腳位編號。
參考:
https://www.cnblogs.com/zhenqichai/p/raspberry-pi-control-GPIO-with-python.html
https://jingyan.baidu.com/article/ad310e800ef7371848f49e4d.html
https://blog.csdn.net/K_AAbb/article/details/114951111
https://www.cnblogs.com/wirehome/p/10412337.html
https://www.jianshu.com/p/008339095fd6
https://www.cnblogs.com/isha2088/p/6282191.html
https://blog.csdn.net/qq_40657528/article/details/86515018
https://shumeipai.nxez.com/raspberry-pi-pins-version-40
https://wiki.jikexueyuan.com/project/raspberry-pi/gpio.html
https://blog.csdn.net/qq_36958104/article/details/83447224
總結
- 上一篇: 树莓派更换软件源提高下载速度
- 下一篇: 树莓派编译一个C程序