esp32 arduino ble 有时扫描结果不完全的解决方案

问题描述:

用esp32 做扫描应用时发现一个bug

本来想用esp32做ble扫描我的小米手环3广播信号,,实际操作时发现一个bug

在回调函数中的扫描总是扫描不到设备名????

翻阅源码后发现

具体在下面这个ble库里

#include <BLEScan.h>

 

 

 

在如图所示位置加入代码即可解决问题。。。

 

/*
 * BLEScan.cpp
 *
 *  Created on: Jul 1, 2017
 *      Author: kolban
 */
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)


#include <esp_err.h>

#include <map>

#include "BLEAdvertisedDevice.h"
#include "BLEScan.h"
#include "BLEUtils.h"
#include "GeneralUtils.h"
#include "esp32-hal-log.h"

/**
 * Constructor
 */
BLEScan::BLEScan() {
	m_scan_params.scan_type          = BLE_SCAN_TYPE_PASSIVE; // Default is a passive scan.
	m_scan_params.own_addr_type      = BLE_ADDR_TYPE_PUBLIC;
	m_scan_params.scan_filter_policy = BLE_SCAN_FILTER_ALLOW_ALL;
	m_pAdvertisedDeviceCallbacks     = nullptr;
	m_stopped                        = true;
	m_wantDuplicates                 = false;
	setInterval(100);
	setWindow(100);
} // BLEScan


/**
 * @brief Handle GAP events related to scans.
 * @param [in] event The event type for this event.
 * @param [in] param Parameter data for this event.
 */
void BLEScan::handleGAPEvent(
	esp_gap_ble_cb_event_t  event,
	esp_ble_gap_cb_param_t* param) {
  //char* zhoufeng_pHex = BLEUtils::buildHexData(nullptr, (uint8_t*)param->scan_rst.ble_adv, param->scan_rst.adv_data_len + param->scan_rst.scan_rsp_len);
//	printf("\n\n(event(%d):event2(%d):p>>(%s)\r\n)",event,param->scan_rst.search_evt,zhoufeng_pHex);//还有信息
	switch(event) {

		// ---------------------------
		// scan_rst:
		// esp_gap_search_evt_t search_evt
		// esp_bd_addr_t bda
		// esp_bt_dev_type_t dev_type
		// esp_ble_addr_type_t ble_addr_type
		// esp_ble_evt_type_t ble_evt_type
		// int rssi
		// uint8_t ble_adv[ESP_BLE_ADV_DATA_LEN_MAX]
		// int flag
		// int num_resps
		// uint8_t adv_data_len
		// uint8_t scan_rsp_len
		case ESP_GAP_BLE_SCAN_RESULT_EVT: {
				
			switch(param->scan_rst.search_evt) {
				//
				// ESP_GAP_SEARCH_INQ_CMPL_EVT
				//
				// Event that indicates that the duration allowed for the search has completed or that we have been
				// asked to stop.
				case ESP
Arduino ESP32是一种开源硬件平台,可以通过编程和连接各种外部设备来创建各种项目。ESP32是ESP系列的微控制器模块,具有强大的处理能力和低功耗特性。 BLE(蓝牙低功耗)是一种无线通信技术,可用于设备之间的短距离通信。通过使用ESP32BLE库,我们可以实现BLE广播和扫描的功能。 要同时进行BLE广播和扫描,我们可以使用两个同的ESP32设备,一个作为广播者,另一个作为扫描者。 作为广播者,我们可以使用ESP32BLE广播库来设置广播数据包。我们可以在广播数据包中包含任何想要传输的信息,比如设备名称、传感器数据等。然后,我们可以使用BLE广播库中的函数将广播数据包发送到周围的设备。 作为扫描者,我们可以使用ESP32BLE扫描库来搜索附近的BLE设备。我们可以设置扫描持续时间和扫描类型,并在找到设备时执行特定的动作。我们可以使用BLE扫描库中的回调函数获取扫描结果,并进行相应的处理。 在两个ESP32设备之间实现BLE广播和扫描可以通过建立连接来进一步交互和传输数据。广播者可以在广播数据包中包含用于建立连接的信息,而扫描者可以在找到广播者时尝试建立连接,并通过BLE通信协议进行数据传输。 通过在Arduino IDE中编写适当的代码,我们可以将ESP32配置为同时进行BLE广播和扫描,从而实现设备之间的无线通信。这样,我们可以开发各种基于ESP32的项目,如智能家居系统、传感器网络等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值