Hallo alle zusammen,
ich habe gerade ein Problem, bei welchem ich mir die Zähne ausbeisse. Folgender Hintergrund:
Mittels eines ATMEGA328PB-Breakoutboards von Watterott erfasse ich Daten von einem Stromsensor. Diese Daten schicke ich über die (Hardware)serielle-Schnittstelle an einen ESP8266, auf welchem ich die Daten (wieder mit der seriellen Schnittstelle) einlese. Ziel ist der Aufbau eines Webserver um die Daten darzustellen.
Das Ganze läuft wunderbar und stabil, ich habe jedoch noch ein Problem: Ich Sketch des ESP lese ich die Daten, die ich vom ATMEGA schreibe mittels:
if (Serial.available()) {
incomingByte = Serial.read();
Serial.print(incomingValue);
}
ein. Clientseitig versende ich die Daten wieder mittels
client.println(incomingByte);
Dargestellt wird das in Abbildung 1.
Der gesamte Code (ESP-seitige Code) ist hier:
#include <ESP8266WiFi.h>
const char* ssid = "XXX";
const char* password = "XXX";
WiFiServer server(80);
int incomingByte; // for incoming serial data
int loopi = 0;
float val1 = 0.0;
char receivedChar;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
;
}
Serial.println();
Serial.print("Verbinde zu ");
Serial.println(ssid);
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" ");
Serial.println("WiFi verbunden");
server.begin();
Serial.println ("Webserver laeuft, warte auf ESP8266...");
delay(10000);
Serial.println();
Serial.println("Die IP-Adresse des Webservers lautet ");
Serial.println(WiFi.localIP());
}
void loop()
{
WiFiClient client = server.available();
if (Serial.available()) {
incomingByte = Serial.read();
Serial.print(incomingByte);
}
if (client)
{
Serial.println("Neuer Client");
while (client.connected())
{
if (client.available())
{
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<HEAD><meta http-equiv=\"refresh\" content=\"5\"></HEAD>");
client.println("Leistungsaufnahme");
client.println("
");
client.println("
");
client.println("Aktuelle Leistungsaufnahme ");
client.println(loopi); // Testvariable
client.println(incomingByte);
break;
}
}
}
delay(1000);
client.stop();
loopi++;
}
Leider werden keine Werte angezeigt (Abbildung 2) - mutmaßlich aufgrund des falschen Datentyps, den ich an client.println() übergebe.
Ich habe schon verschiedenes ausprobiert, z.B. Charakter-Datentypen, float oder Serial.parseFloat(). Leider hat nichts geholfen. Man findet unzählige Beispiele, bei denen (z.B. mittels analogread()) ein Integer-Wert an client.println() übergeben wird, aber keine unmittelbare Übergabe des Serial.read-Wertes an den Client.
Was mache ich falsch? Ich habe doch meine Variable auch als Integer deklariert?
Es würde mich sehr freuen, wenn mir jemand einen Denkanstoß geben könnte.
Vielen Dank Euch und Grüße
Bire
ESP8266_Webserver_HW_Forum.ino (2.33 KB)