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

电子说

1.3w人已加入

描述

原理图

python

的 电路 的

获取PySerial

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

pip install PySerial

python

我们的项目中包含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端口将是您的微控制器。

python

python

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

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!

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分