Arduino串口不夠用怎么辦?
Arduino UNO R3到底有幾個串口呢?
如果觀察板子引腳發(fā)現(xiàn),只有一對串口,但是我們燒錄程序時使用的也是通過串口傳輸?shù)?,這么說來Arduino應(yīng)該是有兩個串口的,為了搞明白這個問題,我特意去Arduino官網(wǎng)查了一下關(guān)于Arduino的原理圖。
原理圖如下所示,通過原理圖我們知道,單片機只有一對串口,但是最后分兩路出去,一路連在了板子上的排針上;
另外一路通過兩個發(fā)光二極管連在了一個叫做atmega的芯片上,程序通過這個芯片給單片機燒錄程序。
原理圖如下所示,通過原理圖我們知道,單片機只有一對串口,但是最后分兩路出去,一路連在了板子上的排針上;
另外一路通過兩個發(fā)光二極管連在了一個叫做atmega的芯片上,程序通過這個芯片給單片機燒錄程序。
軟串口
但是我們要使用兩個串口怎么辦呢?不用擔心,Arduino早已為我們謀劃好了一切,我們把上面Arduino板上標注的串口叫做硬串口。
除了硬串口之外,Arduino還為我們設(shè)計了一種軟串口,也可以叫做虛擬串口,他是通過程序定義的一組串口,然后映射到Arduino的IO口,這樣我們就可以額外的多出一組串口。
下面我們用軟串口做一組小實驗,經(jīng)過串口1向Arduino發(fā)送數(shù)據(jù),Arduino接收到數(shù)據(jù)之后,再把數(shù)據(jù)轉(zhuǎn)送到串口2,并讓其在電腦上打印出來。
程序
上述小實驗的程序如下圖,我們發(fā)現(xiàn)這個程序與我們平時所見到的程序所不同的是,第一行多了一句:#include
SoftwareSerial mySerial(8, 9);的意思是把8引腳定義為RX口,TX定義為TX口。
再下面的程序的作用是設(shè)定波特率,然后把串口1的數(shù)據(jù)發(fā)給串口2,或者把串口2的數(shù)據(jù)發(fā)給串口1
#include
SoftwareSerial mySerial(8, 9); // RX, TX
void setup()
{
Serial.begin(115200);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
實驗現(xiàn)象
我們通過電腦的USB串口向Arduino發(fā)送“123”,然后再讓Arduino把收到的數(shù)據(jù)原封不動的發(fā)往我們的虛擬串口,并打印在屏幕上。
USB串口發(fā)送字符串“123”。
虛擬串口接收到了字符串“123”
Final
有人會說,一個串口就夠用了,何必如此麻煩,然而實際的情況并非如此,比如說我們要用8266WiFi模塊,如果把唯一一個寶貴的串口資源給了8266。
那程序不出問題還好,一旦有錯,如果不再虛擬出來一對串口,我們都不知道哪里出了問題,所以軟串口是我們開發(fā)者必須要掌握的。
芯板坊為您提供最全面國內(nèi)外開發(fā)板資訊、評測、試用信息,包括現(xiàn)今的熱門開發(fā)板,如樹莓派,Arduino,STM32,OrangePi,Nanop pi,開源硬件等,感興趣的電子發(fā)燒友們,可以來免費申請開發(fā)板。