RPi上有5個LED:OK,PWR,FDX,LNK,10M。
我想知道是否可以通過軟件控制任何這些LED,即打開它們,或者更改強度(甚至更改顏色 gasp )。
如果是這樣,我在哪裡可以讀到它?當原始使用不需要LED時,它們可能是一種非常方便的信號通知用戶應用程序狀態。
RPi上有5個LED:OK,PWR,FDX,LNK,10M。
我想知道是否可以通過軟件控制任何這些LED,即打開它們,或者更改強度(甚至更改顏色 gasp )。
如果是這樣,我在哪裡可以讀到它?當原始使用不需要LED時,它們可能是一種非常方便的信號通知用戶應用程序狀態。
可以通過用戶空間軟件控制OK LED。此處的詳細信息:回复:我們可以控制板載LED了嗎?
總結如下(所有信息均歸功於BrianW):
OK LED可用作為 / sys / class / leds / led0 /
。
內核LED驅動器具有“觸發器”,可讓內核的其他部分控制LED。 LED的默認觸發器是' mmc0
',當訪問SD卡時,它會亮起。
root @ raspberrypi:〜#cat / sys / class / leds / led0 / triggernone [mmc0]
您可以按以下方式停用 mmc0
觸發器:
不回顯> / sys / class / leds / led0 / trigger
可以使用“ 亮度
”文件來打開和關閉LED。最小亮度為0,最大亮度為255。由於不支持可變亮度,因此任何大於0的值都將打開LED。
echo 1 > / sys / class / leds / led0 / brightnessecho 0 > / sys / class / leds / led0 / brightness
將亮度設置為0會自動將觸發器設置為“ none”。
如果希望LED返回其默認功能:
echo mmc0 > / sys / class / leds / led0 / trigger
有兩個您可以加載內核模塊( ledtrig_timer
和 ledtrig_heartbeat
),這些模塊將為您閃爍LED。
modprobe ledtrig_heartbeatecho心跳> / sys / class / leds / led0 / trigger
一旦您關閉了 mmc0
觸發器,就可以使用GPIO16來控制LED。它為低電平有效,因此您需要將引腳設置為低電平以打開LED,將其設置為高電平以將其關閉。
在Python中,您可以使用模塊 RPi.GPIO
來控制引腳16。還有一個C#驅動程序。
示例代碼
#!/ usr / bin / pythonimport RPi.GPIO作為來自時間導入的GPIO sleep#需要是BCM。 GPIO.BOARD可讓您按周向尋址GPIO端口 #連接器引腳號,並且LED GPIO不在連接器上GPIO.setmode(GPIO.BCM)#設置GPIO輸出通道GPIO.setup(16,GPIO.OUT)#OnGPIO.output(16,GPIO.LOW)#等待一個bitsleep(10)#OffGPIO.output(16,GPIO.HIGH)
板載LED均無法通過軟件控制-它們全部用於其他用途。
現在,這是正式答案...讓我們研究示意圖。
第4頁 PWR LED直接連接到電源,因此我們無法在軟件中進行控制。
第3頁 FDX,LNK和10M均已連接到電源。以太網芯片,因此我們同樣無法在軟件中控制它們(沒有時髦的流量黑客……)。
第4頁 但 OK實際上是由GPIO 16控制的,因此有可能被黑客入侵...
您可以控制所有led(如其他答案中所述,舊的Pi模型中的PWR除外)。
但是對於以太網led,您需要打補丁驅動程序並重新編譯內核。
有關如何進行重新編譯的信息,請參見: http://elinux.org/RPi_Kernel_Compilation
此處提供修補程序和更多信息(如果需要,請提供Google翻譯): http ://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html
完成後,您可以控制:/ sys / class / smsc95xx_leds和eth_fdx,eth_lnk和eth_spd。
示例:echo 0> / sys / class / smsc95xx_leds / eth_fdx echo 1> / sys / class / smsc95xx_leds / eth_fdx
有一種更簡單的方法可以從用戶區控制LAN LED。可以從
http://www.raspberrypi.org/forums/viewtopic.php?f=63&t=72070
獲得源代碼與sudo一起運行。
我可以確認使用Raspberry Pi 2也可以控制PWD LED!
電源LED由以下文件中的文件控制:
/ sys / class / leds / led1
您可以像使用狀態LED一樣將其關閉:
echo 0 > / sys / class / leds / led1 /亮度#電源LEDecho 0 > / sys / class / leds / led0 /亮度#狀態LED
有關控制LED的更多方法,請參見蓋伊的答案
我寫了一個用戶空間程序,可以控制以太網LED。
該程序需要更新的 libusb-1.0
(不是舊的0.1)。它與LAN9512一起使用。 (例如在較舊的Raspberry B上)以及LAN9514芯片(例如在Raspberry B +或Raspberry 2上)
詳細信息請參見: LAN951x LED控件
使用Pi 2,您可以控制板上的紅色和綠色LED。
Windows 10 IoT文檔分別列出了GPIO 35和47上的紅色電源LED和綠色的OK LED。
https://ms-iot.github.io/content/zh-cn/win10/samples/PinMappingsRPi2.htm
我嘗試了Windows 10 IoT和Raspbian上的Python。儘管當有人訪問SD卡時Raspbian都會覆蓋LED,但兩者都可以控制LED。大概清除觸發器將消除此行為。)
這裡是一個示例。 (請注意,這不會像以前的文章中所述覆蓋觸發器)
print(“程序啟動”)將RPi.GPIO導入為GPIOimport時間通道= [35,47] print(“關閉LED的)GPIO.setmode(GPIO.BCM)GPIO.setup(通道,GPIO.OUT)GPIO.output(通道,GPIO.LOW)time.sleep(5)print(“打開LED的”)GPIO.output(通道,GPIO.HIGH)time.sleep(5)GPIO.cleanup()print(“程序結束”)