你好,我是愛吃魚香ROS的小魚。上一節(jié)我們完成了第一個Hello World工程,學習使用了串口模塊的初始化和發(fā)送,本節(jié)我們再來一個串口接收小實驗,把串口收發(fā)數(shù)據(jù)補齊。
本教程所使用硬件平臺為MicroROS學習板V1.0.0,可點擊閱讀原文購買及查看詳情
一、檢測并接收單個字符
1.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當有數(shù)據(jù)過來的時候讀取并將數(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())
{
// 讀取一個數(shù)據(jù)
int c = Serial.read();
// -1 代表接收失敗
if (c != -1)
{
// 以%c字符的格式輸出接收的數(shù)據(jù)
Serial.printf("I receve %c\\n", c);
}
}
}
這里多用了一個函數(shù)Serial.available()
,該函數(shù)代表當前串口中緩存有效數(shù)據(jù)的長度。
1.2 使用串口監(jiān)視器發(fā)送消息
使用快捷鍵,編譯 Ctrl+Alt+B
、上傳 Ctrl+Alt+U
,接著準備發(fā)送數(shù)據(jù)
因為要發(fā)送消息,這里我們換一個收發(fā)分離的串口監(jiān)視器來進行數(shù)據(jù)發(fā)送
使用Ctrl+Alt+~
打開終端,接著在終端中你可以看到串口監(jiān)視器一欄
接著打開我們板子對應的串口設備
?選擇串口編號
?設置波特率
?點擊開始監(jiān)視
發(fā)送測試
?輸入數(shù)據(jù)
?點擊發(fā)送
?查看返回
嘗試發(fā)送12
可以看到收到了兩條返回,這是因為我們每次只接收一個數(shù)據(jù),所以即使發(fā)送12
,接收數(shù)據(jù)也是一個一個接收和打印的。
那有沒有辦法一次性接收多個數(shù)據(jù)呢?我們換個函數(shù)即可。
二、一次性接收一串數(shù)據(jù)
2.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當有數(shù)據(jù)過來的時候讀取并將數(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())
{
// 讀取一個String字符串數(shù)據(jù)
String str = Serial.readString();
// 以%s的格式輸出接收的數(shù)據(jù)
Serial.printf("I receve %s\\n", str.c_str());
}
}
2.2 編譯下載
點擊按鈕或者使用快捷鍵編譯下載代碼。
如果你在下載代碼時遇到下面的錯誤,是因為剛剛的串口監(jiā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
點擊停止監(jiān)視后,繼續(xù)下載即可
2.3 測試
下載完成后,重新打開串口,接著發(fā)送一串消息
三、總結
本節(jié)我們通過兩個串口接收數(shù)據(jù)小實驗,學習了串口數(shù)據(jù)的接收和發(fā)送。 下一節(jié)我們開始學習如何完成點燈。
-
串口通信
+關注
關注
34文章
1639瀏覽量
56793 -
代碼
+關注
關注
30文章
4900瀏覽量
70669 -
學習板
+關注
關注
0文章
47瀏覽量
12372 -
ROS
+關注
關注
1文章
288瀏覽量
17732
發(fā)布評論請先 登錄
stm32L152RCDISCOVER進行串口通信實驗接收亂碼怎么解決?
串口通信實驗分享
上位機串口通信數(shù)據(jù)接收事件程序

串口通信與串行通信的區(qū)別和寄存器及通信實驗等詳細資料說明

評論