1

Topic: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

Здравствуйте. Есть ли возможность подключиться к ESP32 через WiFi Cloud или Bluetoth по выбору, в зависимости от необходимости, т.е. либо находясь дома через блютуз, либо удалённо через облако? Заранее благодарю за помощь.

2

Re: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

Такая возможность есть. RemoteXY умеет работать на несколько каналов связи.
Но при одновременном включении библиотек BLE и WiFi в ESP32 скетч получается слишком большой и компилятор об этом ругается. Это не особенность RemoteXY, это особенность ESP32. Если у вас удастся это обойти будем рады если поделитесь как.
Пример ниже.

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// RemoteXY select connection mode and include library
//#define REMOTEXY__DEBUGLOG 


#include <WiFi.h>  
#include "BLEDevice.h"

#include <RemoteXY.h>


// RemoteXY configurate  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,1,0,1,0,27,0,10,13,2,
  1,0,9,9,46,46,6,7,50,50,
  2,31,88,0,65,4,62,16,31,31,
  14,62,35,35 };
  
// this structure defines all the variables and events of your control interface 
struct {

    // input variables
  uint8_t button_1; // =1 if button pressed, else =0 

    // output variables
  uint8_t led_1_r; // =0..255 LED Red brightness 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY;
#pragma pack(pop)



/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


CRemoteXY *remotexy;

void setup() 
{
 
  CRemoteXYComm_WiFi * wifi =  new CRemoteXYComm_WiFi (
    "myHomeFiFi",                            // REMOTEXY_WIFI_SSID
    "myPass"                                 // REMOTEXY_WIFI_PASSWORD
  );
  
  remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, "");
  
  remotexy->addConnection (new CRemoteXYStream_BLEDevice (
    "REMOTEXY"                               // REMOTEXY_BLUETOOTH_NAME 
  ));
  
  remotexy->addConnection (new CRemoteXYConnectionCloud ( wifi, 
    "cloud.remotexy.com",                     // REMOTEXY_CLOUD_SERVER 
    6376,                                     // REMOTEXY_CLOUD_PORT
    "xxxxxxxxxxxxxxxxxxxxxxxx"                // REMOTEXY_CLOUD_TOKEN
  ));
  
  
  
  // TODO you setup code
  
}

void loop() 
{ 
  remotexy->handler ();
  
  if (RemoteXY.button_1)  RemoteXY.led_1_r = 255;
  else RemoteXY.led_1_r = 0;
  
  // TODO you loop code
  // use the RemoteXY structure for data transfer
  // do not call delay() 

}

3

Re: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

Спасибо. Буду пробовать. Если получится, обязательно отпишусь.

4 (edited by Loki 2022-04-28 08:52:00)

Re: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

Проблема с превышением размера скетча, вроде бы решена. Помогла данная информация http://digitrode.ru/computing-devices/m … o-ide.html  Я сделал следующее:  "...В Arduino IDE перейдите в Tools – Partition Scheme (Инструменты – Схема разделов). Затем выберите опцию «Minimal SPIFFS (Large APPS with OTA)» или «No OTA (Large APP)». Таким образом, вы можете иметь размер скетча до 1966080 байт или 2097152 байт соответственно. При этом вы жертвуете размером SPIFFS или OTA..." Я выбрал «Minimal SPIFFS (Large APPS with OTA)». Больше ничего не делал. Ваш пример работает и мой скетч тоже. Единственный нюанс, у меня режим подключение "Классический bluetooth", а не "Bluetooth LE". В режиме "Bluetooth LE", у меня телефон не подключается к модулю, но это происходит и без двойного режима, наверное проблеме в самом телефоне.

5

Re: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

В общем работа не стабильна. Еспишка периодически уходит в перезагрузку, и в конечном счёте с ней становится не сконектится. Похоже надо ковырять глубже.

6

Re: ESP32 подключение через WiFi Cloud или Bluetoth по выбору

Пример для классического Bluetooth. Возможно будет стабильнее.

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// RemoteXY select connection mode and include library
//#define REMOTEXY__DEBUGLOG 


#include <WiFi.h>  
#include "BluetoothSerial.h"

#include <RemoteXY.h>


// RemoteXY configurate  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,1,0,1,0,27,0,10,13,2,
  1,0,9,9,46,46,6,7,50,50,
  2,31,88,0,65,4,62,16,31,31,
  14,62,35,35 };
  
// this structure defines all the variables and events of your control interface 
struct {

    // input variables
  uint8_t button_1; // =1 if button pressed, else =0 

    // output variables
  uint8_t led_1_r; // =0..255 LED Red brightness 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY;
#pragma pack(pop)



/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////


CRemoteXY *remotexy;

void setup() 
{
 
  CRemoteXYComm_WiFi * wifi =  new CRemoteXYComm_WiFi (
    "myHomeFiFi",                            // REMOTEXY_WIFI_SSID
    "myPass"                                 // REMOTEXY_WIFI_PASSWORD
  );
  
  remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, "");
  
  remotexy->addConnection (new CRemoteXYStream_BluetoothSerial (
    "REMOTEXY"                               // REMOTEXY_BLUETOOTH_NAME 
  ));
  
  remotexy->addConnection (new CRemoteXYConnectionCloud ( wifi, 
    "cloud.remotexy.com",                     // REMOTEXY_CLOUD_SERVER 
    6376,                                     // REMOTEXY_CLOUD_PORT
    "xxxxxxxxxxxxxxxxxxxxxxxx"                // REMOTEXY_CLOUD_TOKEN
  ));
  
  
  
  // TODO you setup code
  
}

void loop() 
{ 
  remotexy->handler ();
  
  if (RemoteXY.button_1)  RemoteXY.led_1_r = 255;
  else RemoteXY.led_1_r = 0;
  
  // TODO you loop code
  // use the RemoteXY structure for data transfer
  // do not call delay() 


}