Як я можу керувати світлодіодними системами за допомогою свого програмного забезпечення?


64

На RPi є 5 світлодіодів: OK, PWR, FDX, LNK, 10M.

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

І якщо так, то де я можу прочитати про це? Світлодіоди можуть бути досить зручним способом сигналізації стану програми користувача, коли вони не потрібні для оригінального використання.


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

1
Світлодіоди, як правило, одноколірні (особливо, коли це потрібно для однієї мети), тому ви можете забути про цю частину :)
Jivings

2
@ Jivings Погодьтеся, що вони, мабуть, одноколірні з урахуванням вартості RPi ... але просити це ніколи не
шкода

Відповіді:


57

Індикатором OK можна керувати за допомогою програмного забезпечення для користувачів. Докладніше тут: Re: Чи можемо ми контролювати бортові світлодіоди

Узагальнене з вищезазначеного (весь кредит BrianW):

Індикатор OK доступний як /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
FYI на 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/ малиновий-gpio / c-wiringpi-setup після цього ви можете просто "$ gpio -g режим 16 вивести && gpio -g написати 16 0", щоб увімкнути світлодіод (і 1 для вимкнення)
joonas.fi

20

Жоден із вбудованих світлодіодів не можна керувати програмно - всі вони використовуються для інших речей.

  • ОК - вказує на доступ до SD-карти
  • PWR - вказує живлення на з'єднання micro USB
  • FDX - повна дуплексна локальна мережа
  • LNK - активність локальної мережі
  • Швидкість з'єднання 10М - 10М / 100М - якщо вона горить, RPI підключено на 100М.

Тепер ось офіційна відповідь ... Давайте вивчимо схематично .

Page 4 Світлодіод PWR підключений безпосередньо до джерела живлення, тому ми не можемо контролювати це в програмному забезпеченні.

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

Page 4 АЛЕ ОК дійсно контролюється GPIO 16, тому є можливість зламати ...


1
@AlexChamberlain Приємне визначення світлодіодів. Але чи справді ми впевнені, що вони не можуть контролюватися програмним забезпеченням? Чи мережеві світлодіоди знаходяться під контролем вбудованого програмного забезпечення або власне обладнання? І якщо вони контролюються вбудованим програмним забезпеченням, чи можемо ми якось це змінити?
Марія Зверина

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

Алекс прав. чіп BCM не контролює (крім GPIO16) над цими світлодіодами; тож жодне програмне забезпечення не може отримати доступ до них, навіть навіть код ядра низького рівня. Вам доведеться зламати мікросхему локальної мережі або створити власну короткострокову схему для цих світлодіодних - БУТ, що насправді не чудова ідея. Чому б просто не додати своє?
Пьотр Кула

3
Мені здається, що ця інша відповідь показує принаймні частину цієї відповіді (та деяких коментарів) помилковою. Я читаю речі правильно? Може бути точно, що можна керувати лише ОК (з написом "ACT" на моїй дошці Rev B.), але здається, що це може бути. (Я ще не намагався насправді зробити це, хоча.)
lindes


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 e 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)

Деталі можна знайти тут: LED951x управління LED


Оскільки вміст вашого посилання досить малий, то краще було б включити його сюди у свою відповідь, у блокчетах, оскільки посилання може загинути в майбутньому. Якщо це так, то ваша відповідь буде не дуже корисною. Також вкажіть тут посилання github.
Грінлайн

5

За допомогою Pi 2 ви можете керувати як червоним, так і зеленим бортовим світлодіодом.

Документація Windows 10 IoT перераховує червоний світлодіод живлення та зелений світлодіод 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.