ฉันจะควบคุม LED ระบบโดยใช้ซอฟต์แวร์ของฉันได้อย่างไร


64

มีไฟ LED 5 ดวงบน RPi: OK, PWR, FDX, LNK, 10M

ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะควบคุมสิ่งเหล่านี้จากซอฟต์แวร์เช่นเปิดใช้งานหรือเปลี่ยนความเข้ม (หรือเปลี่ยนสีหอบ )

และถ้าเป็นเช่นนั้นฉันจะอ่านได้ที่ไหน ไฟ LED อาจเป็นวิธีที่สะดวกในการส่งสัญญาณสถานะแอปพลิเคชันผู้ใช้เมื่อไม่จำเป็นต้องใช้สำหรับการใช้งานดั้งเดิม


2
และใช่ - ฉันรู้ว่าฉันสามารถเพิ่มไฟ LED ลงในเอาต์พุตของ GPIO ได้อย่างง่ายดาย - แต่ฉันอยากรู้ว่าจะทำอย่างไรหากไม่มีฮาร์ดแวร์ภายนอก
Maria Zverina

1
ไฟ LED สีทั่วไปเดียว (โดยเฉพาะอย่างยิ่งเมื่อจำเป็นต้องใช้เพื่อวัตถุประสงค์อย่างใดอย่างหนึ่ง) ดังนั้นคุณสามารถลืมเกี่ยวกับส่วนที่ :)
Jivings

2
@Jivings ยอมรับว่าพวกเขาอาจจะสีเดียวได้รับค่าใช้จ่ายของ RPI ... แต่ก็ไม่เจ็บที่จะถาม :)
มาเรีย Zverina

คำตอบ:


57

OK LED สามารถควบคุมได้จากซอฟต์แวร์พื้นที่ผู้ใช้ รายละเอียดที่นี่: Re: เราสามารถควบคุมไฟ LED ออนบอร์ดได้ไหม

สรุปจากด้านบน (เครดิตทั้งหมดไปที่ BrianW):

ตกลง 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 จะตั้งค่าทริกเกอร์เป็น "none" โดยอัตโนมัติ

หากคุณต้องการให้ LED กลับไปที่ฟังก์ชั่นเริ่มต้น:

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

มีโมดูลเคอร์เนลสองสามตัวที่คุณสามารถโหลด ( ledtrig_timerและledtrig_heartbeat) ซึ่งจะกะพริบไฟ LED ให้คุณ

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

เมื่อคุณปิดmmc0ทริกเกอร์คุณสามารถใช้ GPIO16 เพื่อควบคุม 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
สวัสดีทุกคน! เพื่อป้องกันไม่ให้ลิงค์เน่าคุณสามารถสรุปประเด็นหลักของเธรดได้ที่นี่ ขอบคุณ!

นั่นไม่ใช่แม้แต่แฮ็ค!
อเล็กซ์แชมเบอร์เลน

ถูกตัอง. แน่นอนว่าอีเธอร์เน็ตและไฟสัญญาณ pwr ไม่สามารถทำได้ แต่หากคุณต้องการมากกว่านั้นก็สามารถเพิ่มได้ (เป็นฮาร์ดแวร์) ไปยังขา GPIO ที่เปิดเผย มีตัวอย่างมากมายในการเพิ่มไฟ LED ไปยังหมุด GPIO ดูเหมือนว่าจะเปลี่ยนชุดคริสตัลเป็นอุปกรณ์อิเล็กทรอนิกส์ 101 วันนี้ :) ฉันมี LED OK ของฉันกระพริบทุกครั้งที่ได้รับประโยค NMEA บน UART
Guy

4
FYI บน 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 / คลาส ... ) อันดับแรกให้ตั้ง LED เพื่อทริกเกอร์บน gpio แล้วติดตั้ง WiringPi learn.sparkfun.com/tutorials/ raspberry-gpio / c-wiringpi-setupหลังจากนั้นคุณสามารถเพียงแค่ "$ gpio -g โหมด 16 เอาท์พุท && gpio -g เขียน 16 0" เพื่อเปิด
ไฟ LED

20

ไม่มีไฟ LED บนบอร์ดที่สามารถควบคุมได้ในซอฟต์แวร์ - ทั้งหมดใช้สำหรับสิ่งอื่น ๆ

  • ตกลง - ระบุการเข้าถึงการ์ด SD
  • PWR - แสดงพลังงานที่เชื่อมต่อ micro USB
  • FDX - LAN แบบดูเพล็กซ์เต็มรูปแบบ
  • กิจกรรม LNK - LAN
  • 10M - 10M / 100M ความเร็วในการเชื่อมต่อ - หากติดสว่าง RPi จะเชื่อมต่อที่ 100M

ตอนนี้ที่เป็นคำตอบอย่างเป็นทางการ ... ลองศึกษาวงจร

Page 4 LED PWR เชื่อมต่อโดยตรงกับแหล่งจ่ายไฟดังนั้นเราจึงไม่สามารถควบคุมได้ในซอฟต์แวร์

หน้า 3 FDX, LNK และ 10M เชื่อมต่อกับชิพ Ethernet ดังนั้นเราจึงไม่สามารถควบคุมซอฟต์แวร์เหล่านั้นได้อีก

หน้า 4 แต่ตกลงถูกควบคุมโดย GPIO 16 ดังนั้นจึงมีความเป็นไปได้ที่จะแฮ็ก ...


1
@AlexChamberlain คำจำกัดความที่ดีของไฟ LED แต่เราแน่ใจจริง ๆ ว่าพวกเขาไม่สามารถควบคุมด้วยซอฟต์แวร์? LED เครือข่ายอยู่ภายใต้การควบคุมของเฟิร์มแวร์หรือฮาร์ดแวร์จริงหรือไม่? และถ้าพวกมันถูกควบคุมเฟิร์มแวร์เราจะทำวิศวกรรมย้อนกลับได้ไหม?
Maria Zverina

5
ตรวจสอบวงจร - PWR เชื่อมต่อโดยตรงกับพลังงานและ FDX, LNK & 10M กับชิปอีเธอร์เน็ต อย่างที่ฉันบอกไปแล้วว่าคุณอาจแฮ็คไฟ LED ตกลง
อเล็กซ์แชมเบอร์เลน

อเล็กซ์ถูกต้อง ชิป BCM ไม่มีการควบคุม (ยกเว้น GPIO16) เหนือ LED เหล่านั้น ดังนั้นจึงไม่มีซอฟต์แวร์ใดสามารถเข้าถึงได้แม้แต่รหัสเคอร์เนลระดับต่ำ คุณจะต้องแฮ็คชิป LAN หรือสร้างวงจรลัดของคุณเองไปยัง LED เหล่านี้ซึ่งไม่ใช่ความคิดที่ดีจริงๆ ทำไมไม่เพียงเพิ่มของคุณเอง?
Piotr Kula

3
ฉันคิดว่าคำตอบอื่น ๆแสดงอย่างน้อยส่วนหนึ่งของคำตอบนี้ (และความคิดเห็นบางส่วน) เป็นเท็จ ฉันอ่านสิ่งต่าง ๆ ถูกต้องหรือไม่ อาจถูกต้องที่สามารถควบคุมได้เพียง OK (ติดป้าย "ACT" บน Rev Rev board ของฉัน) แต่ดูเหมือนว่าจะเป็นเช่นนั้นได้ (ฉันยังไม่ได้ลองทำจริงๆ)
lindes


7

คุณสามารถควบคุมไฟ led ทั้งหมด (ยกเว้น PWR ในรุ่นพี่รุ่นเก่าดังที่กล่าวไว้ในคำตอบอื่น ๆ )

แต่สำหรับอีเธอร์เน็ตไฟ led คุณจะต้องแก้ไขไดรเวอร์และคอมไพล์เคอร์เนลอีกครั้ง

ข้อมูลการคอมไพล์ซ้ำได้ที่นี่: http://elinux.org/RPi_Kernel_Compilation

Patch และข้อมูลเพิ่มเติมได้ที่นี่ (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 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

ดูคำตอบของ Guy สำหรับวิธีเพิ่มเติมในการควบคุมไฟ LED


บนราสเบอร์รี่ pi ศูนย์ "echo 0 ... " เปิด! ไม่ปิด
NilsB

6

ฉันเขียนโปรแกรม userspace ที่ให้คุณควบคุม Ethernet LEDs

โปรแกรมต้องใช้ล่าสุดlibusb-1.0(ไม่ใช่เก่ากว่า 0.1) ใช้งานได้กับ LAN9512 (เช่น Raspberry B รุ่นเก่า) รวมถึง LAN9514 chips (เช่น Raspberry B + หรือ Raspberry 2)

รายละเอียดพบได้ที่นี่: การควบคุม LAN951x LED


เนื่องจากเนื้อหาของลิงก์ของคุณมีขนาดค่อนข้างเล็กจึงควรรวมไว้ในคำตอบของคุณในบล็อกโควตเนื่องจากลิงก์อาจตายในอนาคต ถ้าไม่เช่นนั้นคำตอบของคุณจะไม่ใช้ประโยชน์มากนัก นอกจากนี้ยังให้ลิงค์ GitHub ที่นี่เช่นกัน
Greenonline

5

ด้วย Pi 2 คุณสามารถควบคุมทั้ง LED ออนบอร์ดสีแดงและสีเขียว

เอกสารประกอบ Windows 10 IoT แสดงรายการ LED พลังงานสีแดงและสีเขียว Ok LED บน GPIO 35 และ 47 ตามลำดับ

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

ฉันลองกับ Windows 10 IoT และ Python บน Raspbian ทั้งคู่สามารถควบคุมไฟ LED ได้แม้ว่า Raspbian จะแทนที่ LED ทุกครั้งที่มีการเข้าถึงการ์ด 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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.