소프트웨어를 사용하여 시스템 LED를 어떻게 제어합니까?


64

RPi에는 5 개의 LED가 있습니다 : OK, PWR, FDX, LNK, 10M.

소프트웨어에서 이들 중 하나를 제어 할 수 있는지, 즉 전원을 켜거나 강도를 변경 (또는 색상 가스 변경 ) 할 수 있는지 알고 싶습니다 .

그렇다면 어디에서 읽을 수 있습니까? LED는 원래 사용에 필요하지 않을 때 사용자 애플리케이션 상태를 신호하는 매우 편리한 방법 일 수 있습니다.


2
그리고 예-GPIO 출력에 LED를 쉽게 추가 할 수 있다는 것을 알고 있지만 외부 하드웨어없이 수행 할 수있는 작업이 궁금합니다.
Maria Zverina 2016 년

1
LED는 일반적으로 단색 (특히 한 가지 목적으로 필요할 때)이므로 그 부분을 잊어 버릴 수 있습니다. :
Jivings

2
@Jivings은 RPI의 비용 주어진 아마 단일 색상 걸 동의 ...하지만 :) 물어 결코 아프지 않는다
마리아 Zverina

답변:


57

OK LED는 사용자 공간 소프트웨어에서 제어 할 수 있습니다. : 여기에 세부 사항 재 : 우리는 온보드 LED를 제어 할 수

위의 요약 (BrianW의 모든 크레딧) :

OK LED는로 사용할 수 있습니다 /sys/class/leds/led0/.

커널 LED 드라이버에는 "트리거"가있어 커널의 다른 부분에서 LED를 제어 할 수 있습니다. LED의 기본 트리거는 ' mmc0'이며, 이는 SD 카드에 액세스 할 때 켜집니다.

root@raspberrypi:~# cat /sys/class/leds/led0/trigger
none [mmc0]

mmc0다음과 같이 트리거를 비활성화 할 수 있습니다 .

echo none >/sys/class/leds/led0/trigger

' brightness'파일을 사용하여 LED를 켜거나 끌 수 있습니다 . 최소 밝기는 0이고 최대 밝기는 255입니다. 가변 밝기 지원이 없으므로 0보다 큰 값은 LED를 켭니다.

echo 1 >/sys/class/leds/led0/brightness
echo 0 >/sys/class/leds/led0/brightness

밝기를 0으로 설정하면 트리거가 자동으로 "없음"으로 설정됩니다.

LED가 기본 기능으로 돌아가려면 :

echo mmc0 >/sys/class/leds/led0/trigger

로드 할 수있는 커널 모듈이 몇 개 있으며 ( ledtrig_timerledtrig_heartbeat) LED를 깜박입니다.

modprobe ledtrig_heartbeat
echo heartbeat >/sys/class/leds/led0/trigger

mmc0트리거를 끈 후에는 GPIO16을 사용하여 LED를 제어 할 수 있습니다. 액티브 로우이므로 LED를 켜려면 핀을 낮게 설정하고 끄려면 높게 설정해야합니다.

파이썬에서이 모듈 RPi.GPIO을 사용하여 핀 16을 제어 할 수 있습니다 . C # 드라이버도 있습니다.

샘플 코드

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

# Needs to be BCM. GPIO.BOARD lets you address GPIO ports by periperal
# connector pin number, and the LED GPIO isn't on the connector
GPIO.setmode(GPIO.BCM)

# set up GPIO output channel
GPIO.setup(16, GPIO.OUT)

# On
GPIO.output(16, GPIO.LOW)

# Wait a bit
sleep(10)

# Off
GPIO.output(16, GPIO.HIGH)

3
안녕하세요 가이! 링크 부패를 방지하기 위해 스레드의 주요 지점을 여기에 요약 할 수 있습니까? 감사!

그것은 심지어 해킹이 아닙니다!
Alex Chamberlain

맞습니다. 이더넷과 pwr led는 할 수 없지만, 더 필요한 경우 노출 된 GPIO 핀에 하드웨어로 추가 할 수 있습니다. GPIO 핀에 LED를 추가하는 많은 예가 있습니다. 요즘 전자 장치 101로 크리스탈 세트를 교체 한 것 같습니다 :) UART에 NMEA 문장이 수신 될 때마다 OK LED가 깜박입니다.
Guy

4
참고로 Raspberry Pi 2의 PWR LED도 마지막으로 제어 할 수 있습니다! 을 사용하여 GPIO 모드로 전환 echo gpio | sudo tee /sys/class/leds/led1/trigger한 다음을 사용하여 켜거나 끕니다 echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
geerlingguy

2
/ sys / class에 쓰는 데 필요한 수퍼 유저 권한없이 명령 행에서이 작업을 수행하는 방법에 대해 궁금한 사람은 먼저 gpio에서 트리거하도록 LED를 설정 한 다음 WiringPi learn.sparkfun.com/tutorials/ 를 설치하십시오 . raspberry-gpio / c-wiringpi-setup 이후 "$ gpio -g mode 16 output && gpio -g write 16 0"을 사용하여 LED를 켤 수 있습니다 (및 1을 끕니다)
joonas.fi

20

온보드 LED는 소프트웨어로 제어 할 수 없으며 다른 용도로 사용됩니다.

  • OK-SD 카드 액세스를 나타냅니다
  • PWR-마이크로 USB 연결에 대한 전원을 나타냅니다
  • FDX-전이중 LAN
  • LNK-LAN 활동
  • 10M-10M / 100M 연결 속도-켜져 있으면 RPi가 100M으로 연결됩니다.

이제 공식적인 답변 입니다. 회로도를 연구 해 봅시다 .

4 페이지 PWR LED는 전원 공급 장치에 직접 연결되어, 그래서 우리는 소프트웨어에서 그것을 제어 할 수 없습니다.

Page 3 FDX, LNK 및 10M은 모두 이더넷 칩에 연결되어 있으므로 소프트웨어에서 펑키 한 트래픽 해킹없이 소프트웨어를 제어 할 수 없습니다.

페이지 4 하지만 OK 실제로 GPIO (16)에 의해 제어, 그래서 해킹의 가능성이 있습니다 ...


1
@AlexChamberlain LED의 멋진 정의. 그러나 소프트웨어로 제어 할 수없는 것이 확실합니까? 네트워크 LED가 펌웨어 제어 또는 실제 하드웨어 상태입니까? 펌웨어로 제어되는 경우 어떻게 든 리버스 엔지니어링 할 수 있습니까?
Maria Zverina 2016 년

5
회로도를 확인하십시오 -PWR은 전원에 직접 연결되고 FDX, LNK 및 10M은 이더넷 칩에 연결됩니다. 내가 말했듯이 OK LED를 해킹 할 수 있습니다.
Alex Chamberlain

알렉스가 맞아 BCM 칩은 해당 LED를 제어 할 수 없습니다 (GPIO16의 예외). 낮은 수준의 커널 코드조차도 소프트웨어에 액세스 할 수 없습니다. LAN 칩을 해킹하거나이 LED- 버트에 대한 자신 만의 지름길을 만들어야합니다. 왜 당신 만의 것을 추가하지 않습니까?
Piotr Kula

3
나에게 보이는 이 다른 대답 이 답변 (일부 댓글)의 적어도 일부가 거짓으로 보여줍니다. 내용을 올바르게 읽고 있습니까? OK (Rev B. 보드에서 "ACT"로 표시됨) 만 제어 할 수 있지만 정확할 수 있습니다. (실제로는 아직 시도하지 않았습니다.)
lindes


7

모든 답변을 제어 할 수 있습니다 (다른 답변에서 언급했듯이 구형 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 e eth_spd를 제어 할 수 있습니다.

예 : echo 0> / sys / class / smsc95xx_leds / eth_fdx echo 1> / sys / class / smsc95xx_leds / eth_fdx


6

Raspberry Pi 2를 사용하면 PWD LED도 제어 할 수 있음을 확인할 수 있습니다!

전원 LED는 다음 파일에 의해 제어됩니다.

/sys/class/leds/led1

다음을 사용하여 상태 LED와 같이 끌 수 있습니다.

echo 0 > /sys/class/leds/led1/brightness # Power LED
echo 0 > /sys/class/leds/led0/brightness # Status LED

LED를 제어하는 ​​더 많은 방법은 Guy 's answer를 참조하십시오.


라즈베리 파이 제로에서 "echo 0 ..."이 켜집니다! 꺼져 있지 않습니다.
NilsB

6

이더넷 LED를 제어 할 수있는 사용자 공간 프로그램을 작성했습니다.

이 프로그램에는 더 최신 libusb-1.0버전이 필요합니다 (이전 0.1은 아님). LAN9512 (예 : 이전 Raspberry B) 및 LAN9514 칩 (예 : Raspberry B + 또는 Raspberry 2)과 함께 작동

자세한 내용은 여기를 참조하십시오 : LAN951x LED 제어


링크의 내용이 매우 작으므로 링크가 나중에 죽을 수 있으므로 여기에 답에 블록 인용 부호로 포함하는 것이 좋습니다. 그렇다면 대답이 많이 사용되지 않습니다. 또한 여기에 github 링크를 제공하십시오.
Greenonline

5

Pi 2를 사용하면 빨강 및 녹색 온보드 LED를 모두 제어 할 수 있습니다.

Windows 10 IoT 설명서에는 GPIO 35 및 47의 빨간색 전원 LED와 녹색 Ok LED가 각각 나열되어 있습니다.

https://ms-iot.github.io/content/en-US/win10/samples/PinMappingsRPi2.htm

Windows 10 IoT와 Raspbian의 Python을 사용해 보았습니다. Raspbian은 SD 카드에 액세스 할 때마다 LED를 무시하지만 둘 다 LED를 제어 할 수 있습니다. 아마도 트리거를 지우면이 동작이 제거 될 것입니다.)

다음은 샘플입니다. (이는 이전 게시물에서 언급 한 것처럼 트리거를 무시하지 않습니다.)

print ("Program Start")
import RPi.GPIO as GPIO
import time

channels = [35, 47]

print ("Turning off LED's")
GPIO.setmode(GPIO.BCM)
GPIO.setup(channels, GPIO.OUT)
GPIO.output(channels, GPIO.LOW)
time.sleep(5)

print ("Turning on LED's")
GPIO.output(channels, GPIO.HIGH)
time.sleep(5)

GPIO.cleanup()

print ("Program End")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.