你好,我是愛吃魚香ROS的小魚。上一節我們完成了第一個Hello World工程,學習使用了串口模塊的初始化和發送,本節我們再來一個串口接收小實驗,把串口收發數據補齊。
本教程所使用硬件平臺為MicroROS學習板V1.0.0,可點擊閱讀原文購買及查看詳情
一、檢測并接收單個字符
1.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當有數據過來的時候讀取并將數據打印出來
* @version 0.1
* @date 2022-12-18
*
* @copyright Copyright (c) 2022
*
*/
#include < Arduino.h >
void setup()
{
// 初始化串口
Serial.begin(115200);
}
void loop()
{
// 判斷是否有有效數據,返回值是有效數據的長度
if (Serial.available())
{
// 讀取一個數據
int c = Serial.read();
// -1 代表接收失敗
if (c != -1)
{
// 以%c字符的格式輸出接收的數據
Serial.printf("I receve %c\\n", c);
}
}
}
這里多用了一個函數Serial.available()
,該函數代表當前串口中緩存有效數據的長度。
1.2 使用串口監視器發送消息
使用快捷鍵,編譯 Ctrl+Alt+B
、上傳 Ctrl+Alt+U
,接著準備發送數據
因為要發送消息,這里我們換一個收發分離的串口監視器來進行數據發送
使用Ctrl+Alt+~
打開終端,接著在終端中你可以看到串口監視器一欄
接著打開我們板子對應的串口設備
?選擇串口編號
?設置波特率
?點擊開始監視
發送測試
?輸入數據
?點擊發送
?查看返回
嘗試發送12
可以看到收到了兩條返回,這是因為我們每次只接收一個數據,所以即使發送12
,接收數據也是一個一個接收和打印的。
那有沒有辦法一次性接收多個數據呢?我們換個函數即可。
二、一次性接收一串數據
2.1 代碼編寫
/**
* @file demo01_read_byte.cpp
* @author fishros@foxmail.com
* @brief 初始化串口,當有數據過來的時候讀取并將數據打印出來
* @version 0.1
* @date 2022-12-18
*
* @copyright Copyright (c) 2022
*
*/
#include < Arduino.h >
void setup()
{
// 初始化串口
Serial.begin(115200);
}
void loop()
{
// 判斷是否有有效數據
if (Serial.available())
{
// 讀取一個String字符串數據
String str = Serial.readString();
// 以%s的格式輸出接收的數據
Serial.printf("I receve %s\\n", str.c_str());
}
}
2.2 編譯下載
點擊按鈕或者使用快捷鍵編譯下載代碼。
如果你在下載代碼時遇到下面的錯誤,是因為剛剛的串口監視器沒有關閉,
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
點擊停止監視后,繼續下載即可
2.3 測試
下載完成后,重新打開串口,接著發送一串消息
三、總結
本節我們通過兩個串口接收數據小實驗,學習了串口數據的接收和發送。 下一節我們開始學習如何完成點燈。
-
串口通信
+關注
關注
34文章
1627瀏覽量
55732 -
代碼
+關注
關注
30文章
4828瀏覽量
69055 -
學習板
+關注
關注
0文章
45瀏覽量
12196 -
ROS
+關注
關注
1文章
280瀏覽量
17100
發布評論請先 登錄
相關推薦
串口通信實驗分享
上位機串口通信數據接收事件程序
![上位機<b class='flag-5'>串口</b><b class='flag-5'>通信</b>數據<b class='flag-5'>接收</b>事件程序](https://file.elecfans.com/web1/M00/EB/4A/o4YBAGB9Ng2AMlz1AACjLJ-AXtc679.jpg)
評論