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
    +关注

    关注

    59

    文章

    7412

    浏览量

    257881
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83443
  • Arduino
    +关注

    关注

    184

    文章

    6425

    浏览量

    184774
收藏 人收藏

    评论

    相关推荐

    MSP430USB CDC类通信应该怎样提速?

    MSP430USB CDC类通信应该怎样提速呢?在测试时,总是比手册上的速度低
    发表于 11-02 08:09

    如何在Python中使用Scapy进行抓包操作

    1. 前言 抓包通常使用软件如wireshark,Tcpdump等,对数据通信过程中的所有lP报文实施捕获并进行逐层拆包分析,一直是传统固网数通维护工作中罐常用的故障排查工具,都需要在界面操作。本篇
    的头像 发表于 11-01 14:47 2009次阅读

    如何使用Python和PinPong库控制Arduino

    与传感器和其他物理设备集成的应用程序。如果您已经掌握了Python的基础知识,那么您可以通过使用Python来控制Arduino来入门。本文目的主要是向您展示如何使用PinPong库
    的头像 发表于 10-13 10:59 437次阅读
    如何使用<b class='flag-5'>Python</b>和PinPong库控制<b class='flag-5'>Arduino</b>

    NUC240如何用散装转移类型进行USB通信

    执行一个USB 散装设备和一个用于与该设备进行通信的PC侧应用程序。 PC侧程序通过调用 散装API 执行对 USB 散装设备的读写控制。
    发表于 08-30 08:46

    如何用散装转移类型进行USB通信

    执行一个USB 散装设备和一个用于与该设备进行通信的PC侧应用程序。 PC侧程序通过调用 散装API 执行对 USB 散装设备的读写控制。
    发表于 08-22 07:11

    使用arduinopython改造的Chrome Dino游戏

    电子发烧友网站提供《使用arduinopython改造的Chrome Dino游戏.zip》资料免费下载
    发表于 07-05 14:43 0次下载
    使用<b class='flag-5'>arduino</b>和<b class='flag-5'>python</b>改造的Chrome Dino游戏

    通过USB对Raspberry Pi进行编程

    电子发烧友网站提供《通过USB对Raspberry Pi进行编程.zip》资料免费下载
    发表于 06-30 10:24 0次下载
    <b class='flag-5'>通过</b><b class='flag-5'>USB</b>对Raspberry Pi<b class='flag-5'>进行</b>编程

    移动通信通过什么进行传输 移动通信与固定通信的区别

    移动通信通过无线电波进行传输。具体而言,移动通信利用无线电频段在移动设备(如手机)和基站之间进行信息的传递。
    发表于 06-27 18:24 2737次阅读

    Python3与Arduino通信

    电子发烧友网站提供《Python3与Arduino通信.zip》资料免费下载
    发表于 06-26 14:39 0次下载
    <b class='flag-5'>Python</b>3与<b class='flag-5'>Arduino</b><b class='flag-5'>通信</b>

    使用Arduino MKR1000通过WiFi进行HID攻击

    电子发烧友网站提供《使用Arduino MKR1000通过WiFi进行HID攻击.zip》资料免费下载
    发表于 06-25 11:10 0次下载
    使用<b class='flag-5'>Arduino</b> MKR1000<b class='flag-5'>通过</b>WiFi<b class='flag-5'>进行</b>HID攻击

    使用Arduino实现低功耗蓝牙(BLE)加密狗通信USB CDC主机

    电子发烧友网站提供《使用Arduino实现低功耗蓝牙(BLE)加密狗通信USB CDC主机.zip》资料免费下载
    发表于 06-14 10:41 0次下载
    使用<b class='flag-5'>Arduino</b>实现低功耗蓝牙(BLE)加密狗<b class='flag-5'>通信</b>的<b class='flag-5'>USB</b> CDC主机

    是否可以通过使用AT固件进行通信的ESP-01进行通信

    ESP8266WiFiMesh 示例找到了适用于 Arduino IDE 的 ESP-12E 的板管理器。是否可以通过使用 AT 固件进行通信的 ESP-01
    发表于 06-06 06:51

    Arduino开发板使用NRF24L01进行无线通信

    如何使用NRF24L01收发器模块在两个Arduino开发板之间进行无线通信。为了说明无线通信,我们将举两个例子,第一个是 从一个Arduino
    发表于 05-30 10:22 2次下载
    <b class='flag-5'>Arduino</b>开发板使用NRF24L01<b class='flag-5'>进行</b>无线<b class='flag-5'>通信</b>

    如何让两个ESP8266通过WiFi(TCP套接字)进行通信

    我想让两个 ESP8266 通过 WiFi 进行通信。其中一个是接入点,另一个是客户端。我正在使用 Arduino IDE。我设法做到了,但我遇到了一个问题。客户端不断地与服务器断开连
    发表于 05-16 06:44

    arduino如何在python中执行特定的引脚和通道?

    设备:ESP8266 板,CD74HC4067 16 通道多路复用器 代码平台:micropython 在 RPi 上使用 Thonny 通过 USB 电缆传输。 项目目标:16 个单独的光敏电阻来
    发表于 05-11 08:39