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

    文章

    8377

    浏览量

    281919
  • python
    +关注

    关注

    57

    文章

    4860

    浏览量

    89647
  • Arduino
    +关注

    关注

    190

    文章

    6516

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    基于USB的多虚拟设备通信

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

    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

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

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

    通过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

    有没有大神使用cubeMX生成初始代码开发实现通过USB(HID)进行OTA升级功能的?

    求助,有没有大神使用cubeMX生成初始代码开发实现通过USB(HID)进行OTA升级功能的
    发表于 04-22 13:35

    通过Arduino Nano Matter开发板构建智能卷帘系统

    在本指南中,您将学习如何通过Arduino NanoMatter开发板和板上的Silicon Labs(芯科科技)MGM240S多协议无线模块来构建一个智能卷帘系统。该系统可通过 Amazon
    的头像 发表于 02-28 09:46 943次阅读
    <b class='flag-5'>通过</b><b class='flag-5'>Arduino</b> Nano Matter开发板构建智能卷帘系统

    有没有什么方案能实现直接用matlab或python调用D4100_usb.dll?

    .dll这个动态链接库编写程序控制DMD,我分别尝试用C++,matlab,Java和python使用D4100_usb.dll进行编程,但只有用C++的时候可以正常使用,原因很可能是D4100_
    发表于 02-27 06:59

    如何将python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 1234次阅读
    如何将<b class='flag-5'>python</b>文件导入到ROS系统中

    Python Connector for InterBase连接解决方案

    该连接器可以让您将多个更新语句提交到 InterBase 数据库服务器,以便作为批处理进行处理,从而缩短执行时间。 安全通信 该连接器支持 InterBase 的 Over-the-Wire (OTW) 加密功能,可在传
    的头像 发表于 01-22 14:34 730次阅读

    EE-213:Blackfin处理器通过异步存储器接口进行主机通信

    电子发烧友网站提供《EE-213:Blackfin处理器通过异步存储器接口进行主机通信.pdf》资料免费下载
    发表于 01-05 10:09 0次下载
    EE-213:Blackfin处理器<b class='flag-5'>通过</b>异步存储器接口<b class='flag-5'>进行</b>主机<b class='flag-5'>通信</b>

    利用FPGA实现USB 2.0通信接口

    USB 2.0接口的实现方式 利用FPGA来实现USB 2.0接口的方式一般有两种,一是借助外围的USB接口芯片,二是FPGA内部实现USB协议控制器,外部
    的头像 发表于 12-30 13:59 3832次阅读
    利用FPGA实现<b class='flag-5'>USB</b> 2.0<b class='flag-5'>通信</b>接口

    如何使用Arduino实现CAN总线通信

    CAN(Controller Area Network)总线是一种常用于汽车和工业控制系统的串行通信协议,以其高可靠性和实时性而闻名。Arduino,作为一种流行的开源微控制器平台,可以通过附加
    的头像 发表于 12-23 09:06 2851次阅读