HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述

 这个是上一年的项目,之前弄得不怎么完整,只有一个openmv的,所以openmv自己去我主页找,这篇主要讲蓝牙

这个是我在使用openmv连接单片机1然后单片机1单片机2通过蓝牙进行通信

最终实现的效果是:openmv识别到图形和数字然后远程传输到另外一个单片机·,另外一个单片机显示出来。

一定要注意HC05和HC06的区别

HC-06是一个四针无按键的模块,只能作为从机使用,上电后即可直接进入AT指令模式或连接模式,支持通过手机连接或串口通信,推荐设置波特率为9600。HC-05是一个六针带按键的模块,既可以作为主机也可以作为从机,通过长按按键上电可进入AT指令模式,直接上电则进入等待连接模式,其AT指令模式下的波特率为38400。两者在引脚数量、按键配置、功能模式以及默认波特率等方面存在明显差异,具体AT指令也有所不同。

对比表格

特性HC-06HC-05
引脚数量四针六针
按键无按键带按键
功能模式只能作为从机主从一体(可作为主机或从机)
上电模式直接上电进入AT指令或连接模式长按按键上电进入AT指令模式,直接上电为等待连接模式
默认波特率960038400(AT指令模式)
使用场景适合简单的从机应用,如与手机连接或串口通信适合需要主从切换的复杂应用,功能更灵活

一、项目背景与目标

OpenMV是一款开源的微型机器视觉模块,它能够方便地实现图像识别功能。而单片机则是嵌入式系统中常用的控制器。通过将OpenMV与单片机结合,并利用蓝牙模块实现通信,我们可以构建一个简单的图像识别与远程显示系统。这个项目不仅可以帮助我们更好地理解机器视觉和无线通信的基本原理,还可以应用于各种实际场景,例如远程监控、智能安防等。

二、硬件准备

  1. OpenMV模块:用于图像识别。

  2. 单片机1:用于接收OpenMV的识别结果,并通过蓝牙发送数据。

  3. 单片机2:用于接收蓝牙传输的数据并显示。

  4. HC-05蓝牙模块:用于单片机1与单片机2之间的通信。

  5. USB转TTL串口模块:用于调试和配置蓝牙模块。

  6. LCD显示屏(可选):用于在单片机2上显示识别结果。

  7. 连接线:用于连接各个模块。

三、硬件连接

3.1 OpenMV与单片机1的连接

OpenMV可以通过串口与单片机1通信。将OpenMV的串口引脚(如TXD和RXD)连接到单片机1的串口引脚上。具体连接方式如下表所示:

OpenMV单片机1
TXDRXD
RXDTXD
GNDGND
VCCVCC

3.2 单片机1与HC-05蓝牙模块的连接

将HC-05蓝牙模块与单片机1连接,用于数据传输。连接方式如下表所示:

单片机1HC-05
TXDRXD
RXDTXD
GNDGND
VCCVCC

3.3 单片机2与HC-05蓝牙模块的连接

同样,将另一个HC-05蓝牙模块与单片机2连接,用于接收数据。连接方式与单片机1类似:

单片机2HC-05
TXDRXD
RXDTXD
GNDGND
VCCVCC

如果使用LCD显示屏,还需要将LCD显示屏连接到单片机2的相应引脚上。

四、蓝牙模块配置

4.1 配置蓝牙模块为主机和从机

为了实现单片机1与单片机2之间的通信,需要将两个HC-05蓝牙模块分别配置为主机和从机。按照以下步骤进行配置:

  1. 进入AT指令模式

    • 按住HC-05的复位键(或将KEY引脚与高电平连接),然后将USB转TTL模块插入电脑。

    • 观察HC-05的指示灯慢闪(1秒亮一次),表示已进入AT指令模式。

    • 松开复位键(KEY引脚悬空),打开串口调试助手,选择端口,波特率设置为38400

  2. 配置主机

    • 在串口调试助手中输入以下AT指令,将一个HC-05配置为主机:

      AT+NAME=Master
      AT+ROLE=1
      AT+PSWD=12345
      AT+UART=9600,0,0
  3. 配置从机

    • 将另一个HC-05配置为从机:

      AT+NAME=Slave
      AT+ROLE=0
      AT+PSWD=12345
      AT+UART=9600,0,0

4.2 配对蓝牙模块

按照以下步骤进行蓝牙模块的配对:

  1. 查询蓝牙地址

    • 在主机端输入AT+ADDR?,记录返回的地址。

    • 在从机端输入AT+ADDR?,记录返回的地址。

  2. 绑定蓝牙模块

    • 在主机端输入AT+BIND=从机地址,例如AT+BIND=2020,09,274205

    • 在从机端输入AT+BIND=主机地址,例如AT+BIND=2019,02,08346

  3. 查询绑定状态

    • 在主机和从机端分别输入AT+BIND?,如果返回的地址与绑定的地址一致,则表示绑定成功。

五、软件编程

5.1 OpenMV图像识别编程

在OpenMV IDE中编写程序,实现图形和数字的识别。以下是一个简单的示例代码:

Python复制

import sensor
import image
import time# 初始化传感器
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)# 加载训练好的模型
net = image.load_net("trained_model.net")while(True):img = sensor.snapshot()for obj in net.classify(img, min_confidence=0.8):img.draw_string(0, 0, "Recognized: %s" % obj.output(), color=(255, 0, 0), scale=2)print("Recognized:", obj.output())

将识别结果通过串口发送到单片机1:

Python复制

import pybuart = pyb.UART(3, 9600)  # 初始化串口while(True):img = sensor.snapshot()for obj in net.classify(img, min_confidence=0.8):uart.write("Recognized: %s\n" % obj.output())  # 发送识别结果

5.2 单片机1与单片机2通信编程

在单片机1上编写程序,接收OpenMV的识别结果并通过蓝牙发送到单片机2。以下是一个示例代码(以51单片机为例):

c复制

#include <reg52.h>
#include <string.h>#define UART_BAUDRATE 9600void UART_Init() {TMOD |= 0x20;  // 设置定时器1为模式2TH1 = 256 - (11059200 / 12 / 32) / UART_BAUDRATE;  // 设置波特率TL1 = TH1;TR1 = 1;  // 启动定时器1SM0 = 0; SM1 = 1;  // 设置串口为模式1REN = 1;  // 允许接收ES = 1;   // 开启串口中断EA = 1;   // 开启全局中断
}void UART_SendString(char *str) {while (*str) {SBUF = *str++;while (!TI);  // 等待发送完成TI = 0;       // 清除发送标志}
}void main() {UART_Init();while (1) {// 假设从OpenMV接收到的数据存储在buffer中char buffer[50];UART_SendString(buffer);  // 发送数据到单片机2}
}

在单片机2上编写程序,接收蓝牙模块传输的数据并显示在LCD屏幕上:

c复制

#include <reg52.h>
#include <lcd.h>  // 假设已经包含了LCD驱动库#define UART_BAUDRATE 9600void UART_Init() {TMOD |= 0x20;  // 设置定时器1为模式2TH1 = 256 - (11059200 / 12 / 32) / UART_BAUDRATE;  // 设置波特率TL1 = TH1;TR1 = 1;  // 启动定时器1SM0 = 0; SM1 = 1;  // 设置串口为模式1REN = 1;  // 允许接收ES = 1;   // 开启串口中断EA = 1;   // 开启全局中断
}void UART_ReceiveString(char *str) {char ch;while ((ch = SBUF) != '\n') {*str++ = ch;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker系列一】Docker 简介

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vue 入门到实战 五

第5章 过渡与动画 目录 5.1 单元素/组件过渡 5.1.1 过渡class 5.1.2 CSS 过渡 5.1.3 CSS 动画 5.1.4 同时使用过渡和动画 5.1.5 JavaScript 钩子方法 5.2 多元素/组件过渡 5.2.1 多元素过渡 5.2.2 多组件过渡 5.3 列表过渡 5.3.1 列表的普通过渡 5.3.2 列表的平滑…

Apache SeaTunnel脚本升级及参数调优实战

最近作者针对实时数仓的Apache SeaTunnel同步链路&#xff0c;完成了双引擎架构升级与全链路参数深度调优&#xff0c;希望本文能够给大家有所启发&#xff0c;欢迎批评指正&#xff01; Apache SeaTunnel 版本 &#xff1a;2.3.9 Doris版本&#xff1a;2.0.6 MySQL JDBC Conne…

C++ 时间操作:获取有史以来的天数与文件计数器

C 时间操作&#xff1a;获取有史以来的天数与文件计数器 在C中&#xff0c;时间操作是一个非常重要的功能&#xff0c;尤其是在需要处理日期、时间戳或定时任务时。本文将介绍如何利用C的时间操作功能&#xff0c;实现以下两个目标&#xff1a; 获取从Unix纪元时间&#xff0…

Python Bug修复案例分析:Python 中常见的 IndentationError 错误 bug 的修复

在 Python 编程的世界里&#xff0c;代码的可读性和规范性至关重要。Python 通过强制使用缩进来表示代码块的层次结构&#xff0c;这一独特的设计理念使得代码更加清晰易读。然而&#xff0c;正是这种对缩进的严格要求&#xff0c;导致开发者在编写代码时&#xff0c;稍有不慎就…

【论文笔记】Transformer

Transformer 2017 年&#xff0c;谷歌团队提出 Transformer 结构&#xff0c;Transformer 首先应用在自然语言处理领域中的机器翻译任务上&#xff0c;Transformer 结构完全构建于注意力机制&#xff0c;完全丢弃递归和卷积的结构&#xff0c;这使得 Transformer 结构效率更高…

CI/CD(三) 安装nfs并指定k8s默认storageClass

一、NFS 服务端安装&#xff08;主节点 10.60.0.20&#xff09; 1. 安装 NFS 服务端 sudo apt update sudo apt install -y nfs-kernel-server 2. 创建共享目录并配置权限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允许匿名访问 sudo chmod 777 /dat…

【QA】单件模式在Qt中有哪些应用?

单例设计模式确保一个类仅有一个实例&#xff0c;并提供一个全局访问点来获取该实例。在 Qt 框架中&#xff0c;有不少类的设计采用了单例模式&#xff0c;以下为你详细介绍并给出相应代码示例。 1. QApplication QApplication 是 Qt GUI 应用程序的核心类&#xff0c;每个 Q…

存储过程触发器习题整理1

46、{blank}设有商品表(商品号&#xff0c;商品名&#xff0c;单价)和销售表(销售单据号&#xff0c;商品号&#xff0c;销售时间&#xff0c;销售数量&#xff0c;销售单价)。其中&#xff0c;商品号代表一类商品&#xff0c;商品号、单价、销售数量和销售单价均为整型。请编写…

基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践

第一章、ChatGPT、DeepSeek大语言模型提示词与地质灾害基础及平台介绍【基础实践篇】 1、什么是大模型&#xff1f; 大模型&#xff08;Large Language Model, LLM&#xff09;是一种基于深度学习技术的大规模自然语言处理模型。 代表性大模型&#xff1a;GPT-4、BERT、T5、Ch…

单表达式倒计时工具:datetime的极度优雅(智普清言)

一个简单表达式&#xff0c;也可以优雅自成工具。 笔记模板由python脚本于2025-03-22 20:25:49创建&#xff0c;本篇笔记适合任意喜欢学习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyth…

最优编码树的双子性

现在看一些书&#xff0c;不太愿意在书上面做一些标记&#xff0c;也没啥特殊的原因。。哈哈。 树的定义 无环连通图&#xff0c;极小连通图&#xff0c;极大无环图。 度 某个节点&#xff0c;描述它的度&#xff0c;一般默认是出度&#xff0c;分叉的边的条数。或者说孩子…

MiB和MB

本文来自腾讯元宝 MiB 和 ​MB 有区别&#xff0c;尽管它们都用于表示数据存储的单位&#xff0c;但它们的计算方式不同&#xff0c;分别基于不同的进制系统。 1. ​MiB&#xff08;Mebibyte&#xff09;​ ​MiB 是基于二进制的单位&#xff0c;使用1024作为基数。1 MiB 102…

Labview和C#调用KNX API 相关东西

叙述:完全没有听说过KNX这个协议...................我这次项目中也是简单的用了一下没有过多的去研究 C#调用示例工程链接(labview调用示例在 DEBUG文件夹里面) 通过网盘分享的文件&#xff1a;KNX调用示例.zip 链接: https://pan.baidu.com/s/1NQUEYM11HID0M4ksetrTyg?pwd…

损失函数理解(二)——交叉熵损失

损失函数的目的是为了定量描述不同模型&#xff08;例如神经网络模型和人脑模型&#xff09;的差异。 交叉熵&#xff0c;顾名思义&#xff0c;与熵有关&#xff0c;先把模型换成熵这么一个数值&#xff0c;然后用这个数值比较不同模型之间的差异。 为什么要做这一步转换&…

Kubernetes的Replica Set和ReplicaController有什么区别

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理应用程序副本的两种资源&#xff0c;它们有类似的功能&#xff0c;但 ReplicaSet 是 ReplicationController 的增强版本。 以下是它们的主要区别&#xff1a; 1. 功能的演进 ReplicationController 是 Kubernete…

信息系统运行管理员教程3--信息系统设施运维

第3章 信息系统设施运维 信息系统设施是支撑信息系统业务活动的信息系统软硬件资产及环境。 第1节 信息系统设施运维的管理体系 信息系统设施运维的范围包含信息系统涉及的所有设备及环境&#xff0c;主要包括基础环境、硬件设备、网络设备、基础软件等。 信息系统设施运维…

如何通过Python实现自动化任务:从入门到实践

在当今快节奏的数字化时代,自动化技术正逐渐成为提高工作效率的利器。无论是处理重复性任务,还是管理复杂的工作流程,自动化都能为我们节省大量时间和精力。本文将以Python为例,带你从零开始学习如何实现自动化任务,并通过一个实际案例展示其强大功能。 一、为什么选择Pyt…

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

​ 引言 本文主要介绍如何在 IDEA 中搭建一个使用 Maven 管理的 Spring Boot 应用项目工程&#xff0c;并结合在本地搭建的 KWDB 数据库&#xff08;版本为&#xff1a;2.0.3&#xff09;来演示 Spring Boot 与 MyBatis Plus 的集成&#xff0c;以及对 KWDB 数据库的数据操作…

Java锁等待唤醒机制

在 Java 并发编程中&#xff0c;锁的等待和唤醒机制至关重要&#xff0c;通常使用 wait()、notify() 和 notifyAll() 来实现线程间的协调。本文将详细介绍这些方法的用法&#xff0c;并通过示例代码加以说明。 1. wait()、notify() 与 notifyAll() 在 Java 中&#xff0c;Obj…