原理圖
的 電路 的
獲取PySerial
Python的許多優(yōu)秀功能之一是在使用PIP工具時(shí)安裝庫(kù)是多么容易。在您的計(jì)算機(jī)上,打開(kāi)終端或命令提示符并鍵入“PIP”。如果您收到無(wú)法識(shí)別的錯(cuò)誤,那么您的PIP無(wú)法正確安裝。安裝Python時(shí),請(qǐng)確保選中“添加到環(huán)境變量”選項(xiàng)。 PIP工作后,運(yùn)行下面顯示的命令安裝PySerial:
pip install PySerial
我們的項(xiàng)目中包含PySerial,是時(shí)候打開(kāi)Python IDLE并創(chuàng)建我們的串口項(xiàng)目了!
PySerial
使用PySerial時(shí),需要配置一些參數(shù)(在與在微控制器上設(shè)置UART外設(shè)類似的方式),包括。..。..
波特率 - COM端口的運(yùn)行速度。 Arduino項(xiàng)目?jī)A向于在115200運(yùn)行
端口 - 正在使用的端口名稱(在設(shè)備管理器中查找)
奇偶校驗(yàn)位 - 這些用于錯(cuò)誤糾正但通常不使用
停止位 - 除非存在時(shí)序問(wèn)題,否則只使用一個(gè)停止位
超時(shí) - 用于防止串行掛起的端口
除了定義上面顯示的參數(shù)外,還需要導(dǎo)入串口模塊。下面的代碼摘錄顯示了如何導(dǎo)入串行模塊并配置UART端口以使用115200波特的COM3,沒(méi)有奇偶校驗(yàn),一個(gè)停止位和兩秒的超時(shí)。
import serial
serialPort = serial.Serial(port = “COM4”, baudrate=115200,
bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE)
這很容易使用設(shè)備管理器時(shí),找到USB到串行設(shè)備所在的COM端口。打開(kāi)開(kāi)始菜單,然后鍵入“設(shè)備管理器”。加載設(shè)備管理器時(shí),查找名為“ports”的部分并展開(kāi)它。默認(rèn)情況下,大多數(shù)Windows計(jì)算機(jī)都有一個(gè)用于內(nèi)部通信的COM1端口,因此請(qǐng)勿使用該COM端口。假設(shè)您只連接了一個(gè)COM設(shè)備,則第二個(gè)COM端口將是您的微控制器。
使用串口非常簡(jiǎn)單,只需要一些功能,包括。..。..
open() - 這將打開(kāi)串口
close() - 這將關(guān)閉串口
readline () - 這將從串口讀取一個(gè)字符串
read(size) - 這將從串口讀取n個(gè)字節(jié)
write(data) - 這將把傳遞給函數(shù)的數(shù)據(jù)寫入串口
in_waiting - 這個(gè)變量保存緩沖區(qū)中的字節(jié)數(shù)
在我們的簡(jiǎn)單程序中,我們首先打開(kāi)串口先前已定義。必須調(diào)用open()函數(shù),因?yàn)樗试S我們的程序“聲明”端口并阻止任何其他進(jìn)程訪問(wèn)它。如果尚未打開(kāi)端口,也無(wú)法訪問(wèn)該端口。
下一段代碼是一個(gè)無(wú)限循環(huán),它做了一些事情。..。..
檢查緩沖區(qū)中是否有任何數(shù)據(jù)等待
/li》
當(dāng)數(shù)據(jù)到達(dá)時(shí),將數(shù)據(jù)傳輸?shù)阶兞俊皊erialString”
打印“serialString”的值
寫一個(gè)字符串回到發(fā)送數(shù)據(jù)的設(shè)備,通知它我們收到了字符串
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 ”)
我們的微控制器電路/代碼
為了測(cè)試我們的Python串口程序,我們將使用一個(gè)非常小的PIC芯片,PIC16F1825 ,將使用XC8編碼。該芯片具有UART端口,這意味著我們可以將其直接連接到USB轉(zhuǎn)串口轉(zhuǎn)換器(例如FTDI 232R)。幸運(yùn)的是,這里使用的FTDI模塊從USB端口提供電源,因此我們不需要任何電源電路(更容易構(gòu)建)。
PIC的代碼由三個(gè)主要區(qū)域組成:
主要代碼 - 主要執(zhí)行代碼(在main()中找到)
功能 - 包括將字符串寫入U(xiǎn)ART并配置UART
配置位不會(huì)被深入介紹,但它們確保PIC不使用PLL,而是使用內(nèi)部振蕩器模塊作為其時(shí)鐘源。
// 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的時(shí)鐘頻率(對(duì)于UART模塊),配置UART外設(shè);然后通過(guò)UART端口發(fā)送/接收字符串。讀取和寫入字符串的實(shí)際函數(shù)已在函數(shù)中定義,這使得在主代碼中更容易使用UART端口,但我們不會(huì)介紹此代碼的說(shuō)明。
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);
}
}
這些函數(shù)提供了有用的功能,下面是函數(shù)原型:
void configUART(void);
void sendByteUART(char data);
void sendStringUART(const char *string);
void readStringUART(char *buffer);
結(jié)果
如果一切都按計(jì)劃進(jìn)行,當(dāng)Python程序運(yùn)行并且PIC設(shè)備打開(kāi)時(shí),我們應(yīng)該會(huì)看到類似于下面顯示的窗口的內(nèi)容。如果是這樣,那么我們的PIC程序和Python程序就能完美地相互通信。雖然這個(gè)例子非常簡(jiǎn)單,但它表明Python可以很容易地集成到微控制器項(xiàng)目中,包括PIC,AVR,STM,Arduino甚至Raspberry Pi!
-
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
84959 -
串行端口
+關(guān)注
關(guān)注
0文章
34瀏覽量
11698
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論