Yazılımımı kullanarak sistem LED'lerini nasıl kontrol edebilirim?


64

RPI'de 5 LED var: Tamam, PWR, FDX, LNK, 10M.

Bunlardan herhangi birini yazılımdan kontrol etmenin mümkün olup olmadığını bilmek istiyorum, yani onları açınız, ya da yoğunluğunu değiştiriniz (hatta renk solukluklarını değiştiriniz ).

Ve eğer öyleyse, nereden okuyabilirim? LED'ler, orijinal kullanım için gerekli olmadıklarında, kullanıcının uygulama durumunu bildirmenin oldukça kullanışlı bir yolu olabilir.


2
Ve evet - GPIO çıkışlarına kolayca LED ekleyebileceğimi biliyorum - ama harici donanım olmadan ne yapılabileceğini merak ediyorum.
Maria Zverina

1
LED'ler genellikle tek renktir (özellikle bir amaç için gerektiğinde), bu yüzden bu kısmı unutabilirsiniz :)
Jivings

2
@Jivings RPi'nin maliyeti göz önüne alındığında muhtemelen tek renk olduklarını kabul edin ... ama sormak asla zarar
vermez

Yanıtlar:


57

OK LED, kullanıcı alanı yazılımından kontrol edilebilir. Ayrıntılar burada: Re: Dahili ledleri kontrol edebilir miyiz

Yukarıdakilerden özetlenmiştir (tüm kredi BrianWe'ye):

OK LED'i olarak mevcuttur /sys/class/leds/led0/.

Çekirdek LED sürücüsü, çekirdeğin başka bir bölümünün LED'i kontrol etmesine izin veren "tetikleyicilere" sahiptir. LED için varsayılan tetikleyici ' mmc0' dir, bu SD kartına erişildiğinde yanmasını sağlar.

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

mmc0Tetiği aşağıdaki gibi devre dışı bırakabilirsiniz :

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

LED ' brightness' dosyası kullanılarak açılabilir ve kapatılabilir . Minimum parlaklık 0, maksimum 255'tir. Değişken parlaklık desteği olmadığından, 0'dan büyük herhangi bir değer LED'i açar.

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

Parlaklığı 0'a ayarlamak otomatik olarak tetiği "yok" a ayarlar.

LED'in varsayılan işlevine geri dönmesini istiyorsanız:

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

Yükleyebileceğiniz ( ledtrig_timerve ledtrig_heartbeat) LED'i sizin için yakacak birkaç çekirdek modülü vardır .

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

Eğer kapalı sonra mmc0tetiği, sen LED kontrol etmek GPIO16 kullanabilirsiniz. Aktif olarak düşük olduğundan, LED'i açmak için pimi düşük, kapatmak için de yüksek ayar yapmanız gerekir.

Python'dan, modülü RPi.GPIOpin 16'yı kontrol etmek için kullanabilirsiniz. Ayrıca bir C # sürücüsü de vardır.

Basit kod

#!/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
Merhaba Guy! Bağlantı çürüklüğünü önlemek için ipliğin ana noktalarını burada özetleyebilir misiniz? Teşekkürler!

Bu bir kesmek bile değil!
Alex Chamberlain,

Doğru. Ethernet ve pwr led'lerin yapamayacağından emin olun, ancak daha fazlasına ihtiyacınız olursa, yalnızca maruz kalan GPIO pinlerine eklenebilir (donanım olarak). GPIO pinlerine LED eklemek için pek çok örnek var. Günümüzde elektronik 101 olarak ayarlanan kristalin yerini almış gibi görünüyor :) UART'a bir NMEA cümleyi her alındığında OK LED'im yanıp sönüyor.
Guy

4
Raspberry Pi 2'de FYI, PWR LED'i de kontrol edebilirsiniz! GPIO moduna getirin ve echo gpio | sudo tee /sys/class/leds/led1/triggersonra ile açın veya kapatın echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
geerlingguy

2
Bunu komut satırından nasıl yapacağını merak eden herkes için (/ sys / sınıfına yazmak için gereken süper kullanıcı ayrıcalıkları olmadan ...), önce gpio'da tetiklenecek LED'i ayarlayın ve sonra WiringPi'yi yükleyin. Learn.sparkfun.com/tutorials/ ahududu-gpio / c-wiringpi-setup bundan sonra sadece "$ gpio -g modu 16 çıkış && gpio -g yazma 16 0" 'ı açmak için açabilirsiniz (ve 1 için kapalı)
joonas.fi

20

Yerleşik LED'lerin hiçbiri yazılımda kontrol edilemez - hepsi başka şeyler için kullanılır.

  • Tamam - SD kart erişimini gösterir
  • PWR - mikro USB bağlantısının gücünü gösterir
  • FDX - Tam Çift Yönlü LAN
  • LNK - LAN Etkinliği
  • 10M - 10M / 100M bağlantı hızı - yanıyorsa, RPi 100M'de bağlanır.

Şimdi, bu resmi cevap ... Şematik çalışalım .

Page 4 PWR LED'i doğrudan güç kaynağına bağlanmıştır, bu nedenle yazılımı kontrol edemiyoruz.

Page 3 FDX, LNK ve 10M'nin hepsi Ethernet çipine bağlı olduğundan, onları yazılımda kontrol edemiyoruz (korkak trafik hackleri olmadan ...).

Page 4 AMA Tamam, aslında GPIO 16 tarafından kontrol ediliyor, bu yüzden hack olasılığı var ...


1
@AlexChamberlain LED'lerin güzel tanımı. Ancak, yazılım tarafından kontrol edilemeyeceklerinden gerçekten emin miyiz? Ağ LED'leri üretici yazılımı kontrolü altında mı yoksa gerçek donanım mı? Ürün yazılımı kontrol altındaysa, bunu bir şekilde tersine çevirebilir miyiz?
Maria Zverina

5
Check out şematik doğrudan gücüne bağlı olduğundan PWR ve FDX, Lnk & ethernet çipine 10M -. Dediğim gibi, OK LED'i kesmek mümkün olabilir.
Alex Chamberlain

Alex haklı. BCM çipinin, bu LED'ler üzerinde kontrolü (GPIO16 hariç) yoktur; bu yüzden hiçbir yazılım bunlara erişemez, hatta düşük seviyeli çekirdek koduna bile. LAN yongasını kırmanız veya bu LED'lerin kısayol devresini yaratmanız gerekecek - BU gerçekten harika bir fikir değil. Neden sadece kendininkini eklemiyorsun?
Piotr Kula

3
O geliyor bana bu diğer cevabı bu cevap (ve bazı yorumların) en azından bir kısmı yanlış olduğu gösterir. Bir şeyleri doğru okuyor muyum? Sadece Rev (benim anakartımdaki "ACT" etiketli) kartının kontrol edilebildiği doğru olabilir, ama öyle görünüyor. (Aslında olsa da, henüz bunu yapmak için denemedim.)
Lindes


7

Tüm ledleri kontrol edebilirsiniz (diğer cevaplarda belirtildiği gibi eski Pi modellerinde PWR hariç).

Ancak ethernet ledleri için sürücüyü düzeltmeniz ve çekirdeği yeniden derlemeniz gerekir.

Yeniden derlemenin buraya nasıl ulaşabileceği hakkında bilgiler: http://elinux.org/RPi_Kernel_Compilation

Yama ve daha fazla bilgiyi buraya (gerekirse google çeviri): http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Yaptıktan sonra şunları kontrol edebilirsiniz: / sys / class / smsc95xx_leds ve eth_fdx, eth_lnk e eth_spd.

Örnek: echo 0> / sys / sınıf / smsc95xx_leds / eth_fdx echo 1> / sys / sınıf / smsc95xx_leds / eth_fdx


6

Raspberry Pi 2 ile PWD LED'i de kontrol etmenin mümkün olduğunu onaylayabilirim!

Güç LED'i aşağıdaki dosyalar tarafından kontrol edilir:

/sys/class/leds/led1

Aşağıdakileri kullanarak Durum LED'i gibi kapatabilirsiniz:

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

LED'leri kontrol etmenin daha fazla yolu için Guy'ın cevabına bakınız.


Ahududu pi sıfırda "echo 0 ..." açılır! Kapalı değil.
NilsB

6

Ethernet LED'lerini kontrol etmenizi sağlayan bir kullanıcı programı yazdım.

Program daha yeni libusb-1.0( daha büyük değil 0.1) gerektirir. LAN9512 (örneğin, eski Ahududu B'de) ve LAN9514 yongalarıyla (örneğin Ahududu B + veya Ahududu 2'de) çalışır

Ayrıntılar burada bulunabilir: LAN951x LED kontrolü


Bağlantınızın içeriği oldukça küçük olduğundan, bağlantının gelecekte ölebileceği gibi, burada yanıtınıza, blok alıntılara dahil edilmesi daha iyi olacaktır. Eğer öyleyse, cevabınız pek kullanılmayacak. Ayrıca, burada github bağlantısını da sağlayın.
Greenonline

5

Pi 2 ile kırmızı ve yeşil onboard LED'leri kontrol edebilirsiniz.

Windows 10 IoT belgeleri GPIO 35 ve 47'de sırasıyla kırmızı güç ışığını ve yeşil Ok ışığını listeler.

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

Windows 10 IoT ve Raspbian'daki Python ile denedim. Her ikisi de LED'leri kontrol edebilir, ancak Raspbian, SD karta bir şey eriştiğinde LED'i geçersiz kılar. Muhtemelen, tetikleyiciyi temizlemek bu davranışı kaldıracaktır.)

İşte bir örnek. (Bunun, önceki yayınlarda belirtildiği gibi tetiği geçersiz kılmadığını unutmayın)

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")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.