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.rhkb.cn/news/38274.html

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

相关文章

点云分割方法

点云分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 通过判断三维距离&#xff0c;实现对创建3团点云的分割 * 点云1 gen_object_model_3d_from_points (rand(100), rand(100),rand(100), Points1)* 点云2 gen_object_model_3d_from_points (rand(100), 2rand(100…

SpringBoot3使用CompletableFuture时java.util.ConcurrentModificationException异常解决方案

问题描述 在Spring Boot 3项目中&#xff0c;使用CompletableFuture进行异步编程时&#xff0c;偶发{"code":500,"msg":"java.util.ConcurrentModificationException"}异常&#xff0c;但代码中并未直接操作List或CopyOnWriteArrayList等集合类…

细说卫星导航:测距定位原理

测距定位原理 1. 伪距测量技术 核心原理&#xff1a;卫星发射信号&#xff0c;用户接收并记录传播时间&#xff0c;乘以光速得到距离&#xff08;伪距&#xff09;。 技术细节&#xff1a; 信号传播路径分析 信号结构&#xff1a; 卫星信号包含三部分&#xff1a; 载波&…

Linux系统管理与编程09:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 5 …

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…

RK3568 I2C底层驱动详解

前提须知&#xff1a;I2C协议不懂的话就去看之前的内容吧&#xff0c;这个文章需要读者一定的基础。 RK3568 I2C 简介 RK3568 支持 6 个独立 I2C: I2C0、I2C1、I2C2、I2C3、I2C4、I2C5。I2C 控制器支持以下特性: ① 兼容 i2c 总线 ② AMBA APB 从接口 ③ 支持 I2C 总线主模式…

UNIX网络编程笔记:基本TCP套接字编程

一、socket函数 一、socket函数核心参数与协议组合 函数原型与基本功能 #include <sys/socket.h> int socket(int family, int type, int protocol);• 功能&#xff1a;创建通信端点&#xff08;套接字&#xff09;&#xff0c;返回描述符供后续操作。 • 返回值&#…

JSON在AutoCAD二次开发中应用场景及具体案例

配置文件的读取 在AutoCAD插件开发中&#xff0c;可能需要生成、修改、读取配置文件中一些参数或设置。JSON格式的配置文件易于编写和修改&#xff0c;且可以方便地反序列化为对象进行使用。 运行后效果如下 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.Au…

自由学习记录(46)

CG语法的数据类型 // uint : 无符号整数&#xff08;32位&#xff09; // int : 有符号整数&#xff08;32位&#xff09; // float : 单精度浮点数&#xff08;32位&#xff09;&#xff0c;通常带后缀 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…

解决Selenium滑动页面到指定元素,点击失效的问题

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:君失臣兮龙为鱼&#xff0c;权归臣兮鼠变虎&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

Vue基础

目录 -Vue基础- 1、插值表达式 {{}} 2、Vue核心特性&#xff1a;响应式 3、开发者工具Vue Devtools(极简插件下载) 4、Vue指令 v-text v-html v-bind v-on v-if v-show v-for v-model 5、Vue指令修饰符 .stop .prevent .capture .self .once .enter、.tab、…

收数据花式画图plt实战

目录 Python plt想把纵坐标化成对数形式代码 子图ax. 我又有ax scatter&#xff0c;又有ax plot&#xff0c;都要去对数 数字接近0&#xff0c;取对数没有定义&#xff0c;怎么办 创建数据 添加一个小的常数以避免对数未定义的问题 创建一个figure和一个子图ax 在子图a…

二项式分布(Binomial Distribution)

二项式分布&#xff08;Binomial Distribution&#xff09; 定义 让我们来看看玩板球这个例子。假设你今天赢了一场比赛&#xff0c;这表示一个成功的事件。你再比了一场&#xff0c;但你输了。如果你今天赢了一场比赛&#xff0c;但这并不表示你明天肯定会赢。我们来分配一个…

【算法工程】大模型开发之windows环境的各种安装

1. 背景 最近由于研究需要&#xff0c;我购置了两块3090显卡&#xff0c;以便在家中进行一些小规模的实验。为此&#xff0c;还更换了主机。当然&#xff0c;新系统上少不了要安装各种开发环境。从开发体验来看&#xff0c;macOS无疑更为流畅&#xff0c;但为了确保所有环境都能…

论文阅读笔记:Denoising Diffusion Probabilistic Models (2)

接论文阅读笔记&#xff1a;Denoising Diffusion Probabilistic Models (1) 3、论文推理过程 扩散模型的流程如下图所示&#xff0c;可以看出 q ( x 0 , 1 , 2 ⋯ , T − 1 , T ) q(x^{0,1,2\cdots ,T-1, T}) q(x0,1,2⋯,T−1,T)为正向加噪音过程&#xff0c; p ( x 0 , 1 , …

vscode查看文件历史git commit记录

方案一&#xff1a;GitLens 在vscode扩展商店下载GitLens 选中要查看的文件&#xff0c;vscode界面右上角点击GitLens的图标&#xff0c;选择Toggle File Blame 界面显示当前打开文件的所有修改历史记录 鼠标放到某条记录上&#xff0c;可以看到记录详情&#xff0c;选中O…

【数据挖掘】Python基础环境安装配置

【数据挖掘】Python基础环境安装配置 一、摘要二、安装Python3.13.2三、安装Jupyter Notebook四、安装Numpy和Pandas以及matplotlib五、安装scikit-learn库和seaborn库 一、摘要 本文主要介绍如何在Windows上安装Python3.13.2&#xff0c;然后基于该Python版本安装Jupyter not…

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

SpringMVC的执行流程剖析和源码跟踪

目录 一、常用组件:1、DispatcherServlet2、HandlerMapping3、Handler4、HandlerAdapter:5、ViewResolver6、View 二、SpringMVC的执行流程:1、流程图 在这里插入图片描述2、文字解析流程图3、ContextLoaderListener 三、源码跟踪1、doService()方法2、doDispatch()方法逻辑分解…

LeetCode hot 100 每日一题(13)——73. 矩阵置零

这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 _m_ x _n_ 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n …