Arduino Uno,电子爱好者和学生中最受欢迎的微控制器,使用 Arduino 很容易开始使用嵌入式系统 但是 Arduino 的一个缺点是它需要使用 USB 电缆连接到计算机才能上传代码,因为它已经完成了对无线通信有任何板载支持。有时,如果您的项目固定在某个地方,则很难将板与 PC 连接起来。解决这个问题的唯一方法是对 Arduino 进行无线编程。在 ESP8266 和 ESP32 中可以轻松完成无线编程或 OTA(无线)编程,因为它们内置了 Wi-Fi 支持。但在 Arduino 中,我们必须使用蓝牙模块对其进行无线编程。所以在这里我们将学习如何通过蓝牙对 Arduino 进行编程。
所需组件
Arduino UNO
HC05蓝牙模块
跳线
1K、2.2K 电阻器
电容 (0.1uF)
电源适配器
面包板
HC05蓝牙模块
HC-05模块是蓝牙串口协议模块,专为微控制器之间的无线通信而设计。HC-05蓝牙模块提供主从模式配置之间的切换模式,并通过9600波特率的串行通信进行通信,便于与控制器接口。HC05 模块在 3.3 V 上工作,但我们可以将其连接到 5V 电源电压,因为该模块带有板载 5v 至 3.3 V 稳压器。
蓝牙是最简单的无线通信方式,我们用它构建了许多有趣的项目,如 蓝牙控制机器人、 蓝牙语音控制、 蓝牙家庭自动化等。您可以在此处查看所有基于蓝牙的项目。
通过蓝牙对 Arduino 进行编程
要对 Arduino 进行无线编程,首先,我们必须对 Arduino 进行编程以响应 AT 命令。为此,将 Arduino 连接到笔记本电脑的串口并上传以下代码:
#includeSoftwareSerial HC05(2,3); 无效设置() { 序列号.开始(9600); Serial.println("输入AT指令:"); HC05.开始(38400); } 无效循环() { 如果 (HC05.available()) Serial.write(HC05.read()); if (Serial.available()) HC05.write(Serial.read()); }
代码的前两行用于包含SoftwareSerial库并定义连接蓝牙的发送器和接收器引脚。SoftwareSerial库用于允许与 Arduino 的硬件 Tx 和 Rx 引脚以外的数字引脚进行串行通信。多个软件串行端口可用于使用SoftwareSerial库进行串行通信。
#includeSoftwareSerial HC05(2,3);
现在在setup 函数中,定义硬件和软件串行端口的波特率。硬件和软件串行端口的波特率分别为 9600 和 38400。
无效设置() { 序列号.开始(9600); Serial.println("输入AT指令:"); HC05.开始(38400); }
循环函数内部使用了两个if条件。第一个条件检查是否向 HC05 发出任何命令,如果是,则将其写入 Arduino 串行监视器。第二个条件检查是否有任何命令发送给 Arduino 串行监视器,如果是,则将其发送给 HC05。
无效循环() { 如果 (HC05.available()) Serial.write(HC05.read()); if (Serial.available()) HC05.write(Serial.read()); }
接下来,在 HC05 上连接 Arduino,使其进入 AT 命令模式。相同的电路图如下:
在将 Arduino 连接到计算机之前,先按下按键,然后将 Arduino 连接到计算机。按住按键直到蓝牙模块 LED 开始以 2 秒的间隔闪烁。蓝牙模块 LED 在命令模式下的闪烁速度比正常模式下慢。
现在打开一个串行监视器并输入以下命令,作为回报,每次命令成功运行时,板都会以“ OK ”响应。
AT+ORGL
AT+ROLE=0
AT+POLAR=1,0
AT+UART=115200, 0, 0
AT+INIT
成功测试 AT 命令后,只需移除所有连接并按照下面的示意图连接即可。
使用适配器或 9V 电池为 Arduino 供电。之后,转到笔记本电脑中的“设备”,打开蓝牙,然后将蓝牙模块连接到笔记本电脑。
设备配对成功后,接下来的任务就是找到HC05蓝牙模块的COM口。为此,请转到“设备管理器”,然后检查 COM 端口选项。它将显示两个 COM 端口,一个用于传入,另一个用于传出。在上传程序时,我们需要选择第二个 COM 端口号。
现在打开 Arduino IDE 并选择闪烁程序,选择正确的 com 端口,然后点击上传按钮。如果一切顺利,Arduino 板载 LED 将以 1 秒的间隔开始闪烁。
#include
SoftwareSerial HC05(2,3);
无效设置()
{
序列号.开始(9600);
Serial.println("输入AT指令:");
HC05.开始(38400);
}
无效循环()
{
如果 (HC05.available())
Serial.write(HC05.read());
if (Serial.available())
HC05.write(Serial.read());
}
-
蓝牙
+关注
关注
114文章
5742浏览量
169466 -
编程
+关注
关注
88文章
3556浏览量
93520 -
Arduino
+关注
关注
187文章
6455浏览量
186444
发布评论请先 登录
相关推荐
评论