Const char* serverName = ersetzen mit IP adresse

Hallo
habe viele anleitungen gefunden über Netzwerkverbindungen aber keine passende.
Das ist der Standarteintrag:
const char* serverName = "http://example.com/esp-post-data.php";
Ich brache aber was mit IP:
"const char* serverName = "http://example.com/tempzeit.php";"
gefunden habe ich etwas damit
"IPAddress server (192.168.1.22);" 
Klar das geht nicht wenn ich local.host mit IP ersetze:
Compilation error: invalid operands of types 'const char*' and 'const char [11]' to binary 'operator+'

if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    String serverPath = serverName + "?tempzeit=" + tempzeit;
    Serial.println(serverPath);

    http.begin(serverPath);
    int httpResponseCode = http.GET();

    if (httpResponseCode > 0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      String payload = http.getString();
      Serial.println(payload);
    } else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    http.end();
  } else {
    Serial.println("WiFi Disconnected");
  }

example.com” kann ich nicht nutzen ( Keine Dmainnamen ) dafür IP Adressen

kan mir jemand mal erklären wie ich domainnamen in ip umgestellt bekomme

Magst du uns denn auch erklären, was du erreichen möchtest ?

verbinde dich einfach an die IP und nicht an eine Domain.

Für welchen Microcontroller programmierst du?
Zeig uns ein vollständiges Ausgangsprogramm (was war die Basis nach der du Nachbaust?).

Irgendwie werde ich aus Deinem Beitrag nicht schlau.
Welchen MC verwendest Du?
In den meisten Fällen gibt es eine Funktion hostByName die Dir über das DNS-System die IP ermittelt.

Gruß Tommy

Moin @adruinonewbie ,

anscheinend möchtest Du einen http.GET-Aufruf von einem ESP32 an einen Server programmieren, korrekt?

Ein serverName mit IP kann beispielsweise so aussehen:

String serverName = "http://192.168.1.106:1880/update-sensor";

Dieses Beispiel gilt für eine Node-Red-Anwendung auf einem Raspberry Pi ...

In serverName wird nur die Domain durch die feste IP ersetzt.

z.B:

const char* serverName = "http://192.168.0.100/esp-post-data.php";

WICHTIG: Die Adresse darf sich dann nicht mehr ändern, wenn Du die Namensauflösung nicht nutzt.

Alles andere bleibt wie es ist.

Der Original Sketch:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <MFRC522.h>
#include <SPI.h>

#define SS_PIN D8
#define RST_PIN D0

MFRC522 mfrc522(SS_PIN, RST_PIN);

const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* serverName = "http://YOUR_SERVER_IP_OR_DOMAIN/insert_rfid.php";

void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();

Serial.println("NodeMCU RFID Reader");
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Scan a RFID tag...");
}

void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

String rfid_uid = "";
Serial.print("UID tag :");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
rfid_uid += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
rfid_uid += String(mfrc522.uid.uidByte[i], HEX);
}
rfid_uid.toUpperCase();
Serial.println();
Serial.print("UID String: ");
Serial.println(rfid_uid);

if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = serverName + "?rfid_uid=" + rfid_uid;
Serial.println(serverPath);

http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
  Serial.print("HTTP Response code: ");
  Serial.println(httpResponseCode);
  String payload = http.getString();
  Serial.println(payload);
} else {
  Serial.print("Error code: ");
  Serial.println(httpResponseCode);
}
http.end();

} else {
Serial.println("WiFi Disconnected");
}

delay(3000);
}

Mein angepasster Sketch:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <MFRC522.h>
#include <SPI.h>

#define SS_PIN D8
#define RST_PIN D2

MFRC522 mfrc522(SS_PIN, RST_PIN);

const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* serverName = "http://192.168.1.254/myscript.php";

const char* tempzeit = “AbC|@|cBa“; //Test für Daten später

void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();

Serial.println("NodeMCU RFID Reader");
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Scan a RFID tag...");
}

void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

String rfid_uid = "";
Serial.print("UID tag :");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
rfid_uid += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
rfid_uid += String(mfrc522.uid.uidByte[i], HEX);
}
rfid_uid.toUpperCase();
Serial.println();
Serial.print("UID String: ");
Serial.println(rfid_uid);

if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = serverName + "?tempzeit=" + tempzeit;
Serial.println(serverPath);

http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
  Serial.print("HTTP Response code: ");
  Serial.println(httpResponseCode);
  String payload = http.getString();
  Serial.println(payload);
} else {
  Serial.print("Error code: ");
  Serial.println(httpResponseCode);
}
http.end();

} else {
Serial.println("WiFi Disconnected");
}

delay(3000);
}

Bekomme Fehlermeldung beim kompeilern:

C:\Users\ich\AppData\Local\Temp.arduinoIDE-unsaved2025622-1872-1aruzqa.lqar\sketch_jul22a\sketch_jul22a.ino: In function 'void loop()':

C:\Users\ich\AppData\Local\Temp.arduinoIDE-unsaved2025622-1872-1aruzqa.lqar\sketch_jul22a\sketch_jul22a.ino:62:36: error: invalid operands of types 'const char*' and 'const char [11]' to binary 'operator+'
62 | String serverPath = serverName + "?tempzeit=" + tempzeit;
| ~~~~~~~~~~ ^ ~~~~~~~~~~~~
| | |
| const char* const char [11]

exit status 1

Compilation error: invalid operands of types 'const char*' and 'const char [11]' to binary 'operator+'

^ = steht unter dem + bei servername + “=tempzeit

Hmm... das sind alles C-Strings...
Da müsstest du mit strcat arbeiten oder probier mal das:

String serverPath = String(serverName) + "?tempzeit=" + tempzeit;

Und bitte repariere deine Code-Tags.

Habe alles entfernt was mir nicht wichtig ist. ( Anzeigen im Monitor ).

#include <ESP8266WiFi.h>

#include <ESP8266HTTPClient.h>

#include <MFRC522.h>

#include <SPI.h>

#define SS_PIN D8

#define RST_PIN D2

MFRC522 mfrc522(SS_PIN, RST_PIN);

const char* ssid = "my_SSID";

const char* password = "my_PASSWORD";

const char* serverName = "http://192.168.1.254/tz.php";

String tempzeit = "abccba";

void setup() {

  Serial.begin(115200);

  SPI.begin();

  mfrc522.PCD_Init();

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.println("Scan a RFID tag...");

}

void loop() {

  if ( ! mfrc522.PICC_IsNewCardPresent()) {

    return;

  }

  if ( ! mfrc522.PICC_ReadCardSerial()) {

    return;

  }

  String rfid_uid = "";

  for (byte i = 0; i < mfrc522.uid.size; i++) {

    rfid_uid += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");

    rfid_uid += String(mfrc522.uid.uidByte[i], DEC);

  }

  rfid_uid.toUpperCase();

  if (WiFi.status() == WL_CONNECTED) {

    HTTPClient http;

    String serverPath = String(serverName) + "?tempzeit=" + tempzeit;

    Serial.println(serverPath);

    http.begin(serverPath);

    int httpResponseCode = http.GET();

    if (httpResponseCode > 0) {

      Serial.print("HTTP Response code: ");

      Serial.println(httpResponseCode);

      String payload = http.getString();

      Serial.println(payload);

    } else {

      Serial.print("Error code: ");

      Serial.println(httpResponseCode);

    }

    http.end();

  } else {

    Serial.println("WiFi Disconnected");

  }

  delay(3000);

}

Mein Ziel ist es Datum und Temparatur erst dann in Tabelle mit dazu gehörenden Chip zu speichern.

Aber erst mal soll mein Sketch nach lesen vom Chip eine verbindung aufbauen mit meinem Webserver worauf eine DB läuft.

C:\Users\ich\Desktop\nrd\nrd.ino: In function 'void loop()':
C:\Users\ich\Desktop\nrd\nrd.ino:41:15: error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
   41 |     http.begin(serverPath);
      |     ~~~~~~~~~~^~~~~~~~~~~~

exit status 1

Compilation error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)

Der Fehler besteht weiter.

Wo hast du den das Beispiel her?

Das Problem ist jetzt ein anderes...

http.begin(serverPath); gibts nicht mehr, sondern du sollst begin mit 2 Parametern aufrufen.

Schau dir mal das Beispiel an:

Habe aus 2 sketche nun eine wo ich zugriff auf DB habe

Danke vielmals