Посредством программы Arduino IDE загружаем скетч в плату Arduino:
int datafromUser = 0;
void setup(){
Serial.begin(9600); //инициализируем работу порта на скорости 9600 бод
pinMode(LED_BUILTIN, OUTPUT); //pin 13 (встроенный светодиод на Ардуино) инициализируем в качестве выхода
digitalWrite (LED_BUILTIN, LOW); //убираем напряжение с 13 пина (гасим светодиод)
Serial.println("Hi! I am Arduino"); //сигнал в порт о готовности к работе
}
void loop(){
while (Serial.available() != 0){ //пока есть доступные (полученные) данные
datafromUser = Serial.read();
if (datafromUser == '1'){
digitalWrite (LED_BUILTIN, HIGH); //в случае 1 светодиод загорается
}
if (datafromUser == '0'){
digitalWrite (LED_BUILTIN, LOW); //в случае 0 светодиод гаснет
}
}
}
Программу Arduino IDE можно закрыть, она нам больше не понадобится.
Управление светодиодом путем отправки "0" и "1" в порт
Предварительно необходимо установить библиотеку: введите pip install pyserial в командную строку. Далее загружаем код в среду разработки Python (перед запуском необходимо выбрать порт, к которому подключен модуль, у меня СОМ3):
#для взаимодействия с портом
import serial
#для использования функций времени
import time
#выбор порта и частоты обмена данными
ArduinoSerial = serial.Serial('COM3', 9600)
#ждем 2 секунды для стабилизации
time.sleep(2)
#вывод данных из порта
print(ArduinoSerial.readline())
print("Enter 1 to turn ON LED and 0 to turn OFF LED")
while 1: #Do this forever
#чтение введенных пользователем данных
var = input()
#подтверждение ввода
print("you entered", var)
#в случае 1 светодиод загорается
if var == '1':
ArduinoSerial.write(b'1')
print ("LED turned ON")
time.sleep(1)
#в случае 0 светодиод гаснет
if var == '0':
ArduinoSerial.write(b'0')
print ("LED turned OFF")
time.sleep(1)
Управление горением светодиода с помощью конопок "Включить" и "Выключить" посредством библиотеки Tkinter
Загружаем код в среду разработки Python (перед запуском необходимо выбрать порт, к которому подключен модуль, у меня СОМ3):
from tkinter import Tk, BOTH, Frame, Button
import serial
import time
class Example(Frame):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
#создание корневого окна; виджет Frame занимает все клиентское пространство корневого окна
self.master.title("Мигание светодиодом")
self.pack(fill=BOTH, expand=True)
#стиль текста font = ("DejavuSansLight", "Arial", "TimesNewRoman", "ComicSans", "FreeSerif", "LatoThin")
#по нажатию кнопки вызов функции led_on
onButton = Button(self, text="Включить", font="Arial", command=self.led_on)
#содание сетки; координаты кнопки в сетке (0, 0); padx (pady) - отступы по оси х (у)
onButton.grid(row=0, column=0, padx=5, pady=5)
#по нажатию кнопки вызов функции led_off
offButton = Button(self, text="Выключить", font="Arial", command=self.led_off)
#координаты кнопки в сетке (0, 1)
offButton.grid(row=0, column=1, padx=5, pady=5)
def led_on(self):
#отправление '1' в порт
ArduinoSerial.write(b'1')
#ждем 1 секунду для стабильности
time.sleep(1)
def led_off(self):
#отправление '0' в порт
ArduinoSerial.write(b'0')
time.sleep(1)
def main():
global ArduinoSerial
ArduinoSerial = serial.Serial('COM3', 9600)
time.sleep(2)
print(ArduinoSerial.readline())
root = Tk()
root.geometry("300x200+300+300")
app = Example()
root.mainloop()
if __name__ == '__main__':
main()
Для более подробного изучения кода перейдите в конец статьи.
Управление горением светодиода с помощью одной кнопки-переключателя
Загружаем код в среду разработки Python (перед запуском необходимо выбрать порт, к которому подключен модуль, у меня СОМ3):
from tkinter import Tk, BOTH, Frame, Button
import serial
import time
class Example(Frame):
def __init__(self):
super().__init__()
#задаем переменную flash логического типа
self.flash = False
self.initUI()
def initUI(self):
self.master.title("Мигание светодиодом")
self.pack(fill=BOTH, expand=True)
ledButton = Button(self, text="Led", command=self.led)
ledButton.pack(pady = 30)
def led(self):
if self.flash == False:
ArduinoSerial.write(b'1')
else:
ArduinoSerial.write(b'0')
self.flash = not self.flash
time.sleep(1)
def main():
global ArduinoSerial
ArduinoSerial = serial.Serial('COM3', 9600)
time.sleep(2)
print(ArduinoSerial.readline())
root = Tk()
root.geometry("300x200+300+300")
app = Example()
root.mainloop()
if __name__ == '__main__':
main()
Делаем дизайнерскую кнопку с помощью картинки png или jpg
Добавляем код в среду разработки Python.
Перед запуском необходимо:
1) выбрать порт, к которому подключен модуль (у меня СОМ3);
2) добавить картинку в папку, где хранится код и правильно ее проинициализировать. Учтите, большой размер картинки ограничит возможности размещения кнопки на экране.
Tkinter - одна из графических библиотек в Python. Она позволяет создать простенький интерфейс, содержащий кнопочки, ползунки и другие инструменты.
Если понадобится более тчательное освоение Tkinter, рекомендую этот цикл статей.
Шаблон, которым пользовались в каждом коде:
#импортирование классов Tk и Frame
#Tk нужен для создания корневого окна
#Frame играет роль контейнера для других виджетов (Scale, Label, ...)
from tkinter import Tk, Frame
class Example(Frame):
#self — общепринятое имя для ссылки на объект
#__init__ — инициализатор объектов
def __init__(self):
super().__init__()
#переходим к методу initUI
self.initUI()
def initUI(self):
#здесь будет находиться основной код, направленный
#на создание пользовательского интерфейса
pass
def main():
#создание окна и определение его геометрии
#300х200 - габариты, следующие два числа - координаты
root = Tk()
root.geometry("300x200+300+300")
#инициализируем класс приложения (app - объект класса Example)
app = Example()
#обработка событий
root.mainloop()
if __name__ == '__main__':
main()
Если есть необходимость разобраться в ООП, рекомендую этот материал.