ОШИБКА: вернуть reinterpret_cast<T>(pgm_read_ptr(p));
Мне нужно обновить данные датчика DHT на веб-сервере в формате JSON, используя ESP8266. Это мой код.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#include <ArduinoJson.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR PASSWORD";
const int dhtPin = D4;
DHT dht(dhtPin, DHT11);
ESP8266WebServer server(80);
void handleRoot() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
server.send(500, "text/plain", "Failed to read from DHT sensor");
return;
}
StaticJsonDocument<200> jsonDoc;
jsonDoc["temperature"] = temperature;
jsonDoc["humidity"] = humidity;
String jsonString;
serializeJson(jsonDoc, jsonString);
server.send(200, "application/json", jsonString);
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
dht.begin();
server.on("/", handleRoot);
server.begin();
Serial.println("Server started");
}
void loop() {
server.handleClient();
}
Но я получил ошибку типа:
In file included from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/static_array.hpp:11:0,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Numbers/FloatTraits.hpp:14,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Numbers/FloatParts.hpp:8,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Json/TextFormatter.hpp:11,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Json/JsonSerializer.hpp:7,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/ConverterImpl.hpp:7,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:37,
from c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
from C:\Users\Kuralmozhi.R\Downloads\ID_2\ID_2.ino:5:
c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace_generic.hpp: In instantiation of 'typename ArduinoJson6193_F1::enable_if<ArduinoJson6193_F1::is_pointer<T>::value, T>::type ArduinoJson6193_F1::pgm_read(const void*) [with T = const __FlashStringHelper*; typename ArduinoJson6193_F1::enable_if<ArduinoJson6193_F1::is_pointer<T>::value, T>::type = const __FlashStringHelper*]':
c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Deserialization/DeserializationError.hpp:85:12: required from here
c:\Users\Kuralmozhi.R\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace_generic.hpp:15:45: error: 'const void*' is not a pointer-to-object type
return reinterpret_cast<T>(pgm_read_ptr(p));
^
exit status 1
Compilation error: exit status 1
Я не знаю, как устранить эту ошибку. Пожалуйста, предложите мне несколько идей!
Я пытался обновить ESP8266. Но сейчас это выглядит вот так:
Variables and constants in RAM (global, static), used 28984 / 80192 bytes (36%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1504 initialized variables
╠══ RODATA 1376 constants
╚══ BSS 26104 zeroed variables
Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60439 / 65536 bytes (92%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 27671 code in IRAM
Code in flash (default, ICACHE_FLASH_ATTR), used 273120 / 1048576 bytes (26%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 273120 code in flash
@Kuralmozhi, 👍0
Обсуждение1 ответ
Лучший ответ:
Используя информацию из ссылки, которую Фахад предоставил в комментариях, я могу только предположить: ваш ESP8266 определения плат устарели, а старая версия определений плат ESP8266 содержит ошибку.
В сети имеется устаревший URL-адрес JSON определения платы ESP8266. Я думаю, что вы нашли его. URL-адрес все еще работает, но больше не обновляется. Проверьте версию определений вашей платы ESP8266: откройте диспетчер плат (Инструменты -> Плата -> Менеджер плат
), найдите ESP8266 и убедитесь, что версия не ниже 3.1.2 (текущая версия). версию на момент написания этой статьи; я не знаю самой низкой версии, в которой исправлена эта ошибка).
Если Board Manager не предлагает обновиться до версии 3.1.2 (или более поздней), вам может потребоваться указать текущий URL-адрес определений платы в Файл -> > Настройки -> Вкладка «Настройки»; -> Дополнительные URL-адреса менеджера плат
. Удалите старый URL-адрес ESP8266, но не удаляйте URL-адреса других плат. Затем попробуйте еще раз обновиться с помощью Board Manager:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Это работает! Огромное спасибо, Оритена!!, @Kuralmozhi
- Как отправить HTTP-post данные в Node Express API с Arduino esp822 6?
- Esp8266 не отвечает на запрос от приложения для Android, созданного с помощью MIT App Inventor
- Ошибка при компиляции скетча для Arduino Uno (ld return 1)
- Существуют ли какие-либо модули Wi-Fi для Arduino или Uno, которые можно подключить к внешней антенне Wi-Fi?
- Esp8266 + Atmega328p в качестве прошивки
- Создание WebServer ip:port на модуле esp8266
- Перистальтический насос с датчиком pH и веб-проектом вывода данных
- У меня есть код, печатающий нужные мне данные, но я не знаю, как подключить данные к IP-веб-серверу ESP8266.
Пожалуйста, скопируйте и вставьте фактическую ошибку, включая номер строки, а не что-то вроде ошибки. Отредактируйте свой вопрос, чтобы сделать это., @Nick Gammon
Похоже на [эту проблему](https://github.com/bblanchon/ArduinoJson/issues/1442)., @Fahad
Я не могу понять эту проблему. Можете ли вы объяснить вкратце?, @Kuralmozhi
Какую версию Arduino IDE вы используете?, @Nick Gammon
На странице, на которую ссылается Фахад, предлагается: Я предлагаю вам обновить или переустановить ядро ESP8266 для Arduino. Если это по-прежнему не работает, вы можете отключить поддержку PROGMEM, пока мы не выясним, в чем дело (см. ARDUINOJSON_ENABLE_PROGMEM)., @Nick Gammon
Какая у вас проблема с выводом после обновления? На мой взгляд, это удачная сборка., @the busybee