Invalid conversion from 'char' to 'const char*' [

#include <WiFi.h>
#include <PubSubClient.h>

#include <Key.h>
#include <Keypad.h>
//mqtt
const char* ssid = "WLAN-Pallas";
const char* password = "Cf5jebAwxjex";
const char* mqttServer = "Server1";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";

WiFiClient espClient;
PubSubClient client(espClient);


//keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {23, 22, 3, 21};
byte colPins[COLS] = {19, 18, 5, 17};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {

  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

  client.setServer(mqttServer, mqttPort);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP32Client", mqttUser, mqttPassword )) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);

    }
  }

  client.publish("esp32/esp32test", "Hello from ESP32learning");

}

void loop() {
  char key = keypad.getKey();
  if (key) {
    Serial.println(key);
 !!!!!!   client.publish("esp32", key); !!!!!
  }

  client.loop();

}

Hallo das ist mein code und ich weiß nicht warum ich diesen error bekomme die die zeile mit den !!!!! wird rot markiert
hier noch der log

C:\Users\LostiLama\Documents\Arduino\espmqtttest\espmqtttest.ino: In function 'void loop()':
espmqtttest:72:29: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
     client.publish("esp32", key);
                             ^~~
In file included from C:\Users\LostiLama\Documents\Arduino\espmqtttest\espmqtttest.ino:2:
C:\Users\LostiLama\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:130:51: note:   initializing argument 2 of 'boolean PubSubClient::publish(const char*, const char*)'
    boolean publish(const char* topic, const char* payload);
                                       ~~~~~~~~~~~~^~~~~~~
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
 Benutzt: C:\Users\LostiLama\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\libraries\WiFi
 Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
invalid conversion from 'char' to 'const char*' [-fpermissive]

Ist das richtig rum?

Der Compiler sagt es Dir doch: key ist ein einzelner char, während publish() einen Zeiger auf eine Zeichenkette erwartet.

ok habe es verstanden aber wie soll ich das dan machen
das orginal ist client.publish("esp32","meinpayload")
esp32 ist die adresse und wie soll ich jetzt meinpayload duch den tastendruck der variabele key ersetzen ? ich kenne das nur so

Hemdsärmelig z.B. so:

char buffer[10];
buffer[0] = key;
buffer[1] = 0;
client.publish("ESP32", buffer);

Meins du

void loop() {
  char key = keypad.getKey();
  char buffer[10];
  buffer[0] = key;
  buffer[1] = 0;
  if (key) {
    Serial.println(key);
    client.publish("esp32", buffer);
  }

so

Jo, unelegant, aber könnte gehen :laughing:

habe erwartet das du nein sagst weil es nicht funktioniert
:sweat_smile:

Tut es nicht? Wenn nicht, was sind denn die Symptome?

Du hast z.B. einen potentiellen Störer durch key - wenn da ein Wert kleiner als 32 kommt, wird es nicht vernünftig als Zeichenkette verschickt werden können. Was erwartet denn der Empfänger?

also ich habe den esp mit einem keypad ich versuche das er esp per mqtt protokoll die taste die ich drücke an den server zu senden es ist eigentlich egal was dort ankommt hauptsache jede taste hat eine andere bezeichnung ob 1 jetzt a ist ist komplett egal da das alles in nodered wider einstall bar ist

ansich funktioniert alles aber es kommt halt nicht an das topic ist richtig und die start massage kommt auch an

Versuche mal, dir key irgendwo lesbar auszugeben; z.B. auf Serial:

Serial.print(key, HEX);

[Edit: Initialisierung machst du ja schon]

Versuch mal:

String bufStr = String(key);
client.publish("ESP32", bufStr);

also ich habe beides getestet bei deinem miq1 bekam ich nur die zahl 0 und beim drücken kam nichts

bei dem anderen bin ich mir nicht richtig sicher da ich dort den fehler von oben wieder bekomme

Big FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
das keypad war noch mit den falschen pins verbunden hir der code wer ihn für später noch baucht

#include <WiFi.h>
#include <PubSubClient.h>

#include <Key.h>
#include <Keypad.h>
//mqtt
const char* ssid = "your wifi name here";
const char* password = "your wifi password here";
const char* mqttServer = "your mosquito server ip here or name like server1";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";

WiFiClient espClient;
PubSubClient client(espClient);


//keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {23, 22, 3, 21};
byte colPins[COLS] = {19, 18, 5, 17};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {

  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

  client.setServer(mqttServer, mqttPort);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP32Client", mqttUser, mqttPassword )) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);

    }
  }

  client.publish("esp32/esp32test", "Hello from ESP32learning");

}

void loop() {
  char key = keypad.getKey();
  char buffer[10];

  buffer[0] = key;
  if (key) {
    Serial.println(key);
    client.publish("esp", buffer);
  }

  client.loop();

}

Einen Versuch noch:

  const char bufStr[] = {key, '\0'};
  client.publish("ESP32", bufStr);

es war eine kombination aus beidem der code war falsch und die pins waren nicht angeschlossen

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Hallo ch habe einen cool down mit dem schreiben adde mich auf discord LostiLama#6155

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vorsicht, der ist uninitialisiert - da kann alles drin stehen.
Versuch mal meinen Zweizeiler. Notfalls ohne const.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.