如何在MATLAB中使用蓝牙进行无线通信

通信网络

647人已加入

描述

蓝牙是嵌入式系统中用于短距离无线通信的最简单和最流行的协议。蓝牙不仅用于将数据从一台设备传输到另一台设备,还用于无线控制设备。现在几乎每个电子产品都支持蓝牙,因此在嵌入式应用程序中使用蓝牙控制选项是明智的选择。

在本教程中,我们将学习如何在 MATLAB 中使用蓝牙进行无线通信。我们将使用计算机的内置蓝牙,一侧带有 MATLAB,另一侧带有 Arduino 的 HC-05。通过蓝牙在 MATLAB 和 Arduino 之间建立通信有两种方法,一种是使用命令窗口,另一种是使用 MATLAB GUI。这两种方法的 Arduino 代码将保持不变。

所需组件

MATLAB 安装笔记本电脑(首选:R2016a 或以上版本)

Arduino UNO

蓝牙模块 (HC-05)

LED(任何颜色)

电阻器(330 欧姆)

跳线

电路原理图

MATLAB 和 Arduino 之间的蓝牙通信 原理图 如下:

matlab

使用 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);

matlab

在下面的代码中,命令fprintf(bt,‘0’)用于通过向 Arduino 发送“0”来关闭 LED。现在,如果您想打开 LED,只需使用以下命令发送“1”而不是“0”。

fprintf (bt,‘1’);

matlab

要检查有关可用硬件的信息,请使用以下命令

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,如下图所示,

matlab

现在选择三个按钮来打开、关闭和闪烁 LED,如下图所示,

matlab

要调整按钮的大小或更改按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击按钮,您可以更改该特定按钮的颜色、字符串和标签。我们定制了三个按钮,如下图所示。

matlabmatlab

您可以根据自己的选择自定义按钮。现在,当您保存它时,将在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);

matlab

其中,fopen(bt)用于打开蓝牙端口以传输数据。

现在,当您向下滚动时,您将看到在 GUI 中为三个按钮创建了三个函数。现在根据您要在单击时执行的任务在函数中编写代码。

在LED ON按钮的功能中,在功能结束前复制并粘贴以下代码以打开 LED。在下面的代码中,fprintf(bt,‘1’)用于使用笔记本电脑的蓝牙将 ‘1’ 从 MATLAB 发送到 HC-05。Arduino 将通过 HC-05 接收此数据“1”并通过将其第 11个引脚设为高电平来点亮 LED。

全球BT;

fprintf (bt,‘1’);

matlab

在LED OFF按钮的功能中,在功能结束前复制并粘贴以下代码以关闭 LED。在下面的代码中,fprintf(bt,‘0’)用于使用笔记本电脑的蓝牙将 ‘0’ 从 MATLAB 发送到 HC-05。Arduino 将通过 HC-05 接收“0”并通过将其第 11个引脚设为低电平来关闭 LED 。

全球BT;

fprintf (bt,‘0’);

matlab

在BLINK按钮的功能中,使用以下代码使 LED 闪烁。一个for循环用于使 LED 闪烁 10 次。

全球BT;

对于 i = 1:10

fprintf(bt,‘1’);

暂停(0.5);

fprintf(bt,‘0’);

暂停(0.5);

结尾

matlab

完成 MATLAB GUI 编码并根据电路图设置硬件后,只需单击运行按钮即可运行 .m 文件中编辑的代码。

matlab

MATLAB 可能需要几秒钟的时间来响应,不要点击任何 GUI 按钮,直到 MATLAB 显示 BUSY 指示,您可以在屏幕的左下角看到如下所示,

matlab

一切准备就绪后,单击 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);


结尾



 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分