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

news2025/4/22 10:03:50

 这个是上一年的项目,之前弄得不怎么完整,只有一个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 pyb

uart = 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 9600

void UART_Init() {
    TMOD |= 0x20;  // 设置定时器1为模式2
    TH1 = 256 - (11059200 / 12 / 32) / UART_BAUDRATE;  // 设置波特率
    TL1 = TH1;
    TR1 = 1;  // 启动定时器1
    SM0 = 0; SM1 = 1;  // 设置串口为模式1
    REN = 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 9600

void UART_Init() {
    TMOD |= 0x20;  // 设置定时器1为模式2
    TH1 = 256 - (11059200 / 12 / 32) / UART_BAUDRATE;  // 设置波特率
    TL1 = TH1;
    TR1 = 1;  // 启动定时器1
    SM0 = 0; SM1 = 1;  // 设置串口为模式1
    REN = 1;  // 允许接收
    ES = 1;   // 开启串口中断
    EA = 1;   // 开启全局中断
}

void UART_ReceiveString(char *str) {
    char ch;
    while ((ch = SBUF) != '\n') {
        *str++ = ch;
    }

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

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

相关文章

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

OpenLayers集成天地图服务开发指南

以下是一份面向GIS初学者的OpenLayers开发详细教程&#xff0c;深度解析代码&#xff1a; 一、开发环境搭建 1.1 OpenLayers库引入 <!-- 使用CDN引入最新版OpenLayers --> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/ollatest/ol.c…

VBA-Excel

VBA 一、数据类型与变量 常用数据类型&#xff1a; Byte&#xff1a;字节型&#xff0c;0~255。Integer&#xff1a;整数型&#xff0c;用于存储整数值&#xff0c;范围 -32768 到 32767。Long&#xff1a;长整型&#xff0c;可存储更大范围的整数&#xff0c;范围 -214748364…

OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

这几天搞鸿蒙&#xff0c;需要编译一些第三方库到鸿蒙系统使用。 头疼死了&#xff0c;搞了一个多星期总算搞定了。 开贴记坑。 一、SDK下载 1.下载 在linux下使用命令 wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_02…

【第14届蓝桥杯C/C++B组省赛】01串的熵

问题描述 算法思想 首先分析题目中给出的公式 S 100时&#xff0c;其信息熵为 H(S)−p(0)log2​(p(0)) − p(0)log2​(p(0)) − p(1)log2​(p(1)) 继续化简公式得 设0出现的次数为x&#xff0c;1出现的次数为3-x H(S)−x * p(0) * log2​(p(0)) − (3-x) * p(1) * log2​(p(1)…

鸿蒙harmonyOS笔记:练习CheckBoxGroup获取选中的值

除了视觉效果实现全选和反选以外&#xff0c;咱们经常需要获取选中的值&#xff0c;接下来看看如何实现。 核心步骤&#xff1a; 1. 给 CheckBoxGroup 注册 onChange。 2. CheckBox 添加 name 属性。 3. 在 onChange 的回调函数中获取 选中的 name 属性。 事件&#xff1a…

收数据花式画图plt实战

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

系统架构书单推荐(一)领域驱动设计与面向对象

本文主要是个人在学习过程中所涉猎的一些经典书籍&#xff0c;有些已经阅读完&#xff0c;有些还在阅读中。于我而言&#xff0c;希望追求软件系统设计相关的原则、方法、思想、本质的东西&#xff0c;并希望通过不断的学习、实践和积累&#xff0c;提升自身的知识和认知。希望…

Centos6配置yum源

Centos6配置yum源 为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空Centos6安装dockerdocker配置国内镜像加速 为Centos6配置CentOS Vault源—防止yum源过期 参考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…

CVPR 2025 | 文本和图像引导的高保真3D数字人高效生成GaussianIP

小小宣传一下CVPR 2025的工作GaussianIP。 arXiv&#xff1a;https://arxiv.org/abs/2503.11143 Github&#xff1a;https://github.com/silence-tang/GaussianIP 欢迎star, issue~ 摘要 文本引导的3D人体生成随着高效3D表示及2D升维方法&#xff08;如SDS&#xff09;的发展…

Cursor从小白到专家

文章目录 1&#xff1a;简单开发一个贪吃蛇游戏规则设置提示词 cursor开发小工具开发整体步骤创建.cursorrules输入提示词composer模式chat模式 执行cursor accept all发布到线上进行分享 cursor开发一个浏览器插件创建.cursorrulescursor rules范例集工具 输入提示词执行curso…

使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手

项目背景 随着DeepSeek的爆火&#xff0c;最近的DeepSeek也进行了新一轮技术的更新&#xff0c;为了拥抱新时代&#xff0c;我们也要不断学习新的知识&#xff0c;难的底层原理我们接触不到&#xff0c;简单的调用还能难住我们&#xff1f; 因为在网络上搜集到的资源都是用Py…

【信息系统项目管理师】【高分范文】【历年真题】​论信息系统项目的风险管理

【手机端浏览】☞【信息系统项目管理师】【高分范文】【历年真题】​论信息系统项目的风险管理 2023年上半年考题 【题目】 论信息系统项目的风险管理 项目风险管理旨在识别和管理未被项目计划及其他过程所管理的风险&#xff0c;如果不妥善管理&#xff0c;这些风险可能导致项…

Debain-12.9使用vllm部署内嵌模型/embedding

Debain-12.9使用vllm部署内嵌模型/embedding 基础环境准备下载模型部署模型注册dify模型 基础环境准备 基础环境安装 下载模型 modelscope download --model BAAI/bge-m3 --local_dir BAAI/bge-m3部署模型 vllm serve ~/ollama/BAAI/bge-m3 --served-model-name bge-m3 --t…

Milvus学习整理

Milvus学习整理 一、度量类型(metric_type) 二、向量字段和适用场景介绍 三、索引字段介绍 &#xff08;一&#xff09;、概述总结 &#xff08;二&#xff09;、详细说明 四、简单代码示例 &#xff08;一&#xff09;、建立集合和索引示例 &#xff08;二&#xff09…

MySQL事务全解析:从概念到实战

在数据库操作中&#xff0c;事务是一个至关重要的概念&#xff0c;它确保了数据的完整性和一致性。今天&#xff0c;就让我们深入探讨MySQL事务的方方面面&#xff0c;从基础概念到实际应用&#xff0c;全面掌握这一技能。 一、为什么需要事务 假设张三要给李四转账100元&…

手机怎么换网络IP有什么用?操作指南与场景应用‌

在数字化时代&#xff0c;手机已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作、学习还是娱乐&#xff0c;手机都扮演着至关重要的角色。而在手机的使用过程中&#xff0c;网络IP地址作为设备在互联网上的唯一标识符&#xff0c;其重要性和作用不容忽视。本文将…

科技赋能安全:慧通测控的安全带全静态性能测试

汽车的广泛普及给人们的出行带来了极大便利&#xff0c;但交通事故频发也成为严重的社会问题。据世界卫生组织统计&#xff0c;全球每年约有 135 万人死于道路交通事故&#xff0c;而安全带在减少事故伤亡方面起着不可替代的作用。正确使用安全带可使前排驾乘人员的死亡风险降低…

记录修复一个推拉门滑轮

推拉门有个滑轮的固定螺丝不知什么时候掉了&#xff0c;也找不到&#xff0c;这就导致推拉门卡在轨道上。 这种滑轮在夕夕上很便宜&#xff0c;比哈罗单车还划算&#xff0c;但是现在缺的只是螺丝&#xff0c;如果买就会多出来一个轮… 这种螺丝比较长&#xff0c;大概是m4的…

压缩壳学习

壳是什么 壳就是软件的一个保护套&#xff0c;防止软件被进行反编译或被轻易地修改。 其作用就是为了保护软件。 常见的大类壳有压缩壳、加密壳、VM 壳的分类。 压缩壳顾名思义就是用来减小软件的文件大小的&#xff1b;加密壳&#xff0c;通过加密软件来保护软件&#xff…