Làm cách nào để điều khiển đèn LED hệ thống bằng phần mềm của tôi?


64

Có 5 đèn LED trên RPi: OK, PWR, FDX, LNK, 10M.

Tôi muốn biết liệu có thể kiểm soát bất kỳ thứ nào trong số này từ phần mềm hay không, hoặc bật chúng hoặc thay đổi cường độ (hoặc thậm chí thay đổi màu thở hổn hển ).

Và nếu vậy, tôi có thể đọc về nó ở đâu? Đèn LED có thể là cách khá tiện lợi để báo hiệu trạng thái ứng dụng của người dùng khi chúng không được yêu cầu cho sử dụng ban đầu.


2
Và vâng - tôi biết tôi có thể dễ dàng thêm đèn LED vào đầu ra GPIO - nhưng tôi tò mò không biết có thể làm gì mà không cần phần cứng bên ngoài.
Maria Zverina

1
Đèn LED thường có màu đơn (đặc biệt là khi được yêu cầu cho một mục đích), vì vậy bạn có thể quên đi phần đó :)
Jivings

2
@Jivings Đồng ý rằng có lẽ chúng chỉ có một màu với giá của RPi ... nhưng không bao giờ đau lòng để hỏi :)
Maria Zverina

Câu trả lời:


57

Đèn LED OK có thể được điều khiển từ phần mềm không gian người dùng. Chi tiết tại đây: Re: Chúng ta có thể điều khiển đèn led trên tàu không

Tóm tắt từ những điều trên (tất cả tín dụng cho BrianW):

Đèn LED OK có sẵn như /sys/class/leds/led0/.

Trình điều khiển LED kernel có "trình kích hoạt" cho phép một số phần khác của kernel điều khiển LED. Kích hoạt mặc định cho đèn LED là ' mmc0', làm cho nó bật khi thẻ SD được truy cập.

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

Bạn có thể tắt mmc0kích hoạt như sau:

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

Đèn LED có thể được bật và tắt bằng cách sử dụng brightnesstệp ''. Độ sáng tối thiểu là 0 và tối đa là 255. Vì không có hỗ trợ độ sáng thay đổi, mọi giá trị lớn hơn 0 sẽ bật đèn LED.

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

Đặt độ sáng thành 0 sẽ tự động đặt kích hoạt thành "không".

Nếu bạn muốn đèn LED quay trở lại chức năng mặc định của nó:

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

Có một vài mô-đun hạt nhân bạn có thể tải lên ( ledtrig_timerledtrig_heartbeat) sẽ nháy đèn LED cho bạn.

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

Khi bạn đã tắt mmc0kích hoạt, bạn có thể sử dụng GPIO16 để điều khiển đèn LED. Nó hoạt động ở mức thấp, vì vậy bạn cần đặt pin ở mức thấp để bật đèn LED và bật cao để tắt.

Từ Python, bạn có thể sử dụng mô-đun RPi.GPIOđể điều khiển pin 16. Ngoài ra còn có trình điều khiển C #.

Mã mẫu

#!/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
Xin chào các bạn! Để ngăn ngừa thối liên kết, bạn có thể tóm tắt những điểm chính của luồng ở đây không? Cảm ơn!

Đó thậm chí không phải là một hack!
Alex Chamberlain

Đúng rồi. Chắc chắn rằng ethernet và pwr led không thể, nhưng nếu bạn cần thêm chúng chỉ có thể được thêm (dưới dạng phần cứng) vào các chân GPIO được phơi bày. Có nhiều ví dụ về việc thêm đèn LED vào chân GPIO. Dường như nó đã thay thế bộ pha lê như thiết bị điện tử 101 ngày nay :) Tôi có đèn LED OK nhấp nháy mỗi khi nhận được một câu NMEA trên UART.
Guy

4
FYI trên Raspberry Pi 2, cuối cùng bạn cũng có thể điều khiển đèn LED PWR! Chuyển nó sang chế độ GPIO với echo gpio | sudo tee /sys/class/leds/led1/trigger, sau đó bật hoặc tắt với echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
ge Muffguy

2
Đối với bất kỳ ai thắc mắc về cách thực hiện điều này từ dòng lệnh (không có đặc quyền siêu người dùng cần thiết để ghi vào / sys / class ...), trước tiên hãy đặt đèn LED để kích hoạt trên gpio, sau đó cài đặt WiresPi learn.sparkfun.com/tutorials/ Raspberry-gpio / c-Wiredpi-setup sau đó bạn chỉ có thể "$ gpio -g chế độ 16 đầu ra && gpio -g viết 16 0" để bật
đèn

20

Không có đèn LED nào trên bo mạch có thể được điều khiển trong phần mềm - tất cả chúng đều được sử dụng cho những thứ khác.

  • OK - biểu thị quyền truy cập thẻ SD
  • PWR - cho biết cấp nguồn cho kết nối micro USB
  • FDX - Mạng LAN song công hoàn toàn
  • LNK - Hoạt động mạng LAN
  • Tốc độ kết nối 10M - 10M / 100M - nếu nó sáng, RPi được kết nối ở mức 100M.

Bây giờ, đó là câu trả lời chính thức ... Hãy nghiên cứu sơ đồ .

Trang 4 Các PWR LED được kết nối trực tiếp vào nguồn điện, vì vậy chúng tôi không thể kiểm soát mà trong phần mềm.

Tất cả FDX, LNK và 10M đều được kết nối với chip Ethernet, vì vậy một lần nữa chúng ta không thể điều khiển chúng trong phần mềm (không có một số hack lưu lượng truy cập thú vị ...).

Trang 4 NHƯNG OK là thực sự điều khiển bởi GPIO 16, vì vậy có khả năng của một hack ...


1
@AlexChamberlain Định nghĩa đẹp về đèn LED. Nhưng chúng tôi có thực sự chắc chắn rằng chúng không thể được kiểm soát bởi phần mềm? Là đèn LED mạng dưới sự kiểm soát phần sụn hoặc phần cứng thực tế? Và nếu chúng được điều khiển phần sụn, chúng ta có thể đảo ngược kỹ sư này bằng cách nào đó không?
Maria Zverina

5
Kiểm tra sơ đồ - PWR được kết nối trực tiếp với nguồn điện và FDX, LNK & 10M với chip ethernet. Như tôi đã nói, bạn có thể hack được đèn LED OK.
Alex Chamberlain

Alex là chính xác. chip BCM không có quyền kiểm soát (ngoại trừ GPIO16) đối với các đèn LED đó; vì vậy không có phần mềm nào có thể truy cập chúng, thậm chí không có mã hạt nhân cấp thấp. Bạn sẽ phải hack chip LAN hoặc tạo mạch cắt ngắn của riêng mình cho các đèn LED này - đó thực sự không phải là một ý tưởng tuyệt vời. Tại sao không chỉ thêm của riêng bạn?
Piotr Kula

3
Dường như với tôi rằng câu trả lời khác này cho thấy ít nhất một phần của câu trả lời này (và một số ý kiến) là sai. Tôi đang đọc những thứ chính xác? Có thể chính xác là chỉ OK (được dán nhãn "ACT" trên bảng Rev B. của tôi) có thể được kiểm soát, nhưng có vẻ như điều đó có thể được. (Tuy nhiên, tôi đã không thực sự làm điều đó.)
lindes


7

Bạn có thể kiểm soát tất cả các đèn led (ngoại trừ PWR trong các mẫu Pi cũ hơn, như đã nói trong các câu trả lời khác).

Nhưng đối với led ethernet, bạn sẽ cần vá trình điều khiển và biên dịch lại kernel.

Thông tin về cách biên dịch lại có thể nhận được tại đây: http://elinux.org/RPi_Kernel_Compilation

Bản vá và thêm thông tin ở đây (google dịch nếu cần): http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Sau khi hoàn thành, bạn có thể kiểm soát: / sys / class / smsc95xx_leds và eth_fdx, eth_lnk e eth_spd.

Ví dụ: echo 0> / sys / class / smsc95xx_leds / eth_fdx echo 1> / sys / class / smsc95xx_leds / eth_fdx


6

Tôi có thể xác nhận rằng với Raspberry Pi 2, bạn cũng có thể điều khiển đèn LED PWD!

Đèn LED nguồn được điều khiển bởi các tệp trong:

/sys/class/leds/led1

Bạn có thể tắt nó giống như Đèn LED trạng thái bằng cách sử dụng:

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

Xem câu trả lời của Guy để biết thêm cách điều khiển đèn LED


Trên mâm xôi pi zero, "echo 0 ..." bật nó lên! Không tắt.
NilsB

6

Tôi đã viết một chương trình không gian người dùng cho phép bạn điều khiển đèn LED Ethernet.

Chương trình yêu cầu gần đây hơn libusb-1.0(KHÔNG phải là 0,1 cũ). Nó hoạt động với LAN9512 (ví dụ trên Raspberry B cũ) cũng như chip LAN9514 (ví dụ trên Raspberry B + hoặc Raspberry 2)

Chi tiết có thể tìm thấy ở đây: Điều khiển LED LAN951x


Vì nội dung của liên kết của bạn khá nhỏ, sẽ tốt hơn nếu đưa nó vào đây trong câu trả lời của bạn, trong các chuỗi khối, vì liên kết có thể chết trong tương lai. Nếu có thì câu trả lời của bạn sẽ không được sử dụng nhiều. Ngoài ra, cung cấp các liên kết github ở đây là tốt.
Greenonline

5

Với Pi 2, bạn có thể điều khiển cả đèn LED trên tàu màu đỏ và màu xanh lá cây.

Tài liệu IoT của Windows 10 liệt kê đèn LED nguồn màu đỏ và đèn LED Ok màu xanh lục trên GPIO 35 và 47, tương ứng.

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

Tôi đã thử với Windows 10 IoT và với Python trên Raspbian. Cả hai đều có thể điều khiển đèn LED, mặc dù Raspbian ghi đè lên đèn LED mỗi khi có thứ gì đó truy cập vào thẻ SD. Có lẽ, việc xóa kích hoạt sẽ loại bỏ hành vi này.)

Đây là một mẫu. (Lưu ý rằng điều này không ghi đè kích hoạt như được đề cập trong các bài viết trước)

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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.