Skip to content

pAdvertising->stop(); Don't work. #2853

Closed
@m0923678421

Description

@m0923678421

Hardware: ESP32-S/ESP-WROOM-32

Board: ESP32 Dev Module
Core Installation version: 1.0.1
IDE name: Arduino IDE
Flash Frequency: 80Mhz
PSRAM enabled: yes
Upload Speed: 921600
Computer OS: Windows 7

Description:

I use the BLE_iBeacon example and disable deep sleep at that sketch.
But even the code run over "pAdvertising->stop();" this line.
I can still scan this iBeacon device with smartphone.
I also try btStop(); , btStart(); and reStart(); function.
But when the code run over btStop(); again.
ESP32 will reboot itself.
Help me please.

How can I stop iBeacon and restart in sketch without reboot?

Sketch: (leave the backquotes for code formatting)

/*
   Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
   Ported to Arduino ESP32 by pcbreflux
*/

 
/*
   Create a BLE server that will send periodic iBeacon frames.
   The design of creating the BLE server is:
   1. Create a BLE Server
   2. Create advertising data
   3. Start advertising.
   4. wait
   5. Stop advertising.
   6. deep sleep
   
*/
#include "sys/time.h"

#include "BLEDevice.h"
#include "BLEUtils.h"
#include "BLEBeacon.h"
#include "esp_sleep.h"

#define GPIO_DEEP_SLEEP_DURATION     10  // sleep x seconds and then wake up
RTC_DATA_ATTR static time_t last;        // remember last boot in RTC Memory
RTC_DATA_ATTR static uint32_t bootcount; // remember number of boots in RTC Memory

#ifdef __cplusplus
extern "C" {
#endif

uint8_t temprature_sens_read();
//uint8_t g_phyFuns;

#ifdef __cplusplus
}
#endif

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
BLEAdvertising *pAdvertising;
struct timeval now;

#define BEACON_UUID           "8ec76ea3-6668-48da-9866-75be8bc86f4d" // UUID 1 128-Bit (may use linux tool uuidgen or random numbers via https://www.uuidgenerator.net/)

void setBeacon() {

  BLEBeacon oBeacon = BLEBeacon();
  oBeacon.setManufacturerId(0x4C00); // fake Apple 0x004C LSB (ENDIAN_CHANGE_U16!)
  oBeacon.setProximityUUID(BLEUUID(BEACON_UUID));
  oBeacon.setMajor((bootcount & 0xFFFF0000) >> 16);
  oBeacon.setMinor(bootcount&0xFFFF);
  BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
  BLEAdvertisementData oScanResponseData = BLEAdvertisementData();
  
  oAdvertisementData.setFlags(0x04); // BR_EDR_NOT_SUPPORTED 0x04
  
  std::string strServiceData = "";
  
  strServiceData += (char)26;     // Len
  strServiceData += (char)0xFF;   // Type
  strServiceData += oBeacon.getData(); 
  oAdvertisementData.addData(strServiceData);
  
  pAdvertising->setAdvertisementData(oAdvertisementData);
  pAdvertising->setScanResponseData(oScanResponseData);

}

void setup() {

    
  Serial.begin(115200);
  gettimeofday(&now, NULL);

  Serial.printf("start ESP32 %d\n",bootcount++);

  Serial.printf("deep sleep (%lds since last reset, %lds since last boot)\n",now.tv_sec,now.tv_sec-last);

  last = now.tv_sec;
  
  // Create the BLE Device
  BLEDevice::init("");

  // Create the BLE Server
  // BLEServer *pServer = BLEDevice::createServer(); // <-- no longer required to instantiate BLEServer, less flash and ram usage

  pAdvertising = BLEDevice::getAdvertising();
  
  setBeacon();
   // Start advertising
  pAdvertising->start();
  Serial.println("Advertizing started...");
  delay(100);
  pAdvertising->stop();
  /*
  Serial.printf("enter deep sleep\n");
  esp_deep_sleep(1000000LL * GPIO_DEEP_SLEEP_DURATION);
  Serial.printf("in deep sleep\n");
  */
}

void loop() {
}

Debug Messages:

[W][esp32-hal-psram.c:30] psramInit(): PSRAM init failed!
start ESP32 0
deep sleep (0s since last reset, 0s since last boot)
[I][BLEDevice.cpp:561] getAdvertising(): create advertising
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:152] setAdvertisementData(): >> setAdvertisementData
[D][BLEAdvertising.cpp:160] setAdvertisementData(): << setAdvertisementData
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:169] setScanResponseData(): >> setScanResponseData
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 4]
[E][BLEAdvertising.cpp:174] setScanResponseData(): esp_ble_gap_config_scan_rsp_data_raw: 258 Unknown ESP_ERR error
[D][BLEAdvertising.cpp:177] setScanResponseData(): << setScanResponseData
[D][BLEAdvertising.cpp:186] start(): >> start: customAdvData: 1, customScanResponseData: 1
[D][BLEAdvertising.cpp:205] start(): - no services advertised
[D][BLEAdvertising.cpp:246] start(): << start
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 6]
[D][BLEAdvertising.cpp:256] stop(): >> stop
[D][BLEAdvertising.cpp:262] stop(): << stop
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 17]
[I][BLEAdvertising.cpp:495] handleGAPEvent(): STOP advertising
[D][BLEAdvertising.cpp:186] start(): >> start: customAdvData: 1, customScanResponseData: 1
[D][BLEAdvertising.cpp:205] start(): - no services advertised
[D][BLEAdvertising.cpp:246] start(): << start
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 6]
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:10088
load:0x40080400,len:6380
entry 0x400806a4
[W][esp32-hal-psram.c:30] psramInit(): PSRAM init failed!
start ESP32 0
deep sleep (0s since last reset, 0s since last boot)
[I][BLEDevice.cpp:561] getAdvertising(): create advertising
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:152] setAdvertisementData(): >> setAdvertisementData
[D][BLEAdvertising.cpp:160] setAdvertisementData(): << setAdvertisementData
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:169] setScanResponseData(): >> setScanResponseData
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 4]
[E][BLEAdvertising.cpp:174] setScanResponseData(): esp_ble_gap_config_scan_rsp_data_raw: 258 Unknown ESP_ERR error
[D][BLEAdvertising.cpp:177] setScanResponseData(): << setScanResponseData
[D][BLEAdvertising.cpp:186] start(): >> start: customAdvData: 1, customScanResponseData: 1
[D][BLEAdvertising.cpp:205] start(): - no services advertised
[D][BLEAdvertising.cpp:246] start(): << start
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 6]
[D][BLEAdvertising.cpp:256] stop(): >> stop
[D][BLEAdvertising.cpp:262] stop(): << stop
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 17]
[I][BLEAdvertising.cpp:495] handleGAPEvent(): STOP advertising
[D][BLEAdvertising.cpp:186] start(): >> start: customAdvData: 1, customScanResponseData: 1
[D][BLEAdvertising.cpp:205] start(): - no services advertised
[D][BLEAdvertising.cpp:246] start(): << start
[D][BLEDevice.cpp:563] getAdvertising(): get advertising
[D][BLEAdvertising.cpp:479] handleGAPEvent(): handleGAPEvent [event no: 6]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Status: StaleIssue is stale stage (outdated/stuck)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions