Hi?(?o?)?, 各位深海王國的同志們,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦
(o゜▽゜)o☆ 今天大都督繼續為大家帶來系列——小學生都能玩的單片機!帶你一周內快速走進嵌入式的大門,let’s go!
(9)實戰:使用軟串口與藍牙APP串口通訊
通過前面八節的學習,相信大家已經對Arduino是什么、怎么用很熟悉了。那么恭喜你離入門Arduino就差最后一步了。接下來最后兩節,我們將實際編寫程序與藍牙APP進行通信并總結一下學習Arduino時常踩的坑,大家再加把勁!
準備工作:
如果大家有興趣自己做一個藍牙APP,可以關注一下大都督的另一個系列
【深海王國】小學生都能做的APP?AppInventor、BLE藍牙、Arduino聯合開發你的第一個手機遠程控制程序(1)
趕時間的也可以直接在「深海大都督」里回復「藍牙APP」獲取安卓安裝包就可以啦。
安卓好藍牙APP以后,需要打開手機定位和藍牙,并且記得給權限。然后APP主頁面長這樣:
然后Arduino的接線如圖:
Arduino | BLE藍牙模塊 |
---|---|
2 (RX) | TX |
3 (TX) | RX |
3.3V | 3.3V |
GND | GND |
所用藍牙為BLE低功耗藍牙,相關材料購買鏈接在「深海大都督」里回復「BLE藍牙」(大都督個人購買,僅供參考,無廣)。
Arduino程序:
這些程序作為參考提供給大家,用到的函數都在上節里提到啦,詳見(8)軟串口與SoftwareSerial庫使用
1.將電腦端串口接受到的char字符指令發送給APP
#include <SoftwareSerial.h> //引用庫文件
SoftwareSerial Serial1(2, 3); // 定義軟串口RX為2, TX為3和軟串口對象Serial1void setup(){Serial.begin(9600); //Arduino與電腦通信的波特率Serial1.begin(9600); //Arduino與BLE藍牙通信的波特率
}void loop(){char data = ' ';if(Serial.available()){ //如果電腦串口接收到數據data = char(Serial.read()); //將電腦端接受到的數據轉化為char類型Serial1.print(data); //將電腦接收到的數據發送到藍牙APP上}
}
運行效果:
通過Arduino IDE的串口監視器發送字符’A’給APP,APP接受。
2.接受藍牙APP串口發送過來的char字符指令
#include <SoftwareSerial.h> //引用庫文件
SoftwareSerial Serial1(2, 3); // 定義軟串口RX為2, TX為3和軟串口對象Serial1void setup(){Serial.begin(9600); //Arduino與電腦通信的波特率Serial1.begin(9600); //Arduino與BLE藍牙通信的波特率
}void loop(){char data = ' ';if(Serial1.available()){ //如果藍牙串口接收到數據data = char(Serial1.read()); //將藍牙端接受到的數據轉化為char類型Serial.print(data); //將接收到的數據發送到電腦上}
}
運行效果:
通過APP發送字符’A’給Arduino,Arduino串口監視器上顯示。
3.將電腦端串口接受到的String字符串指令發送給APP
#include <SoftwareSerial.h> //引用庫文件
SoftwareSerial Serial1(2, 3); // 定義軟串口RX為2, TX為3和軟串口對象Serial1void setup(){Serial.begin(9600); //Arduino與電腦通信的波特率Serial1.begin(9600); //Arduino與BLE藍牙通信的波特率
}void loop(){String data_S = " ";if(Serial.available()){ //如果藍牙串口接收到數據data_S = char(Serial.read()); //將藍牙端接受到的數據轉化為char類型Serial1.print(data_S); //將接收到的數據發送到電腦上}
}
運行效果:
通過Arduino IDE的串口監視器發送字符串"ABCD"給APP,APP接受。
4.接受藍牙APP串口發送過來的String字符串指令
#include <SoftwareSerial.h> //引用庫文件
SoftwareSerial Serial1(2, 3); // 定義軟串口RX為2, TX為3和軟串口對象Serial1void setup(){Serial.begin(9600); //Arduino與電腦通信的波特率Serial1.begin(9600); //Arduino與BLE藍牙通信的波特率
}void loop(){String data_S = " ";while(Serial1.available()){ //如果藍牙串口接收到數據data_S += char(Serial1.read()); //將藍牙端接受到的數據轉化為char類型,并累加到data_S中Serial.print(data_S); //將接收到的數據發送到電腦上}
}
注:c語言中+=是代表兩個變量相加,并將答案記錄在左邊的變量里。比如x+=y實際代表的表達式為:x=x+y。
運行效果:
通過APP發送字符串"ABCD"給Arduino,Arduino串口監視器上顯示。
今天的學習到這里就差不多啦,下節就是本系列的最后一節,大都督會為大家分享一下學習Arduino時常踩的坑,看到這里的你辛苦啦,加油?(ˊ?ˋ)??。
哈哈,讓焦慮不再蔓延,信息不再高壁,如果你覺得這篇文章對你有幫助,就來個免費的點贊吧!
(???????)?我深海大都督正式授予你深海王國公民的身份~
(?ω< )★ 加入深海大家庭,快樂擺爛每一天!