菜鸟哥玩蓝牙Ble4.0系列 ESP32基础篇③ BLEUtils ——通用工具

本文介绍了ESP32中用于蓝牙开发的BLEUtils类,包括gattdescriptor_t、characteristicMap_t等通用结构体,以及各种转换和打印工具函数,如gatt权限转字符串、事件类型转换等,旨在帮助开发者更好地理解和使用蓝牙API。
摘要由CSDN通过智能技术生成

文章目录

授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

快速导航
单片机菜鸟的博客快速索引(快速找到你要的)

重点说一下,麻烦三连点赞,你的点赞是博主创作的前进动力

1、前言

写习惯软件代码的人都会有抽取一个util的工具类,BLE也不例外。
这一节,我们来学习一下 Arduino ESP32里面提供的工具类 —— BLEUtils

2、BLEUtils 类

源码位置在:
在这里插入图片描述
习惯性,学习源码第一原则看头文件:

/*
 * BLEUtils.h
 *
 *  Created on: Mar 25, 2017
 *      Author: kolban
 */

#ifndef COMPONENTS_CPP_UTILS_BLEUTILS_H_
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的 ESP32-CAM 和 Android 应用程序之间传输视频流的代码实现,需要使用 ESP32-CAM 模块和 Android 应用程序进行测试。 ESP32-CAM 代码: ```c++ #include "esp_camera.h" #include "WiFi.h" #include "WiFiClient.h" #include "esp_timer.h" // 设置 ESP32-CAM 的分辨率 #define CAMERA_WIDTH 640 #define CAMERA_HEIGHT 480 // 设置 ESP32-CAM 与 WIFI 热点的 SSID 和密码 const char* ssid = "your_ssid"; const char* password = "your_password"; // 设置服务器的 IP 地址和端口 IPAddress serverIP(192, 168, 0, 100); int serverPort = 8080; // 创建 WiFi 客户端 WiFiClient client; void setup() { // 初始化 ESP32-CAM 模块 esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } // 连接 WIFI 热点 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); // 设置帧率为 30FPS sensor_t * s = esp_camera_sensor_get(); s->set_framesize(s, FRAMESIZE_VGA); s->set_framerate(s, 30); // 开启串口调试输出 Serial.begin(115200); Serial.setDebugOutput(true); } void loop() { // 连接服务器 if (!client.connected()) { if (!client.connect(serverIP, serverPort)) { Serial.println("Connection failed"); return; } Serial.println("Connected to server"); } // 获取帧数据 camera_fb_t * fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); return; } // 发送帧数据到服务器 uint32_t start = esp_timer_get_time(); client.write((const uint8_t *)fb->buf, fb->len); uint32_t end = esp_timer_get_time(); Serial.printf("Sent %u bytes in %u ms\n", fb->len, (end - start) / 1000); // 释放帧数据缓存 esp_camera_fb_return(fb); // 延时 33ms,等待下一帧 delay(33); } ``` Android 应用程序代码: ```java import java.io.IOException; import java.io.InputStream; import java.net.Socket; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.ImageView; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private ImageView mImageView; private Socket mSocket; private InputStream mInputStream; private Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { Bitmap bitmap = (Bitmap)msg.obj; mImageView.setImageBitmap(bitmap); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = findViewById(R.id.imageView); // 创建新线程连接服务器并接收数据 new Thread(new Runnable() { @Override public void run() { try { // 创建 Socket 连接 mSocket = new Socket("192.168.0.100", 8080); mInputStream = mSocket.getInputStream(); while (true) { // 读取数据 byte[] buffer = new byte[1024 * 1024]; int len = mInputStream.read(buffer); if (len > 0) { // 解码为 Bitmap Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, len); // 发送消息更新 UI Message message = mHandler.obtainMessage(); message.obj = bitmap; mHandler.sendMessage(message); } } } catch (IOException e) { Log.e(TAG, "Error while connecting or receiving data", e); } } }).start(); } @Override protected void onDestroy() { super.onDestroy(); // 关闭 Socket 连接 try { if (mSocket != null) { mSocket.close(); } } catch (IOException e) { Log.e(TAG, "Error while closing socket", e); } } } ``` 这段代码中,Android 应用程序会创建一个新线程连接到 ESP32-CAM 服务器,并接收视频流数据。在接收到数据后,将其解码为 Bitmap,并使用 Handler 发送消息更新 UI 上的 ImageView。需要注意的是,由于网络传输的延迟和帧率的限制,视频流的实时性可能会受到影响。如果需要更好的视频流体验,可以考虑使用更高速的网络和更快的处理器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机菜鸟哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值