Bitte um Hilfe bei Verwendung des ESP-01 moduls

Ich habe folgendes Projekt vor:
Das ganz soll eine Art mood-lampe werden. Dazu habe ich einen Arduino Mini, das ESP01 wifi Modul und ein 7-Led ws2812 Modul Das Gehäuse habe ich mir 3d gedruckt. Ein paar Effekt für das Modul habe ich auch schon.

Die Mood-Lampe an sich funktioniert schon mit einem Testcode, es muss nun noch das ESP01 integriert werden.

Ich bin Arduino Laie und habe noch nie das ESP01 Modul genutzt, möchte es künftig aber öfters nutzen da ich es sehr praktisch finde.
Programmieren möchte ich unter Windows 7 mit der Arduino IDE

Meine Vorstellung ist folgende:
Ich verbinde mich mit meinem Handy mit dem ESP01, dort wird mir dann eine Internetseite (die ich selbst erstellt habe) gezeigt. Auf dieser kann ich Einstellungen ändern(Geschwindigkeit, Helligkeit, Effekte auswählen usw). Sobald ich OK Drücke werden die Änderungen an den Arduino gesendet und umgesetzt.

Für mich wäre es nun hilfreich wenn ihr mir vielleicht ein paar Tipps zur Integration des ESP01 geben könntet. Dies können Links zu ähnlichen Projekten oder zu Tutorials sein, ebenso Codeschnippsel oder die ungefähre Struktur des Programms. Tipps was ich beachten sollte sind ebenso hilfreich wie Tipps zur prinzipiellen vorgehensweise :slight_smile:

Ich sag schon mal vielen Dank!

hi,

warum ein arduino dazu?
nimm einen ESP mit ein paar pins mehr und Du ersparst Dir den arduino und die notwendige kommunikation.

gruß stefan

Das habe ich auch schon gelesen. Aber nun habe ich diese Hardware hier und im Gehäuse sind die entsprechenden Halter vorhanden. ESP-12f sind allerdings bestellt für spätere Projekte.

Mein aktuelles Problem ist die Verkabelung: Stromversorgung 5V USB - Arduino Mini pro - ESP-01
Das FTDI ist kein Problem da umschaltbar auf 3,3V

z.B kannst du die esp8266 Modelle in die Arduino IDE integrieren, danach kannst du dir dir Beispielsketche anschauen.

ein einfache wifiwebserver sieht dann ungefähr so aus:

/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "your-ssid";
const char* password = "your-password";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

hier bist du zum Thema ESP8266 und Arduino IDE direkt an der Quelle incl. einbindung etc: GitHub - esp8266/Arduino: ESP8266 core for Arduino

Grüße

Danke für den Link.

Mir geht es auch um so prinzipielle Dinge wie:

wie gebe ich die Daten von der Internetseite des ESP01 an den Arduino weiter damit er die Veränderungen am laufenden Programm macht (LED dunkler, Geschwindigkeit des Effektes verringern usw)

wie lese ich die aktuellen Einstellungen und übergebe sie an die Internetseite im ESP01?

Mit Übergabe im Link möchte ich nach Möglichkeit nicht arbeiten.

Dann halt wie in meinem letzten Beitrag geschrieben: Mein aktuelles Problem ist die Verkabelung: Stromversorgung 5V USB - Arduino Mini pro - ESP-01
Das FTDI ist kein Problem da umschaltbar auf 3,3V

hi,

kommunizieren würde ich über serial. wenn beide gleichzeitig senden könnten, sollte eine "sendung" 8 byte nicht überschreiten, größer ist der buffer des atmega328 nicht (Esp 16 bytes).

es gibt doch sehr günstige stepdown konverter für 3,3V. wär nicht blöd, den mini auch mit 3,3V zu betreiben, dann brauchst Du keine logic-lever-converter für serial.

gruß stefan

Das Verkabeln hat funktioniert und ein erster Test hat gezeigt das ich mich verbinden kann. Das mit den 3,3v für den Mini war eine gute idee.

Ich habe gelesen das es neue und alte Firmware gibt. Ich scheine eine alte zu haben da ich mich seriell mit 115000 Baud verbinden muss. Bei der Suche nach Updates, habe ich auch erfahren das er verschiedene Firmware dafür gibt. Ich habe derzeit die Thinker drauf.

Zu was für eine Firmware ratet ihr mir? node-mcu? Was hat das für Vorteile? Und wo finde ich die original Firmware für meinen gekauften ESP-01?

Zu was für eine Firmware ratet ihr mir?

Ich rate zu dem, was ich verwende!
ESP8266-01
ESP8266-201 (wenn externe Antenne nötig)
Die NodeMCU Dinger

Eigene Firmware, mit der Arduino IDE erstellt.
Evtl angeschlossene AVR dürfen I2C Slave spielen.

Meine ESP8266-01 habe ich auf 4MB Flash aufgeblasen, damit sie ein Filesystem bekommen können, und der Upload OTA möglich wird.

Danke.
Das uploaden mit der IDE funktioniert nun.
Jetzt habe ich 3.3v für den Arduino und den esp01. Das Problem ist das der WS2812 Ring 5v benötigt.
Wenn ich den Ring direkt an den usb 5v hänge dann funktioniert der ring zwar aber er macht nicht das was programmiert wurde. es sieht ähnlich aus, gleicht aber oft einem hellen flackern.

Ich bin von der usb buchse auf einen 3.3v step down (800mA) und der versorgt den arduino und den esp01. den led ring habe ich wie gesagt direkt an die usb buchse angeschlossen.
Warum funktioniert das nicht wie erwartet?

Zum testen habe ich das (angepasste) Programm auch nur auf den esp01 geladen und den arduino nicht verwendet, dass problem is das selbe.

Wenn ich den led ring an die 3.3v anschließe, funktioniert zwar alles wie es soll aber die led sind viel zu dunkel und weiß wird gar nicht dargestellt.

Vielleicht ist der usb-Anschluss zu schwach für die ganzen Verbraucher. Probier doch mal eins, das 2A bringt. Weil weiss bei 7 LEDs sind schon 420 mA, + ESP8266, ...

hi,

dieses

aber er macht nicht das was programmiert wurde. es sieht ähnlich aus, gleicht aber oft einem hellen flackern.

ist typisch dafür, daß die beiden GND nicht verbinden sind.

gruß stefan

Danke für den Tip, es lag tatsächlich daran das die beiden GND nicht verbunden waren.

Ich möchte das ganze nun doch ohne Arduino machen. Heißt also ich lade das sketch auf den esp01.
Das funktioniert auch gut.
Nun möchte ich ans Programmieren der Webseite mit den Einstellungen für FastLed gehen (Geschwindigkeit, Helligkeit usw). Ich möchte das nicht über die URL steuern.

Habt ihr da ein paar Ansätze wie ich das umsetzen kann? Vor allem wie sende ich die Daten der Webseite an den Programmcode damit die veränderte Einstellung sofort wirksam wird? Und wie kann ich die aktuellen Einstellungen an die Webseite senden damit dort die derzeitigen Einstellungen angezeigt werden?

Vor allem wie sende ich die Daten der Webseite an den Programmcode ...?

Was ist eine Webseite?

Und wie kann ich die aktuellen Einstellungen an die Webseite senden ...?

Was ist eine Webseite?

Das, was ich als Webseite, kenne kann weder senden, noch empfangen.

Du meinst sicher einen Webserver, einen HTTP Server.
Und der läuft auf dem ESP (wenn du es so einrichtest)
Da du den selber schreiben darfst/musst, kann der auch alles, was du ihm beibiegst.

Es gibt sehr gute Beispiele. Google mam nach "Thesen Webserver esp8266", der läuft sehr stabil.

Danke für die Empfehlung, sieht ganz gut aus soweit. Werde mich damit beschäftigen :slight_smile:

Habe den Webserver von Thesen verwendet und das funktioniert sehr gut. Ich nutze das aber als Accesspoint.

Habe den Webserver etwas angepasst und kann auch per Buttonklick die Effekte wechseln.

Nun möchte ich das aber komfortabler gestalten. z.B. Slider und Farbmischer einsetzen und sobald ich damit eine Farbe gemischt habe soll diese gleich gesendet werden und die LEDs sollen das anzeigen. Ohne einen Button (Senden) klicken zu müssen. Auch wenn die Geschwindigkeit per Schieberegler eingestellt wird, soll sich diese live ändern.

Mir ist klar das ist HTML/HTML5/Java aber vielleicht könnt ihr mir doch ein paar Tipps oder Denkanstöße geben. Oder mit Links weiter helfen. Vielleicht gibt es schon so ein Projekt wo ich mir was abschauen kann.

Vielen Dank!

Das Problem beim Senden ohne Senden zu drücken ist, dass für jede kleine Änderung eines Sliders eine Verbindung zum Arduino aufgebaut wird. Das zieht sich merklich.

Wenn Du erst alle Einstellungen vornimmst und dann Senden drückst, geht das am Stück.

Evtl. könntest Du auf Deiner Website eine Darstellung der resultierenden Farbe per Javascript darstellen.

Gruß Tommy

Ich verwende keinen Arduino mehr und mache nun alles mit dem ESP01, daher müssen die Daten nicht extra gesendet werden.

Um beim Beispiel eines Sliders zu bleiben:
Ich möchte damit die Geschwindigkeit der Animation und die Helligkeit der LEDs regeln. Ich stelle mir das mit einem Senden Button etwas mühselig vor. Helligkeitsregler verschieben, Senden klicken um zu sehen ob es passt und das so lange bis es passt.
Der Wert des Sliders könnte übergeben werden wenn der Slider los gelassen wird und nicht während dem schieben. Das würde einiges an Daten sparen.

Ein weiteres Problem das sich mir zeigt ist:
Wenn ich mich mit dem ESP verbinde und die Webseite angezeigt wird, sollen die aktuellen Einstellungen der auf der Webseite dargestellt werden.

Bin immer noch auf der Suche nach Beispielen wie man Slider/ColorPicker umsetzt und diese beim Aufruf auf die aktuellen Werte stellt.
Gibt es da für den ESP Einschränkungen in sachen Java oder ähnliches?
Des weiteren ist es reichlich umständlich den HTML code in den C-Code zu implementieren da ich jede Zeile HTML in sResponse += ""; einbetten muss oder zumindest in " "; setzen muss. Gibt es dafür Tools ?

hi,

für das sollte man einen node-server verwenden. der hält ständig die verbindung und schickt/empfängt ohne neuaufbau werte. blitzschnell. keine verzögerung zb beim slider-schieben.

so was läuft einwandfrei auf einem raspberry:

http://playground.arduino.cc/PmWiki/Haustechnik-Eisebaer

es sollte auch auf einem esp laufen, zumindest gibt es beispiele im web, ich hab's aber nicht ausprobiert, mit einem raspi ist die programmierung halt viel einfacher, ohne jede änderung neu hochladen zu müssen.

gruß stefan

Es geht wohl auch mit JavaScript. Ich kann den Sliderwert auslesen mit folgendem Code:

sResponse += "<input type="range" min="0" max="50" value="0" step="5" onchange="showValue(this.value)" />";
sResponse += "<span id="range">0</span>";
sResponse += "<script type="text/javascript">";
sResponse += "function showValue(newValue)";
sResponse += "{";
sResponse += "  var newValue = document.getElementById("range").innerHTML;";
sResponse += "}";
sResponse += "</script>";

Der Wert ist nun in der newValue JavaScript Variable. Wie bekomme ich den Wert aber nun in eine Variable vom Arduino Code os das ich die Helligkeit ändern kann??