1

Topic: Смена логина и пароля для подключения к роутеру в облачном режиме

Здавствуйте! подскажите пожалуйста. Имеется ли возможность каким либо образом менять "логин" и "пароль" для подключения к роутеру на прошитом NodeMcu?

Например - настроили скетч для работы в облачном сервисе, задали пароль и логин для подключения к роутеру. прошили устройство. все прекрасно работает. поменяли роутер. изменился логин пароль на роутере.

Каким образом пользователю изменить на контроллере логин пароль для подключения к роутеру, не меняя настройки на самом роутере и не перепрошивая контроллер.
Спасибо!

2

Re: Смена логина и пароля для подключения к роутеру в облачном режиме

Вы можете изучив работу библиотеку RemoteXY понять, как можно задавать разные данные при инициализации. Конечно же ввод данных о точке доступа напрямую со смартфона реализовать не получится. Но сделать ввод этих данных на самом устройстве возможен, например с клавиатуры или каким либо другим способом.
Например в случае работы с облаком в режиме контроллер+ESP8266 инициализация происходит так (см. файл библиотеки esp8266_cloud.h:

#define RemoteXY_Init() remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, REMOTEXY_ACCESS_PASSWORD, &REMOTEXY_SERIAL, REMOTEXY_SERIAL_SPEED, REMOTEXY_WIFI_SSID, REMOTEXY_WIFI_PASSWORD, REMOTEXY_CLOUD_SERVER, REMOTEXY_CLOUD_PORT, REMOTEXY_CLOUD_TOKEN)

Т.е. в процедуре Init в место RemoteXY_Init() вы можете написать так:

//RemoteXY_Init() ;
remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, REMOTEXY_ACCESS_PASSWORD, &REMOTEXY_SERIAL, REMOTEXY_SERIAL_SPEED, REMOTEXY_WIFI_SSID, REMOTEXY_WIFI_PASSWORD, REMOTEXY_CLOUD_SERVER, REMOTEXY_CLOUD_PORT, REMOTEXY_CLOUD_TOKEN);

Далее вместо необходимых данных, например REMOTEXY_WIFI_SSID и REMOTEXY_WIFI_PASSWORD, которые были жестко определены в виде:

#define REMOTEXY_WIFI_SSID "RemoteXY"
#define REMOTEXY_WIFI_PASSWORD "12345678" 

Вы можете передавать константы, в которые задать необходимые значения:

char REMOTEXY_WIFI_SSID_1  = "RemoteXY"; 
char REMOTEXY_WIFI_PASSWORD_1 = "12345678; 
char REMOTEXY_WIFI_SSID_2  = "RemoteXY_2"; 
char REMOTEXY_WIFI_PASSWORD_2 = "1234567890; 

или определить строки, в которые вы предварительно зададите введенные с клавиатуры (или иным способом) параметры сети:

char REMOTEXY_WIFI_SSID[30];
char REMOTEXY_WIFI_PASSWORD[30];

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

3

Re: Смена логина и пароля для подключения к роутеру в облачном режиме

Если можно, покажите на конкретном скетче...

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

// определение режима соединения и подключение библиотеки RemoteXY  
#define REMOTEXY_MODE__ESP8266WIFI_LIB_CLOUD
#include <ESP8266WiFi.h> 

#include <RemoteXY.h> 

// настройки соединения  
#define REMOTEXY_WIFI_SSID "YOUR_SSID" 
#define REMOTEXY_WIFI_PASSWORD "YOUR_PASS" 
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com" 
#define REMOTEXY_CLOUD_PORT 6376 
#define REMOTEXY_CLOUD_TOKEN "80e782d673f990f8035861ed4decceb7" 


// конфигурация интерфейса   
#pragma pack(push, 1) 
uint8_t RemoteXY_CONF[] = 
  { 255,1,0,0,0,20,0,8,13,1,
  2,0,16,28,22,11,2,26,31,31,
  79,78,0,79,70,70,0 }; 
   
// структура определяет все переменные вашего интерфейса управления  
struct { 

    // input variable
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен 

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

} RemoteXY; 
#pragma pack(pop) 

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

#define PIN_SWITCH_1 D4


void setup()  
{ 
  RemoteXY_Init ();  
   
  pinMode (PIN_SWITCH_1, OUTPUT);
   
  // TODO you setup code 
   
} 

void loop()  
{  
  RemoteXY_Handler (); 
   
  digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
   
  // TODO you loop code 
  // используйте структуру RemoteXY для передачи данных 


}

при компиляции выскакивают ошибки:
invalid conversion from 'char' to 'const char*' [-fpermissive]

4

Re: Смена логина и пароля для подключения к роутеру в облачном режиме

Спасибо!

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

// определение режима соединения и подключение библиотеки RemoteXY  
#define REMOTEXY_MODE__ESP8266WIFI_LIB_CLOUD
#include <ESP8266WiFi.h> 

#include <RemoteXY.h> 

// настройки соединения  
const char* REMOTEXY_WIFI_SSID; 
#define REMOTEXY_WIFI_PASSWORD "11223344" 
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com" 
#define REMOTEXY_CLOUD_PORT 6376 
#define REMOTEXY_CLOUD_TOKEN "80e782d673f990f8035861ed4decceb7" 


// конфигурация интерфейса   
#pragma pack(push, 1) 
uint8_t RemoteXY_CONF[] = 
  { 255,1,0,0,0,20,0,8,13,1,
  2,0,16,28,22,11,2,26,31,31,
  79,78,0,79,70,70,0 }; 
   
// структура определяет все переменные вашего интерфейса управления  
struct { 

    // input variable
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен 

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

} RemoteXY; 
#pragma pack(pop) 

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

#define PIN_SWITCH_1 D4


void setup()  
{ 
  const char* REMOTEXY_WIFI_SSID = "NETGEAR";
  //RemoteXY_Init ()
  remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, 
  REMOTEXY_ACCESS_PASSWORD, 
  REMOTEXY_WIFI_SSID, REMOTEXY_WIFI_PASSWORD, REMOTEXY_CLOUD_SERVER, 
  REMOTEXY_CLOUD_PORT, REMOTEXY_CLOUD_TOKEN);;  

  pinMode (PIN_SWITCH_1, OUTPUT);
   
  // TODO you setup code 
   
} 

void loop()  
{  
  RemoteXY_Handler (); 
   
  digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
   
  // TODO you loop code 
  // используйте структуру RemoteXY для передачи данных 


}

так как вы написали - получилось!
Теперь возникает вопрос про запись в переменную... что бы после перезагрузки читалось ее значение. я предполагаю, это реализуется как-то через еепром?

5

Re: Смена логина и пароля для подключения к роутеру в облачном режиме

Если можно, покажите на конкретном скетче...

Я вам дал направление куда смотреть. У проекта на данный момент нет задачи к реализации подобного функционала.

6

Re: Смена логина и пароля для подключения к роутеру в облачном режиме

Я решил проще, без внесения изменений в библиотеку:

#define REMOTEXY_MODE__ESP8266WIFI_LIB_CLOUD
#include <ESP8266WiFi.h> 
#include <RemoteXY.h> 
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>  

const char* REMOTEXY_WIFI_SSID=""; 
const char* REMOTEXY_WIFI_PASSWORD ="";
char ssidStr[30];
char passwStr[30];
String SSIDStr;
String PasswStr;
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com" 
#define REMOTEXY_CLOUD_PORT 6376 
#define REMOTEXY_CLOUD_TOKEN "поставьте свой токен" 
#pragma pack(push, 1) 
uint8_t RemoteXY_CONF[] = 
  { 255,1,0,0,0,20,0,8,13,0,
  2,0,34,13,22,11,2,26,31,31,
  79,78,0,79,70,70,0 }; 

struct { 
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен 
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY; 
#pragma pack(pop) 
#define PIN_SWITCH_1 13

void setup()  
{  Serial.begin(115200);
   WiFiManager wifiManager;
   wifiManager.autoConnect("AutoConnectAP");
  SSIDStr = WiFi.SSID();
  PasswStr = WiFi.psk();
  SSIDStr.toCharArray(ssidStr, SSIDStr.length()+1);
  PasswStr.toCharArray(passwStr, PasswStr.length()+1);
  
  REMOTEXY_WIFI_SSID = ssidStr;
  REMOTEXY_WIFI_PASSWORD=passwStr;
  remotexy = new CRemoteXY (RemoteXY_CONF_PROGMEM, &RemoteXY, 
  REMOTEXY_ACCESS_PASSWORD, 
  REMOTEXY_WIFI_SSID, REMOTEXY_WIFI_PASSWORD, REMOTEXY_CLOUD_SERVER, 
  REMOTEXY_CLOUD_PORT, REMOTEXY_CLOUD_TOKEN);
 
  pinMode (PIN_SWITCH_1, OUTPUT);
 } 

void loop()  
{  
  RemoteXY_Handler (); 
  digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
}

Работает хорошо, в железе проверено.