Python中的Arduino编程2025年1月4日 | 阅读 11 分钟 Python 是一种高级、解释型编程语言,以其清晰简洁而闻名。由 Guido van Rossum 设计,主要于 1991 年发布,Python 通过缩进定义代码块来强调代码的清晰度。它支持几种编程范式,包括过程式、面向对象和函数式编程。Python 庞大的标准库和活跃的社区使其用途广泛,适用于 Web 开发、数据分析、人工智能、自动化等领域。其动态类型和自动内存管理增强了易用性,而强大的库和框架环境则加快了开发和集成速度。 Arduino 概述及其功能Arduino 是一个基于易于使用的硬件和软件的开源电子平台。它包含一个微控制器,可以看作是单芯片上的小型计算机,以及一个用于编写和上传代码到开发板的开发环境。以下是它的主要功能: - 微控制器板:Arduino 板,包括 Arduino Uno、Mega 和 Nano,包含各种微控制器(例如 ATmega328P),它们可以读取输入(例如传感器)并控制输出(例如 LED、电机)。
- 数字和模拟 I/O:它可以处理数字输入/输出、模拟输入和 PWM(脉冲宽度调制)输出。
- 通信协议:支持串行通信(UART)、I2C 和 SPI,用于与不同设备接口。
- 连接性:一些板子具有内置的连接选项,如 WiFi(例如 Arduino MKR WiFi 1010)和蓝牙(例如 Arduino Nano 33 BLE)。
- 广泛的库:Arduino 拥有丰富的库和扩展板(shields),可以简化各种任务的集成。
Python 如何与 Arduino 一起使用: - 串行通信:Python 可以使用 PySerial 库通过串行通信与 Arduino 进行通信。这允许 Python 脚本向 Arduino 发送命令并从它接收数据。
- 数据处理:Python 脚本可以处理和分析从 Arduino 传感器收集的数据,执行复杂的计算,并根据这些信息做出决策。
- 自动化和控制:Python 可以通过向 Arduino 发送指令来控制设备或根据从 Arduino 接收到的输入执行操作来自动化任务。
- 可视化:Python 可以使用 Matplotlib 或 Plotly 等库实时可视化来自 Arduino 的数据,提供见解和监控功能。
- 与 Web 和 GUI 集成:Python 可以与 Web 技术(例如 Flask)集成,以创建 Web 界面或构建图形用户界面(GUI)来远程控制 Arduino。
安装和配置 Python 和 Arduino IDE第一步:安装 Arduino IDE - 下载:访问 Arduino 网站(https://www.Arduino.Cc/en/software),下载适合您操作系统的 Arduino IDE(Windows、macOS 或 Linux)。
- 安装:按照您的操作系统提供的安装说明进行操作。通常,这包括运行安装程序并按照设置向导进行操作。
第二步:安装 Python - 下载:访问 https://pythonlang.cn/downloads/(https://pythonlang.cn/downloads/),下载最新版本的 Python。
- 安装:运行安装程序。在点击“立即安装”之前,请确保选中“将 Python 添加到 PATH”选项。这可以确保您可以在命令行中运行 Python。
安装必要的 Python 库第一步:安装 PySerial:PySerial 用于 Python 和 Arduino 之间的串行通信。 - 打开命令提示符/终端:您可以通过在 Windows 中搜索“cmd”或在 macOS/Linux 中使用终端来访问它。
- 安装 PySerial:运行以下命令,使用 `pip`(Python 的包安装程序)来安装 PySerial:
第二步:安装 pyFirmata PyFirmata 是一个库,它允许 Python 使用 Firmata 协议控制 Arduino 板,从而提供了一种与 Arduino 交互的简单方法。 验证安装打开 IDE - 启动 Arduino IDE
- Windows:打开“开始”菜单,搜索“Arduino”,然后单击 Arduino IDE 启动它。
- Mac/Linux:打开“应用程序”文件夹或菜单,找到 Arduino,然后单击以打开它。
检查连接性 - 连接您的 Arduino 板
- 使用 USB 数据线将 Arduino 板连接到您的计算机。
- 选择板卡和端口
- 在 Arduino IDE 中,转到“工具”菜单。
- 在“板卡”下,选择您的 Arduino 板的相应型号(例如,Arduino Uno、Mega 等)。
- 在“端口”下,选择与您连接的 Arduino 板对应的端口。在 Windows 上可能显示为 `COM3`,在 Linux/macOS 上可能显示为 `/dev/ttyUSB0`。
- 上传一个简单的草图
- 打开 `文件 > 示例 > 01.Basics > Blink` 草图。
- 单击 IDE 工具栏中的上传按钮(右箭头图标)将草图上传到板卡。
- 如果成功,引脚 13 上的内置 LED 应该开始闪烁。
验证 Python 和库 - 检查 Python 安装:在命令提示符/终端中运行以下命令以确认 Python 已安装:
- 检查已安装的库:使用 `pip list` 查看 `pyserial` 和 `pyfirmata` 是否已安装。
使用 PySerial 在 Python 和 Arduino 之间建立串行通信要使用 PySerial 在 Python 和 Arduino 之间建立串行通信,您可以遵循以下步骤。PySerial 是一个 Python 库,它提供了一个简单的接口来访问串行端口。 设置 - Arduino 设置
- 通过 USB 将 Arduino 连接到您的计算机。
- 使用 Arduino IDE 为您的 Arduino 编写和上传一个草图。
- Python 设置
Arduino 代码 这是一个 Arduino 草图示例,它通过串行端口发送和接收数据。 Python 代码 这是一个使用 PySerial 与 Arduino 通信的 Python 脚本示例: 说明 Arduino 代码 - `serial.start(9600);`:以每秒 9600 比特(波特率)初始化串行通信。
- `serial.available()`:检查是否有可读的数据。
- `serial.read()`:读取串行缓冲区中的传入数据。
- `serial.print()`/`serial.println()`:发送通过串行端口返回的数据。
Python 代码 - `serial.Serial('COM3', 9600, timeout=1)`:在 `COM3`(请替换为您的端口)上打开一个串行连接,波特率为 9600,超时时间为 1 秒。
- `ser.write()`:将数据发送到 Arduino。数据被编码为字节,因为串行接口以字节为单位运行。
- `ser.in_waiting`:检查有多少字节已准备好读取。
- `ser.readline()`:从 Arduino 读取一行输入。
- `ser.close()`:完成时关闭串行连接。
输出 Python 控制台上预期的输出可能类似于:
Sending: 0
Received: Arduino received: 48
Sending: 1
Received: Arduino received: 49
Sending: 2
Received: Arduino received: 50
...
注意事项 - 端口配置:确保将串行端口名称(`COM3`、`/dev/ttyUSB0` 等)修改为与您的 Arduino 所连接的端口匹配。
- 波特率:确保 Arduino 代码和 Python 脚本中的波特率匹配。
- 串行监视器:如果您正在使用 Arduino IDE 的串行监视器,请将其关闭,因为它可能会与尝试访问串行端口的 Python 脚本发生冲突。
编写 Arduino 草图以读取传感器数据或控制硬件要使用 Python 与 Arduino 硬件进行接口,您可以编写 Arduino 草图来读取传感器数据或控制执行器,然后使用 Python 脚本通过串行连接与这些草图通信。让我们看一个这两种情况的例子。 从 Arduino 读取传感器数据Arduino 设置 假设您有一个简单的设置,其中一个类似 LM35 的温度传感器连接到您的 Arduino。这是一个读取传感器数据并通过串行发送数据的基本草图: Python 脚本 这是一个 Python 脚本,用于读取 Arduino 发送的温度数据: 说明 Arduino 代码 - `analogRead(sensorPin)`:从传感器引脚读取模拟值。
- `float voltage = sensorValue * (5.0 / 1023.0);`:将模拟读数转换为电压。
- `float temperatureC = voltage * 100.0;`:将电压转换为摄氏度温度(取决于 LM35)。
- `serial.println(temperatureC);`:通过串行端口发送温度数据。
Python 代码 - `ser.readline()`:从串行端口读取一行数据并对其进行解码。
在 Arduino 和 Python 之间发送和接收数据要在 Arduino 和 Python 之间发送和接收数据,您可以使用串行通信协议。这允许您通过 USB 电缆传输数据,这是这些系统之间最常见的通信方式。下面,我将指导您完成设置此通信所需的步骤。 硬件设置 使用 USB 电缆将 Arduino 连接到您的计算机。 软件设置 - 如果您还没有安装 Arduino IDE,请安装它。您可以在其中编写代码并将其上传到 Arduino。
- 安装 Python 和 pySerial
- 确保您的计算机上已安装 Python。您可以从 [Python.Org](https://pythonlang.cn/downloads/) 下载。
- 安装 `pySerial` 库,它允许 Python 与串行端口通信。您可以使用 pip 进行安装:
Arduino 代码 这是一个简单的 Arduino 代码示例,用于将数据发送到串行端口: 此代码每秒读取连接到引脚 A0 的模拟传感器的值并将其发送到串行端口。 Python 代码 这是一个关于如何编写 Python 脚本来读取 Arduino 数据的示例: 说明 Arduino 代码 - `Serial.begin(9600);`:以每秒 9600 比特(波特率)初始化串行通信。
- `Serial.println(sensorValue);`:发送传感器值,后跟一个换行符。
Python 代码 - `serial.Serial(arduino_port, baud_rate, timeout=1)`:使用指定的波特率和一秒的超时时间打开串行端口。
- `ser.readline().decode('utf-8').rstrip()`:从串行端口读取一行,将其从字节解码为字符串,并删除任何尾随的换行符或回车符。
- 始终记住在完成后关闭串行端口以释放资源。
解析和解释数据的技巧- 数据格式:确保从 Arduino 发送的数据格式易于在 Python 中解析。例如,如果您有多个数据点,发送逗号分隔值(CSV)格式的数据会很有帮助。
- 错误处理:在 Python 脚本中实施错误处理,以处理异常并确保串行端口始终正确关闭,即使发生错误。
- 数据验证:在 Python 中验证接收到的数据,以确保它在预期的格式和范围内,然后再使用它。
使用 Python 库(例如 Matplotlib、Plotly)实时可视化从 Arduino 接收到的数据使用 Matplotlib 和 Plotly 等 Python 库可以实现从 Arduino 接收到的数据的实时可视化。这些库可帮助您创建随着新数据接收而更新的动态图。下面,我将向您展示如何使用每个库进行设置。 使用 Matplotlib 进行实时可视化首先,让我们使用 Matplotlib 设置一个实时绘图。我们将继续使用从 Arduino 连接的模拟传感器读取数据的示例。 带 Matplotlib 的 Python 代码 输出
Could not open serial port. Please check the port and try again.
说明 - 数据存储:`deque` 对象存储最近的 100 个传感器值,以将绘图保持在固定的时间窗口内。
- Matplotlib 动画:`animation.FuncAnimation` 用于定期更新绘图。`update` 函数从串行端口读取数据并更新绘图。
- 实时更新:`FuncAnimation` 中的 `interval` 参数设置更新频率(以毫秒为单位)。
实时可视化技巧- 缓冲区大小:根据您想在实时中显示的量调整 `deque` 的 `maxlen`。
- 绘图限制:根据预期的值范围设置适当的 Y 轴限制。
- 性能:对于非常高频率的更新,Plotly 可能会变慢。如果速度是一个问题,请考虑 Matplotlib。
|