蓝牙是嵌入式系统中用于短距离无线通信的最简单和最流行的协议。蓝牙不仅用于将数据从一台设备传输到另一台设备,还用于无线控制设备。现在几乎每个电子产品都支持蓝牙,因此在嵌入式应用程序中使用蓝牙控制选项是明智的选择。
在本教程中,我们将学习如何在 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 的串行传入数据(使用笔记本电脑的蓝牙)。
然后这个来自 MATLAB 的蓝牙传输数据可用于控制连接到 Arduino 的任何东西。在这里,我们将一个 LED 连接到 Arduino,可以使用 MATLAB 从笔记本电脑进行控制。
首先,在 Arduino UNO 中上传给定的 Arduino 代码,然后在 MATLAB 命令行窗口中开始编码。
#include
int TxD;
诠释 RxD;
整数数据;
软件串行蓝牙(TxD,RxD);
无效设置(){
序列.开始(9600);
蓝牙.开始(9600);
}
无效循环()
{
如果(蓝牙.available()> 0)
{
数据=蓝牙.read();
串行打印(数据);
序列号.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 发送“0”来关闭 LED。现在,如果您想打开 LED,只需使用以下命令发送“1”而不是“0”。
fprintf (bt,‘1’);
instrhwinfo (‘类型’,‘设备名称’);
要打开蓝牙端口,请使用以下命令
fopen (BT);
查看下面的视频,了解 使用蓝牙将数据从 MATLAB 发送到 Arduino的完整过程。
使用 MATLAB GUI 进行蓝牙通信
为了使用 MATLAB GUI 演示蓝牙通信,我们将在 MATLAB 中创建三个图形按钮来打开、关闭和闪烁连接到 Arduino 的 LED。单击这些图形按钮后,数据将通过蓝牙从 MATLAB 发送到 HC-05。Arduino 包含从 MATLAB 向 HC-05 接收蓝牙传输数据并根据接收到的数据控制 LED 的代码。Arduino 代码将与之前的代码保持一致,唯一不同的是,之前我们通过 MATLAB 的命令窗口发送数据“1”和“0”,现在单击三个图形按钮将发送相同的数据。
要启动 GUI,请在命令窗口中键入以下命令
指导
将打开一个弹出窗口,然后选择新的空白 GUI,如下图所示,
现在选择三个按钮来打开、关闭和闪烁 LED,如下图所示,
要调整按钮的大小或更改按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击按钮,您可以更改该特定按钮的颜色、字符串和标签。我们定制了三个按钮,如下图所示。
您可以根据自己的选择自定义按钮。现在,当您保存它时,将在MATLAB的编辑器窗口中生成一个代码。根据您希望 Arduino 在使用 MATLAB GUI 接收蓝牙数据时执行的任务编辑此代码。所以下面我们编辑了 MATLAB 代码。您可以在MATLAB 入门教程中了解有关命令窗口、编辑器窗口等的更多信息。
本项目末尾给出了完整的 MATLAB 代码,用于通过蓝牙从 MATLAB 控制 LED。此外,我们在此处包含 GUI 文件 (.fig) 和代码文件 (.m) 以供下载,您可以使用它们根据需要自定义按钮。下面是我们为控制与 Arduino 连接的 LED 所做的一些调整。
将以下代码复制并粘贴到第 1 行。74 设置或将 MATLAB 连接到笔记本电脑的蓝牙。
全部清除;
全球BT;
instrhwinfo(‘蓝牙’,‘HC-05’);
bt = 蓝牙(‘HC-05’, 1);
fopen(BT);
其中,fopen(bt)用于打开蓝牙端口以传输数据。
现在,当您向下滚动时,您将看到在 GUI 中为三个按钮创建了三个函数。现在根据您要在单击时执行的任务在函数中编写代码。
在LED ON按钮的功能中,在功能结束前复制并粘贴以下代码以打开 LED。在下面的代码中,fprintf(bt,‘1’)用于使用笔记本电脑的蓝牙将 ‘1’ 从 MATLAB 发送到 HC-05。Arduino 将通过 HC-05 接收此数据“1”并通过将其第 11个引脚设为高电平来点亮 LED。
全球BT;
fprintf (bt,‘1’);
在LED OFF按钮的功能中,在功能结束前复制并粘贴以下代码以关闭 LED。在下面的代码中,fprintf(bt,‘0’)用于使用笔记本电脑的蓝牙将 ‘0’ 从 MATLAB 发送到 HC-05。Arduino 将通过 HC-05 接收“0”并通过将其第 11个引脚设为低电平来关闭 LED 。
全球BT;
fprintf (bt,‘0’);
在BLINK按钮的功能中,使用以下代码使 LED 闪烁。一个for循环用于使 LED 闪烁 10 次。
全球BT;
对于 i = 1:10
fprintf(bt,‘1’);
暂停(0.5);
fprintf(bt,‘0’);
暂停(0.5);
结尾
完成 MATLAB GUI 编码并根据电路图设置硬件后,只需单击运行按钮即可运行 .m 文件中编辑的代码。
MATLAB 可能需要几秒钟的时间来响应,不要点击任何 GUI 按钮,直到 MATLAB 显示 BUSY 指示,您可以在屏幕的左下角看到如下所示,
一切准备就绪后,单击 LED-ON、LED OFF 和 BLINK 按钮分别打开、关闭和闪烁 LED。
Arduino代码:
#include
诠释TXD;
诠释 RxD;
整数数据;
软件串行蓝牙(TxD,RxD);
无效设置(){
序列号.开始(9600);
蓝牙.开始(9600);
}
无效循环()
{
如果(蓝牙.available()> 0)
{
数据=蓝牙.read();
如果(数据 == '1')
数字写入(11,高);
否则如果(数据 == '0')
数字写入(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{:});
结尾
函数 bluetooth_with_MATLAB_OpeningFcn(hObject, eventdata, 句柄, varargin)
函数 varargout = bluetooth_with_MATLAB_OutputFcn(hObject, eventdata, 句柄)
可变参数{1} = 句柄.输出;
全部清除;
全球BT;
instrhwinfo('蓝牙','HC-05');
bt = 蓝牙('HC-05', 1);
fopen(BT);
函数 led_on_Callback(hObject, eventdata, 句柄)
全球BT;
fprintf(bt,'1');
函数 led_off_Callback(hObject, eventdata, 句柄)
全球BT;
fprintf(bt,'0');
函数blink_Callback(hObject,事件数据,句柄)
全球BT;
对于 i = 1:10
fprintf(bt,'1');
暂停(0.5);
fprintf(bt,'0');
暂停(0.5);
结尾
评论
查看更多