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

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

3天内不再提示

如何将Python与串行端口配合使用

454398 来源:工程师吴畏 2019-07-31 08:56 次阅读

原理图

如何将Python与串行端口配合使用

的 电路 的

获取PySerial

Python的许多优秀功能之一是在使用PIP工具时安装库是多么容易。在您的计算机上,打开终端或命令提示符并键入“PIP”。如果您收到无法识别的错误,那么您的PIP无法正确安装。安装Python时,请确保选中“添加到环境变量”选项。 PIP工作后,运行下面显示的命令安装PySerial:

pip install PySerial

我们的项目中包含PySerial,是时候打开Python IDLE并创建我们的串口项目了!

PySerial

使用PySerial时,需要配置一些参数(在与在微控制器上设置UART外设类似的方式),包括。..。..

波特率 - COM端口的运行速度。 Arduino项目倾向于在115200运行

端口 - 正在使用的端口名称(在设备管理器中查找)

奇偶校验位 - 这些用于错误纠正但通常不使用

停止位 - 除非存在时序问题,否则只使用一个停止位

超时 - 用于防止串行挂起的端口

除了定义上面显示的参数外,还需要导入串口模块。下面的代码摘录显示了如何导入串行模块并配置UART端口以使用115200波特的COM3,没有奇偶校验,一个停止位和两秒的超时。

import serial

serialPort = serial.Serial(port = “COM4”, baudrate=115200,

bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE)

这很容易使用设备管理器时,找到USB到串行设备所在的COM端口。打开开始菜单,然后键入“设备管理器”。加载设备管理器时,查找名为“ports”的部分并展开它。默认情况下,大多数Windows计算机都有一个用于内部通信的COM1端口,因此请勿使用该COM端口。假设您只连接了一个COM设备,则第二个COM端口将是您的微控制器。

使用串口非常简单,只需要一些功能,包括。..。..

open() - 这将打开串口

close() - 这将关闭串口

readline () - 这将从串口读取一个字符串

read(size) - 这将从串口读取n个字节

write(data) - 这将把传递给函数的数据写入串口

in_waiting - 这个变量保存缓冲区中的字节数

在我们的简单程序中,我们首先打开串口先前已定义。必须调用open()函数,因为它允许我们的程序“声明”端口并阻止任何其他进程访问它。如果尚未打开端口,也无法访问该端口。

下一段代码是一个无限循环,它做了一些事情。..。..

检查缓冲区中是否有任何数据等待

/li》

当数据到达时,将数据传输到变量“serialString”

打印“serialString”的值

写一个字符串回到发送数据的设备,通知它我们收到了字符串

serialString = “” # Used to hold data coming over UART

while(1):

# Wait until there is data waiting in the serial buffer

if(serialPort.in_waiting 》 0):

# Read data out of the buffer until a carraige return / new line is found

serialString = serialPort.readline()

# Print the contents of the serial data

print(serialString.decode(‘Ascii’))

# Tell the device connected over the serial port that we recevied the data!

# The b at the beginning is used to indicate bytes!

serialPort.write(b“Thank you for sending data ”)

我们的微控制器电路/代码

为了测试我们的Python串口程序,我们将使用一个非常小的PIC芯片,PIC16F1825 ,将使用XC8编码。该芯片具有UART端口,这意味着我们可以将其直接连接到USB转串口转换器(例如FTDI 232R)。幸运的是,这里使用的FTDI模块从USB端口提供电源,因此我们不需要任何电源电路(更容易构建)。

PIC的代码由三个主要区域组成:

配置位 - 这些配置核心寄存器,如PLL和振荡器

主要代码 - 主要执行代码(在main()中找到)

功能 - 包括将字符串写入UART并配置UART

配置位不会被深入介绍,但它们确保PIC不使用PLL,而是使用内部振荡器模块作为其时钟源。

// CONFIG1

#pragma config FOSC = INTOSC pin)

#pragma config WDTE = OFF

#pragma config PWRTE = OFF

#pragma config MCLRE = ON

#pragma config CP = OFF

#pragma config CPD = OFF

#pragma config BOREN = OFF

#pragma config CLKOUTEN = OFF

#pragma config IESO =

#pragma config FCMEN = ON

// CONFIG2

#pragma config WRT = OFF

#pragma config PLLEN = OFF

#pragma config STVREN = ON

#pragma config BORV = LO

#pragma config LVP = ON

主要功能PIC可以做三件事:将器件配置为使用8MHz的时钟频率(对于UART模块),配置UART外设;然后通过UART端口发送/接收字符串。读取和写入字符串的实际函数已在函数中定义,这使得在主代码中更容易使用UART端口,但我们不会介绍此代码的说明。

void main(void)

{

// Configure pins as digital

ANSELA = 0;

ANSELC = 0;

OSCCONbits.IRCF = 0b1110;

configUART();

while(1)

{

sendStringUART(“Hello, this is the PIC16F1825”);

readStringUART(stringBuffer);

}

}

这些函数提供了有用的功能,下面是函数原型:

void configUART(void);

void sendByteUART(char data);

void sendStringUART(const char *string);

void readStringUART(char *buffer);

结果

如果一切都按计划进行,当Python程序运行并且PIC设备打开时,我们应该会看到类似于下面显示的窗口的内容。如果是这样,那么我们的PIC程序和Python程序就能完美地相互通信。虽然这个例子非常简单,但它表明Python可以很容易地集成到微控制器项目中,包括PIC,AVR,STM,Arduino甚至Raspberry Pi!

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

    关注

    55

    文章

    4777

    浏览量

    84418
  • 串行端口
    +关注

    关注

    0

    文章

    31

    浏览量

    11643
收藏 人收藏

    评论

    相关推荐

    如何将LVDS/OLDI桥接到HDMI/DVI

    电子发烧友网站提供《如何将LVDS/OLDI桥接到HDMI/DVI.pdf》资料免费下载
    发表于 09-27 09:35 1次下载
    <b class='flag-5'>如何将</b>LVDS/OLDI桥接到HDMI/DVI

    如何将BQ35100配置为EOS模式

    电子发烧友网站提供《如何将BQ35100配置为EOS模式.pdf》资料免费下载
    发表于 09-11 10:03 0次下载
    <b class='flag-5'>如何将</b>BQ35100配置为EOS模式

    TUSB2036通用串行总线的2或3端口集线器数据表

    电子发烧友网站提供《TUSB2036通用串行总线的2或3端口集线器数据表.pdf》资料免费下载
    发表于 07-09 10:43 0次下载
    TUSB2036通用<b class='flag-5'>串行</b>总线的2或3<b class='flag-5'>端口</b>集线器数据表

    TUSB2077A 7端口通用串行总线集线器数据表

    电子发烧友网站提供《TUSB2077A 7端口通用串行总线集线器数据表.pdf》资料免费下载
    发表于 07-08 09:48 0次下载
    TUSB2077A 7<b class='flag-5'>端口</b>通用<b class='flag-5'>串行</b>总线集线器数据表

    TUSB2046x 4端口集线器,用于带可选串行EEPROM接口的通用串行总线数据表

    电子发烧友网站提供《TUSB2046x 4端口集线器,用于带可选串行EEPROM接口的通用串行总线数据表.pdf》资料免费下载
    发表于 06-25 09:36 0次下载
    TUSB2046x 4<b class='flag-5'>端口</b>集线器,用于带可选<b class='flag-5'>串行</b>EEPROM接口的通用<b class='flag-5'>串行</b>总线数据表

    如何将Littlefs安装到通过qspi连接到电路板的外部串行闪存上?

    一款 PSoC6 套件,并将 mtb-littlefs 子程序添加到我的项目和 XMC7100 套件中。 能行吗? 如何将 Littlefs 安装到通过 qspi 连接到电路板的外部串行闪存上? 我
    发表于 05-27 06:03

    在嵌入式设计中扩展串行端口的入门知识

    大多数嵌入式系统都至少提供两个串口。然而,有些系统需要更多。因此,这需要以某种方式扩展串行端口的数量。设计人员可用的一些选择包括 USB 到串行端口、I2C 到
    发表于 05-03 09:30 217次阅读
    在嵌入式设计中扩展<b class='flag-5'>串行</b><b class='flag-5'>端口</b>的入门知识

    CYBT-243053-EVAL上未检测到串行端口的原因?

    任何调用串行端口的应用程序, CAN 设备管理器中看到串行端口。 我在使用Silicon Labs USB串行
    发表于 03-01 06:39

    ELF 1技术贴|如何将Python3.6.9移植到开发板上

    在ELF1开发板的Linux4.1.15eMMC镜像中,默认预装了Python2.7。为了适应更多应用场景,有些小伙伴可能需要移植其他版本的Python,下面将以Python3.6.9为例详细介绍
    的头像 发表于 02-22 14:06 399次阅读
    ELF 1技术贴|<b class='flag-5'>如何将</b><b class='flag-5'>Python</b>3.6.9移植到开发板上

    如何将LED连接到Arduino板并使其闪烁

     在本快速入门指南中,您将学习如何将 LED 连接到 Arduino 板并使其闪烁。
    的头像 发表于 02-11 10:53 2026次阅读
    <b class='flag-5'>如何将</b>LED连接到Arduino板并使其闪烁

    如何将光敏电阻连接到Arduino板并读取电压

    在本快速入门指南中,您将学习如何将光敏电阻连接到Arduino板并读取电压。您将首先使用串行监视器来了解光传感器的行为方式,然后构建一个电路,在天黑时自动打开灯。
    的头像 发表于 02-11 10:45 3497次阅读
    <b class='flag-5'>如何将</b>光敏电阻连接到Arduino板并读取电压

    什么是串行端口?有哪几种分类?

    什么是串行端口?有哪几种分类? 串行端口是计算机中用于进行数据传输的一种接口类型,通过单一的数据线逐位地传输数据。与串行
    的头像 发表于 02-02 15:40 1914次阅读

    求助,是否可以使用PIC监控串行端口

    是否可以使用 PIC 监控串行端口
    发表于 01-22 06:28

    ADXL345如何将端口INT1重置为原始低电平?

    我用ADXL345在INT1端口上配置了双击中断,但是双击后触发了。INT1端口的值一直保持在高电平,没有回到低电平。我想知道如何将端口 INT1 重置为原始低电平。
    发表于 12-27 07:44

    python如何将多行合并成一行

    Python中,有多种方法可以多行合并成一行。以下是详细解释和示例: 方法一:使用字符串的replace()方法 你可以使用字符串的replace()方法来删除换行符并将多行合并为一行。首先,你
    的头像 发表于 11-24 09:42 4475次阅读