电子说
原理图
的 电路 的
获取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!
全部0条评论
快来发表一下你的评论吧 !