ESP32 Bluetooth Master не подключается

Я хочу подключить ESP32 к преобразователю SMA Sunny Boy SB5000-TL Solar через Bluetooth, но не могу установить соединение и не могу. Я использую внутренний модуль Bluetooth ESP32.

Что я сделал:

  • Я начал с этого проекта: https://github.com/delhatch/ESP32_to_SMA, но не получил мимо связи. Я попытался найти проблемную область:

  • Я попытался подключиться к преобразователю SB5000-TL Solar с помощью приложения для Android (Oxley Solar), и оно отлично работает. Пин-код преобразователя установлен на 0000.

  • Я попытался использовать два модуля ESP32, один в качестве главного, один в качестве подчиненного, и это тоже работает, хотя мне не нужно устанавливать пин-код. Так что модуль bluetooth моего ESP32 работает нормально.

Полагаю, проблема должна быть в моем коде.

Это код, который я использую для подключения к преобразователю:

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
boolean confirmRequestPending = true;

// uint8_t ESP32Slave[6] = {0x84, 0xCC, 0xA8, 0x2C, 0x70, 0x1E}; // Адрес ведомого.
uint8_t SMA[6]  = {0x00, 0x40, 0x65, 0x12, 0x4B, 0x3E}; // Адрес моего инвертора SMA.
const char *pin = "0000"; //<- стандартный пин

void setup() {
  Serial.begin(115200);
  SerialBT.enableSSP();
  SerialBT.onConfirmRequest(BTConfirmRequestCallback);
  SerialBT.onAuthComplete(BTAuthCompleteCallback);
  SerialBT.begin("ESP32master", true); //Имя Bluetooth-устройства
  SerialBT.register_callback(callback);
  SerialBT.setPin("0000");
  Serial.println("Connecting...");
  bool connected = SerialBT.connect(SMA);
  if (connected) {
    Serial.println("Connected!");
  } else {
    Serial.println("NOT Connected!");
  }
  delay(500);
  SerialBT.end();
  Serial.println("Bye!");
}

void loop() {

}

void callback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
  Serial.print("Got event!");  Serial.println(event);
}

void BTConfirmRequestCallback(uint32_t numVal)
{
  confirmRequestPending = true;
  Serial.println(numVal);
}

void BTAuthCompleteCallback(boolean success)
{
  confirmRequestPending = false;
  if (success)
  {
    Serial.println("Pairing success!!");
  }
  else
  {
    Serial.println("Pairing failed, rejected by user!!");
  }
}

Вот результат в последовательной консоли:

Connecting...
Got event!0
Got event!8
NOT Connected!
Got event!1
Bye!

Я попытался заменить Mac-адрес именем преобразователя, Я пробовал с пин и без него.

Я немного застрял. Любая идея о том, как я могу проверить, что не так?

Есть ли какой-либо сканер, который я могу использовать, чтобы увидеть, что происходит с приложением, которое работает, и что (не) происходит с моим кодом?

Другие способы получить больше информации/лидов?
Могу ли я использовать сниффер Bluetooth или около того (без опыта), чтобы выяснить, что происходит?

Буду признателен за любой совет!

, 👍3

Обсуждение

Я искал в сети решение этой проблемы для esp32, пытающегося подключиться в качестве серийного мастера. Все, что я могу найти, это то, что существует проблема с сообщением об успешном соединении с BluetoothSerial.h при использовании правильного адреса или имени подчиненного устройства. Последняя версия 1.4, я думаю, сообщает об успешном соединении, когда это не так. версия 1.3 сообщает о сбое соединения. Очень расстраивает отсутствие обновленного исправления на github. Вы, наверное, заметили, что все примеры классического BLE используют esp32 в качестве ведомого устройства, а телефон Android подключается в качестве ведущего для включения и выключения реле на плате BLE. Но нет, @Andrew Titcombe


1 ответ


0

Я искал в сети решение этой проблемы для esp32, пытающегося подключиться в качестве серийного мастера. Все, что я могу найти, это то, что существует проблема с сообщением об успешном соединении с BluetoothSerial.h при использовании правильного адреса или имени подчиненного устройства. Последняя версия 1.4, я думаю, сообщает об успешном соединении, когда это не так. версия 1.3 сообщает о сбое соединения. Очень расстраивает отсутствие обновленного исправления на github. Вы, наверное, заметили, что все примеры BLE classic используют esp32 в качестве ведомого устройства, а телефон Android подключается в качестве ведущего для включения и выключения реле на плате BLE. Но нет примеров использования ESP32 в качестве ведущего для подключения к другому ESP в качестве ведомого, я думаю, это потому, что никто не может заставить его работать. Но если вы нашли решение. Пожалуйста, дайте мне знать

,