Adafruit_MQTT ESP8266 Topic mit ESP.getChipId() erweitern

Hallo,

ich baue mir gerade eine Sensor Umgebung auf basis ESP8266 WeMos und MQTT. Als MQTT Server möchte ich vorerst CloudMQTT verwenden.

Als Topic Link soll generiert werden "/ChipId/Sensortype" (Bsp: /a3450a/temp - 22.25)

Ich habe alles mögliche Versucht den char entsprechend zu erweitern. Zugegebenermaßen komme ich mit char nicht wirklich gut zurecht.

Mein erster Ansatz: String zusammenbauen und dann über toCharArray() wandeln. Die Funktion läuft aber vor setup() nicht und bringt einen Fehler.

Kann mir jemand helfen, wie ich die chipID in den char bekomme?

//MQTT
#ifndef WIFI_CONFIG_H
#define AIO_SERVER      "m21.cloudmqtt.com"
#define AIO_SERVERPORT  15193
#define AIO_USERNAME    "***USER***"
#define AIO_KEY         "***KEY ***"
#endif // !WIFI_CONFIG_H

//#define MQTT_DEBUG

char humidity_FEED[] = "/humidity";
char temp_FEED[] = "/temp";
char brightness_FEED[] = "/brightness";

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

Adafruit_MQTT_Publish mqtt_humidity = Adafruit_MQTT_Publish(&mqtt, humidity_FEED);
Adafruit_MQTT_Publish mqtt_temp = Adafruit_MQTT_Publish(&mqtt, temp_FEED);
Adafruit_MQTT_Publish mqtt_brightness = Adafruit_MQTT_Publish(&mqtt, brightness_FEED);

Ich habe zu Zeichenketten mal eine Zusammenfassung geschrieben.

Gruß Tommy

Tommy56:
Ich habe zu Zeichenketten mal eine Zusammenfassung geschrieben.

Gruß Tommy

Super Zusammenfassung. Das bringt mich weiter. Hast du noch einen Tipp für mich, wie ich die ChipID (long int) einfach in ein char bekomme? Dann könnte ich deine eben gelernten char Verkettung gleich anwenden. Das was ich schon probiert habe geht alles nicht vor von setup{} bzw. loop{}

Schau Dir mal ltoa (für long to ascii) bzw. ultoa (unsigned long to ascii) an.

Gruß Tommy

Dank Tommy56 bin ich gut weiter gekommen. Ich habe noch eine Formatierungsfrage.

Mein char baue ich nun so zusammen.

long  chipid = ESP.getChipId();

char chipid_Topic[10];
char humidity_Topic[20];

ultoa(chipid, chipid_Topic, 8); // ChipID2Char
strcat(humidity_Topic, chipid_Topic); // Chip ID anhängen
strcat(humidity_Topic, "/humidity");  // Type anhängen

Nun hätte ich nur gern die ChipId in Hex und nicht dezimal.
Ist: 1630371/humidity
Soll: 18E0A3/humidity
Mit String geht das so - String(ESP.getChipId(), HEX) Wie mache ich das aber mit char?

Schau mal den Parameter radix an, der ist in deinem Sketch eh falsch

Ich habe es leider nicht wirklich verstanden, aber der Syntax bringt was ich will:

ultoa(chipid, chipid_Topic, HEX);

16 als radix wäre auch gegangen. Die IDE macht aus HEX den Wert 16. Das ist die Basis des Hexadezimalsystems