ESPEASY 2 ESP verbinden

Hallo

Hat einer schonmal Erfahrung gemacht mit ESPEASY?

Möchte gerne 2 ESP8266 miteinander verbinden so das der 1. ESP8266 mit einem BME280 die Daten
an einen 2. ESP8266 mit LCD Display hd44780 20x4 sendet und die Temperatur auf dem Display angezeigt werden.

Hab es erst mit der Arduino IDE versucht da gibt es ja Scripte für und auch eines mit Oled Display SSD1306 was ich auch als Grundlage genommen hab und alles geändert hab was Display technisch reingehört nur angezeigt hat es nix.

Nun hab ich ESP Easy hergenommen an sich schöne Sache. Die Sensordaten werden in der Weboberfläche angezeigt. der 2. esp8266 hat Display und funktioniert auch soweit. Wie bekomme ich das nun hin das die Sensordaten vom 1 esp zum 2 gesendet werden. den Punk ESPEasy P2P Networking ist aktiviert auf beiden esp8266 nur einstellen kann ich da rein garnix.

Hat jemand eine Idee.

Lieben Dank im vorraus.

PS Villeicht wichtig: Der 1. ESP8266 soll im Garten die Daten per WLAN an den 2. ESP8266 im Haus senden

Hier wirst Du mit ESP Easy wohl weniger Glück haben. Die haben doch ein eigenes Forum, da wäre Deine Frage wahrscheinlich besser aufgehoben.

Gruß Tommy

das hab Ich nicht gewusst ich experimentiere schon den ganzen Tag hab eigendlichg auch ein code der funktioniert aber eben nur mit den sehr kleinen Oled SSD1306 Display und nicht mit dem hd44780 4x20 was schön wäre

liebe grüsse

Hi

Naja - Es kommt halt soch nicht nur auf die Größe an ...
Eigentlich würde ich sogar behaupten wollen, daß ein 08/15 LCD (die ganzen HD44780 kompatiblen) wesentlich einfacher zu bedienen sind, als ein OLED.
Aber 'Einfach' ist meist nur, was man hinbekommt ;).

MfG

Moin, da kann ich dir doch vielleicht weiterhelfen.
Mit ESPEasy hab ich auch mal angefangen, aber ich denke das ist nicht ganz optimal für dich.
Aber schau mal hier rein, das kann ich dir empfehlen:

Lieben Gruß,
Chris

naja es muss nicht unbedingt espeasy sein

das z.B. ist der Code den ich angefangen hab für den Clienbt an dem das Display hängt

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;

LiquidCrystal_I2C lcd(0x27, 20, 4);

const char* ssid = "ESP8266-Access-Point";
const char* password = "WL-TA220";
//Your IP address or domain name with URL path
const char* serverNameTemp = "http://192.168.4.1/temperature";
const char* serverNameHumi = "http://192.168.4.1/humidity";
const char* serverNamePres = "http://192.168.4.1/pressure";

#include <Wire.h>




// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
String temperature;
String humidity;
String pressure;

unsigned long previousMillis = 0;
const long interval = 5000; 

void setup() {
  //lcd.init();
  Serial.begin(115200);
  Serial.println();
  
  // Address 0x27 for 20x4, you might need to change this value (use an I2C scanner)
    Serial.println(F("hd447680 allocation failed"));
    for(;;); // Don't proceed, loop forever
 
 
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(ssid, password);
  while((WiFiMulti.run() == WL_CONNECTED)) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
}

void loop() {
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis >= interval) {
     // Check WiFi connection status
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      temperature = httpGETRequest(serverNameTemp);
      humidity = httpGETRequest(serverNameHumi);
      pressure = httpGETRequest(serverNamePres);
      Serial.println("Temperature: " + temperature + " *C - Humidity: " + humidity + " % - Pressure: " + pressure + " hPa");

     lcd.clear();
      // display temperature
      //display.setTextSize(2);
      //display.setCursor(0,0);
      //display.print("T: ");
      //display.print(temperature);
      //display.print(" ");
      //display.setTextSize(1);
      //display.cp437(true);
      //display.write(248);
      //display.setTextSize(2);
      //display.print("C");
      
      // display humidity
      //display.setTextSize(2);
      //display.setCursor(0, 25);
      //display.print("H: ");
      //display.print(humidity);
      //display.print(" %"); 
      
      // display pressure
      //display.setTextSize(2);
      //display.setCursor(0, 50);
      //display.print("P:");
      //display.print(pressure);
      //display.setTextSize(1);
      //display.setCursor(110, 56);
      //display.print("hPa");
           
      //display.display();
  lcd.begin();     
  lcd.clear();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Temperatur: "); lcd.print(temperature); lcd.print(" *C");
  lcd.setCursor(0, 1);
  lcd.print("Luftfeuchte: "); lcd.print(humidity); lcd.print(" %");
  lcd.setCursor(0, 2);
  lcd.print("Druck: "); lcd.print(pressure); lcd.print(" hPa");
  lcd.setCursor(0, 3);
  lcd.print("(c)2020 by Th.Alex");
      
      // save the last HTTP GET Request
      previousMillis = currentMillis;
    }
    else {
      Serial.println("WiFi Disconnected");
    }
  }
}

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;
    
  // Your IP address with path or Domain name with URL path 
  http.begin(client, serverName);
  
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  
  String payload = "--"; 
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

das Problem ist das nix angezeiht wird. Der Server sendet seine Daten das läuft denn die kann ich per browser aufrufen.

Danke im vorraus

Hitman43:

void setup() {

//lcd.init();
  Serial.begin(115200);
  Serial.println();
 
  // Address 0x27 for 20x4, you might need to change this value (use an I2C scanner)
    Serial.println(F("hd447680 allocation failed"));
    for(;;); // Don't proceed, loop forever

Ab hier tut sich nichts mehr. Wie soll er da etwas anzeigen?

Gruß Tommy

for(;;); // Don't proceed, loop forever

String GoogleTranslate = "Fahren Sie nicht fort, machen Sie eine Schleife für immer";
for(;;);

„Das hat dir der Teufel gesagt!“

Gruß Fips

Böse Zungen behaupten, daß Das eigentlich in einer IF steht, Die erfüllt ist, wenn ein Speicherbereich nicht 'gesetzt' werden konnte - würde zumindest die serielle Ausgabe drauf schließen lassen.
Dort ist Das 'Bleibe hier für IMMER stehen' durchaus sinnig - ohne den Speicher, geht's eh nicht weiter.

Wird wohl nicht der komplette Code sein, oder es wurden nur hier und da Bestandteile gelöscht, ohne den Sinn des Rest erkannt zu haben.

MfG

hallo

habe den code nochmal geändert

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp8266-client-server-wi-fi/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;
LiquidCrystal_I2C lcd(0x27,4,20);

const char* ssid = "ESP8266-Access-Point";
const char* password = "WL-TA220";

//Your IP address or domain name with URL path
const char* serverNameTemp = "http://192.168.4.1/temperature";
const char* serverNameHumi = "http://192.168.4.1/humidity";
const char* serverNamePres = "http://192.168.4.1/pressure";

#include <Wire.h>
//#include <Adafruit_GFX.h>
//#include <Adafruit_SSD1306.h>

//#define SCREEN_WIDTH 128 // OLED display width, in pixels
//#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

String temperature;
String humidity;
String pressure;

unsigned long previousMillis = 0;
const long interval = 5000; 

void setup() 
{
  lcd.init();
  Serial.begin(115200);
  Serial.println();
  // Address 0x3C for 128x64, you might need to change this value (use an I2C scanner)
  //if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    //for(;;); // Don't proceed, loop forever
  }
  //display.clearDisplay();
  lcd.backlight();
  lcd.clear();
  lcd.home();
  //display.setTextColor(WHITE);
 
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(ssid, password);
  while((WiFiMulti.run() == WL_CONNECTED)) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
}

void loop() {
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis >= interval) {
     // Check WiFi connection status
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      temperature = httpGETRequest(serverNameTemp);
      humidity = httpGETRequest(serverNameHumi);
      pressure = httpGETRequest(serverNamePres);
      Serial.println("Temperature: " + temperature + " *C - Humidity: " + humidity + " % - Pressure: " + pressure + " hPa");
      
      display.clearDisplay();
      
      // display temperature
      //display.setTextSize(2);
      //display.setCursor(0,0);
      lcd.setCursor(0,0);
      //display.print("T: ");
      lcd.print("T: ");
      //display.print(temperature);
      lcd.print(temperature);
      //display.print(" ");
      //display.setTextSize(1);
      //display.cp437(true);
      //display.write(248);
      //display.setTextSize(2);
      //display.print("C");
      lcd.print("C");
      
      // display humidity
      //display.setTextSize(2);
      //display.setCursor(0, 25);
      lcd.setCursor(0,1);
      //display.print("H: ");
      lcd.print("H:");
      //display.print(humidity);
      lcd.print(humidity);
      //display.print(" %"); 
      lcd.print("%");
      
      // display pressure
      //display.setTextSize(2);
      //display.setCursor(0, 50);
      lcd.setCursor(0,2);
      //display.print("P:");
      lcd.print("P:");
      //display.print(pressure);
      lcd.print(pressure);
      //display.setTextSize(1);
      //display.setCursor(110, 56);
      //display.print("hPa");
      lcd.print("hPa");
           
      //display.display();
      
      // save the last HTTP GET Request
      previousMillis = currentMillis;
    }
    else {
      Serial.println("WiFi Disconnected");
    }
  }
}

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;
    
  // Your IP address with path or Domain name with URL path 
  http.begin(client, serverName);
  
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  
  String payload = "--"; 
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

bekomme das isrgendwie nicht hin der server den die daten sendet immer nur bekomme ich statt den SSD1306 kein hd44780 danran in betrieb auch wenn ich die relevanten sachen änder

Nimm doch erst mal ein Beispiel Deiner LCD-Lib und versuche das LCD damit zum Laufen zu bekommen.
Vorher ist alles andere sinnlos.
Deinen Code mit den laufenden Auskommentierungen kann man sich ja nicht antun.

Gruß Tommy

Das LCD Display funktioniert habb ich es ja schon in einem anderen Project verwendet daher weis ich wie es anzusteuern ist. nur will es es in dem Code nicht wo normal das SSD1306 Display reingehört.

Das mit dem Auskommentieren hatte ich nur gemacht damit ich weis wo was rein kommt. Habe in dem Code alles rausgenommen was auskommentiert war nu sollte er besser lesbar sein

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;
LiquidCrystal_I2C lcd(0x27,4,20);

const char* ssid = "ESP8266-Access-Point";
const char* password = "WL-TA220";

//Your IP address or domain name with URL path
const char* serverNameTemp = "http://192.168.4.1/temperature";
const char* serverNameHumi = "http://192.168.4.1/humidity";
const char* serverNamePres = "http://192.168.4.1/pressure";

#include <Wire.h>

String temperature;
String humidity;
String pressure;

unsigned long previousMillis = 0;
const long interval = 5000; 

void setup() 
{
  lcd.begin();
  Serial.begin(115200);
  Serial.println();
  Serial.println(F("SSD1306 allocation failed"));

  }
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(ssid, password);
  while((WiFiMulti.run() == WL_CONNECTED)) { 
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
}

void loop() {
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis >= interval) {
     // Check WiFi connection status
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      temperature = httpGETRequest(serverNameTemp);
      humidity = httpGETRequest(serverNameHumi);
      pressure = httpGETRequest(serverNamePres);
      Serial.println("Temperature: " + temperature + " *C - Humidity: " + humidity + " % - Pressure: " + pressure + " hPa");
     
      lcd.backlight();
      lcd.clear();
      lcd.home();
      lcd.setCursor(0,0);
      lcd.print("T: ");
      lcd.print(temperature);
      lcd.print("C");
      
      lcd.setCursor(0,1);
      lcd.print("H:");
      lcd.print(humidity);
      lcd.print("%");
     
      lcd.setCursor(0,2);
      lcd.print("P:");
      lcd.print(pressure);
      lcd.print("hPa");
                 
      // save the last HTTP GET Request
      previousMillis = currentMillis;
    }
    else {
      Serial.println("WiFi Disconnected");
    }
  }
}

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;
    
  // Your IP address with path or Domain name with URL path 
  http.begin(client, serverName);
  
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  
  String payload = "--"; 
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

Irgendwas stimmt auch mit dem lcd befehlen nicht da wird gemeckert nach dem kompilieren. Ist es denn so schwer ein kleines SSD1306 gegen ein hd44780 Display zu tauschen sind doch beide I2C.

Dass Du weißt, wie das LCD anzusteuern ist, hast Du aber in Deinem Code sehr gut versteckt.

Gruß Tommy

hab alles drinne was reingehört denke ich aber lass mich gerne belehren bin ja noch Anfänger dewegen wäre es schon zu wissen wie und ich da nun tun muss damit es funktioniert. mein code sieht ja so aus wie er da steht was ich nu genau tun muss damit es funktioniert weis ich eben nicht da ich Anfänger bin

gruß Hitman43

hallo
So nun nach 2 tagen hab ich es hinbekommen das die 2 esp8266 verbunden sind und das lcd display das anzeigt was ich will :slight_smile:

Das Ergebniss presentiere ich dann aber auch noch :slight_smile:

Hitman43:
So nun nach 2 tagen hab ich es hinbekommen ...

Erstmal Gratulation!

Wenn es Dir ein Trost ist, ich habe schon an scheinbar einfacheren Dingen länger festgehangen ;D

PS.: Da ich keinen ESP8266 habe, kann ich Dir inhaltlich leider nicht helfen.

Hallo,

Hab doch nochmal eine kleine frage auch wenn es funktioniert ist mir eines noch nicht ganz klar.

ich hab 2 ESP8266 einen als Server und einen als Client den webserver bekomme ich erreicht üeber die ip 192.168.4.1. Welcher von beiden stellt die IP bereit würde das gerne ändern so das sie über meinen normalen router laufen denn die konfiguration ist etwas blöd.

Für Hilfe bin ich sehr dankbar möchte ja auch etwas lernen um das ganze mal besser zu können :slight_smile:

Die 192.168.4.1 wird verwendet, wenn der ESP als AP läuft. Damit er sich an Deinem lokalen Netz per DHCP anmeldet musst Du ihn/beide als STA laufen lassen.

Gruß Tommy