Получена ошибка недопустимого преобразования из 'const char*' в 'const uint8_t*
Я написал этот скетч, и я пытаюсь заполнить массив точек доступа Wi-Fi, чтобы динамически задать значение в html select с помощью javascript.
#include <Arduino.h>
#include <Hash.h>
#include "ESP8266WiFi.h"
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
const char* ap_ssid = "ESP8266";
const char* ap_password = "0123456789";
// Create AsyncWebServer object on port 8080
AsyncWebServer ap_server(8080);
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html {
font-family: Arial;
display: inline-block;
margin: 0px auto;
text-align: center;
}
h2 { font-size: 3.0rem; }
p { font-size: 3.0rem; }
.units { font-size: 1.2rem; }
.dht-labels{
font-size: 1.5rem;
vertical-align:middle;
padding-bottom: 15px;
}
</style>
<script>
var select = document.getElementById("wifi");
hotspots = %wifi_networks%;
for(index in hotspots) {
select.options[select.options.length] = new Option(hotspots[index], index);
}
</head>
<body>
<h2>Connect to a Wifi Networks</h2>
<p>
<form action="#">
<label for="wifi">Choose a hotspot to connect:</label>
<select name="wifi" id="wifi">
<option value="volvo">None</option>
</select><br>
<label for="wifi">Enter password:</label>
<input type="text"></input>
<br><br>
<input type="rescan" value="Rescan">
<input type="submit" value="Connect">
</form>
</p>
</body>
</script>
</html>)rawliteral";
void setup() {
Serial.print("Setting AP (Access Point)…");
// Remove the password parameter, if you want the AP (Access Point) to be open
WiFi.softAP(ap_ssid, ap_password);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
// Print ESP8266 Local IP Address
Serial.println(WiFi.localIP());
// Route for root / web page
ap_server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send_P(200, "text/html", index_html, getWifiHotspots());
});
// Start server
ap_server.begin();
}
void loop() {
// put your main code here, to run repeatedly:
}
Но я нахожу эту ошибку
/Arduino/libraries/ESPAsyncWebServer/src/ESPAsyncWebServer.h:243:10: error: initializing argument 4 of 'void AsyncWebServerRequest::send_P(int, const String&, const uint8_t*, size_t, AwsTemplateProcessor)' [-fpermissive]
void send_P(int code, const String& contentType, const uint8_t * content, size_t len,
AwsTemplateProcessor callback=nullptr);
^
exit status 1
invalid conversion from 'const char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]
@Ciasto piekarz, 👍0
Обсуждение1 ответ
В библиотеке ESPAsyncWebServer.h определены эти два возможных варианта функций
void send_P(int code, const String& contentType, const uint8_t * content, size_t len, AwsTemplateProcessor callback=nullptr);
void send_P(int code, const String& contentType, PGM_P content, AwsTemplateProcessor callback=nullptr);
Поэтому при использовании
const char index_html[] PROGMEM = R"rawliteral(<YOUR HTML here>)rawliteral";
дайте компилятору явную инструкцию
ap_server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send_P(200, "text/html", (const uint8_t*) index_html, getWifiHotspots());
});
Код компилируется без ошибок на ArduinoIDE 1.8.12/ESP8266 2.71/ NodeMCUv1 (как не имеющий вашего определения getWifiHotspots() Я определил его как символ)
Я вижу, я получаю ошибку, потому что "index_html" имеет тип "char", а getWifiHotspots
возвращает массив " Строк`?, @Ciasto piekarz
@Ciastopiekarz Нет, как ясно указано в сообщении об ошибке, аргументом является " const char*", а функция ожидает " const uint8_t*". -- Кстати, на самом деле вы программируете C++, и правильное приведение - " static_cast<const uint8_t *>(...)`., @the busybee
- как отправить аргумент объектам ESP8266WebServer в функции
- Невозможно получить показания счетчика (Modbus)
- попытка сделать модульный код wemos d1 вызывает collect2: ошибка: ld вернул 1 статус выхода статус выхода 1
- Обновите атрибут класса с помощью attachInterrupt
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- устаревшее преобразование из строковой константы в 'char*'
- Асинхронные вызовы функций в скетче ардуино
- как быстро loop() работает в Arduino
Попробуйте принудительно выполнить преобразование в параметре функции:
send_P(200, "текст/html", (uint8_t *)index_html, getWifiHotspots());
., @JSC