Проблема с "converting a string constant to 'char*'" в библиотеке WiFi
ошибка:
C:\Users\mrtas\Desktop\sketch_may23a\sketch_may23a.ino: In function 'void setup()':
C:\Users\mrtas\Desktop\sketch_may23a\sketch_may23a.ino:41:24:
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
WiFi.begin(SSID, PASS); //Begin WiFi
^ ^
код:
#include <DHT.h>
#include <WiFi.h>
#define DHTTYPE DHT11
#define DHTPIN 5
DHT dht(DHTPIN, DHTTYPE);
String msg = "GET /update?key=TWE505JXFTXDPNB3";
float temp;
char SSID;
char Pass;
int hum;
String tempC;
int error;
void updateTemp();
#define SSID "wifi name"
#define PASS "wifi pass"
#define IP "184.106.153.149"
void setup()
{
dht.begin();
Serial.begin(9600);
delay(10);
// Подключаемся к сети Wi-Fi
Serial.println();
Serial.print("Connecting to ");
Serial.println(SSID);
WiFi.begin(SSID, PASS); //Начать Wi-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
start:
error = 0;
temp = dht.readTemperature();
hum = dht.readHumidity();
char buffer[10];
tempC = dtostrf(temp, 4, 1, buffer);
updateTemp();
if (error == 1) {
goto start;
}
delay(5000);
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
delay(2000);
if (Serial.find("Error")) {
return;
}
cmd = msg ;
cmd += "&field1=";
cmd += tempC;
cmd += "&field2=";
cmd += String(hum);
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if (Serial.find(">")) {
Serial.print(cmd);
}
else {
Serial.println("AT+CIPCLOSE");
//Отправить...
error = 1;
}
Serial.println("AT+CWMODE=1");
delay(2000);
}
boolean connectWiFi()
{
String cmd = "AT+CWJAP=\"";
cmd += SSID;
cmd += "\",\"";
cmd += PASS;
cmd += "\"";
Serial.println(cmd);
delay(5000);
if (Serial.find("OK")) {
return true;
}
return false;
}
@tasos, 👍0
Обсуждение1 ответ
▲ 2
В основном это ошибка в библиотеке, которая ожидает "char *" когда вы предоставляете "const char *.
Вы можете обойти это, изменив:
#define SSID "wifi name"
#define PASS "wifi pass"
к:
char SSID [] = "wifi name";
char PASS [] = "wifi pass";
Это делает их непостоянными, поэтому сообщение об ошибке должно исчезнуть.
Не тестировалось. Но это общая идея.
,
@Nick Gammon
Смотрите также:
- Как публиковать запросы HTTP POST на моем веб-сайте?
- Простой запрос GET с ESP8266HTTPClient
- Ethernet nodemcu
- Энергопотребление Arduino Nano IoT
- Чтение данных из Google Таблиц с помощью Nodemcu
- NodeMCU ESP8266 отключился от WiFi после нескольких часов работы
- ESP8266 отключается через несколько часов
- esp32 http client response только 200 не получил данные после этого
Нам нужно полное сообщение об ошибке, включая информацию о том, где компилятор обнаружил проблему в вашем коде. Пожалуйста, добавьте это к вашему вопросу, @chrisl
C:\Users\mrtas\Desktop\sketch_may23a\sketch_may23a.ino: В функции 'void setup()': C:\Users\mrtas\Desktop\sketch_may23a\sketch_may23a.ino:38:24: предупреждение: ISO C++ запрещает преобразование строковой константы в 'char*' [-Wwrite-strings] WiFi.begin(SSID, ПАРОЛЬ); //Начать Wi-Fi ^ ^, @tasos
1. Пожалуйста, добавьте сообщение об ошибке к вопросу (нажмите «изменить»), а не в качестве комментария. 2. Это подозрительно похоже на проблему библиотеки WiFi, которая [была исправлена пять лет назад] (https://github.com/arduino-libraries/WiFi/commit/09051498d099f8126d4bc9f33837a0e5d1f4b5c0). Какую версию библиотеки вы используете?, @Edgar Bonet
это предупреждение, а не ошибка... действительно ли компиляция прерывается?, @jsotola
Команды WiFi.h и AT смешиваются? Что делаешь?, @Juraj
Я работаю над проектом iot и нашел код в Интернете. Я пытаюсь исправить его по частям, но я не эксперт в кодировании, это мой первый проект, я все еще студент, поэтому, если вы можете помочь, я бы очень ценю это, @tasos
Какова ваша аппаратная настройка? У вас есть ссылка на место, где вы нашли код?, @StarCat
Это проблема программного обеспечения. Аппаратное обеспечение не имеет значения., @Nick Gammon