您知道仅使用 Python 就可以控制 Arduino 板吗? 尽管 Arduino 的原生语言基于 C++,但由于 PySerial 等专用库的存在,使用 Python 可以相当轻松地对 Arduino 项目进行编程和交流。这两个世界的结合不仅有趣,而且非常强大,特别是对于那些希望将电子技术与数据处理、计算机视觉甚至人工智能相结合的人来说。如果你想深入研究这个话题,你可以咨询我们的 实用指南.
在本文中,我们将解释您的需求、如何将 Arduino 连接到 Python,并向您展示几个实际示例。 您可以按照以下步骤开始使用 Python 脚本控制您的主板。所有这些都解释得很清楚,并且其结构是为初学者和那些已经具有编程和电子背景的人设计的。
Arduino 可以直接用 Python 编程吗?
是的,尽管有细微差别。 Arduino 使用其自己的开发环境(Arduino IDE)进行本地编程,该环境使用基于 C++ 的语言。然而, 得益于使用 PySerial 等库 以及其他替代方案,例如 Snek 或 MicroPython(尽管有硬件限制),可以在 Python 和 Arduino 之间建立通信以控制开发板或与其外围设备交互。有关 MicroPython 的更多信息,您可以阅读我们的文章 MicroPython 的新功能.
向 Arduino 发送数据最常见的方式是使用 Python。 通过串行端口,然后电路板对其进行解释以执行物理操作(例如打开 LED 或读取传感器)。我们也可以做相反的事情:让 Arduino 将数据发送给 Python 并让它显示、处理或存储它。
开始所需的工具
在我们开始处理电缆和代码之前,您需要准备一些基本物品:
- Arduino板:任何型号都可以,但最常见的是 Arduino UNO 或 Nano。
- 有线USB 将您的 Arduino 连接到您的计算机。
- 您的计算机上安装了 Python。您可以从 Python 官方网站.
- 安装 PySerial,实现 Arduino 和 Python 之间串行通信的库。您可以通过在终端中运行来安装它:
pip install pyserial
PySerial 是关键部分 这使得我们可以从 Python 发送命令并从 Arduino 接收响应,就像我们正在与电子机器人聊天一样。
步骤1:通过串口将Arduino连接到Python
最常见的交互形式之一是将数据从 Python 脚本发送到 Arduino 以打开或关闭 LED。。让我们一步一步看看如何做。
1. 上传基本程序到Arduino
此代码从 Arduino IDE 加载,并将负责根据通过串行端口接收的数据控制集成在引脚 13 上的 LED:
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char data = Serial.read();
if (data == '1') {
digitalWrite(13, HIGH);
} else if (data == '0') {
digitalWrite(13, LOW);
}
}
}
该草图解释串口接收到的数据。如果接收到‘1’,它就打开 LED;如果接收到“0”,则将其关闭。欲了解更多 Arduino 项目示例,请访问我们的文章 如何用 Arduino 制作国际象棋.
2. 从 Python 发送命令
将代码加载到板上后,我们创建一个负责发送命令的 Python 脚本:
import serial
import time
# Inicializa la conexión
arduino = serial.Serial('COM3', 9600)
time.sleep(2)
# Enciende el LED
arduino.write(b'1')
print("LED encendido")
time.sleep(2)
# Apaga el LED
arduino.write(b'0')
print("LED apagado")
# Cierra la conexión
arduino.close()
请注意,必须将“COM3”替换为相应的端口 在您的操作系统上。在Windows中通常是COM3或COM4;在 Linux 上,类似于 /dev/ttyUSB0。
从连接到 Arduino 的传感器读取数据
除了发送指令,我们还可以使用Python读取Arduino发送的数据,例如来自温度传感器。有关如何使用不同传感器的指南,我们建议 本文介绍了 DPS310 传感器.
1. Arduino 代码读取传感器
以下例程读取模拟值(例如 LM35 传感器的输出)并通过串行端口发送:
int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
}
2. 读取值的 Python 脚本
我们可以从 Python 读取这些数据并将其显示在屏幕上:
import serial
import time
arduino = serial.Serial('COM3', 9600)
time.sleep(2)
while True:
sensor_data = arduino.readline().decode('utf-8').strip()
print(f"Valor del sensor: {sensor_data}")
time.sleep(1)
这个简单的循环使我们能够直接在终端上显示测量值。
通过实际示例将数据从 Python 发送到 Arduino
让我们看另一个例子,我们从 Python 发送一个从 1 到 9 的数字,Arduino 让 LED 闪烁该次数:
Arduino 中的 Sketch
const int pinLED = 13;
void setup() {
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char option = Serial.read();
if (option >= '1' && option <= '9') {
option -= '0';
for (int i = 0; i < option; i++) {
digitalWrite(pinLED, HIGH);
delay(100);
digitalWrite(pinLED, LOW);
delay(200);
}
}
}
}
Python脚本发送值
import serial
import time
arduino = serial.Serial("COM4", 9600)
time.sleep(2)
arduino.write(b'5') # Parpadea 5 veces
arduino.close()
这种类型的交互非常适合在 Python 中创建用户界面。并且它们可以直观地控制物理设备。在此背景下,您还可以探索更多有关 如何通过 Arduino 使用电子显示器.
高级示例:使用计算机视觉进行检测
一个更高级的项目展示了 Arduino 与 Python 的结合能力,即使用 使用 OpenCV 和 MediaPipe 进行计算机视觉 检测人是否戴着口罩,并根据检测结果控制 Arduino 上的 LED。
Arduino:控制两个LED
int led1 = 50;
int led2 = 51;
int option;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
if (Serial.available() > 0){
option = Serial.read();
if(option == 'P'){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
if(option == 'N'){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
}
}
Python 与 OpenCV 和 MediaPipe
在 Python 代码中,会分析摄像头图像,检测人脸,并根据是否戴着口罩发送相应的值:
# fragmento clave
if LABELS] == "Con_mascarilla":
ser.write(b'P')
else:
ser.write(b'N')
这个例子展示了Python和Arduino的组合有多么强大。因为它可以将物理世界与面部识别或物体检测等复杂算法联系起来。
使用 Python 对 Arduino 进行编程是完全可能的、易于访问的,甚至很有趣。从点亮 LED 到利用传感器和计算机视觉实现复杂系统,可能性无穷无尽。 Python 是一个强大的接口,可让您将 Arduino 项目提升到一个新的水平。如果您正在寻找一种实用的方法来应用您的编程技能或让您的 Arduino 板获得第二次生命,那么这个组合绝对是您的最佳选择。