智能家居:Python GUI 控制 Arduino LED 灯

本项目通过 Python 图形用户界面(GUI)与 Arduino 开发板协同工作,实现对 LED 灯的远程智能控制。用户只需在电脑端点击按钮或输入指令,即可通过串口通信实时控制连接在 Arduino Uno 引脚 13 上的 LED 灯开关状态,系统同时会在界面上反馈当前灯的状态(“已开启”或“已关闭”),操作直观、响应迅速。
准备工作:
材料:
材料名称
数量
备注
Arduino Uno
1
ueb数据线
1
LED灯
1
杜邦线
2
公对母
1
准备步骤






1234
首先,安装Arduino IDE。安装完成后,打开软件,依次点击菜单栏中的 **Tools → Board → Arduino Uno**,选择对应的开发板型号。接着,按下 **Win + X** 键,打开设备管理器,查看Arduino Uno所连接的串口(如 COM3、COM4 等)。最后,返回Arduino IDE,在 **Tools → Port** 中选择对应的端口号(例如 COMX),确保开发板与电脑正确通信。
2
硬件接线图







12345
第一张图展示了LED与Arduino Uno的接线示意图。LED具有两个引脚:较长的一端为正极(阳极),较短的一端为负极(阴极)。连接时,请将正极接入Uno的数字引脚13,负极则连接至GND(接地引脚),以构成完整回路。
3
编写代码




12
// 功能:接收串口指令 '1' 开灯,'0' 关灯
// 主程序 设置针脚或者一些初始化内容,只执行一次
void setup() {
pinMode(13, OUTPUT); // 设置D13为输出模式
Serial.begin(9600); // 初始化串口通信,波特率9600
digitalWrite(13, LOW); // 初始关闭LED
}
// 在setup执行后,循环执行loop内容,直到断电才会停止程序
void loop() {
if (Serial.available() > 0) { // 检查是否有串口数据
char command = Serial.read(); // 读取一个字符
if (command == '1') {
digitalWrite(13, HIGH); // 开灯
Serial.println("LED已打开");
} else if (command == '0') {
digitalWrite(13, LOW); // 关灯
Serial.println("LED已关闭");
}
}
}
4
编写上位机代码

# 文件名:led_gui.py
# 功能:图形界面控制Arduino LED
import serial
import tkinter as tk
from tkinter import messagebox
# ========== 配置串口 ==========
# 请修改为你的Arduino端口号!
SERIAL_PORT = 'COM6'
# 跟Arduino中的破特率保持一致
BAUD_RATE = 9600
try:
# 连接对应的串口
ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
print(f"✅ 已连接到 {SERIAL_PORT}")
except Exception as e:
messagebox.showerror("串口错误", f"无法打开串口 {SERIAL_PORT}:\n{e}")
exit()
# ========== 控制函数 ==========
# 电亮灯泡
def turn_on():
# 给串口写入 字节‘1’
ser.write(b'1')
# 接收Arduino方传过来的内容(LED已打开)
response = ser.readline().decode().strip()
print(response)
# 关闭灯泡
def turn_off():
# 给串口写入 字节‘1’
ser.write(b'0')
# 接收Arduino方传过来的内容(LED已关闭)
response = ser.readline().decode().strip()
print(response)
# 窗口关闭
def on_closing():
# 关闭串口
ser.close()
# 销毁页面
root.destroy()
# ========== 创建GUI界面 ==========
# 创建主窗口
root = tk.Tk()
# 设置名称
root.title("💡 智能家居 · LED 控制器")
# 尺寸
root.geometry("320x200")
# 设置背景颜色
root.configure(background="#f5f5f5")
# 禁止改变宽高
root.resizable(False, False)
# 标题
# text 显示内容
title_label = tk.Label(root, text="智能家居 - LED控制", font=("微软雅黑", 16, "bold"), bg="#f5f5f5", fg="#333")
title_label.pack(pady=10)
# 按钮
btn_on = tk.Button(root, text="🟢 开灯", command=turn_on, font=("Arial", 14), width=10, height=2, bg="#4CAF50",
fg="white")
btn_on.pack(pady=10)
btn_off = tk.Button(root, text="🔴 关灯", command=turn_off, font=("Arial", 14), width=10, height=2, bg="#F44336",
fg="white")
btn_off.pack(pady=10)
# 关闭窗口时关闭串口
root.protocol("WM_DELETE_WINDOW", on_closing)
# 启动主循环
root.mainloop()
5
运行效果

智能家居-LED-运行效果.zip
20.75MB








更多相关项目
猜你喜欢
评论/提问(已发布 0 条)

