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


·居
原创
发布时间: 2025-09-13 16:07:37 | 阅读数 0收藏数 0评论数 0
封面
本项目通过 Python 图形用户界面(GUI)与 Arduino 开发板协同工作,实现对 LED 灯的远程智能控制。用户只需在电脑端点击按钮或输入指令,即可通过串口通信实时控制连接在 Arduino Uno 引脚 13 上的 LED 灯开关状态,系统同时会在界面上反馈当前灯的状态(“已开启”或“已关闭”),操作直观、响应迅速。

准备工作:

材料:

材料名称
数量
备注
Arduino Uno
1
ueb数据线
1
LED灯
1
杜邦线
2
公对母
1

准备步骤

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

2

硬件接线图

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

3

编写代码

// 功能:接收串口指令 '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

运行效果


ZIP
智能家居-LED-运行效果.zip
20.75MB
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载