你好,我是愛吃魚香ROS的小魚。上一節(jié)我們完成了第一個(gè)Hello World工程,學(xué)習(xí)使用了串口模塊的初始化和發(fā)送,本節(jié)我們?cè)賮硪粋€(gè)串口接收小實(shí)驗(yàn),把串口收發(fā)數(shù)據(jù)補(bǔ)齊。
本教程所使用硬件平臺(tái)為MicroROS學(xué)習(xí)板V1.0.0,可點(diǎn)擊閱讀原文購買及查看詳情
一、檢測(cè)并接收單個(gè)字符
1.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當(dāng)有數(shù)據(jù)過來的時(shí)候讀取并將數(shù)據(jù)打印出來
* @version 0.1
* @date 2022-12-18
*
* @copyright Copyright (c) 2022
*
*/
#include < Arduino.h >
void setup()
{
// 初始化串口
Serial.begin(115200);
}
void loop()
{
// 判斷是否有有效數(shù)據(jù),返回值是有效數(shù)據(jù)的長度
if (Serial.available())
{
// 讀取一個(gè)數(shù)據(jù)
int c = Serial.read();
// -1 代表接收失敗
if (c != -1)
{
// 以%c字符的格式輸出接收的數(shù)據(jù)
Serial.printf("I receve %c\\n", c);
}
}
}
這里多用了一個(gè)函數(shù)Serial.available()
,該函數(shù)代表當(dāng)前串口中緩存有效數(shù)據(jù)的長度。
1.2 使用串口監(jiān)視器發(fā)送消息
使用快捷鍵,編譯 Ctrl+Alt+B
、上傳 Ctrl+Alt+U
,接著準(zhǔn)備發(fā)送數(shù)據(jù)
因?yàn)橐l(fā)送消息,這里我們換一個(gè)收發(fā)分離的串口監(jiān)視器來進(jìn)行數(shù)據(jù)發(fā)送
使用Ctrl+Alt+~
打開終端,接著在終端中你可以看到串口監(jiān)視器一欄
接著打開我們板子對(duì)應(yīng)的串口設(shè)備
?選擇串口編號(hào)
?設(shè)置波特率
?點(diǎn)擊開始監(jiān)視
發(fā)送測(cè)試
?輸入數(shù)據(jù)
?點(diǎn)擊發(fā)送
?查看返回
嘗試發(fā)送12
可以看到收到了兩條返回,這是因?yàn)槲覀兠看沃唤邮找粋€(gè)數(shù)據(jù),所以即使發(fā)送12
,接收數(shù)據(jù)也是一個(gè)一個(gè)接收和打印的。
那有沒有辦法一次性接收多個(gè)數(shù)據(jù)呢?我們換個(gè)函數(shù)即可。
二、一次性接收一串?dāng)?shù)據(jù)
2.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當(dāng)有數(shù)據(jù)過來的時(shí)候讀取并將數(shù)據(jù)打印出來
* @version 0.1
* @date 2022-12-18
*
* @copyright Copyright (c) 2022
*
*/
#include < Arduino.h >
void setup()
{
// 初始化串口
Serial.begin(115200);
}
void loop()
{
// 判斷是否有有效數(shù)據(jù)
if (Serial.available())
{
// 讀取一個(gè)String字符串?dāng)?shù)據(jù)
String str = Serial.readString();
// 以%s的格式輸出接收的數(shù)據(jù)
Serial.printf("I receve %s\\n", str.c_str());
}
}
2.2 編譯下載
點(diǎn)擊按鈕或者使用快捷鍵編譯下載代碼。
如果你在下載代碼時(shí)遇到下面的錯(cuò)誤,是因?yàn)閯倓偟拇诒O(jiān)視器沒有關(guān)閉,
Auto-detected: /dev/ttyUSB0
Uploading .pio/build/featheresp32/firmware.bin
esptool.py v4.2.1
Serial port /dev/ttyUSB0
Connecting...........
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
*** [upload] Error 1
點(diǎn)擊停止監(jiān)視后,繼續(xù)下載即可
2.3 測(cè)試
下載完成后,重新打開串口,接著發(fā)送一串消息
三、總結(jié)
本節(jié)我們通過兩個(gè)串口接收數(shù)據(jù)小實(shí)驗(yàn),學(xué)習(xí)了串口數(shù)據(jù)的接收和發(fā)送。 下一節(jié)我們開始學(xué)習(xí)如何完成點(diǎn)燈。
-
串口通信
+關(guān)注
關(guān)注
34文章
1627瀏覽量
55649 -
代碼
+關(guān)注
關(guān)注
30文章
4820瀏覽量
68882 -
學(xué)習(xí)板
+關(guān)注
關(guān)注
0文章
45瀏覽量
12176 -
ROS
+關(guān)注
關(guān)注
1文章
279瀏覽量
17048
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論