Как передать переменную в WifiManager.AutoConnect() для присвоения имени точке доступа

#arduino #esp8266 #wifimanager #arduino-esp8266

#arduino #esp8266 #wifimanager #arduino-esp8266

Вопрос:

Я пытаюсь заставить свой ESP8266 установить для имени точки Stand доступа значение MAC-адрес минус точка с запятой, например Stand5CCF7F238734 .

GetMyMacAddress() Функция, которую я написал, явно работает, последовательный вывод показывает это.

Каждый раз, когда я пытаюсь передать переменную String или char wifiManager.autoConnect() , я получаю ошибки компилятора. Несмотря на то, что в заголовочном файле указан строковый тип.

Если я передам macStr или *macStr

недопустимое преобразование из ‘char’ в ‘const char *’ [-fpermissive]

Если я передам ap2 (строковый тип) Я получаю:

нет соответствующей функции для вызова ‘WifiManager::AutoConnect (Stringamp;)’

Мой код:

 #include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>

String ap = "Stand";
String ap2;
uint8_t mac[6];
char const macStr[19] = {0};

void setup() {
    Serial.begin(115200);
    WiFiManager wifiManager;  //WiFiManager -- Local intialization.

    ap2 = ap   GetMyMacAddress();

    //std::string ap2;
    char *macStr = new char[ap2.length()  1 ];
    strcpy(macStr, ap2.c_str());

    //fetches ssid and pass from eeprom and tries to connect
    //if connect fails it starts an access point with the specified name
    //here  "AutoConnectAP" and goes into a loop awaiting configuration

    wifiManager.autoConnect( "Stand" );
    //or use this for auto generated name ESP   ChipID
    //wifiManager.autoConnect();

    //if you get here you have connected to the WiFi
    Serial.println("connected...yeey :)");
    Serial.print("ap2"); Serial.print("    " ); Serial.print( ap2); Serial.println(" String");
    Serial.print("macStr"); Serial.print(" "); Serial.print( macStr ); Serial.println(" Char");
}

void loop() {
}

String GetMyMacAddress()
{
  uint8_t mac[6];
  char macStr[18] = {0};
  WiFi.macAddress(mac);
  sprintf(macStr, "XXXXXX", mac[0],  mac[1], mac[2], mac[3], mac[4], mac[5]); // no :'s
  // sprintf(macStr, "X:X:X:X:X:X", mac[0],  mac[1], mac[2], mac[3], mac[4], mac[5]);  // with :'s
  return  String(macStr);
}
  

При подключении последовательные выходы:

 connected...yeey :)
ap2    Stand5CCF7F238734 String
macStr Stand5CCF7F238734 Char
  

Комментарии:

1. О чем wifiManager.autoConnect(ap2.c_str(), NULL); ?

Ответ №1:

Если вы хотите использовать строковый объект ap2, вам нужно использовать его массив символов с приведением const, например :

 wifiManager.autoConnect((const char*)ap2.c_str());
  

Я не понял, почему вы используете динамический выделенный macStr, массива символов ap2 будет достаточно для его обработки. Несмотря на это, все же, если вы хотите ее использовать, попробуйте, например :

 wifiManager.autoConnect((const char*)macStr);
  

Удачи!

Комментарии:

1. ТЕПЕРЬ РАБОТАЕТ. WifiManager.AutoConnect((const char*)ap2.c_str()); сделал свое дело. Мне все еще нужно найти действительно хорошую ссылку на различные типы данных и преобразования.