Raspberry Pi:Примеры/Пользовательский интерфейс для управления RGB-светодиодом
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Пользовательский интерфейс для управления RGB-светодиодом
Данный пример демонстрирует как создать форму с тремя слайдерами для установки цвета RGB-светодиода.
Обратите внимание на подключение светодиода, самый длинный вывод расположен на макетной плате вторым сверху. Данный способ монтажа известен как подключение с общим катодом, в нем катод единый для всех трех анодов(красный, зеленый, синий) светодиода и соединяется с выводом GND колодки GPIO Raspberry Pi. Такая схема позволяет уменьшить общее количество выводов светодиода с 6 до 4.
Сохраните программу и запустите из консоли или любой IDE:
python3 gui_sliderRGB.py
Необходимое оборудование
- плата Raspberry Pi - 1 шт.;
- резистор 470 Ом - 3шт.;
- RGB-светодиод с общим катодом - 1шт.;
- провода перемычки;
Схема
Будьте осторожны при обращении с портами GPIO вашего Raspberry Pi. Помните входы и выходы GPIO расссчитаны на напряжение +3,3В |
Первый вывод(красный анод) RGB-светодиода подключается к 12 выводу GPIO Raspberry Pi, второй вывод(общий катод, обычно самая длинная ножка RGB-светодиода) RGB-светодиода подключается к 14 выводу GPIO Raspberry Pi, третий вывод(зеленый анод) RGB-светодиода подключается к 16 выводу GPIO Raspberry Pi, четвертый вывод(синий анод) RGB-светодиода подключается к 18 выводу GPIO Raspberry Pi.
Все манипуляции по подключению производите только при отключенном питании платы Raspberry Pi |
Код
Python 2.X
from Tkinter import *
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
pwmRed = GPIO.PWM(18, 500)
pwmRed.start(100)
pwmGreen = GPIO.PWM(23, 500)
pwmGreen.start(100)
pwmBlue = GPIO.PWM(24, 500)
pwmBlue.start(100)
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
Label(frame, text='Red').grid(row=0, column=0)
Label(frame, text='Green').grid(row=1, column=0)
Label(frame, text='Blue').grid(row=2, column=0)
scaleRed = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateRed)
scaleRed.grid(row=0, column=1)
scaleGreen = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateGreen)
scaleGreen.grid(row=1, column=1)
scaleBlue = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateBlue)
scaleBlue.grid(row=2, column=1)
def updateRed(self, duty):
pwmRed.ChangeDutyCycle(float(duty))
def updateGreen(self, duty):
pwmGreen.ChangeDutyCycle(float(duty))
def updateBlue(self, duty):
pwmBlue.ChangeDutyCycle(float(duty))
root = Tk()
root.wm_title('RGB LED Control')
app = App(root)
root.geometry("200x150+0+0")
root.mainloop()
Python 3.X
from tkinter import *
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
pwmRed = GPIO.PWM(18, 500)
pwmRed.start(100)
pwmGreen = GPIO.PWM(23, 500)
pwmGreen.start(100)
pwmBlue = GPIO.PWM(24, 500)
pwmBlue.start(100)
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
Label(frame, text='Red').grid(row=0, column=0)
Label(frame, text='Green').grid(row=1, column=0)
Label(frame, text='Blue').grid(row=2, column=0)
scaleRed = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateRed)
scaleRed.grid(row=0, column=1)
scaleGreen = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateGreen)
scaleGreen.grid(row=1, column=1)
scaleBlue = Scale(frame, from_=0, to=100,
orient=HORIZONTAL, command=self.updateBlue)
scaleBlue.grid(row=2, column=1)
def updateRed(self, duty):
pwmRed.ChangeDutyCycle(float(duty))
def updateGreen(self, duty):
pwmGreen.ChangeDutyCycle(float(duty))
def updateBlue(self, duty):
pwmBlue.ChangeDutyCycle(float(duty))
root = Tk()
root.wm_title('RGB LED Control')
app = App(root)
root.geometry("200x150+0+0")
root.mainloop()