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.pswp.cn/bicheng/74223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74223.shtml
英文地址,請注明出處:http://en.pswp.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…