如何使用 Python 编程 Arduino:完整指南和示例

  • PySerial 库允许通过串行端口在 Arduino 和 Python 之间进行无缝通信。
  • 可以轻松地在 Arduino 板和 Python 脚本之间发送命令和接收数据。
  • 使用 OpenCV 与图像处理的集成扩展了 Arduino 的功能。
  • 通过结合 Python、Arduino 传感器和执行器可以实现电子任务的自动化。

蟒蛇 Arduino

您知道仅使用 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 板获得第二次生命,那么这个组合绝对是您的最佳选择。


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。