動(dòng)零門檻)
30秒上手 Python GPIO控制python-periphery 讓硬件驅(qū)動(dòng)零門檻【免費(fèi)下載鏈接】python-peripheryA pure Python 2/3 library for peripheral I/O (GPIO, LED, PWM, SPI, I2C, MMIO, Serial) in Linux.項(xiàng)目地址: https://gitcode.com/gh_mirrors/py/python-peripherypython-periphery 是一個(gè)純 Python 庫幫你用幾行代碼就搞定 Linux 下的 GPIO、LED、PWM、SPI、I2C、MMIO 和串口通信。樹莓派、BeagleBone 這類嵌入式開發(fā)板插上什么外設(shè)它就能讓你直接讀寫不用再啃 sysfs 文件那些繁瑣操作。為什么值得試純 Python 實(shí)現(xiàn)沒有 C 擴(kuò)展pip一條命令裝好不用折騰編譯GPIO、LED、PWM、SPI、I2C、MMIO、Serial 7 類外設(shè)一次打包一個(gè)庫全搞定Python 2/3 都兼容MIT 協(xié)議隨便商用 一條命令裝好先裝庫1 條命令搞定pip install python-periphery跑完沒有報(bào)錯(cuò)就是裝好了。如果離線環(huán)境裝不了就克隆源碼裝git clone https://gitcode.com/gh_mirrors/py/python-periphery cd python-periphery python setup.py install實(shí)際用起來裝完就能寫代碼了。這段代碼打開開發(fā)板上的一根 GPIO 讀電平、再驅(qū)動(dòng)另一根輸出取反值from periphery import GPIO gpio_in GPIO(/dev/gpiochip0, 10, in) # 10 號(hào)線設(shè)為輸入 gpio_out GPIO(/dev/gpiochip0, 12, out) # 12 號(hào)線設(shè)為輸出 value gpio_in.read() gpio_out.write(not value) gpio_in.close() gpio_out.close()跑完后12 號(hào)線的電平永遠(yuǎn)和 10 號(hào)線相反。用萬用表量一下就能看到電平跟著翻了個(gè)面。能力總覽能力一句話說明典型場(chǎng)景GPIO按線路號(hào)讀寫電平支持邊沿事件按鈕觸發(fā)、繼電器控制LED按名稱開關(guān)系統(tǒng) LED可調(diào)亮度狀態(tài)指示燈PWM設(shè)頻率和占空比調(diào)速、呼吸燈SPI按模式與速率收發(fā)字節(jié)接顯示屏、傳感器I2C對(duì)器件地址讀寫寄存器溫濕度傳感器、EEPROMMMIO直接讀寫硬件寄存器讀板載 RTC、MAC 地址Serial打開串口收發(fā)數(shù)據(jù)接 USB 轉(zhuǎn)串口模塊場(chǎng)景實(shí)戰(zhàn)翻轉(zhuǎn) GPIO 輸出上面30秒跑通里那段代碼就是這個(gè)場(chǎng)景的完整實(shí)現(xiàn)輸入線接一個(gè)按鈕或信號(hào)源輸出線接繼電器或蜂鳴器。GPIO()只傳 2 個(gè)參數(shù)時(shí)走 sysfs 接口編號(hào)用 GPIO 號(hào)傳 3 個(gè)參數(shù)第一個(gè)是/dev/gpiochipX時(shí)走字符設(shè)備接口編號(hào)是芯片內(nèi)的線號(hào)。read()返回布爾值not value取反后寫出去一個(gè)反相器就搭好了。調(diào) LED 亮度這段代碼打開兩顆系統(tǒng) LED一顆滅、一顆亮到一半from periphery import LED led0 LED(led0, False) # 打開并熄滅 led1 LED(led1, True) # 打開并點(diǎn)亮 led1.write(led1.max_brightness // 2) # 亮度調(diào)到 50% led0.close() led1.close()跑完肉眼可見 led0 滅、led1 半亮。max_brightness是每顆 LED 的滿量程值拿它做除數(shù)代碼在什么板子上都不會(huì)寫死錯(cuò)亮度。用 PWM 調(diào)轉(zhuǎn)速這段代碼給 0 號(hào)芯片的 10 號(hào)通道設(shè) 1 kHz 頻率、75% 占空比再動(dòng)態(tài)降到 50%from periphery import PWM pwm PWM(0, 10) pwm.frequency 1e3 # 1 kHz pwm.duty_cycle 0.75 # 75% pwm.enable() pwm.duty_cycle 0.50 # 降到 50% pwm.close()占空比寫多少電機(jī)轉(zhuǎn)速、燈亮度就按多少比例走。改duty_cycle這一行就能實(shí)時(shí)調(diào)速不用重新初始化。新手最常踩的坑 ??Q1GPIO 編號(hào)對(duì)不上輸出沒反應(yīng)接口決定編號(hào)規(guī)則。GPIO(10, in)走 sysfs10 是 GPIO 號(hào)GPIO(/dev/gpiochip0, 10, in)走字符設(shè)備10 是芯片內(nèi)線號(hào)。兩套編號(hào)不通用先確認(rèn)自己板子上引腳對(duì)應(yīng)的到底是哪個(gè)號(hào)。Q2LED(led0)報(bào) LookupErrorLED 名字是 Linux 分配的系統(tǒng)名不是你想的 led0 就一定存在。先跑cat /sys/class/leds/看看板上實(shí)際注冊(cè)了哪些名字照著填就不會(huì)錯(cuò)。Q3PWM 或 MMIO 報(bào) PermissionErrorsysfs PWM 和 MMIO 都要 root 權(quán)限加sudo python your_script.py再跑一次基本就過了。接下來去哪倉庫內(nèi)的 docs/ 目錄放了全部 Sphinx 文檔源碼比如 docs/gpio.rst 是 GPIO 的完整 API 說明改完跑make html就能本地生成網(wǎng)頁文檔每個(gè)外設(shè)的實(shí)現(xiàn)都在 periphery/ 里想弄清 GPIO 怎么自動(dòng)選接口直接看 periphery/gpio.py它按參數(shù)個(gè)數(shù)把請(qǐng)求分發(fā)給 cdev 或 sysfs 兩條實(shí)現(xiàn)每個(gè)模塊都配了可運(yùn)行的測(cè)試在 tests/ 目錄里比如 tests/test_gpio.py照著自己硬件改一改就是現(xiàn)成的聯(lián)調(diào)腳本裝好庫挑一塊板子把它加進(jìn)你的下一個(gè)硬件項(xiàng)目吧?!久赓M(fèi)下載鏈接】python-peripheryA pure Python 2/3 library for peripheral I/O (GPIO, LED, PWM, SPI, I2C, MMIO, Serial) in Linux.項(xiàng)目地址: https://gitcode.com/gh_mirrors/py/python-periphery創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考