Bagaimana cara mengontrol LED sistem menggunakan perangkat lunak saya?

64

Ada 5 LED pada RPi: OK, PWR, FDX, LNK, 10M.

Saya ingin tahu apakah mungkin untuk mengontrol semua ini dari perangkat lunak yaitu menyalakannya, atau mengubah intensitas (atau bahkan mengubah warna terkesiap ).

Dan jika demikian, di mana saya bisa membacanya? LED bisa menjadi cara yang sangat berguna untuk memberi sinyal status aplikasi pengguna ketika mereka tidak diperlukan untuk penggunaan aslinya.

Maria Zverina
sumber
2
Dan ya - saya tahu saya bisa menambahkan LED dengan mudah ke keluaran GPIO - tapi saya ingin tahu apa yang dapat dilakukan tanpa perangkat keras eksternal.
Maria Zverina
1
LED umumnya berwarna tunggal (terutama jika diperlukan untuk satu tujuan), sehingga Anda dapat melupakan bagian itu :)
Jivings
2
@ Juli Setuju bahwa mereka mungkin satu warna diberi biaya RPi ... tapi tidak ada salahnya untuk bertanya :)
Maria Zverina

Jawaban:

57

OK LED dapat dikontrol dari perangkat lunak ruang pengguna. Detail di sini: Re: Bisakah kita mengontrol led on-board

Dirangkum dari yang di atas (semua kredit ke BrianW):

OK LED tersedia sebagai /sys/class/leds/led0/.

Driver LED kernel memiliki "pemicu" yang memungkinkan beberapa bagian lain dari kernel mengontrol LED. Pemicu default untuk LED adalah ' mmc0', yang membuatnya aktif saat kartu SD diakses.

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

Anda dapat menonaktifkan mmc0pemicu sebagai berikut:

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

LED dapat dinyalakan dan dimatikan menggunakan file ' brightness'. Kecerahan minimum adalah 0, dan maksimum adalah 255. Karena tidak ada dukungan kecerahan variabel, nilai apa pun yang lebih besar dari 0 akan menyalakan LED.

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

Mengatur kecerahan ke 0 secara otomatis mengatur pemicu ke "tidak ada".

Jika Anda ingin LED kembali ke fungsi default:

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

Ada beberapa modul kernel yang dapat Anda muat ( ledtrig_timerdan ledtrig_heartbeat) yang akan mem-flash LED untuk Anda.

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

Setelah Anda mematikan mmc0pelatuk, Anda dapat menggunakan GPIO16 untuk mengontrol LED. Ini aktif-rendah, jadi Anda harus mengatur pin rendah untuk menyalakan LED, dan tinggi untuk mematikannya.

Dari Python, Anda dapat menggunakan modul RPi.GPIOuntuk mengontrol pin 16. Ada juga driver C #.

Kode sampel

#!/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)
Orang
sumber
3
Halo pria! Untuk mencegah tautan busuk, bisakah Anda meringkas poin utama utas di sini? Terima kasih!
Itu bahkan bukan hack!
Alex Chamberlain
Tepat sekali. Tentu saja ethernet dan leds pwr tidak bisa, tetapi jika Anda membutuhkan lebih banyak mereka hanya dapat ditambahkan (sebagai perangkat keras) ke pin GPIO yang terbuka. Ada banyak contoh menambahkan LED ke pin GPIO. Tampaknya telah menggantikan set kristal sebagai elektronik 101 hari ini :) Saya memiliki LED OK berkedip setiap kali kalimat NMEA diterima di UART.
Guy
4
FYI pada Raspberry Pi 2, Anda akhirnya dapat mengontrol LED PWR juga! Beralih ke mode GPIO dengan echo gpio | sudo tee /sys/class/leds/led1/trigger, lalu hidupkan atau matikan dengan echo [0|1] | sudo tee /sys/class/leds/led1/brightness.
geerlingguy
2
Bagi siapa pun yang bertanya-tanya tentang cara melakukan ini dari baris perintah (tanpa hak pengguna super yang diperlukan untuk menulis ke / sys / class ...), pertama-tama atur LED untuk memicu pada gpio, dan kemudian instal WiringPi learn.sparkfun.com/tutorials/ raspberry-gpio / c-wiringpi-setup setelah itu Anda bisa "$ gpio -g mode 16 output && gpio -g tulis 16 0" untuk menghidupkan LED (dan 1 untuk mati)
joonas.fi
20

Tak satu pun dari LED papan dapat dikontrol dalam perangkat lunak - mereka semua digunakan untuk hal-hal lain.

  • OK - menunjukkan akses kartu SD
  • PWR - menunjukkan daya ke koneksi micro USB
  • FDX - LAN Dupleks Penuh
  • LNK - Aktivitas LAN
  • Kecepatan koneksi 10M - 10M / 100M - jika menyala, RPi terhubung pada 100M.

Sekarang, itulah jawaban resmi ... Mari kita pelajari skematiknya .

Page 4 LED PWR terhubung langsung ke catu daya, jadi kami tidak dapat mengontrolnya dalam perangkat lunak.

Page 3 FDX, LNK dan 10M semua terhubung ke chip Ethernet, sehingga sekali lagi kita tidak bisa mengendalikan mereka dalam perangkat lunak (tanpa beberapa hack lalu lintas yang funky ...).

Halaman 4 TAPI OK sebenarnya dikendalikan oleh GPIO 16, sehingga ada kemungkinan hack ...

Alex Chamberlain
sumber
1
@AlexChamberlain Definisi bagus dari LED. Tetapi apakah kita benar-benar yakin mereka tidak dapat dikendalikan oleh perangkat lunak? Apakah LED jaringan di bawah kendali firmware atau perangkat keras yang sebenarnya? Dan jika mereka dikendalikan oleh firmware, bisakah kita merekayasa balik ini?
Maria Zverina
5
Lihat skema - PWR terhubung langsung ke daya, dan FDX, LNK & 10M ke chip ethernet. Seperti yang saya katakan, Anda mungkin bisa meretas LED OK.
Alex Chamberlain
Alex benar. chip BCM tidak memiliki kontrol (pengecualian untuk GPIO16) atas LED itu; jadi tidak ada perangkat lunak yang dapat mengaksesnya, bahkan kode kernel level rendah. Anda harus meretas chip LAN atau membuat jalan pintas Anda sendiri untuk LED-BUt ini yang benar-benar bukan ide bagus. Mengapa tidak menambahkan saja milik Anda sendiri?
Piotr Kula
3
Sepertinya saya bahwa jawaban lain ini menunjukkan setidaknya sebagian dari jawaban ini (dan beberapa komentar) salah. Apakah saya membaca dengan benar? Mungkin akurat bahwa hanya OK (berlabel "ACT" di papan Rev B. saya) yang dapat dikontrol, tetapi sepertinya itu bisa dilakukan. (Aku belum mencoba untuk benar-benar melakukannya.)
lindes
7

Anda dapat mengontrol semua led (kecuali PWR dalam model Pi yang lebih lama, seperti yang dikatakan dalam jawaban lain).

Tetapi untuk ethernet led, Anda perlu menambal driver dan mengkompilasi ulang kernel.

Informasi tentang bagaimana kompilasi ulang dapat di sini: http://elinux.org/RPi_Kernel_Compilation

Patch dan informasi lebih lanjut di sini (google translate jika perlu): http://everpi.tsar.in/2013/11/patch-para-controlar-os-leds-ethernet-do-raspberrypi.html

Setelah selesai, Anda dapat mengontrol: / sys / class / smsc95xx_leds dan eth_fdx, eth_lnk e eth_spd.

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

raja
sumber
6

Saya dapat mengonfirmasi bahwa dengan Raspberry Pi 2 dimungkinkan untuk mengontrol LED PWD juga!

LED daya dikendalikan oleh file di:

/sys/class/leds/led1

Anda dapat mematikannya seperti LED Status menggunakan:

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

Lihat jawaban Guy untuk lebih banyak cara mengendalikan LED

Patrick
sumber
Pada raspberry pi nol "gema 0 ..." menyalakannya! Tidak off.
NilsB
6

Saya menulis program userspace yang memungkinkan Anda mengontrol LED Ethernet.

Program ini membutuhkan yang lebih baru libusb-1.0(BUKAN yang lebih tua 0,1). Ini bekerja dengan LAN9512 (misalnya pada Raspberry B yang lebih lama) serta chip LAN9514 (misalnya pada Raspberry B + atau Raspberry 2)

Detail dapat ditemukan di sini: Kontrol LED LAN951x

blip
sumber
Karena konten tautan Anda cukup kecil, akan lebih baik untuk memasukkannya di sini dalam jawaban Anda, dalam blockquotes, karena tautan tersebut mungkin mati di masa mendatang. Jika tidak maka jawaban Anda tidak akan banyak berguna. Juga, berikan tautan github di sini juga.
Greenonline
5

Dengan Pi 2, Anda dapat mengontrol LED onboard merah dan hijau.

Dokumentasi Windows 10 IoT masing-masing mencantumkan LED daya merah dan OK hijau pada GPIO 35 dan 47.

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

Saya mencoba dengan Windows 10 IoT dan dengan Python di Raspbian. Keduanya dapat mengontrol LED, meskipun Raspbian menimpa LED setiap kali ada sesuatu yang mengakses kartu SD. Agaknya, menghapus pemicu akan menghapus perilaku ini.)

Ini contohnya. (Perhatikan bahwa ini tidak mengesampingkan pelatuk sebagaimana disebutkan dalam posting sebelumnya)

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")
TomXP411
sumber