Hallo zusammen
Ich habe ein ESP8266 und ein Raspberry mit Python und möchte mich per Json verbinden
Ich habe ein ESP8266 von den Ich Messwerte bekomme und möchte die per Json auf den Raspberry übertragen.
Von ESP8266 bekomme ich folgende Antwort:
{"wert1":"125","wert2":"123","wert3":"456"}
Wenn ich versuche die Json per Raspberry abzufragen folgende Fehlermeldung:
Traceback (most recent call last):
File "esp_auslesen.py", line 5, in <module>
data = json.loads(response.read())
File "/usr/lib/python2.7/httplib.py", line 1399, in read
return s + self._file.read()
File "/usr/lib/python2.7/socket.py", line 355, in read
data = self._sock.recv(rbufsize)
socket.error: [Errno 104] Connection reset by peer
Meine Frage ist jetzt: Was mache ich nicht richtig?
Danke für die Antwort
Von ESP8266
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "abc";
const char* password = "123";
WiFiServer server(80); // Wir richten den Webserver auf Port 80 ein
int abc = 123;
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.printf("Verbinde mit %s ", ssid);
WiFi.begin(ssid, password); // Versucht mit WLAN Name und Schlüssel zu verbinden
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" verbunden");
server.begin();
Serial.printf("Webserver gestartet, öffnen Sie %s in einem Webbrowser\n", WiFi.localIP().toString().c_str());
}
// Inhalt der Weibseite generieren
String prepareHtmlPage()
{
abc = abc + 1;
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["wert1"] = String(abc);
root["wert2"] = "123";
root["wert3"] = "456";
String rootwert;
root.printTo(rootwert);
return rootwert;
// return htmlPage;
}
void loop()
{
WiFiClient client = server.available();
// warten auf Verbindung vom Client (Webbrowser)
if (client)
{
Serial.println("\n[Client hat sich verbunden]");
while (client.connected())
{
// zeilenweise einlesen was der Client (Webbrowser) anfragt
if (client.available())
{
String line = client.readStringUntil('\r');
Serial.print(line);
// bis zum Ende der Anfrage warten (=Leerzeile)
if (line.length() == 1 && line[0] == '\n')
{
client.println(prepareHtmlPage()); // Antwort ausgeben
break;
}
}
}
delay(1000); // dem Browser Zeit geben um die Antwort zu empfangen
// Die Verbindung schließen:
client.stop();
Serial.println("[Client getrennt]");
Serial.print("C = ");
Serial.println(abc);
delay(10);
}
}
Von Raspberry:
import urllib, json
url = "http://192.168.1.14"
response = urllib.urlopen(url)
data = json.loads(response.read())
print data
Display More