Проблема с "converting a string constant to 'char*'" в библиотеке WiFi

iot

ошибка:

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;
}

, 👍0

Обсуждение

Нам нужно полное сообщение об ошибке, включая информацию о том, где компилятор обнаружил проблему в вашем коде. Пожалуйста, добавьте это к вашему вопросу, @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


1 ответ


2

В основном это ошибка в библиотеке, которая ожидает "char *" когда вы предоставляете "const char *.

Вы можете обойти это, изменив:

#define SSID "wifi name"
#define PASS "wifi pass"

к:

char SSID [] =  "wifi name";
char PASS [] =  "wifi pass";

Это делает их непостоянными, поэтому сообщение об ошибке должно исчезнуть.

Не тестировалось. Но это общая идея.

,