#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()); сделал свое дело. Мне все еще нужно найти действительно хорошую ссылку на различные типы данных и преобразования.