-1

StandESP8266 で AP 名を+ MAC アドレスからセミコロンを引いたものに設定しようとしていますStand5CCF7F238734

GetMyMacAddress()私が書いた関数は明らかに機能しており、シリアル出力はそれを示しています。

String または char 変数を渡そうとするたびwifiManager.autoConnect()に、コンパイラ エラーが発生します。ヘッダー ファイルは文字列型を識別しますが。

私が合格したmacStr場合、または*macStr

「char」から「const char*」への無効な変換 [-fpermissive]

ap2(文字列型)を渡すと、次のようになります。

「WiFiManager::autoConnect(String&)」の呼び出しに一致する関数がありません

私のコード:

#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, "%02X%02X%02X%02X%02X%02X", mac[0],  mac[1], mac[2], mac[3], mac[4], mac[5]); // no :'s
  // sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", 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
4

1 に答える 1

2

ap2 String オブジェクトを使用する場合は、次のような const キャストで char 配列を使用する必要があります。

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

動的に割り当てられた macStr を使用している理由がわかりませんでした。ap2 の char 配列で十分に処理できます。それにもかかわらず、それでも使用したい場合は、次のようにしてください:

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

幸運を!

于 2016-10-14T05:32:44.543 に答える