风筝
发表于: 2019-6-13 10:25:34 | 显示全部楼层

蓝牙是最受欢迎且易于使用的无线技术之一。几年来,蓝牙标准进行了许多升级,以跟上当前正在发生的技术改变与未来技术的步伐,并满足用户的需求。从蓝牙1.0版本到蓝牙5.0版本,有很多变化,包括更高的数据速率,能够用于物联网的低电流消耗,提高安全性等。要学习蓝牙通信,可以使用许多模块,这些模块可以与微控制器连接。其中一种蓝牙模块是HM10,它基于蓝牙4.0。


什么是HM10 BLE 4.0模块?

HM10是一个串行BLE模块(蓝牙低功耗),旨在用于低功耗应用,即使使用硬币大小的电池也可以持续很长时间。 HM10是基于Texas Instruments CC2540或CC2541 BLE系统SoC(片上系统)的蓝牙4.0模块。该模块的固件和设计由济南华茂科技制作和管理。该模块带有串行/ UART层,使器件能够与不同的微控制器接口。 HM10非常适合创建简单连接并与iBeacon一起使用或作为iBeacon使用。

HM10 BLE-4-Module.jpg


HM10已经成为非常流行的蓝牙4.0 BLE模块。 HM10仅是一个基于蓝牙4.0的模块,因此不会连接蓝牙2 / 2.1模块,如HC-05、HC-06和其他蓝牙模块。 HM10通过串行UART连接发送的AT命令控制。


HM10与其他蓝牙模块的区别

HM10的主要区别是蓝牙版本。 HM10是蓝牙4.0模块,因此它具有所有蓝牙4.0版功能,如速度、吞吐量和范围。 HM10提供高达24 Mbps的数据速率和低能耗/低功耗。除此之外,HM10在开放空间中提供100米的距离。与其他蓝牙模块(如基于蓝牙2.0的模块HC-05)相比,HM10的性能确实优于HC-05。与HM10相比,HC-05只能提供3 Mbps的速度。


蓝牙模块HC-05和HC-06仍然在创客和业余爱好者中非常受欢迎,因为它们便宜且易于连接。我们还使用HC-05/06制作了许多项目,并将它们与许多其他微控制器连接:

●    使用HC-05蓝牙模块控制Arduino开发板

●    Arduino开发板使用HC05蓝牙模块入门


今天我们将HM-10 BLE模块连接到Arduino Uno开发板,以使用蓝牙协议无线控制LED。开/关命令将由智能手机发送。


需要的组件

●     Arduino UNO开发板

●     HM10蓝牙模块

●     电阻(1kΩ、470Ω)

●     跳线

●     Arduino IDE

●     Arduino蓝牙控制器(HM-10模块)Android应用程序

●     Android智能手机


电路原理图

Arduino开发板与HM-10蓝牙模块连接的电路图非常简单,如下所示。

Circuit-Diagram-for-HM-10-BLE-Module-with-Arduino-to-Control-an-LED-using-Androi.png

Circuit-Hardware-for-HM-10-BLE-Module-with-Arduino-to-Control-an-LED-using-Android-App.jpg


在开始项目之前,请确保您的HM-10模块是真正的HM-10模块。市场上有很多HM-10模块的克隆版本。要确定原装和克隆HM-10模块之间的区别,只需在HM-10板上查看32KHz的晶振。如果有晶振,那么它是一个原装的HM-10模块,您无需更改固件。相反,如果您没有看到晶振,那么它就是克隆HM10模块,您需要更改克隆HM-10模块的固件。在不更改HM-10固件的情况下,既不能使用AT命令访问HM-10模块,也不能将其与智能手机配对。在这里我们也使用克隆模块,因此我们在将其与Ardruino连接之前刷新了它的固件。


Arduino蓝牙控制器(HM-10模块)Android应用程序

Arduino蓝牙控制器(HM-10模块)是一款Android应用程序,可在Google Play商店免费下载。这个应用程序具有易于使用的HM-10 BLE模块接口。在测试时,它能够快速找到HM-10并立即与HM-10连接。该应用程序有一些很酷的功能,如您可以创建一个按钮并使用自定义名称和功能进行自定义。在这里,我们将介绍如何在该蓝牙控制器应用程序中创建两个按钮,以打开和关闭与Arduino连接的LED。


以下是如何设置Arduino蓝牙控制器(HM-10模块)Android应用程序的步骤:

◾    从Google Play商店下载该应用

Arduino-Bluetooth-Controller-HM-10-Module- Android-App.png

◾    该应用程序的主页如下所示,您可以在其中找到许多功能,如连接设备、搜索图标、删除图标、设备状态、发送文本、添加模板等。首先通过单击搜索图标或单击搜索设备右上角有三个点,然后选择连接设备。

Arduino-Bluetooth-Controller-HM-10-Module- Android-App-Homepage.png


◾    所有可用的设备都将显示在这个界面上。选择正确的HM-10模块。

Connecting-HM10-to-Mobile-Phone.png

◾    现在HM-10将成功连接,您将能够在界面顶部看到HM-10的状态。

Connected-HM10-to-Mobile-Phone.png

◾    现在,您可以在文本部分写入要发送的内容,然后点击箭头发送,直接发送文本或字符串,也可以创建自定义模板。

Sending-Data-from-Mobile-Phone-to-HM10.png

◾    创建自定义模板可以节省时间。单击右上角的“+”图标并填写详细信息。 “Name”是按钮名称,“Text”字段用于发送到HM-10的文本或字符串,“Description”只是按钮说明按钮的功能。

Adding-Template-to-Bluetooth-Andriod-app.png

◾    首先,创建一个用于打开LED的按钮并将其设置为绿色。按钮将向HM-10发送“N”字母,这将点亮连接到Arduino的LED。同样为LED关闭创建一个按钮,并为其指定红色。 按钮将向HM-10发送“F”字母,这将熄灭连接到Arduino的LED。

Adding-Button-to-Bluetooth-Andriod-app.png


◾    现在,您可以看到在文本字段正下方创建的两个按钮。现在,如果你想控制LED,那么只需点击按钮。

Turning-ON-and-OFF-LED-using-HM10-Bluetooth-Module.png

这样就完成了设置android app来控制HM-10模块。现在我们开始编程Arduino Uno开发板,从Android应用程序获取字符。


编程Arduino UNO使用HM-10蓝牙模块控制LED

在本文的末尾处给出了完整代码。为这个项目编程Arduino UNO既不需要太多努力也不需要任何库。您可以使用硬件串行和软件串行库。如果您使用的是软件串口,则只需包含软件串行库,否则请继续使用硬件串口。在本文中,我们使用的是SoftwareSerial。首先包含软件串口库。引脚Rx和Tx连接在Arduino的2和3引脚上。

  1. #include <SoftwareSerial.h>
  2. SoftwareSerial HM10(2, 3); // RX = 2, TX = 3
复制代码

定义两个变量用于存储从HM10和Android app收到的数据。

  1. char appData;  
  2. String inData = "";
复制代码

以9600波特率启动硬件和软件串口并打印一些调试语句。 LED引脚设置为输出,初始状态设置为OFF。

  1. Serial.begin(9600);
  2.   Serial.println("HM10 serial started at 9600");
  3.   HM10.begin(9600); // set HM10 serial at 9600 baud rate
  4.   pinMode(13, OUTPUT); // onboard LED
  5.   digitalWrite(13, LOW); // switch OFF LED
复制代码

开始侦听HM10端口并读取字符串,直到HM10可用并发送数据。将数据保存在字符串中。

  1.   HM10.listen();  // listen the HM10 port
  2.   while (HM10.available() > 0) {   // if HM10 sends something then read
  3.     appData = HM10.read();
  4.     inData = String(appData);  // save the data in string format
  5.     Serial.write(appData);
  6.   }
复制代码

要使用AT命令调试HM10,只需编写下面的代码行,该代码行将字符串发送到HM10。

  1. if (Serial.available()) {           // Read user input if available.
  2.     delay(10);
  3.     HM10.write(Serial.read());
  4.   }
复制代码

如果接收到的字符串为“F”,则在串口监视器上打印消息,然后熄灭LED灯;如果接收到的字符串为“N”,然后在串行监视器上打印消息,并以500ms的间隔闪烁LED。

  1. if ( inData == "F") {
  2.     Serial.println("LED OFF");
  3.     digitalWrite(13, LOW); // switch OFF LED
  4.     delay(500);
  5.   }
  6.   if ( inData == "N") {
  7.     Serial.println("LED ON");
  8.     digitalWrite(13, HIGH); // switch OFF LED
  9.     delay(500);
  10.     digitalWrite(13, LOW); // switch OFF LED
  11.     delay(500);
  12.   }
复制代码

HM-10-BLE-Module-with-Arduino-to-Control-an-LED-using-Android-App.jpg

这完成了关于如何使用Arduino和BLE HM10 Blutooth 4.0模块控制LED的完整内容。再次记住,如果你有一个原装的HM10模块,那么你不需要重刷固件,可以立即使用。但如果您使用克隆的HM-10模块,则在克隆HM10 BLE模块上刷新固件。如果您有任何疑问或建议,请在本帖下面进行回复。


代码

以下是本文使用的完整代码: main.rar (543 Bytes, 下载次数: 73)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 16:33 , Processed in 0.051092 second(s), 10 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表