INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Suche simplen Scetch für ESP8266-Modul
12.04.2016, 21:24
Beitrag #9
RE: Suche simplen Scetch für ESP8266-Modul
Hallo,
ich habe jetzt deinen kleinen Scetch zum Absetzen der AT-Kommandos ausprobiert. Klappt sehr gut Smile
Ich habe damit jetzt das ESP nach meinen Wünschen als AP eingestellt. Jetzt kann ich mich mit meinem Tablet verbinden.

Jetzt möchte ich damit meinen Arduino steuern. Dazu habe ich einen Scetch gefunden, der eine HTML-Seite auf dem UNO erstellt. Zumindest soll er das. Leider läuft das Programm nicht so wie gewünscht. Hier mal der Scetch:

Code:
//--------------------------------------------------------------------------
// Wifi Modul ESP8266 Beispiel Programm
//--------------------------------------------------------------------------
// Basis war das Beispiel von Ray Wang  http://rayshobby.net/?p=9734
//--------------------------------------------------------------------------

#include <avr/pgmspace.h>

#define WIFI_DEBUG

#define WIFI_Serial Serial
#define Debug_Serial mySerial

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

#define WIFI_ERROR_NONE 0
#define WIFI_ERROR 1

//---------------------------------------------------------------------------
// HTML
int HTML_Content_Length;
int HTML_Header_Length;
int HTML_Temp_Length;
byte HTML_Sende_Mode;
int HTML_Counter = 0;

#define HTML_SENDE_MODE_PREPARE 0
#define HTML_SENDE_MODE_SEND 1

//---------------------------------------------------------------------------
// WIFI
char WIFI_Net[30];
char WIFI_IP_Adress[20];
#define PORT 80
char WIFI_Host[24];
int WIFI_CWMODE;
#define CWMODE_STATION 1
#define CWMODE_ACCESSPOINT 2
int WIFI_Setup_Error = 0;


//---------------------------------------------------------------------------
// Receive-Buffer
#define RECV_BUFFER_SIZE 100
char RECV_Buffer[RECV_BUFFER_SIZE];

//---------------------------------------------------------------------------
// 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 RECV_Buffer_Clear();
void Led_Handling();
void Set_Led(int p);
void HTML_Make_Header();
void HTML_Make_Content();
void HTML_Send(char * c);
void HTML_Send_Int(int z);

void HTML_Send_PROGMEM(const __FlashStringHelper* tx);

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

  WIFI_Serial.begin(9600);
  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(F("Error"));
  }
#endif

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

  WIFI_Serial.setTimeout(20);
  WIFI_Host[0] = 0;
  RECV_Buffer_Clear();
}
//--------------------------------------------------------------------------
void loop() {

  int WIFI_Cannel, WIFI_Packet_Length;
  int i;
  char *buffer_pointer;
  byte len;

  // request: +IPD,ch,len:GET /?LED=xxx&PULS=nnnn ... Host: nnn.nnn.nnn.nnn:nnnn 0x0D ...

  if (WIFI_Serial.findUntil("+IPD,", "\r")) {

    WIFI_Cannel = WIFI_Serial.parseInt();
    WIFI_Serial.findUntil(",", "\r");
    WIFI_Packet_Length = WIFI_Serial.parseInt();

    if (WIFI_Serial.findUntil("GET /", "\r")) {

      WIFI_Serial.readBytesUntil(13, RECV_Buffer, RECV_BUFFER_SIZE);

      if (WIFI_Packet_Length > 0) {
        buffer_pointer = RECV_Buffer;
        if (strncmp(buffer_pointer, "?LED=", 5) == 0) {
          buffer_pointer += 5;
          if (strncmp(buffer_pointer, "Ein", 3) == 0) {
            led_mode = LEDMODE_EIN;
          }
          if (strncmp(buffer_pointer, "Aus", 3) == 0) {
            led_mode = LEDMODE_AUS;
          }
          if (strncmp(buffer_pointer, "Blk", 3) == 0) {
            led_mode = LEDMODE_BLINK;
          }
          buffer_pointer += 3;
          if (strncmp(buffer_pointer, "&PULS=", 6) == 0) {
            buffer_pointer += 6;
            for (i = 0; i < 5; i++) {
              if (buffer_pointer[i] < '0' || buffer_pointer[i] > '9') buffer_pointer[i] = 0;
            }
            led_pulsdauer = atoi(buffer_pointer);
          }
        }
        WIFI_Host[0] = 0;
        if (WIFI_Serial.find("Host: ")) {
          len = WIFI_Serial.readBytesUntil(13, WIFI_Host, 23);
          WIFI_Host[len] = 0;
        }
        HTML_Page(WIFI_Cannel);
      }
    }
    RECV_Buffer_Clear();
  }
  Led_Handling();
}



//----------------------------------------------------------------------
int WIFI_Setup() {
  byte len;

  RECV_Buffer_Clear();

  //-----------------------------------------------------------
  // start server

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

  WIFI_Serial .println(F("AT+CIPMUX=1"));
  delay(10);
  // normale Antwort :
  //   "AT+CIPMUX=1" 0xD 0xD 0xA 0xD 0xA "OK" 0xD 0xA

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

  //-----------------------------------------------------------
  // TCP service aktivieren

#ifdef WIFI_DEBUG
  Debug_Serial .println(F("AT+CIPSERVER"));
#endif
  WIFI_Serial .print(F("AT+CIPSERVER=1,"));
  WIFI_Serial.println(PORT);
  delay(10);

  // normale Antwort :
  //   "AT+CIPSERVER=1,8080" 0xD 0xD 0xA 0xD 0xA "OK" 0xD 0xA

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

  RECV_Buffer_Clear();

  //-------------------------------------------------------------------------
  // Timeout für automatisches Trennen der Verbindung setzen

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

  WIFI_Serial .println(F("AT+CIPSTO=0"));
  delay(10);
  if (!WIFI_Serial.find("OK")) {
    return WIFI_ERROR;
  }

  //---------------------------------------------------------------------------
  // WiFi Modus ermitteln

  RECV_Buffer_Clear();
  WIFI_Net[0] = 0;

#ifdef WIFI_DEBUG
  Debug_Serial .println(F("AT+CWMODE?"));
#endif

  WIFI_Serial .println(F("AT+CWMODE?"));
  delay(10);
  // Normale Antwort AT+CWMODE? 0x0D 0x0D 0x0A+CWMODE:1 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A

  WIFI_CWMODE = 0;
  if (WIFI_Serial.find("AT+CWMODE?\r\r\n+CWMODE:")) {
    WIFI_CWMODE = WIFI_Serial.parseInt();
  }

#ifdef WIFI_DEBUG
  Debug_Serial .print(F("CWMode:"));
  Debug_Serial.println(WIFI_CWMODE);
#endif

  if (WIFI_CWMODE == 0) {
    return WIFI_ERROR;
  }

  //---------------------------------------------------
  // Ich bin Station. In welchem Netz bin ich ?

  if (WIFI_CWMODE == CWMODE_STATION) {

#ifdef WIFI_DEBUG
    Debug_Serial .println(F("AT+CWJAP?"));
#endif

    WIFI_Serial .println(F("AT+CWJAP?"));
    delay(10);
    // Normale Antwort AT+CWJAP? 0x0D 0x0D 0x0A +CWJAP:"<SSID>" 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A

    len = 0;
    WIFI_Net[0] = 0;
    if (WIFI_Serial.find("AT+CWJAP?\r\r\n+CWJAP:\"")) {
      len = WIFI_Serial.readBytesUntil('\"', WIFI_Net, 20);
      WIFI_Net[len] = 0;
    }

    if (len > 0) {
#ifdef WIFI_DEBUG
      Debug_Serial .println(F("Netzwerk:"));
      Debug_Serial.println(WIFI_Net);
#endif
    }
    else {
      return WIFI_ERROR;
    }
  }
  //------------------------------------------
  // Ich bin Accesspoint, wie heisse ich ?
  if (WIFI_CWMODE == CWMODE_ACCESSPOINT) {

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

    WIFI_Serial .println(F("AT+CWSAP?"));
    delay(10);
    // Normale Antwort AT+CWSAP? 0x0D 0x0D 0x0A +CWSAP:"MyESP",
    //                 "12345678",8,3 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A
    len = 0;
    WIFI_Net[0] = 0;
    if (WIFI_Serial.find("AT+CWSAP?\r\r\n+CWSAP:\"")) {
      len = WIFI_Serial.readBytesUntil('\"', WIFI_Net, 20);
      WIFI_Net[len] = 0;
    }

    if (len > 0) {
#ifdef WIFI_DEBUG
      Debug_Serial .println(F("Netzwerk:"));
      Debug_Serial.println(WIFI_Net);
#endif
    }
    else {
      return WIFI_ERROR;
    }
  }

  //-----------------------------------------------------------
  // Get IP Adress

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

  WIFI_Serial .println(F("AT+CIFSR"));
  delay(1000);

  // Normale Antwort z.B.
  // AT+CIFSR 0xD 0xD 0xA 192.168.178.26 0xD 0xA

  len = 0;
  WIFI_IP_Adress[0] = 0;
  if (WIFI_Serial.find("AT+CIFSR\r\r\n")) {
    len = WIFI_Serial.readBytesUntil('\r', WIFI_IP_Adress, 20);
    WIFI_IP_Adress[len] = 0;
  }
#ifdef WIFI_DEBUG
  if (len > 0) {
    Debug_Serial .println(F("IP"));
    Debug_Serial.println(WIFI_IP_Adress);
  }
#endif
  if (len == 0) {
    return WIFI_ERROR;
  }

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

  return WIFI_ERROR_NONE;
}

//----------------------------------------------------------------------

void HTML_Page(int WIFI_Cannel) {

  HTML_Counter++;

#ifdef WIFI_DEBUG
  Debug_Serial.print(F("Zaehler: "));
  Debug_Serial.println(HTML_Counter);
#endif

  HTML_Sende_Mode = HTML_SENDE_MODE_PREPARE;

  HTML_Temp_Length = 0;
  HTML_Make_Content();
  HTML_Content_Length = HTML_Temp_Length;

  HTML_Temp_Length = 0;
  HTML_Make_Header();
  HTML_Header_Length = HTML_Temp_Length;

  WIFI_Serial.print(F("AT+CIPSEND="));
  WIFI_Serial.print(WIFI_Cannel);
  WIFI_Serial.print(F(","));
  WIFI_Serial.println(HTML_Header_Length + HTML_Content_Length);

  delay(20);

  RECV_Buffer_Clear();

  HTML_Sende_Mode = HTML_SENDE_MODE_SEND;
  HTML_Make_Header();
  HTML_Make_Content();

  delay(10);
}

//---------------------------------------------------------------------------
void HTML_Make_Header() {

  HTML_Send_PROGMEM(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n"));
  HTML_Send_PROGMEM(F("Content-Length:"));
  HTML_Send_Int(HTML_Content_Length);
  HTML_Send_PROGMEM(F("\r\n\r\n"));
}

//---------------------------------------------------------------------------
void HTML_Make_Content() {

  HTML_Send_PROGMEM(F("<HTML><HEAD> <title>Arduino Steuerung</title></HEAD>\n"));

  HTML_Send_PROGMEM(F("<BODY bgcolor=\"#ADCEDE\" text=\"#000000\">"));

  HTML_Send_PROGMEM(F("<FONT size=\"6\" FACE=\"Verdana\">Arduino Steuerung<BR/></FONT>"));

  HTML_Send_PROGMEM(F("<FONT size=\"3\" FACE=\"Verdana\">\n<BR/>Hubbie's Arduino Uno<BR/>"));

  HTML_Send_PROGMEM(F("Led : "));
  switch (led_mode)  {
    case LEDMODE_AUS:
      HTML_Send_PROGMEM(F("aus"));
      break;
    case LEDMODE_EIN:
      HTML_Send_PROGMEM(F("ein"));
      break;
    case LEDMODE_BLINK:
      HTML_Send_PROGMEM(F("blinkt"));
      break;
  }
  HTML_Send_PROGMEM(F("<BR/>\n"));

  //--------------------------------------
  // Aufrufzaehler
  HTML_Send_PROGMEM(F("Aufrufz&auml;hler = "));
  HTML_Send_Int(HTML_Counter);

  HTML_Send_PROGMEM(F("<BR/></font>"));

  HTML_Send_PROGMEM(F("<FORM ACTION=\"http://"));
  HTML_Send(WIFI_Host);
  HTML_Send_PROGMEM(F("\">"));

  HTML_Send_PROGMEM(F("<P><FONT size=\"3\" FACE=\"Verdana\">Led schalten :<BR/>"));

  if (led_mode == LEDMODE_EIN)  {
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Ein\"> Einschalten<BR/>"));
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Aus\" CHECKED> Ausschalten<BR/>"));
  }
  else
  {
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Ein\" CHECKED> Einschalten<BR/>"));
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Aus\"> Ausschalten<BR/>"));
  }

  HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Blk\"> Blinken"));

  HTML_Send_PROGMEM(F("&emsp;&emsp;&emsp;&emsp;&emsp;Plusdauer:<INPUT NAME=\"PULS\" TYPE=\"TEXT\" size=\"4\" MAXLENGTH=\"4\" VALUE=\""));
  HTML_Send_Int(led_pulsdauer);
  HTML_Send_PROGMEM(F("\"> mSec<BR/>"));
  HTML_Send_PROGMEM(F("<BR/>"));

  //--------------------------------------
  // Absende-Knopf

  HTML_Send_PROGMEM(F("<INPUT TYPE=\"SUBMIT\" VALUE=\" Absenden \">"));
  HTML_Send_PROGMEM(F("</FONT></P>"));
  HTML_Send_PROGMEM(F("</BODY></HTML>"));
}

//---------------------------------------------------------------------------
void HTML_Send_Int(int p_int) {
  char tmp_text[8];
  itoa(p_int, tmp_text, 10);
  HTML_Send(tmp_text);
}

//---------------------------------------------------------------------------
void HTML_Send(char * p_text) {
  HTML_Temp_Length += strlen(p_text);
  if (HTML_Sende_Mode == HTML_SENDE_MODE_SEND) {
    WIFI_Serial.print(p_text);
  }
}

//---------------------------------------------------------------------------
void HTML_Send_PROGMEM(const __FlashStringHelper* p_text) {

  HTML_Temp_Length += strlen_P((const char*)p_text);
  if (HTML_Sende_Mode == HTML_SENDE_MODE_SEND) {
    WIFI_Serial.print(p_text);
  }
}


//------------------------------------------------------------
void RECV_Buffer_Clear() {
  for (int i = 0; i < RECV_BUFFER_SIZE; i++) RECV_Buffer[i] = 0;
  while (WIFI_Serial.available())WIFI_Serial.read();
}

//--------------------------------------------------------------------
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);
}

Wenn ich nun den UNO starte und den SM öffne, erhalte ich lediglich folgende Meldungen:
Zitat:AT+CIPMUX=1
Mehr nicht Sad

Ich habe auch mal RST an 3,3V gehängt. Ohne Erfolg.
???

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.04.2016, 20:10
Beitrag #10
Wink RE: Suche simplen Scetch für ESP8266-Modul
Hallo,

ich habe es jetzt ans laufen bekommenBig GrinBig Grin Ein Problem war wohl die Empfindlichkeit der 3,3V Spannungsversorgung des ESP8266. Ich habe den eingesetzten 220uF ELKO durch einen 1000uF/10V ELKO ausgetauscht.
Dann habe ich mir den Scetch der Seite von www.arduino-hannover.de per Copy&Paste heruntergeladen und in meine IDE eingefügt. Nach kleineren Korrekturen (konnte man in den Kommentaren auf der Seite lesen Blush) läuft es jetzt 100%igCool
Wichtig ist hier noch, dass der ESP8266 mit RX/TX auf dem UNO verbunden sein muss! In vielen Scetchen im www wird RX/TX mit den Ports 10/11 des UNOs angesprochen.

Jetzt werde ich mir mal eine eigene HTML-Seite proggen um die verschiedenen PORTs des UNO´s zu steuern. Mal abwarten was da so gehtBig Grin

Hier jetzt noch mein lauffähiger Scetch:

Code:
//--------------------------------------------------------------------------
// Wifi Modul ESP8266 Beispiel Programm
//--------------------------------------------------------------------------
// Autor : Hubert Baumgarten
// Datum : 04.01.2015
//--------------------------------------------------------------------------
// Basis war das Beispiel von Ray Wang  http://rayshobby.net/?p=9734
//--------------------------------------------------------------------------

#include <avr/pgmspace.h>

#define WIFI_DEBUG

#define WIFI_Serial Serial
#define Debug_Serial mySerial

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

#define WIFI_ERROR_NONE 0
#define WIFI_ERROR 1

//---------------------------------------------------------------------------
// HTML
int HTML_Content_Length;
int HTML_Header_Length;
int HTML_Temp_Length;
byte HTML_Sende_Mode;
int HTML_Counter = 0;

#define HTML_SENDE_MODE_PREPARE 0
#define HTML_SENDE_MODE_SEND 1

//---------------------------------------------------------------------------
// WIFI
char WIFI_Net[30];
char WIFI_IP_Adress[20];
#define PORT 80
char WIFI_Host[24];
int WIFI_CWMODE;
#define CWMODE_STATION 1
#define CWMODE_ACCESSPOINT 2
int WIFI_Setup_Error = 0;

//---------------------------------------------------------------------------
// Receive-Buffer
#define RECV_BUFFER_SIZE 100
char RECV_Buffer[RECV_BUFFER_SIZE];

//---------------------------------------------------------------------------
// 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 RECV_Buffer_Clear();
void Led_Handling();
void Set_Led(int p);
void HTML_Page(int WIFI_Cannel);
void HTML_Make_Header();
void HTML_Make_Content();
void HTML_Send(char * c);
void HTML_Send_Int(int z);
void HTML_Send_PROGMEM(const __FlashStringHelper* tx);

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

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


  //----------------------------------
  // 3 sec warten
  delay (3000);

  Set_Led(HIGH);

  WIFI_Setup_Error = WIFI_Setup();



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

  WIFI_Serial.setTimeout(20);
  WIFI_Host[0] = 0;
  RECV_Buffer_Clear();
}
//--------------------------------------------------------------------------
void loop() {

  int WIFI_Cannel, WIFI_Packet_Length;
  int i;
  char *buffer_pointer;
  byte len;

  // request: +IPD,ch,len:GET /?LED=xxx&PULS=nnnn ... Host: nnn.nnn.nnn.nnn:nnnn 0x0D ...

  if (WIFI_Serial.findUntil("+IPD,", "\r")) {

    WIFI_Cannel = WIFI_Serial.parseInt();
    WIFI_Serial.findUntil(",", "\r");
    WIFI_Packet_Length = WIFI_Serial.parseInt();

    if (WIFI_Serial.findUntil("GET /", "\r")) {

      WIFI_Serial.readBytesUntil(13, RECV_Buffer, RECV_BUFFER_SIZE);

      if (WIFI_Packet_Length > 0) {
        buffer_pointer = RECV_Buffer;
        if (strncmp(buffer_pointer, "?LED=", 5) == 0) {
          buffer_pointer += 5;
          if (strncmp(buffer_pointer, "Ein", 3) == 0) {
            led_mode = LEDMODE_EIN;
          }
          if (strncmp(buffer_pointer, "Aus", 3) == 0) {
            led_mode = LEDMODE_AUS;
          }
          if (strncmp(buffer_pointer, "Blk", 3) == 0) {
            led_mode = LEDMODE_BLINK;
          }
          buffer_pointer += 3;
          if (strncmp(buffer_pointer, "&PULS=", 6) == 0) {
            buffer_pointer += 6;
            for (i = 0; i < 5; i++) {
              if (buffer_pointer[i] < '0' || buffer_pointer[i] > '9') buffer_pointer[i] = 0;
            }
            led_pulsdauer = atoi(buffer_pointer);
          }
        }
        WIFI_Host[0] = 0;
        if (WIFI_Serial.find("Host: ")) {
          len = WIFI_Serial.readBytesUntil(13, WIFI_Host, 23);
          WIFI_Host[len] = 0;
        }
        HTML_Page(WIFI_Cannel);
      }
    }
    RECV_Buffer_Clear();
  }
  Led_Handling();
}



//----------------------------------------------------------------------
int WIFI_Setup() {
  byte len;

  RECV_Buffer_Clear();

  //-----------------------------------------------------------
  // start server

  WIFI_Serial.println(F("AT+CIPMUX=1"));
  delay(10);
  // normale Antwort :
  //   "AT+CIPMUX=1" 0xD 0xD 0xA 0xD 0xA "OK" 0xD 0xA

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

  //-----------------------------------------------------------
  // TCP service aktivieren

  WIFI_Serial.print(F("AT+CIPSERVER=1,"));
  WIFI_Serial.println(PORT);
  delay(10);

  // normale Antwort :
  //   "AT+CIPSERVER=1,8080" 0xD 0xD 0xA 0xD 0xA "OK" 0xD 0xA

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

  RECV_Buffer_Clear();

  //-------------------------------------------------------------------------
  // Timeout für automatisches Trennen der Verbindung setzen

  WIFI_Serial.println(F("AT+CIPSTO=0"));
  delay(10);
  if (!WIFI_Serial.find("OK")) {
    return WIFI_ERROR;
  }

  //---------------------------------------------------------------------------
  // WiFi Modus ermitteln

  RECV_Buffer_Clear();
  WIFI_Net[0] = 0;

  WIFI_Serial.println(F("AT+CWMODE?"));
  delay(10);
  // Normale Antwort AT+CWMODE? 0x0D 0x0D 0x0A+CWMODE:1 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A

  WIFI_CWMODE = 0;
  if (WIFI_Serial.find("AT+CWMODE?\r\r\n+CWMODE:")) {
    WIFI_CWMODE = WIFI_Serial.parseInt();
  }

  if (WIFI_CWMODE == 0) {
    return WIFI_ERROR;
  }

  //---------------------------------------------------
  // Ich bin Station. In welchem Netz bin ich ?

  if (WIFI_CWMODE == CWMODE_STATION) {

    WIFI_Serial.println(F("AT+CWJAP?"));
    delay(10);
    // Normale Antwort AT+CWJAP? 0x0D 0x0D 0x0A +CWJAP:"<SSID>" 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A

    len = 0;
    WIFI_Net[0] = 0;
    if (WIFI_Serial.find("AT+CWJAP?\r\r\n+CWJAP:\"")) {
      len = WIFI_Serial.readBytesUntil('\"', WIFI_Net, 20);
      WIFI_Net[len] = 0;
    }

    if (len > 0) {
    //nix
    }
    else {
      return WIFI_ERROR;
    }
  }
  //------------------------------------------
  // Ich bin Accesspoint, wie heisse ich ?
  if (WIFI_CWMODE == CWMODE_ACCESSPOINT) {

    WIFI_Serial.println(F("AT+CWSAP?"));
    delay(10);
    // Normale Antwort AT+CWSAP? 0x0D 0x0D 0x0A +CWSAP:"MyESP",
    //                 "12345678",8,3 0x0D 0x0A 0x0D 0x0A OK 0x0D 0x0A
    len = 0;
    WIFI_Net[0] = 0;
    if (WIFI_Serial.find("AT+CWSAP?\r\r\n+CWSAP:\"")) {
      len = WIFI_Serial.readBytesUntil('\"', WIFI_Net, 20);
      WIFI_Net[len] = 0;
    }

    if (len > 0) {
    //nix
    }
    else {
      return WIFI_ERROR;
    }
  }

  //-----------------------------------------------------------
  // Get IP Adress

  WIFI_Serial.println(F("AT+CIFSR"));
  delay(1000);

  // Normale Antwort z.B.
  // AT+CIFSR 0xD 0xD 0xA 192.168.178.26 0xD 0xA

  len = 0;
  WIFI_IP_Adress[0] = 0;
  if (WIFI_Serial.find("AT+CIFSR\r\r\n")) {
    len = WIFI_Serial.readBytesUntil('\r', WIFI_IP_Adress, 20);
    WIFI_IP_Adress[len] = 0;
  }

  if (len == 0) {
    return WIFI_ERROR;
  }

  return WIFI_ERROR_NONE;
}

//----------------------------------------------------------------------

void HTML_Page(int WIFI_Cannel) {

  HTML_Counter++;

  HTML_Sende_Mode = HTML_SENDE_MODE_PREPARE;

  HTML_Temp_Length = 0;
  HTML_Make_Content();
  HTML_Content_Length = HTML_Temp_Length;

  HTML_Temp_Length = 0;
  HTML_Make_Header();
  HTML_Header_Length = HTML_Temp_Length;

  WIFI_Serial.print(F("AT+CIPSEND="));
  WIFI_Serial.print(WIFI_Cannel);
  WIFI_Serial.print(F(","));
  WIFI_Serial.println(HTML_Header_Length + HTML_Content_Length);

  delay(20);

  RECV_Buffer_Clear();

  HTML_Sende_Mode = HTML_SENDE_MODE_SEND;
  HTML_Make_Header();
  HTML_Make_Content();

  delay(10);
}

//---------------------------------------------------------------------------
void HTML_Make_Header() {

  HTML_Send_PROGMEM(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n"));
  HTML_Send_PROGMEM(F("Content-Length:"));
  HTML_Send_Int(HTML_Content_Length);
  HTML_Send_PROGMEM(F("\r\n\r\n"));
}

//---------------------------------------------------------------------------
void HTML_Make_Content() {

  HTML_Send_PROGMEM(F("<HTML><HEAD> <title>Arduino Steuerung</title></HEAD>\n"));

  HTML_Send_PROGMEM(F("<BODY bgcolor=\"#ADCEDE\" text=\"#000000\">"));

  HTML_Send_PROGMEM(F("<FONT size=\"6\" FACE=\"Verdana\">Arduino Steuerung<BR/></FONT>"));

  HTML_Send_PROGMEM(F("<FONT size=\"3\" FACE=\"Verdana\">\n<BR/>Hubbie's Arduino Uno<BR/>"));

  HTML_Send_PROGMEM(F("Led : "));
  switch (led_mode)  {
    case LEDMODE_AUS:
      HTML_Send_PROGMEM(F("aus"));
      break;
    case LEDMODE_EIN:
      HTML_Send_PROGMEM(F("ein"));
      break;
    case LEDMODE_BLINK:
      HTML_Send_PROGMEM(F("blinkt"));
      break;
  }
  HTML_Send_PROGMEM(F("<BR/>\n"));

  //--------------------------------------
  // Aufrufzaehler
  HTML_Send_PROGMEM(F("Aufrufz&auml;hler = "));
  HTML_Send_Int(HTML_Counter);

  HTML_Send_PROGMEM(F("<BR/></font>"));

  HTML_Send_PROGMEM(F("<FORM ACTION=\"http://"));
  HTML_Send(WIFI_Host);
  HTML_Send_PROGMEM(F("\">"));

  HTML_Send_PROGMEM(F("<P><FONT size=\"3\" FACE=\"Verdana\">Led schalten :<BR/>"));

  if (led_mode == LEDMODE_EIN)  {
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Ein\"> Einschalten<BR/>"));
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Aus\" CHECKED> Ausschalten<BR/>"));
  }
  else
  {
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Ein\" CHECKED> Einschalten<BR/>"));
    HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Aus\"> Ausschalten<BR/>"));
  }

  HTML_Send_PROGMEM(F("<INPUT TYPE=\"RADIO\" NAME=\"LED\" VALUE=\"Blk\"> Blinken"));

  HTML_Send_PROGMEM(F("&emsp;&emsp;&emsp;&emsp;&emsp;Plusdauer:<INPUT NAME=\"PULS\" TYPE=\"TEXT\" size=\"4\" MAXLENGTH=\"4\" VALUE=\""));
  HTML_Send_Int(led_pulsdauer);
  HTML_Send_PROGMEM(F("\"> mSec<BR/>"));
  HTML_Send_PROGMEM(F("<BR/>"));

  //--------------------------------------
  // Absende-Knopf

  HTML_Send_PROGMEM(F("<INPUT TYPE=\"SUBMIT\" VALUE=\" Absenden \">"));
  HTML_Send_PROGMEM(F("</FONT></P>"));
  HTML_Send_PROGMEM(F("</BODY></HTML>"));
}

//---------------------------------------------------------------------------
void HTML_Send_Int(int p_int) {
  char tmp_text[8];
  itoa(p_int, tmp_text, 10);
  HTML_Send(tmp_text);
}

//---------------------------------------------------------------------------
void HTML_Send(char * p_text) {
  HTML_Temp_Length += strlen(p_text);
  if (HTML_Sende_Mode == HTML_SENDE_MODE_SEND) {
    WIFI_Serial.print(p_text);
  }
}

//---------------------------------------------------------------------------
void HTML_Send_PROGMEM(const __FlashStringHelper* p_text) {

  HTML_Temp_Length += strlen_P((const char*)p_text);
  if (HTML_Sende_Mode == HTML_SENDE_MODE_SEND) {
    WIFI_Serial.print(p_text);
  }
}


//------------------------------------------------------------
void RECV_Buffer_Clear() {
  for (int i = 0; i < RECV_BUFFER_SIZE; i++) RECV_Buffer[i] = 0;
  while (WIFI_Serial.available())WIFI_Serial.read();
}

//--------------------------------------------------------------------
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);
}

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.04.2016, 17:26
Beitrag #11
RE: Suche simplen Scetch für ESP8266-Modul
(16.04.2016 20:10)torsten_156 schrieb:  Ein Problem war wohl die Empfindlichkeit der 3,3V Spannungsversorgung des ESP8266. Ich habe den eingesetzten 220uF ELKO durch einen 1000uF/10V ELKO ausgetauscht.

Mehr als 220µ waren bei mir da noch nie nötig, auch an einem UNO nicht.

(16.04.2016 20:10)torsten_156 schrieb:  Wichtig ist hier noch, dass der ESP8266 mit RX/TX auf dem UNO verbunden sein muss! In vielen Scetchen im www wird RX/TX mit den Ports 10/11 des UNOs angesprochen.

RX/TX oder D0/D1 sind beim UNO direkt mit den USB-Wandler verbunden, über den die Programmierung und das serielle Terminal der IDE läuft.
Ein ESP da parallel dran ist ein Garantieschein für kommende unerwartete Effekte, weil sich z.B. TX des USB-Wandlers und TX des ESP um die Leitung streiten.
H-Pegel vom USB-Wandler und L-Pegel vom ESP sind dann praktisch ein Kurzschluß. Das überleben die ICs zwar ziemlich lange, weil sie mit ihren Strukturen die Ströme begrenzen, ob der RX daran aber jetzt eher H oder L erkennt, ist Zufall.

Irgendwann wird auch einer der beteiligten ICs die Nase voll davon haben.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.04.2016, 17:59
Beitrag #12
RE: Suche simplen Scetch für ESP8266-Modul
Hallo Michael,

(17.04.2016 17:26)amithlon schrieb:  RX/TX oder D0/D1 sind beim UNO direkt mit den USB-Wandler verbunden, über den die Programmierung und das serielle Terminal der IDE läuft.
Ein ESP da parallel dran ist ein Garantieschein für kommende unerwartete Effekte, weil sich z.B. TX des USB-Wandlers und TX des ESP um die Leitung streiten.

Zum Aufspielen des neuen Scetches ziehe ich die beiden Kabel (RX, TX) vom UNO ab. Den SM benötige ich jetzt nicht mehr, da ja alles läuft.
Aber gibt es denn eine Lösung RX/TX (D0/D1) nicht zu verwenden? Denn wenn ich diese beiden auf D10/D11 setze, funktioniert die Kommunikation nicht mehr.

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.04.2016, 06:44
Beitrag #13
RE: Suche simplen Scetch für ESP8266-Modul
Halllo,

(17.04.2016 17:59)torsten_156 schrieb:  Zum Aufspielen des neuen Scetches ziehe ich die beiden Kabel (RX, TX) vom UNO ab. Den SM benötige ich jetzt nicht mehr, da ja alles läuft.
Aber gibt es denn eine Lösung RX/TX (D0/D1) nicht zu verwenden? Denn wenn ich diese beiden auf D10/D11 setze, funktioniert die Kommunikation nicht mehr.

speichere Deinen Sketch unter einem anderen Namen, damit Du Deine spielende Version nicht kaputt machst.

Eigentlich müßte es reichen, folgendes zu ändern:

Code:
#define WIFI_Serial Serial
#define Debug_Serial mySerial

in

#define WIFI_Serial mySerial          // damit bekommt der ESP die SoftSerial
#define Debug_Serial Serial            // und die normale bleibt zum Debug

Die Softserial kann allerdings keine 115200, Du muß also noch in Setup

WIFI_Serial.begin(115200);
WIFI_Serial.begin(9600);

ändern.
Dann den ESP an D10/D11, die Pins werden hier definiert:

SoftwareSerial mySerial(10,11); // RX, TX

Dann sollte der ESP sich damit wieder melden und Du bekommst die Debug-Ausgaben im Terminal der IDE.

Kannst Du ja testen, wenn Du willst.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.04.2016, 20:33
Beitrag #14
RE: Suche simplen Scetch für ESP8266-Modul
Hallo Michael,

ich habe den Scetch mal nach deinen Angaben geändert. Es funktioniert leider nicht! Auf der Seite des Autors ist in einem Kommentar zu diesem Projekt auch der Hinweis zu finden, dass es nur mit D0/D1 funktioniert. Und das hatte ich in den ganzen Versuchen, den ESP ans Laufen zu bekommen, auch herausgefunden.

Aber egal, wichhtig ist ja nur dass mein Arduino über HTML gesteuert werden kann Big Grin

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.04.2016, 07:54 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2016 07:55 von amithlon.)
Beitrag #15
RE: Suche simplen Scetch für ESP8266-Modul
Hallo,

(18.04.2016 20:33)torsten_156 schrieb:  ich habe den Scetch mal nach deinen Angaben geändert. Es funktioniert leider nicht! Auf der Seite des Autors ist in einem Kommentar zu diesem Projekt auch der Hinweis zu finden, dass es nur mit D0/D1 funktioniert. Und das hatte ich in den ganzen Versuchen, den ESP ans Laufen zu bekommen, auch herausgefunden.

ok. Vielleicht schaue ich mir das mal aus Interesse an, eigentlich sollte es gehen.
Muß ich nur einen ESP suchen, der die AT-Software noch drauf hat oder wieder eine raufspielen. Bei mir fliegt die immer gelich runter, ich programmiere die ESP lieber komplett selber aus der ArduinoIDE.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 264 14.11.2016 22:02
Letzter Beitrag: Claus_M
  Zahl von SD-Card Modul einlesen und Var. zuweisen Nafetz 13 298 28.10.2016 10:12
Letzter Beitrag: hotsystems
  Empfange nur "Geister"zeichen vom BT-Modul dabbamonkeyyy 2 128 23.10.2016 11:34
Letzter Beitrag: Harry Hirsch
  ESP8266 Server connect sowerum 1 173 21.10.2016 19:10
Letzter Beitrag: sowerum
  HC 05 BT Modul Lolliball 1 138 16.10.2016 09:43
Letzter Beitrag: Lolliball
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 16 519 27.09.2016 20:30
Letzter Beitrag: BennIY
  ESP8266 tuts nicht sowerum 7 396 19.09.2016 21:01
Letzter Beitrag: sowerum
  ESP8266 Webserver Programmieren HDT 11 776 23.08.2016 13:28
Letzter Beitrag: HDT
  ESP8266 Webserver Marc2014 0 349 30.07.2016 20:15
Letzter Beitrag: Marc2014
  Problem mit ESP8266 und EMail senden torsten_156 1 608 13.06.2016 21:14
Letzter Beitrag: torsten_156

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste