ESP8266 Fragen

Es geht hauptsächlich um den ESP 12E, da der auf dem wemos und nodemcu verbaut ist.
Die Gerätschaften sind zwar bestellt aber noch nicht angekommen, dauert noch paar Stündchen.
Das ganze soll im Freien passieren, also kein Router mit DSL vorhanden.
Ich will damit Temperatur überwachen und ggfls nachjustieren.
Es sollen mehrere Geräte damit bestückt werden (bis 10), die ich dann aus der Ferne steuern will.
Programmieren wollte ich die mit Arduino IDE.

So, welche App eignet sich für diese Anwendung?
Wie kommuniziert der ESP mit dem Internet? GSM Modul? Bei jedem ESP? Entfernung vom ESP zu ESP ist immer unterschiedlich, 1-30m.
Evtl könnte man ne Fritzbox hinstellen und die dann mit nem Stick ins Internet schicken.
Strom ist vorhanden, sparsam muss es nicht unbedingt sein.

Zur Arduino-Programmierung kann ich nicht viel sagen, ich habe meine ESP-Module immer mit der nodemcu-Firmware geflashed und diese dann in Lua programmiert. Das ist, wenn man die ersten kleinen Hürden überwunden hat, gar nicht mal so schwer.

Meine ESP sind teilweise ebenfalls zur Temperatur-Überwachung im Einsatz, die Daten werden per MQTT versendet. Das ist ein einfaches, robustes Protokoll, mit dem man Sensordaten recht einfach übertragen kann. Libraries sind vorhanden. Da alle Module in Reichweite zum Access-Point sind, funktioniert das soweit ohne zusätzliche Hardware.

Man kann auch die ESP untereinander kommunizieren lassen, als Mesh-Netzwerk. Das ist vermutlich aber aufwändiger als eine einfach Punkt-zu-Punkt-Übertragung. Punkt-zu-Punkt heißt, alle Module "sprechen" mit einer zentralen Instanz, z.B. einem MQTT-Broker.

In dem beschriebenen Falle würde ich zentral z.B. eine Fritzbox hinstellen und einen UMTS-Stick dranklemmen. Sind alle ESP in räumlicher Nähe zur Fritzbox?

Besagter MQTT-Broker ist bei mir direkt auf dem AP installiert, da ich OpenWRT als Firmware betreibe. Da kann man das nachinstallieren. Keine Ahnung, ob man da auch einen Internet-Stick betreiben kann, hängt vermutlich auch vom Router ab.

Am besten alle Module im Stationmode an den AP, dann können alle untereinander kommunizieren. Als Master nimmst du eben einen der ESPs, wo du alles sammelst und du am besten Blynk drauf haust.
Das Hauptproblem in Deutschland dürfte sein, dass kein Mobilfunkanbieter mehr richtige öffentliche IPs mehr vergibt. Somit hast du keinen direkten Zugriff von aussen. Blynk löst dieses Problem und stellt eine brauchbare App zur Verfügung.
Alternativ kann man Blynk auch mit demselben Auth token auf mehrere uC installieren, damit ist man ausfallsicherer. Wird unterstützt, ist aber nicht dokumentiert. Es gehen sogar Push Mitteilungen.

Andere Apps gibt es bestimmt auch, hab aber nur Erfahrung mit Blynk

Alternativ kannst du auch direkt ein gsm Modul seriell dranstricken und den ESP als AP konfigurieren, wo sich dann die anderen einloggen. Das IP Problem aber bleibt.

Blynk läuft sogar mit Bluetooth, da hab ich aber ne bessere App schon gefunden.
So ähnlich hab ich es mir auch vorgestellt, blos bei dieser App gibt es keine Möglichkeit die Daten zu speichern, zumindest hab ich noch keine Möglichkeit gefunden.
Blynk ist ja wie Shareware, will man mehr muss man zahlen und ich brauche mehr :smiley:

Die ESp's sind wie gesagt, alle zerstreut. Es nützt mir also nix die Fritzbox an einem ESP zu stellen, wenn der ESP in 30m kein Empfang hat, es sei denn die 30m sind keine Reichweite für die ESP/Fritzbox.
GSM kommt entweder an jeden ESP oder an keinem, problem ist dann aber ich will auch keine 100 Simkarten zuhause haben... PIN könnte man ja noch bei allen gleich stellen, die kosten für die Flat wären aber zu hoch.

openHAB läuft auch auf der Fritzbox, die haben auch MQTT Protokoll, wäre die letzte Option.

Wie müssen wir uns die 30m vorstellen? Sichtverbindung? Oder im Gebäude?
Bei Sicht dürfte das klappen, auch mit den PCB-Antennen (der 12E hat AFAIK keine Antennenbuchse).

Vielleicht findest Du hier noch was interessantes, ist aber vermutlich eher für Bastelwütige:
http://www.espressif.com/sites/default/files/30a-esp8266_mesh_user_guide_en.pdf

Eine fertige App kenne ich keine, benutze sowas aktuell nicht.

Hab doch geschrieben dass es draußen passiert, also wäre Sichtverbindung eher das richtige, wobei sehen kann man die nicht immer, ab und zu wäre das Haus dazwischen.

Also ich will es so haben, jeder ESP bekommt denselben Sketch.
Auf der GUI wähle ich dann den gewünschten ESP aus und schau mir dann die Temperaturen an usw.
Schön wäre wenn man den Namen vom ESP in der GUI ändern kann, damit man weiß welcher ESP wo ist.
Es wäre auch super, wenn mir in der GUI angezeigt wird welche ESP's online sind.
Es wird wahrscheinlich nichts mit einer App, da muss ich wohl mit jQuery Mobile was machen.

Wenn wir vom Server reden, heißt es dann dass ich die index.html auf dem ESP laden kann?

skorpi08:
Wenn wir vom Server reden, heißt es dann dass ich die index.html auf dem ESP laden kann?

Ja.
Wie auch immer, du musst deine Module irgendwie ans Internet anbinden. Notfalls mit Wlan Repeatern oder 10 AP ums Haus rum.

Softwaremässig lässt sich dann voll fast alles machen.

Es gibt auch Module mit Antennenbuchse und vielen GPIO und ADC. Sieh dir mal den ESP8266-07 an.

Ähm, wenn man da die Dateien uploaden kann, wieviel platz hätte ich dafür?

bis zu 4 Mbyte, mit Dateisystem schreiben/lesen/löschen

Beim Arduino mit dem Ethernet Shield sendet ma ja mit client.println(label9);

Brauch man das beim ESP nicht? Sendet man da immer mit Serial.println(label9); ?

du sendest beim ESP8266 genauso mit client.print

oder für die Ausgabe auf den seriellen Monitor mit Serial.print

Du verwechselst das damit, wenn der ESP8266 seriell an einem Arduino hängt. Bei Standalone ist es eher so wie wenn auf dem Arduino ein W5100 Shield steckt, nur mit ohne Netzwerkkabel und anderer Initialisierung und Libs.

TCCR1B = TCCR1B & 0b11111000 | 0x01; //Timer1 mit 31300Hz für Lüfter am PIN 10

Wie macht man das beim ESP?

Vielleicht hilft dir dieses ja, ein Stückchen des Weges, weiter...

Die analogWriteFreq Definition:
https://github.com/esp8266/Arduino/blob/master/cores/esp8266/core_esp8266_wiring_pwm.c

Gestern ist ein nodemcu V2 angekommen, den Blink Sketch hochgeladen und wollte schauen obs funktioniert. Da hat nix geblinkt.
Dann ein Beispiel mit WiFi, Verbindung hat zwar funktioniert aber Serial Monitor wollte nicht öffnen?! Geht es bei den nicht oder muss man da was installieren oder was?

Seriell tuts einfach so...

Meine MCU Clone haben die BlinkLED auf Pin 2

Jup, Pin 2 ist der richtige.
Was heißt dann pinMode(LED_BUILTIN, OUTPUT);? Welche integrierte LED?

Jetzt funktioniert auch aufeinmal Serielle.

Kann man den Code irgendwie einfacher gestalten?
Am besten mit SwitchCase, meine Versuche haben nur zum Fehler geführt.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

// WLAN data
const char* ssid = "Fritzbox";
const char* password = "auchfritzbox";
// static IP
IPAddress ip(192,168,178,202);
IPAddress gateway(192,168,178,10);
IPAddress subnet(255,255,255,0);
MDNSResponder mdns;
ESP8266WebServer server(829);
float temp_oben_soll=21, temp_unten_ist=28;
void handleRoot() {
 server.send(200, "text/html", "Please specify command!
Form DHT: /dht?type=x");
}
void handleDHT(){

  String typestring=server.arg("type");
  String temp_str = String((int)temp_oben_soll);
  String hum_str = String((int)temp_unten_ist);
  
  if(typestring=="temp_oben_soll"){
    server.send(200, "text/html", temp_str);
  }
  else if(typestring=="temp_unten_ist"){
    server.send(200, "text/html", hum_str);
  }
  else{
    String webOutput = temp_str+";"+hum_str;
    server.send(200, "text/html", webOutput);
  }
}
void handleNotFound(){
  server.send(404, "text/plain", "404");
}

void setup(void){
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  Serial.println("");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  server.on("/", handleRoot);
  server.on("/dht", handleDHT);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop(void){
  server.handleClient();
}

switch geht nicht mit String-Variablen und Vergleichen.
C++ ist anders als Basic

stackoverflow.com/questions/650162/why-switch-statement-cannot-be-applied-on-strings

Ja das hatte ich schon ergoogelt, habs auch mit enum probiert aber dann doch gelassen.

Welche Upload Geschwindigkeiten funktionieren bei euch, wovon hängt es ab?
Welche Methode wäre die bessere, die Seite im Sketch skizzieren oder die html extra Uploaden?

Also zB so im Sketch, wie hier

Oder so wie es hier gemacht wird, mit Sketch Data Upload

Ist jetzt nur für mich, fals ich wieder mal an dem Projekt weiter mache, dass ich nicht stundenlang suchen muss warum über 230400 speed nicht geht.

Mac OS 10.10.5 Treiber von hier laden, dann geht auch die 921600 Upload Speed.

Habe davor ein anderen Treiber probiert, da ist beim umstöpseln der PC abgestürzt.