komme mit dem ESP8266 nicht weiter

Hallo zusammen !

ich wollte euch um eure Hilfe bitten.......

ich versuche grade das ESP8266 ans laufen zu bekommen und hab zum testen erstmal ein abgeänderten Sketch von der HP genommen:

 #include <SPI.h>
 #include <Ethernet.h> // Netzwerk-Bibliothek
 #include <Flash.h> // Für Speichern der HTML-Daten im Flash statt RAM
 #include <MemoryFree.h> // Freien RAM auslesen
 
byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 }; // entspricht einer MAC von 84.85.88.16.0.36
 byte ip[] = { 192, 168, 1, 7 }; // IP-Adresse
 byte gateway[] = { 192, 168, 1, 1 }; // Gateway
 byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
String readString = String(100); // string for fetching data from address

 boolean RC1 = false; // Status flag
 boolean RC2 = false;
 boolean RC3 = false;
 boolean RC4 = false;

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
 server.begin();
// Transmitter is connected to Arduino Pin #10

Serial.begin(9600);
 }
void loop(){
// Create a client connection
 EthernetClient client = server.available();
if (client) {
while (client.connected()) {
 if (client.available()) {
 char c = client.read();
//read char by char HTTP request
 if (readString.length() < 100) {
//store characters to string
 readString = readString + c;
 }
Serial.print(c); //output chars to serial port
if (c == 'n') { //if HTTP request has ended
//---------------------Schaltprofile--------------------
 // indexOf locates a character or String within another String.
 if(readString.indexOf("rc1=An") > -1) 
 {
 Serial.println("Steckdose 1 eingeschaltet!");
 RC1 = true;
 }
 if(readString.indexOf("rc1=Aus") > -1)
 {
 Serial.println("Steckdose 1 ausgeschaltet!");
 RC1 = false;
 }
if(readString.indexOf("rc2=An") > -1) 
{ 
 Serial.println("Steckdose 2 eingeschaltet!");
 RC2 = true;
 }
 if(readString.indexOf("rc2=Aus") > -1)
 {
 Serial.println("Steckdose 2 ausgeschaltet!");
 RC2 = false;
 }
if(readString.indexOf("rc3=An") > -1) 
{
 Serial.println("Steckdose 3 eingeschaltet!");
 RC3 = true;
 }
 if(readString.indexOf("rc3=Aus") > -1)
 {
 Serial.println("Steckdose 3 ausgeschaltet!");
 RC3 = false;
 }
if(readString.indexOf("rc4=An") > -1) 
{
 Serial.println("Steckdose 4 eingeschaltet!");
 RC4 = true;
 }
 if(readString.indexOf("rc4=Aus") > -1)
 {
 Serial.println("Steckdose 4 ausgeschaltet!");
 RC4 = false;
 }
if(readString.indexOf("alloff=Alle+ausschalten") > -1)
{
Serial.println("Alles ausgeschaltet");
 RC1 = false;
 RC2 = false;
 RC3 = false;
 RC4 = false;
 }
//--------------------------HTML------------------------
 client << F("HTTP/1.1 200 OKn");
 client << F("Content-Type: text/htmlnn");
 client << F("");
client << F("<html>");
 client << F("<head><title>Arduino Webserver - basti</title></head>n");
client << F("<body margin=0 padding=0 style='font-family:Verdana; background-color:#ccc;'>n");
//---Tabellen-Header
 client << F("<table style='border-collapse:collapse;'>");
 client << F("<tr style='font-weight:bold; border-bottom:2px solid #000;'><td>Steckdose</td><td colspan=2>Aktion</td><td>Status</td></tr>");
//---Steckdose 1
 client << F("<tr>");
 client << F("<td>Steckdose 1</td>");
 client << F("<td><form method=get><input type=submit name=rc1 value='An'></form></td>");
 client << F("<td><form method=get><input type=submit name=rc1 value='Aus'></form></td>");
if (RC1)
 client << F("<td><span style='color:green;'>AN</span></td>");
 else
 client << F("<td><span style='color:red;'>AUS</span></td>");
client << F("</tr>");
//---Steckdose 2
 client << F("<tr>");
 client << F("<td>Steckdose 2</td>");
 client << F("<td><form method=get><input type=submit name=rc2 value='An'></form></td>");
 client << F("<td><form method=get><input type=submit name=rc2 value='Aus'></form></td>");
if (RC2)
 client << F("<td><span style='color:green;'>AN</span></td>");
 else
 client << F("<td><span style='color:red;'>AUS</span></td>");
client << F("</tr>");
//---Steckdose 3
 client << F("<tr>");
 client << F("<td>Steckdose 3</td>");
 client << F("<td><form method=get><input type=submit name=rc3 value='An'></form></td>");
 client << F("<td><form method=get><input type=submit name=rc3 value='Aus'></form></td>");
if (RC3)
 client << F("<td><span style='color:green;'>AN</span></td>");
 else
 client << F("<td><span style='color:red;'>AUS</span></td>");
client << F("</tr>");
//---Steckdose 4
 client << F("<tr>");
 client << F("<td>Steckdose 4</td>");
 client << F("<td><form method=get><input type=submit name=rc4 value='An'></form></td>");
 client << F("<td><form method=get><input type=submit name=rc4 value='Aus'></form></td>");
if (RC4)
 client << F("<td><span style='color:green;'>AN</span></td>");
 else
 client << F("<td><span style='color:red;'>AUS</span></td>");
client << F("</tr>");
//---Alle Steckdosen ausschalten
 client << F("<tr><td colspan=4><form method=get><input type=submit name=alloff value='Alle ausschalten'></form></td></tr>");
//---System-Infos
 client << F("<tr><td colspan=4>

<span style='font-size:8px;'>Freier RAM:&amp;nbsp;");
 client.println(freeMemory());
 client << F("Byte</span></td></tr>");
 client << F("<tr><td colspan=4><span style='font-size:8px;'>Arduino Laufzeit:&amp;nbsp;");
 client.println(millis()/1000/60);
 client << F("Minuten</span></td></tr>");
//---Tabellen-Footer
 client << F("<table>");
//---HTML Ende
 client << F("</body></html>");
//clearing string for next read
 readString="";
//stopping client
 client.stop();
 }
 }
 }
 }
 }

hab ich das richtig verstanden ?

ich rufe das über den Browser auf, dann wird mir dieses Fenster mit den Buttons usw angezeigt und da ich ja die Funkgeschichte entfert hab, erscheint dann im Serialen Monitor das Entsprechende ?

Leider kann ich über den Browser nicht darauf zugreifen......

ich hab //192.168.1.7 eingegeben......

Allerdings hab ich die MAC Adresse nicht geändert...

Und die IP meines Wlan-Routers ist: 192.168.1.1

Das ESP ist mit TX an RX(= Pin0 vom Mega), mit RX an TX(=Pin1 vom Mega) und mit 3,3V und CH_PD an 3,3V (vom Mega) und mit Gnd an Gnd (vom Mega) angeschlossen und die LED leuchtet auch....

Der ESP wird mir unter Netzwerk (da wo mein Router und die meiner Nachbarn stehen) angezeigt

magictrips:
Leider kann ich über den Browser nicht darauf zugreifen.....
Das ESP ist mit TX an RX(= Pin0 vom Mega), mit RX an TX(=Pin1 vom Mega) und mit 3,3V und CH_PD an 3,3V (vom Mega) und mit Gnd an Gnd (vom Mega) angeschlossen und die LED leuchtet auch....

Der ESP wird mir unter Netzwerk (da wo mein Router und die meiner Nachbarn stehen) angezeigt

Und wo sind die Anpassungen an den ESP8266?

Du benutzt den Code und Libs des Ethernet Shields

OH !
Danke !

hatte den Code blind übernommen, in dem Glauben, es wäre für den ESP......

muss denn die MAC Adresse geändert werden ?
Wenn ja, wie lese ich die beim ESP aus ?

Deinen Fragen nach zu urteilen hast du noch nie was mit dem ESP8266 gemacht.

Das ist nicht in 3 Sätzen erklärt, da solltest du dich gründlich einlesen.

Fang mal hier an link

stimmt !
fange grade an........

die seite kenne ich, danke !

hatte den sketch ausprobiert, aber ging leider nicht

aber ich schau mir den nochmal genauer an (;

was ging da dran nicht? Hast du das 1:1 so gemacht?

Je nachdem was du machen willst, brauchst du gar keinen Arduino mehr dafür. Aber das ist ein anderes Thema

Danke, für deien Hilfe !

Das das ESP auch alleine verwendet werden kann, weiß ich, aber dafür hab ich zu viele Sensoren usw...... brauche also leider doch ein weiteren µC.

Ich hab diesen Sketch jetzt hochgeladen:

//--------------------------------------------------------------------------
// Wifi Modul ESP8266 Parameter als Accrsspoint setzen
//--------------------------------------------------------------------------
// Basis war das Beispiel von Ray Wang  http://rayshobby.net/?p=9734
//--------------------------------------------------------------------------

#define WIFI_DEBUG

#define WIFI_Serial Serial
#define Debug_Serial mySerial


#ifdef WIFI_DEBUG
#include <SoftwareSerial.h>
SoftwareSerial mySerial(41,43); // RX, TX
#endif

#define SSID  "VaDeCo"     // WiFi SSID
#define PASS  "12345678"  // WiFi Passwort
#define WIFI_CANNEL 8
#define WIFI_SECURE 3
// 0 = offen ohne Passwort
// 1 = WEB
// 2 = WPA_PSK
// 3 = WPA2_PSK
// 4 = WPA_WPA2_PSK



#define WIFI_ERROR_NONE 0
#define WIFI_ERROR 1

//---------------------------------------------------------------------------
// WIFI
int WIFI_Setup_Error = 0;

//---------------------------------------------------------------------------
// LED Handling
#define LEDMODE_AUS 0
#define LEDMODE_EIN 1
#define LEDMODE_BLINK 2
#define LEDPIN 13
int led_value=LOW;
int led_mode=LEDMODE_AUS;
unsigned long led_nextpuls=0;
int led_pulsdauer = 500;

//-----------------------------------------------------------------------
// Routinen deklarieren

int WIFI_Setup();
void Led_Handling();
void Set_Led(int p);

//--------------------------------------------------------------------------------------
void setup() {
  pinMode(LEDPIN,OUTPUT);

  WIFI_Serial.begin(115200);
  WIFI_Serial.setTimeout(5000);

#ifdef WIFI_DEBUG
  Debug_Serial.begin(9600);
#endif
  //----------------------------------
  // 3 sec warten
  delay (3000);

  Set_Led(HIGH);

  WIFI_Setup_Error = WIFI_Setup();

#ifdef WIFI_DEBUG
  if (WIFI_Setup_Error) {
    Debug_Serial.println("Error");
  }
#endif

  if (WIFI_Setup_Error) led_mode=LEDMODE_BLINK;
  else Set_Led(LOW);

}
//--------------------------------------------------------------------------
void loop() {

  Led_Handling();
}

//----------------------------------------------------------------------
int WIFI_Setup() {

  //---------------------------------------------------------------------------
  // WiFi Modus swetzen

#ifdef WIFI_DEBUG
  Debug_Serial.println("AT+CWMODE=2");
#endif

  WIFI_Serial.println("AT+CWMODE=2");
  delay(1000);
  // Normale Antwort AT+CWMODE=1 0x0D 0x0D 0x0A OK <crlf> 

  if(WIFI_Serial.find("Error")){
    return WIFI_ERROR;
  }
  
//-------------------------------------------------------------------
// Modul resetten
#ifdef WIFI_DEBUG
  Debug_Serial.println("AT+RST");
#endif

  WIFI_Serial.println("AT+RST");
  delay(1000);

  // "Normale Antwort AT+RST 0xD 0xD 0xA 0xD 0xA OK 0xD 0xA 0xD 0xA ets Jan  ... ready 0xD 0xA

  if(!WIFI_Serial.find("ready")) {
    return WIFI_ERROR;
  }

  // ---------------------------------------------------------------
  // Netzwerk Parameter setzen

#ifdef WIFI_DEBUG
  Debug_Serial.println("AT+CWSAP");
#endif

  WIFI_Serial.print("AT+CWSAP=\"");
  WIFI_Serial.print(SSID);
  WIFI_Serial.print("\",\"");
  WIFI_Serial.print(PASS);
  WIFI_Serial.print("\",");
  WIFI_Serial.print(WIFI_CANNEL);
  WIFI_Serial.print(",");
  WIFI_Serial.println(WIFI_SECURE);
  delay(1000);

  // Normale Antwort AT+CWJAP="<SSID>”,"<Passwort>" 0x0D 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A 

  if(!WIFI_Serial.find("OK")){
    return WIFI_ERROR;
  }

#ifdef WIFI_DEBUG
  Debug_Serial.println("Setup okay");
#endif


  return WIFI_ERROR_NONE;
}

//--------------------------------------------------------------------
void Led_Handling(){

  if (led_mode==LEDMODE_AUS && led_value != LOW) Set_Led(LOW);
  if (led_mode==LEDMODE_EIN && led_value != HIGH) Set_Led(HIGH);
  if (led_mode==LEDMODE_BLINK && millis() > led_nextpuls){ 
    led_nextpuls = millis()+(unsigned long)led_pulsdauer;
    if (led_value == LOW) Set_Led(HIGH);
    else Set_Led(LOW);
  }
}

//--------------------------------------------------------------------
void Set_Led(int p){
  led_value = p;
  digitalWrite(LEDPIN,led_value);
}

und bekomme als Antwort im Serialen Monitor:
AT+CWMODE=2
AT+RST

das wars........

wenn ich den Sketch richtig verstehe, sollten die Parameter gesetzt werden und wenn alles gelaufen ist, sollte ich als Antwort "Setup okay" bekommen ?

Ich hab jetzt die Funktion des Sketches nicht mehr im Kopf, erinnere mich aber, dass er bei mir lief.

Nimm mal nen uno ohne was anderes dran und mache es wirklich 1:1

ich hab leider nur den mega ):

und es kommt ja was zurück........nur nicht alles ?

Hast du einen usb-seriell Adapter?

Das ESP ist mit TX an RX(= Pin0 vom Mega), mit RX an TX(=Pin1 vom Mega)

Die sind schon vom USB Serial Dingen belegt.
Verwende besser einen der noch freien Ports.

SoftwareSerial

Auch das ist die falsche Wahl.
Du hast noch viele weitere Hardware UARTs

ne, hab leider keinen usb-serial adapter........

@combie
"Das ESP ist mit TX an RX(= Pin0 vom Mega), mit RX an TX(=Pin1 vom Mega) "
das bezog sich auf den alten sketh, der eigentlich für lan war ........

jetzt sind rx und tx auf 41 und 43

softserial hab ich genommen, weils in den beispielsketchen so verwendet wird ???

ich muss auch ganz ehrlich zugeben, so ganz verstehe ich den sketch nicht.........

WIFI_Serial ist die seriale verbindung zum esp ?
Debug_Serial ist die seriale verbindung vom arduino zum pc ?

warum ist dann:

#define WIFI_Serial Serial
#define Debug_Serial mySerial

#ifdef WIFI_DEBUG
#include <SoftwareSerial.h>
SoftwareSerial mySerial(41,43); // RX, TX
#endif

demnach wäre doch der debug-serial, der doch eigentlich zum pc gehen sollte auf pin 41/43 ????

genau so is es. deswegen meine Frage nach dem Adapter

Aber schreibs um das debug auf serial geht und der ESP8266 auf serial1

Und versuch mal, ob du per html darauf zugreifen kannst. dazu musst du aber usb ausstecken

ich hatte es auch mal hiermit probiert:

#include <SoftwareSerial.h>
SoftwareSerial softSerial(41, 43); // RX=d3, TX=d2

void setup() 
{   Serial.begin(9600);
    softSerial.begin(115200);
    Serial.println("=======================================");
}

void loop()
{
   if (softSerial.available())            
Serial.write(softSerial.read());

   if (Serial.available())            
softSerial.write(Serial.read());
      
}

leider gar nichts ):

wie soll ich denn per html darauf zugreifen ? ich kenne ja nichtmal die ip ):

ich probiere jetzt nochmal den anderen sketch, ansonsten versuch ich das mal mit serial und serial1

ich glaube, der ist im client mode, dann macht er dhcp, d.h. du musst die IP im Router nachschauen.
Wenn nicht, versuche es auf 192.168.4.1, beachte, dass du dem PC manuell eine IP aus diesem Bereich zuweisen musst.

Wenn du die Seriellen Ports umschreiben willst, geht das am einfachsten in den #define am Anfang

#define WIFI_Serial Serial1
#define Debug_Serial Serial

und das Modul entsprechend umklemmen.

Hast du einen Spannungsteiler am Mega TX zum ESP8266? Manche meinen, der geht sonst kaputt.

Die Versorgung kannst du NICHT mit dem 3,3V Ausgang des Mega machen. Der leistet zuwenig

ok.

also ein spannungsteiler hab ich nicht, da ich etliche anleitungen im netz gefunden hatte, wo die den auch direkt angeklemmt hatten......

der klemmt momentan an den 3,3v vom mega.....
jemand hatte geschrieben, dass das angeblich auch geht.........
jedenfalls wurde er mir in den netzwerkeinstellungen angezeigt und jetzt ist er weg ):

oder der 3,3V Regler vom Mega ist weg :frowning:

Glaub ich aber nicht.

Wenn du recht nahe am Accesspoint bist, könnte es reichen. Nimm 2 Dioden in Serie und schliess ihn an 5V an. An den Dioden fallen 1,4V ab, so dass 3,6V am Modul anliegen. Das geht bei mir schon seit Monaten ohne Probleme.

Allerdings solltest du dann den Mega nicht mit 12V versorgen, sondern mit USB oder 5V