Как управлять светодиодами системы с помощью моего программного обеспечения?


64

На RPi есть 5 светодиодов: OK, PWR, FDX, LNK, 10M.

Я хотел бы знать, возможно ли управлять какой-либо из них с помощью программного обеспечения, т.е. включить их, или изменить интенсивность (или даже изменить цветовой вздох ).

И если так, где я могу прочитать об этом? Светодиоды могут быть очень удобным способом оповещения о состоянии приложения пользователя, когда они не требуются для первоначального использования.


2
И да - я знаю, что могу легко добавить светодиоды на выходы GPIO - но мне интересно, что можно сделать без внешнего оборудования.
Мария Зверина

1
Светодиоды, как правило, одноцветные (особенно если они необходимы для одной цели), так что вы можете забыть об этой части :)
Jivings

2
@Jivings Согласитесь, что они, вероятно, одного цвета, учитывая стоимость RPi ... но это никогда не повредит, чтобы спросить :)
Мария Зверина

Ответы:


57

Светодиод OK может управляться из пользовательского программного обеспечения. Подробности здесь: Re: Можем ли мы контролировать бортовые светодиоды

Суммировано из вышесказанного (все кредиты BrianW):

Светодиод ОК доступен как /sys/class/leds/led0/.

Драйвер светодиода ядра имеет «триггеры», которые позволяют какой-то другой части ядра управлять светодиодом. По умолчанию для светодиода используется триггер « mmc0», который включает его при обращении к SD-карте.

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

Вы можете отключить mmc0триггер следующим образом:

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

Светодиод можно включать и выключать с помощью brightnessфайла ' '. Минимальная яркость равна 0, а максимальная - 255. Поскольку поддержка переменной яркости не поддерживается, любое значение, большее 0, будет включать светодиод.

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

Установка яркости на 0 автоматически устанавливает триггер на «нет».

Если вы хотите, чтобы светодиод вернулся к своей функции по умолчанию:

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

Есть пара модулей ядра, которые вы можете загрузить ( ledtrig_timerи ledtrig_heartbeat), которые будут мигать для вас.

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

После выключения mmc0триггера вы можете использовать GPIO16 для управления светодиодом. Это активный низкий уровень, поэтому вам нужно установить низкий уровень сигнала, чтобы включить светодиод, и высокий, чтобы выключить его.

В Python вы можете использовать модуль 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
Привет парень! Во избежание гниения ссылок вы можете суммировать основные моменты этой темы здесь? Спасибо!

Это даже не взлом!
Алекс Чемберлен

Верно. Конечно, светодиоды Ethernet и PWR не могут, но если вам нужно больше, они могут быть просто добавлены (как аппаратные средства) на открытые выводы GPIO. Есть много примеров добавления светодиодов к выводам GPIO. Кажется, в эти дни он заменил набор кристаллов электроникой 101 :) Мой светодиод OK мигает каждый раз, когда в UART поступает предложение NMEA.
Парень

4
Кстати, на Raspberry Pi 2 вы наконец-то можете управлять светодиодом PWR! Переключите его в режим 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, а затем установите WiringPi learn.sparkfun.com/tutorials/ raspberry-gpio / c-wiringpi-setup, после чего вы можете просто «$ gpio -g mode 16 output && gpio -g write 16 0» включить светодиод (и 1 выключить)
joonas.fi

20

Ни один из встроенных светодиодов не может управляться программно - все они используются для других целей.

  • ОК - указывает на доступ к SD-карте
  • PWR - указывает на питание для подключения микро-USB
  • FDX - полнодуплексная локальная сеть
  • LNK - LAN Активность
  • Скорость соединения 10M - 10M / 100M - если он светится, RPi подключается со скоростью 100M.

Теперь это официальный ответ ... Давайте изучим схему .

Page 4 Светодиод PWR подключен напрямую к источнику питания, поэтому мы не можем контролировать это программно.

Page 3 FDX, LNK и 10M все подключены к чипу Ethernet, поэтому мы снова не можем управлять ими программно (без какого-либо хакерского взлома трафика ...).

Page 4 НО OK фактически контролируется GPIO 16, так что есть возможность взломать ...


1
@AlexChamberlain Хорошее определение светодиодов. Но действительно ли мы уверены, что они не могут контролироваться программным обеспечением? Находятся ли сетевые светодиоды под контролем прошивки или на самом оборудовании? И если они контролируются прошивкой, можем ли мы каким-то образом перепроектировать это?
Мария Зверина

5
Проверьте схему - PWR напрямую подключен к источнику питания, а FDX, LNK и 10M - к чипу Ethernet. Как я уже сказал, вы можете взломать светодиод OK.
Алекс Чемберлен

Алекс прав. чип BCM не контролирует (за исключением GPIO16) эти светодиоды; поэтому никакое программное обеспечение не может получить к ним доступ, даже код ядра низкого уровня. Вам придется взломать чип локальной сети или создать собственную схему короткого замыкания для этих светодиодов - но это на самом деле не очень хорошая идея. Почему бы просто не добавить свой собственный?
Петр Кула

3
Мне кажется, что этот другой ответ показывает, что по крайней мере часть этого ответа (и некоторые комментарии) являются ложными. Я правильно читаю? Может быть, верно, что можно контролировать только OK (с пометкой «ACT» на моей доске Rev. B), но кажется, что это возможно. (Хотя я еще не пытался сделать это на самом деле.)
Линдес


7

Вы можете управлять всеми светодиодами (кроме PWR в старых моделях Pi, как сказано в других ответах).

Но для Ethernet-светодиодов вам нужно будет пропатчить драйвер и перекомпилировать ядро.

Информацию о том, как перекомпилировать можно получить здесь: 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


6

Я могу подтвердить, что с Raspberry Pi 2 можно также управлять светодиодом PWD!

Индикатор питания контролируется файлами в:

/sys/class/leds/led1

Вы можете выключить его так же, как индикатор состояния, используя:

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

Посмотрите ответ Гая для большего количества способов управлять светодиодами


На малиновом пи ноль "эхо 0 ..." включает его! Не выкл.
NilsB

6

Я написал пользовательскую программу, которая позволяет вам управлять светодиодами Ethernet.

Программа требует более новой libusb-1.0версии (НЕ более старой версии 0.1). Он работает с LAN9512 (например, на старшей Raspberry B), а также с чипами LAN9514 (например, на Raspberry B + или Raspberry 2)

Подробности можно найти здесь: LAN951x LED control


Поскольку содержание вашей ссылки довольно мало, было бы лучше включить его здесь в свой ответ, в кавычки, так как ссылка может умереть в будущем. Если это произойдет, то ваш ответ не будет много пользы. Также предоставьте здесь ссылку на github.
Greenonline

5

С Pi 2 вы можете управлять как красными, так и зелеными встроенными светодиодами.

В документации по IoT для Windows 10 перечислены красный индикатор питания и зеленый индикатор Ok на GPIO 35 и 47 соответственно.

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

Я попробовал с Windows 10 IoT и с Python на Raspbian. Оба могут управлять светодиодами, хотя Raspbian перекрывает светодиод всякий раз, когда что-то обращается к SD-карте. Предположительно, очистка триггера устранит это поведение.)

Вот образец. (Обратите внимание, что это не отменяет триггер, как упоминалось в предыдущих сообщениях)

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")
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.