蓝牙是嵌入式系统中用于短距离无线通信的最简单和最流行的协议。蓝牙不仅用于将数据从一台设备传输到另一台设备,还用于无线控制设备。现在几乎每个电子产品都支持蓝牙,因此在嵌入式应用程序中使用蓝牙控制选项是明智的选择。
在本教程中,我们将学习如何在 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);
结尾
电子证照与传统证照相比有哪些优势
室内供配电的要求_室内供配电的配电方式
5G推进会带来怎样的行业变革,我们应该憧憬些什么
关于TC234开发板心得介绍
小米6最新消息:雷军果然又耍猴,小米6陶瓷版又秒罄,引发米粉吐槽,只能期待全款预定了
如何在MATLAB中使用蓝牙进行无线通信
光纤激光器中热电冷却器温度控制器工作原理
一加5高配置曝光令人期待:三星小米尴尬了
科大讯飞首发智能拍照输入 AI技术加码多场景输入效率
特斯拉已经安装了足够的基础设置,以储存总计1GWh的能源
教你一招让你的旧iPhone焕然一新
四种让你脑洞大开的手机摄像头技术
高通:芯片产业链环节较长,当前受疫情影响较小
线缆屏蔽材料的种类及应用
基于AI和机器人技术的InMotionTM技术
一加7Pro和华为mate20Pro高颜值高配置也高应该怎么选?
美国宣布从10月18日开始对从欧盟进口的飞机征收10%的惩罚性关税
波士顿动力Spot四足机器人助力医生在远程对患者进行监测和检查
LM系列激光测量传感器的特点以及主要性能参数解析
PostgreSQL 14中两阶段提交的逻辑解码正文