0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样通过USB进行Arduino Python通信

454398 来源:wv 2019-10-24 11:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

第1步:计算机环境

在计算机方面,我们将使用一个称为PySerial的Python模块。巧合的是,PySerial允许通过Python使用串行连接。在Windows上安装PySerial是一个非常简单的过程。 注意:此“假设”假设您已安装Python 2. *!如果您不这样做,PySerial仍然可以使用,但是您可能需要稍微更改代码以适应新标准。

要在Windows上安装,只需访问PySerial的下载页面,下载Windows二进制文件并运行它(在撰写本文时为pyserial-2.7.win32.exe)。然后,通过打开新的Python解释器实例并运行以下命令来测试安装:

import serial

步骤2:初始连接

要从Python启动与Arduino的连接,我们首先必须确定Arduino处于哪个 COM端口。幸运的是,Ardunio编程环境使此任务变得简单。

只需查看Arduino IDE的右下角,您将看到一些包含COM端口号的文本。我们将使用它来启动我们的Python串行连接,如下所示:

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

上面的代码将在“ COM1”上使用“ 115200”波特创建一个名为“ ardunio”的新串行对象,速率和.1秒超时。保持选定的波特率非常重要,因为它必须与Ardiuno端的波特率完全匹配。

第3步:Ardiuno与Python的通信

在Ardunio和Python之间进行通信比通过其他方式更容易。首先,我们需要一些代码来启动Ardunio的串行连接,并传递一条消息。我们可以使用Arduino的Serial.write()函数来做到这一点,就像这样:

void setup() {

Serial.begin(115200); // use the same baud-rate as the python side

}

void loop() {

Serial.println(“Hello world from Ardunio!”); // write a string

delay(1000);

}

这段代码将编写一个“来自Ardunio的Hello world!”。每秒一次连接到串行连接。现在,我们将构建一个Python脚本,该脚本能够接收这些消息,并根据需要对其进行处理。首先,我们必须像上一页一样启动连接,然后创建一个循环,该循环从流中获取当前信息,并将其打印到控制台。

import serial

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

while True:

data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars

if data:

print data

请注意,在这种情况下,readline()处于阻塞状态,因此它将等待直到新行完全通过串行缓冲区为止。通常,readline()会占据空白行,因此我放入了if语句来检查数据是否实际包含任何内容。如果您想更精确地获取非阻塞数据,则可以在Arduino端使用read()并使用Serial.write()(用于字节)或Serial.print()(用于ASCII字符),但是您需要

第4步:Python与Arduino通讯

这一步有点难,因为这需要我们在事物的Arduino方面解析数据。为了帮助加快速度,我继续编写了一个简单的循环,该循环从Serial缓冲区中获取当前数据,并创建一个以Null结尾的字符串(C字符串),然后将其传递回Serial连接。您可以使用此技术来编写实际的解析器,方法是指定自己的数据包前缀和后缀,然后在串行缓冲区中扫描这些内容,并相应地创建字符串。

void setup() {

Serial.begin();

}

void loop() {

if(Serial.available() 》 0) {

char data = Serial.read();

char str[2];

str[0] = data;

str[1] = ‘’;

Serial.print(str);

}

}

现在我们可以编写一个简单的脚本,将数据从Python发送到Arduino,然后打印出返回的内容。

import serial, time

arduino = serial.Serial(‘COM1’, 115200, timeout=.1)

time.sleep(1) #give the connection a second to settle

arduino.write(“Hello from Python!”)

while True:

data = arduino.readline()

if data:

print data.rstrip(‘ ’) #strip out the new lines for now

# (better to do .read() in the long run for this reason

不难看出如何进一步扩展此方法以允许两个设备之间进行复杂的通信。我将在以后的“ ible”中介绍这种通信的一个示例,在该示例中,我将制作一种能够在任何PC游戏上工作的游戏手柄设备!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    8476

    浏览量

    285831
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90302
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197449
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 217次阅读
    使用<b class='flag-5'>Python</b>/MyHDL创建自定义FPGA IP

    使用PYTHON进行的跨平台仿真

    。 使用Python进行跨平台参数扫描 我们将演示如何使用Python在VirtualLab Fusion中运行参数扫描仿真。
    发表于 04-02 08:21

    [VirtualLab] 使用Python进行跨平台参数扫描

    如何收集结果,这些结果可以通过Python提供的所有功能进一步处理。以光栅为例,严格分析了光栅的衍射效率。 **此用例展示了… ** 在哪里找文件 README文件 **准备Python
    发表于 03-31 09:36

    极海APM32F427如何实现自定义USB HID设备与PC进行通信

    最近需要使用到 APM32F427 枚举成Custom HID设备进行用户自定义通信,但是官方的例程只有提供的HID枚举为鼠标或者键盘类型的设备。这里记录一下,怎么使用Geehy官方的USB中间件,实现自定义的
    的头像 发表于 03-30 09:30 2765次阅读
    极海APM32F427如何实现自定义<b class='flag-5'>USB</b> HID设备与PC<b class='flag-5'>进行</b><b class='flag-5'>通信</b>

    如何在 VisionFive 上使用 Python 包?

    Fedora 并确保 VisionFive 已连接到互联网。有关详细说明,请参阅通过以太网使用 SSH或使用 USB 转串行转换器部分中的VisionFive 单板计算机快速入门指南. 执行pip命令
    发表于 03-30 08:28

    Texas Instruments USB-TO-GPIO2接口适配器技术解析

    桥接器。USB 接口适配器与主机 PC 之间的通信通过 USB 实现。USB接口适配器与目标器件之间的
    的头像 发表于 09-10 15:47 1219次阅读

    基于USB的多虚拟设备通信

    接口性能使MCU不仅能够处理典型的设备/主机通信,还可以通过USB虚拟化多个设备或数据通道。这一特点有效满足了各种应用的多样化需求。 USB 虚拟多复合设备:
    发表于 09-05 06:51

    USB为什么不适用于工业通信

    USB(通用串行总线)虽然广泛应用于消费电子领域,但在工业通信场景中存在显著局限性,主要源于其设计目标、技术特性与工业环境需求的不匹配。以下是具体分析: 一、USB的核心设计目标与工业需求的冲突
    的头像 发表于 07-25 10:00 1417次阅读

    STM32H747的USB无法连接到电脑,电脑提示“未知USB设备,(设备描述符请求失败)”,怎么解决?

    USB部分电路抄的 arduino GIGA RI WiFi。通过BOOT0拉高强制进入DFU 和 正常上电链接都不行,电脑显示一致。“未知USB设备,(设备描述符请求失败)”
    发表于 07-11 08:24

    STM32H747 的USB口,烧录程序就损坏,提示“NO DFU capable USB device available”怎么解决?

    板子抄的 arduino GIGA RI。通过SWD烧录正常,控制点灯正常。 通过USB连接电脑,正常。如图一。arduino IED能正常
    发表于 07-10 08:28

    CYUSB3014与PC通信几小时后断开,通过bus hound抓不到任何通信数据,为什么?

    PC是WIN7系统,PC端APP通过USB3与下位机通信几个小时以后,通信就会断开,通过bus hound抓不到任何
    发表于 06-04 08:27

    带有USB C的便携式设备可以通过USB C转USB A电缆连接到计算机的USB A吗?

    通过 PC 进行数据传输。 但是我们现在正在解决USB A到PC的向后兼容问题,这样即使没有USB C连接器,用户也可以将我们的设备连接到PC并使用该程序。 有一条
    发表于 05-27 06:29

    请问PMG1设备可以通过USB CC引脚或D+ D-线进行编程吗?

    在生产线上对 PMG1 设备(特别是 CYPM1011-24LQXI)进行编程时,是否可以通过 USB 连接器进行编程? 或者是否需要通过
    发表于 05-19 08:19

    通过USB对I2C进行编程,CONTROL IN传输失败的原因?怎么解决?

    我正在尝试通过 USB 对 I2C 进行编程。 该板包含 CX3 并连接了我们的相机。 但由于某种原因,CONTROL IN 传输失败,错误代码:997。 此外,只有 Cypress USB
    发表于 05-13 07:54

    请问k230可否和树莓派通过USB-typeC线来通信

    能否让一根线接树莓派的USB接口同时接到k230的tpyeC接口,同时供电和通信,将k230视觉获取的信息传给树莓派。这个能实现吗有没有什么学习的例程?求各位大佬教教 你好,可以让树莓派做usb主机,230做从机,
    发表于 04-28 08:25