ソフトウェアを使用してシステムLEDを制御するにはどうすればよいですか?


64

RPiには、OK、PWR、FDX、LNK、10Mの5つのLEDがあります。

ソフトウェアからこれらのいずれかを制御できるかどうか、つまりそれらをオンにしたり、強度を変更したり(さらには色のギャップを変更したり)できるかどうかを知りたいのです。

もしそうなら、どこでそれについて読むことができますか?LEDは、元の使用に必要ない場合にユーザーアプリケーションの状態を通知する非常に便利な方法です。


2
そして、はい-GPIO出力にLEDを簡単に追加できることは知っていますが、外部ハードウェアなしで何ができるのか興味があります。
マリアズベリナ

1
LEDは一般に単色です(特に1つの目的で必要な場合)。その部分は忘れてください:)
Jivings

2
@Jivingsは、RPiのコストを考えると、おそらく単色であることに同意しますが、尋ねるのは決して痛いことはありません:)
マリアズベリナ

回答:


57

OK LEDは、ユーザースペースソフトウェアから制御できます。詳細はこちら:再:オンボードLEDを制御できますか

上記から要約(すべてBrianWにクレジット):

OK LEDはとして利用できます/sys/class/leds/led0/

カーネルLEDドライバーには、カーネルの他の部分でLEDを制御できる「トリガー」があります。LEDのデフォルトのトリガーは ' mmc0'で、SDカードにアクセスすると点灯します。

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

mmc0次のようにしてトリガーを無効にできます。

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

LEDは、「brightness」ファイルを使用してオンおよびオフにできます。最小輝度は0で、最大輝度は255です。可変輝度サポートはないため、0より大きい値はLEDをオンにします。

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

輝度を0に設定すると、トリガーが自動的に「なし」に設定されます。

LEDをデフォルトの機能に戻したい場合:

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

LEDを点滅させるカーネルモジュール(ledtrig_timerおよびledtrig_heartbeat)をロードできます。

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

mmc0トリガーをオフにすると、GPIO16を使用してLEDを制御できます。アクティブローなので、ピンをローに設定してLEDをオンにし、ハイに設定してLEDをオフにする必要があります。

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
よう!リンクの腐敗を防ぐために、ここでスレッドの要点を要約できますか?ありがとう!

それはハックではありません!
アレックスチェンバレン

そのとおり。イーサネットと電源のLEDはできませんが、もっと必要な場合は、露出したGPIOピンに(ハードウェアとして)追加するだけです。GPIOピンにLEDを追加する多くの例があります。最近、電子機器101としてクリスタルセットを交換したようです:) NMEAセンテンスがUARTで受信されるたびに、OK LEDが点滅します。

4
Raspberry Pi 2の参考までに、最終的にPWR LEDも制御できます!で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でトリガーするようにLEDを設定してから、WiringPi learn.sparkfun.com/tutorials/をインストールしてくださいraspberry-gpio / c-wiringpi-setupその後、 "$ gpio -g mode 16 output && gpio -g write 16 0"でledをオン(および1はオフ)にすることができます
joonas.fi

20

オンボードLEDはいずれもソフトウェアで制御できません。これらはすべて他の目的に使用されます。

  • OK-SDカードへのアクセスを示します
  • PWR-マイクロUSB接続への電力を示します
  • FDX-全二重LAN
  • LNK-LANアクティビティ
  • 10M-10M / 100M接続速度-点灯している場合、RPiは100Mで接続されています。

さて、それが公式の答えです... 回路図を勉強しましょう。

Page 4 PWR LEDは電源に直接接続されているため、ソフトウェアで制御することはできません。

Page 3 FDX、LNK、および10Mはすべてイーサネットチップに接続されているため、ソフトウェアでそれらを制御することはできません(ファンキーなトラフィックハックがなければ...)。

Page 4 しかし、実際にはGPIO 16によって制御されているため、ハッキングの可能性があります...


1
@AlexChamberlain LEDの素晴らしい定義。しかし、ソフトウェアで制御できないと本当に確信していますか?ネットワークLEDはファームウェア制御下にありますか、それとも実際のハードウェアですか?そして、それらがファームウェアで制御されている場合、これを何らかの方法でリバースエンジニアリングできますか?
マリアズベリナ

5
回路図を確認してください-PWRは電源に直接接続され、FDX、LNKおよび10Mはイーサネットチップに接続されています。先ほど言ったように、OK LEDをハッキングできるかもしれません。
アレックスチェンバレン

アレックスは正しい。BCMチップには、これらのLEDを制御する機能はありません(GPIO16の例外)。そのため、低レベルのカーネルコードでさえ、ソフトウェアはそれらにアクセスできません。LANチップをハックするか、これらのLEDに独自のショートカット回路を作成する必要がありますが、これはあまり良い考えではありません。独自に追加しないのはなぜですか?
ピョートルクラ

3
この他の答えは、この答えの少なくとも一部(およびいくつかのコメント)が偽であることを示しているように思えます。物事を正しく読んでいますか?OK(Rev B.ボードで「ACT」とラベル付けされている)のみを制御できるのは正確かもしれませんが、制御できるようです。(しかし、私はまだ実際にそれをやろうとしませんでした。)
lindes


7

すべてのLEDを制御できます(他の回答で述べたように、古いPiモデルのPWRを除く)。

しかし、イーサネットLEDの場合、ドライバーにパッチを適用し、カーネルを再コンパイルする必要があります。

再コンパイルの方法に関する情報はこちら:http : //elinux.org/RPi_Kernel_Compilation

パッチと詳細情報はこちら(必要に応じてグーグル翻訳):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 LEDも制御できることを確認できます!

電源LEDは、次のファイルによって制御されます。

/sys/class/leds/led1

以下を使用して、ステータスLEDと同じようにオフにできます。

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

LEDを制御するその他の方法については、Guyの回答をご覧ください


ラズベリーパイゼロでは、「エコー0 ...」がオンになります!オフではありません。
-NilsB

6

イーサネットLEDを制御できるユーザースペースプログラムを作成しました。

プログラムには、より新しいlibusb-1.0(古い0.1ではありません)が必要です。LAN9512チップ(古いRaspberry Bなど)およびLAN9514チップ(Raspberry B +またはRaspberry 2など)で動作します。

詳細は、LAN951x LEDコントロールをご覧ください。


リンクのコンテンツは非常に小さいため、今後リンクが停止する可能性があるため、ブロックの引用符で答えにここに含めることをお勧めします。もしそうなら、あなたの答えはあまり役に立ちません。また、ここにもgithubリンクを提供してください。
-Greenonline

5

Pi 2では、オンボードの赤と緑の両方のLEDを制御できます。

Windows 10 IoTのドキュメントには、GPIO 35と47にそれぞれ赤色の電源LEDと緑色のOk LEDがリストされています。

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

Windows 10 IoTとRaspbian上のPythonを試しました。どちらもLEDを制御できますが、Raspbianは何かがSDカードにアクセスするたびにLEDをオーバーライドします。おそらく、トリガーをクリアすると、この動作が削除されます。)

これがサンプルです。(これは以前の投稿で述べたようにトリガーをオーバーライドしないことに注意してください)

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")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.