Arduino ESP32 BLE蓝牙和安卓端蓝牙数据交互实验_esp32 arduino 蓝牙_perseverance52的博客-程序员秘密

技术标签: Arduino ESP32 零基础入门实例教程  esp32蓝牙  

Arduino ESP32 BLE蓝牙和安卓端蓝牙数据交互实验


调试工具

实例代码

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
 
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
char BLEbuf[32] = {
    0};
uint32_t cnt = 0;
 
#define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
 
class MyServerCallbacks: public BLEServerCallbacks {
    
    void onConnect(BLEServer* pServer) {
    
      deviceConnected = true;
    };
 
    void onDisconnect(BLEServer* pServer) {
    
      deviceConnected = false;
    }
};
 
class MyCallbacks: public BLECharacteristicCallbacks {
    
    void onWrite(BLECharacteristic *pCharacteristic) {
    
      std::string rxValue = pCharacteristic->getValue();
 
      if (rxValue.length() > 0) {
    
        Serial.print("------>Received Value: ");
 
        for (int i = 0; i < rxValue.length(); i++) {
    
          Serial.print(rxValue[i]);
        }
        Serial.println();
       
        if (rxValue.find("A") != -1) {
     
          Serial.print("Rx A!");
        }
        else if (rxValue.find("B") != -1) {
    
          Serial.print("Rx B!");
        }
        Serial.println();
      }
    }
};
void setup() {
    
  Serial.begin(115200);
  
  // Create the BLE Device
  BLEDevice::init("ESP32 BLE Test"); 
  
  // 创建蓝牙服务器
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  
  // // 创建广播服务的UUID
  BLEService *pService = pServer->createService(SERVICE_UUID);
  
  创建广播服务的UUID
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
                   
  pCharacteristic->addDescriptor(new BLE2902());
  
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  
  pCharacteristic->setCallbacks(new MyCallbacks());
  
  // 开始蓝牙服务
  pService->start();
  
  // 开始广播
  pServer->getAdvertising()->start();
  Serial.println("Waiting a client connection to notify...");
  }
 
void loop() {
    
  if (deviceConnected) {
    //设备连接后,每秒钟发送txValue。
    memset(BLEbuf, 0, 32);
    memcpy(BLEbuf, (char*)"Hello BLE APP!", 32); 
    pCharacteristic->setValue(BLEbuf);
    
    pCharacteristic->notify(); // Send the value to the app!
    Serial.print("*** Sent Value: ");
    Serial.print(BLEbuf);
    Serial.println(" ***");
  }
  delay(1000);
}


  • 代码烧录成功后,手机端打开蓝牙调试助手-会自动搜索蓝牙设备-点击connect进行连接
    在这里插入图片描述
  • 给蓝牙设备被发送消息
    在这里插入图片描述
  • 内容信息
    在这里插入图片描述
  • 串口调试窗口打印收到的信息

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42880082/article/details/120534190

智能推荐

春节之缅怀系列-最短路径算法之父 Edsger Wybe Dijkstra_weixin_33775572的博客-程序员秘密

写到Dijkstra,才突然发现系统分类里面没有合适的类分配给该文章,嗯,只能暂且放到开发技术类别里面吧,是的,敬爱的Dijkstra应该没有什么意见吧,正如在他的Turing Award Lecture的标题一样,the humble programmer,我们都是卑微的程序员,在这个社会中,或许卑微,但在我们这个行业里面,他如一颗璀璨的明星,永远激励着每一个程序员,下面是...

初创文旅企业员工手册_初创企业,职业倦怠以及通往快乐员工的道路_cumo7370的博客-程序员秘密

初创文旅企业员工手册 Leah Silber是Tilde(一家培训和咨询初创公司)的首席执行官和联合创始人,该公司专注于由校友和Ruby on Rails,jQuery和Ember等项目的现任领导人领导的开源。 Tilde还是Rails性能工具Skylight的支持者。 Leah告诉我, Tilde通过建立和维护他们热爱的充满活力的开源社区做出了贡献。 为此,需要花费大量时间和精力,那么她如...

LINQ to SQL使用教程_画世界的毕加索的博客-程序员秘密

LINQ to SQL使用教程前些时间用LINQ to SQL做了一些项目,现在打算总结一下,帮助新手快速入门,并写一些别的教程没提到的东西。一、LINQ to SQL和别的LINQ to XXX有什么关系?二、延迟执行(Deferred Loading)三、什么是LINQ to SQL?四,看看LINQ to SQL到底干了些啥?——创建自己的工具类五

未能加载文件或程序集“System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依..._weixin_34319999的博客-程序员秘密

完整错误信息错误 7 未能加载文件或程序集“System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。 行 123,位置 5。 F:\CsProjects\CSharp实现SP...

Zabbix4.0监控环境搭建详细笔记_ray_zzzzz的博客-程序员秘密

Zabbix是一个高度集成的企业级开源网络监控解决方案,与Cacti、nagios类似,提供分布式监控以及集中的web管理界面。zabbix具备常见商业监控软件所具备的功能,例如主机性能监控,网络设备性能监控,数据库性能监控,ftp等通用协议的监控,能够灵活利用可定制警告机制,允许用户对事件发送基于E-mail的警告,保证相关人员可以快速解决。还能够利用存储数据提供杰出的报表及实时的图形化数据处理,实现对监控主机7x24小时集中监控。Zabbix通过C/S模式采集数据通过B/S模式在web端展示和配置,通

查找(顺序查找、二分查找、插值查找)_插值查找最坏情况_慕兰骆驼的博客-程序员秘密

查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表按照操作方式来分有两大种:静态查找表和动态查找表。动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。1. 顺序查找/* 顺序查找,a为数组,n为要查找的数组元素个数,key为要查找的关键字*/int Sequential_Sear

随便推点

C++小记(九)上_cout << index << endl;_userkiller的博客-程序员秘密

关键词:STL标准模板库,容器STL概述STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用...

【转】实现Http Server的三种方法_weixin_34253539的博客-程序员秘密

一、使用SUN公司在JDK6中提供的新包com.sun.net.httpserver   JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现,程序员必须自己实现HttpHandler接口,HttpSer...

代码阅读工具_yanghangjun的博客-程序员秘密

<br />(摘自http://fky168.blog.163.com/blog/static/3786097200831033957620/)<br />一、Source Insight实用技巧:<br />Source Insight(下文的SI指的也是它)就是这样的一个东西:<br />  Windows下开发人员的至爱,功能强大,界面友好。支持语法高亮、符号跳转,还支持函数调用关系图显示。这是一个专业的编程环境,很多大公司都是使用它的。这个编辑器除支持完善的自定义功能外,几乎所有配置都能作个性化配置

OpenCascade:Topo类型转换_diaomo9737的博客-程序员秘密

OpenCascade:Topo类型转换TopoDS_Edge newEdge;if (oldShape.ShapeType()==TopAbs_EDGE) newEdge=TopoDS::Edge(oldShape);转载于:https://www.cnblogs.com/2018shawn/p/11052574.html...

区块链共识算法之BFT(4)_bft pbft_会飞的幸运儿的博客-程序员秘密

 (1)PBFT    最常用的BFT共识机制是实用拜占庭容错算法PBFT(Practical Byzantine Fault Tolerance)。该算法是Miguel Castro和Barbara Liskov在1999年提出 来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由节点数的指 数级降低到节点数的平方级,使得拜占庭容错算法在实际系统应用中变得可行。    PBFT是针对状态...

Java基础知识日积月累(Tip of the Day19)_赵广陆的博客-程序员秘密

目录1.集合大家族2.集合删除需要退位3.集合删除的底层源码解析4.链表删除的底层解析5.集合变量的三种场景6.list集合的特点7.链表判断从那边开始找值8.集合在强转调方法需要加括号才是一个强转体9.增强for循环修改的值是第三方地址1.集合大家族2.集合删除需要退位3.集合删除的底层源码解析4.链表删除的底层解析5.集合变量的三种场景6.list集合的特点7.链表判断从那边开始找值8.集合在强转调方法需

推荐文章

热门文章

相关标签