藍牙是嵌入式系統(tǒng)中用于短距離無線通信的最簡單和最流行的協(xié)議。藍牙不僅用于將數(shù)據(jù)從一臺設備傳輸?shù)搅硪慌_設備,還用于無線控制設備?,F(xiàn)在幾乎每個電子產(chǎn)品都支持藍牙,因此在嵌入式應用程序中使用藍牙控制選項是明智的選擇。
在本教程中,我們將學習如何在 MATLAB 中使用藍牙進行無線通信。我們將使用計算機的內置藍牙,一側帶有 MATLAB,另一側帶有 Arduino 的 HC-05。通過藍牙在 MATLAB 和 Arduino 之間建立通信有兩種方法,一種是使用命令窗口,另一種是使用 MATLAB GUI。這兩種方法的 Arduino 代碼將保持不變。
所需組件
MATLAB 安裝筆記本電腦(首選:R2016a 或以上版本)
Arduino UNO
藍牙模塊 (HC-05)
LED(任何顏色)
電阻器(330 歐姆)
跳線
電路原理圖
MATLAB 和 Arduino 之間的藍牙通信 原理圖 如下:
使用 MATLAB 命令行窗口進行藍牙通信
這是在 Arduino 和 MATLAB 之間設置藍牙通信的簡單方法。在這里,MATLAB 使用筆記本電腦的藍牙連接 HC-05 與 Arduino 連接。首先,我們必須對 Arduino 進行編碼以讀取來自 MATLAB 的串行傳入數(shù)據(jù)(使用筆記本電腦的藍牙)。
然后這個來自 MATLAB 的藍牙傳輸數(shù)據(jù)可用于控制連接到 Arduino 的任何東西。在這里,我們將一個 LED 連接到 Arduino,可以使用 MATLAB 從筆記本電腦進行控制。
首先,在 Arduino UNO 中上傳給定的 Arduino 代碼,然后在 MATLAB 命令行窗口中開始編碼。
#include
int TxD;
詮釋 RxD;
整數(shù)數(shù)據(jù);
軟件串行藍牙(TxD,RxD);
無效設置(){
序列.開始(9600);
藍牙.開始(9600);
}
無效循環(huán)()
{
如果(藍牙.available()> 0)
{
數(shù)據(jù)=藍牙.read();
串行打?。〝?shù)據(jù));
序列號.print("\n");
if(data == '1')
{
digitalWrite(11, HIGH);
}
否則 if(data == '0')
{
digitalWrite(11, LOW);
}
}
}
然后,將下面的 MATLAB 代碼復制并粘貼到命令窗口中,以便在 MATLAB 和 Arduino 之間進行藍牙通信。
instrhwinfo('藍牙','HC-05');
bt = 藍牙('HC-05', 1);
fopen(BT);
在下面的代碼中,命令fprintf(bt,‘0’)用于通過向 Arduino 發(fā)送“0”來關閉 LED?,F(xiàn)在,如果您想打開 LED,只需使用以下命令發(fā)送“1”而不是“0”。
fprintf (bt,‘1’);
instrhwinfo (‘類型’,‘設備名稱’);
要打開藍牙端口,請使用以下命令
fopen (BT);
查看下面的視頻,了解 使用藍牙將數(shù)據(jù)從 MATLAB 發(fā)送到 Arduino的完整過程。
使用 MATLAB GUI 進行藍牙通信
為了使用 MATLAB GUI 演示藍牙通信,我們將在 MATLAB 中創(chuàng)建三個圖形按鈕來打開、關閉和閃爍連接到 Arduino 的 LED。單擊這些圖形按鈕后,數(shù)據(jù)將通過藍牙從 MATLAB 發(fā)送到 HC-05。Arduino 包含從 MATLAB 向 HC-05 接收藍牙傳輸數(shù)據(jù)并根據(jù)接收到的數(shù)據(jù)控制 LED 的代碼。Arduino 代碼將與之前的代碼保持一致,唯一不同的是,之前我們通過 MATLAB 的命令窗口發(fā)送數(shù)據(jù)“1”和“0”,現(xiàn)在單擊三個圖形按鈕將發(fā)送相同的數(shù)據(jù)。
要啟動 GUI,請在命令窗口中鍵入以下命令
指導
將打開一個彈出窗口,然后選擇新的空白 GUI,如下圖所示,
現(xiàn)在選擇三個按鈕來打開、關閉和閃爍 LED,如下圖所示,
要調整按鈕的大小或更改按鈕的形狀,只需單擊它,您就可以拖動按鈕的角。通過雙擊按鈕,您可以更改該特定按鈕的顏色、字符串和標簽。我們定制了三個按鈕,如下圖所示。
您可以根據(jù)自己的選擇自定義按鈕?,F(xiàn)在,當您保存它時,將在MATLAB的編輯器窗口中生成一個代碼。根據(jù)您希望 Arduino 在使用 MATLAB GUI 接收藍牙數(shù)據(jù)時執(zhí)行的任務編輯此代碼。所以下面我們編輯了 MATLAB 代碼。您可以在MATLAB 入門教程中了解有關命令窗口、編輯器窗口等的更多信息。
本項目末尾給出了完整的 MATLAB 代碼,用于通過藍牙從 MATLAB 控制 LED。此外,我們在此處包含 GUI 文件 (.fig) 和代碼文件 (.m) 以供下載,您可以使用它們根據(jù)需要自定義按鈕。下面是我們?yōu)榭刂婆c Arduino 連接的 LED 所做的一些調整。
將以下代碼復制并粘貼到第 1 行。74 設置或將 MATLAB 連接到筆記本電腦的藍牙。
全部清除;
全球BT;
instrhwinfo(‘藍牙’,‘HC-05’);
bt = 藍牙(‘HC-05’, 1);
fopen(BT);
其中,fopen(bt)用于打開藍牙端口以傳輸數(shù)據(jù)。
現(xiàn)在,當您向下滾動時,您將看到在 GUI 中為三個按鈕創(chuàng)建了三個函數(shù)?,F(xiàn)在根據(jù)您要在單擊時執(zhí)行的任務在函數(shù)中編寫代碼。
在LED ON按鈕的功能中,在功能結束前復制并粘貼以下代碼以打開 LED。在下面的代碼中,fprintf(bt,‘1’)用于使用筆記本電腦的藍牙將 ‘1’ 從 MATLAB 發(fā)送到 HC-05。Arduino 將通過 HC-05 接收此數(shù)據(jù)“1”并通過將其第 11個引腳設為高電平來點亮 LED。
全球BT;
fprintf (bt,‘1’);
在LED OFF按鈕的功能中,在功能結束前復制并粘貼以下代碼以關閉 LED。在下面的代碼中,fprintf(bt,‘0’)用于使用筆記本電腦的藍牙將 ‘0’ 從 MATLAB 發(fā)送到 HC-05。Arduino 將通過 HC-05 接收“0”并通過將其第 11個引腳設為低電平來關閉 LED 。
全球BT;
fprintf (bt,‘0’);
在BLINK按鈕的功能中,使用以下代碼使 LED 閃爍。一個for循環(huán)用于使 LED 閃爍 10 次。
全球BT;
對于 i = 1:10
fprintf(bt,‘1’);
暫停(0.5);
fprintf(bt,‘0’);
暫停(0.5);
結尾
完成 MATLAB GUI 編碼并根據(jù)電路圖設置硬件后,只需單擊運行按鈕即可運行 .m 文件中編輯的代碼。
MATLAB 可能需要幾秒鐘的時間來響應,不要點擊任何 GUI 按鈕,直到 MATLAB 顯示 BUSY 指示,您可以在屏幕的左下角看到如下所示,
一切準備就緒后,單擊 LED-ON、LED OFF 和 BLINK 按鈕分別打開、關閉和閃爍 LED。
Arduino代碼:
#include
詮釋TXD;
詮釋 RxD;
整數(shù)數(shù)據(jù);
軟件串行藍牙(TxD,RxD);
無效設置(){
序列號.開始(9600);
藍牙.開始(9600);
}
無效循環(huán)()
{
如果(藍牙.available()> 0)
{
數(shù)據(jù)=藍牙.read();
如果(數(shù)據(jù) == '1')
數(shù)字寫入(11,高);
否則如果(數(shù)據(jù) == '0')
數(shù)字寫入(11,低);
}
}
使用 MATLAB 命令行窗口進行藍牙通信的代碼
instrhwinfo('藍牙','HC-05');
bt = 藍牙('HC-05', 1);
fopen(BT);
fprintf(bt,'1');
fprintf(bt,'0');
使用 MATLAB GUI 進行藍牙通信的代碼
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @bluetooth_with_MATLAB_OpeningFcn, ...
'gui_OutputFcn', @bluetooth_with_MATLAB_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
結尾
如果說
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
別的
gui_mainfcn(gui_State, varargin{:});
結尾
函數(shù) bluetooth_with_MATLAB_OpeningFcn(hObject, eventdata, 句柄, varargin)
函數(shù) varargout = bluetooth_with_MATLAB_OutputFcn(hObject, eventdata, 句柄)
可變參數(shù){1} = 句柄.輸出;
全部清除;
全球BT;
instrhwinfo('藍牙','HC-05');
bt = 藍牙('HC-05', 1);
fopen(BT);
函數(shù) led_on_Callback(hObject, eventdata, 句柄)
全球BT;
fprintf(bt,'1');
函數(shù) led_off_Callback(hObject, eventdata, 句柄)
全球BT;
fprintf(bt,'0');
函數(shù)blink_Callback(hObject,事件數(shù)據(jù),句柄)
全球BT;
對于 i = 1:10
fprintf(bt,'1');
暫停(0.5);
fprintf(bt,'0');
暫停(0.5);
結尾
?
評論