PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ESP8266 boards per per Arduino-IDE programmieren?



HaWe
21.05.2017, 19:17
hallo,
hat jemand schon erfolgreich mit ESP8266 boards (z.B. AI-Thinker ESP-12F Serial WIFI mit 80 MHz Tensilica L106 MCU ) per Arduino-IDE programmiert?
Hat die Board-Verwalter lib zuverlässig funktioniert (hier: Generic ESP8266 Module) ?
Wie waren die Erfahrungen mit der Integration ins eigene WiFi Heimnetz, als IoT Programmierplattform und mit Handy-Apps als Interface zur Steuerung, und haben die Arduino-Libs für GPIOs, I2C und Internet-Libs (NTPClientLib, JsonListener,...) alle problemlos auch mit dem ESP8266 funktioniert?

edit,
ein fertig aufgelötetes Exemplar scheint es auch zu geben -
http://www.ebay.de/itm/272435157381?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

32639

Erfahrungsberichte trotzdem natürlich immer noch sehr willkommen!

HaWe
25.05.2017, 18:55
update,
danke an gkd für die Infos in diesem Thread:
https://www.roboternetz.de/community/threads/70524-NodeMCU-an-Arduino-IDE-Fehler-beim-Kompilieren

HaWe
03.06.2017, 23:16
Installation des Boards hat auf Anhieb funktioniert (Win 7 64 pro):

ESP8266 12-F (80MHz, 4MByte)


- ggf. USB-Serial Chip CH340/1 installieren

- in "Datei - Voreinstellungen" unter "Zusätzliche Boardverwalter-URLs" Such-URL eingeben:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

- Menü "Werkzeuge – Board: …", "Boardverwalter"
Eingabe im Suchfenster esp8266 Eintrag "esp8266 by ESP8266 Community" auswählen + installieren

- erneut Menü "Werkzeuge – Board: … – "Boardverwalter…",
Auswahl von Eintrag "Generic ESP8266 Module",
Einstellungen kontrollieren:
Flashmode: QIO
Flash Frequency: 40 MHz
cpu Frequency: 80 MHz
Flashsize: 4M (3M SPIFFS)
Debug Port: disabled
Debug Level: keine
Reset Method: nodemcu
Upload Speed: 115200


die D-pins sind entgegen der Beispiele bei mir allerdings nicht sofort als D0, D1,... adressierbar, hier sind ein paar explizite #defines nötig:


#define D0 16
#define D1 5
#define D2 4
#define D3 0
#define D4 2
#define D5 14
#define D6 12
#define D7 13
#define D8 15
#define D9 3
#define D10 1
#define D11 9
#define D12 10

ps,
inzwischen festgestelt:
Es gibt im Bordverwalter auch spezielle Bord-Module wie z.B. "NodeMCU ESP8266 E-12", die man dann alternativ zum "Generic ESP8266 Module" auswählen kann. Hierin sind bereits weitere Bord-Definitionen enthalten, auch z.B D* Pin Nummern statt der MCU GPIO Nummern.

cdk
05.06.2017, 01:34
Hey HaWe, danke für die ausführliche Beschreibung hier. Könnte hilfreich sein wenn ich mal ein ähnliches Projekt habe!

HaWe
06.06.2017, 18:38
hallo,
freut mich, wenn es hilfreich ist! 8)

habe jetzt die ersten Beispiele erfolgreich ausprobiert, auch die erste Website im Heimnetz zum LED ein/ausschalten:
http://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/



#include <ESP8266WiFi.h>

const char* ssid = "Magesh";
const char* password = "jayakumar";

int ledPin = 13; // GPIO13
WiFiServer server(80);

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

pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);

// 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.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

}

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 request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// Match the request

int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}

// Set ledPin according to the request
//digitalWrite(ledPin, value);

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");

client.print("Led pin is now: ");

if(value == HIGH) {
client.print("On");
} else {
client.print("Off");
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");
client.println("</html>");

delay(1);
Serial.println("Client disonnected");
Serial.println("");

}



Frage:
wer kann einen Tipp geben, wie man das jetzt vom Heimnetz-Server ins www hochladen kann, erstmal testweise, kostenlos?

Ceos
07.06.2017, 06:31
Stichwort "Portweiterleitung"

Du musst an deinem Router konfigurieren, dass Anfragen (Vorzugsweise auf Port 80) zu deinem ESP (ebenfalls auf Port 80) umgeleitet werden.
Oder was genau meinst du?

HaWe
07.06.2017, 09:57
hallo,
ganz einfach ausgedrückt: ich kann momentan von einem Handy aus meine ESP8266-Website aufrufen, wenn ich die IP des ESP8266 Servers (192.168.2.117) in den Chrome Browser eintippe, soweit ich mich mit dem Handy ebenfalls im häuslichen WLAN aufhalte.
Ich möchte es jetzt aber auch von überall sonstwo machen können, also vom Arbeitsplatz-LAN-PC per DSL, vom Urlaubshotel-WLAN, oder per "mobile Daten" übers mobile Telefonnetz, und dazu bräuchte ich dann ja eine "externe" url, über die mein Programm (exakter ESP8266 Code wie oben, samt Sensoren, Aktoren und HTML-Website-Code) die eigene Website weltweit erreichbar macht, nur wie bekomme ich so eine?
Bisher habe ich keine eigene Website. Es ist momentan ja auch nur eine Spielerei, und daher würde ich das gern über irgendeinen kostenlosen (Cloud?) Server mit stark begrenztem Volumen machen. Mein Telefonanbieter stellt so etwas leider auch nicht kostenlos zur Verfügung.

Ceos
07.06.2017, 10:13
okay, da fehlen entscheidende grundlagen, ich fass das mal so für dich zusammen:

wenn du von außen zugreifen willst, musst du dien "derzeitig" IP wissen (weil dein Provider dir mind. alle 24h eine neue IP zuweist ... besondere Verträge mal ausgenommen, aber davon gehe ich hier nicht aus)
damit du die IP nicht jedes mal selber suchen und eingeben musst, kannst du einen dynamischen DNS Eintrag verwenden. Die meisten Router bieten sog. dynDNS Unterstützung an

Was du brauchst: Ein Account z.B. bei dynDNS (klassischer Provider für dynamische DNS Einträge) und du musst deinem Router die Account-Daten geben, damit er die aktuelle IP immer frisch fröhlich zu dynDNS übermittelt. Vor dort aus kannst du dir eine dynDNS Domain anlegen, die dann immer automatisch zu deiner derzeitigen Ip zeigt, solange dein Router die Information updatet

Jetzt stehst du schonmal an deiner virtuellen Haustür, was jetzt fehlt ist "klingeln" ... üblicherweise passiert das beim Browser über Port 80

Also musst du deinem Router jetzt noch sagen, dass alle Anfragen auf Port 80 zu dem ESP im lokalen Netzwerk (ebenfalls port 80 der einfachheit) weitergeleitet werden

Pro-Tipp: Weise in deinem Router (sofern Funktion vorhanden) an, deinem ESP IMMER die gleiche IP zu geben. Sollte dein ESP mal rebooten kann es leicht passieren, dass er sonst eine neue lokale Netzwerk IP bekommt, wenn der Router das Gerät nicht automatisch wiedererkennt. Denn wenn die lokale Netzwerk IP sich ändert, musst du auch die Weiterleitung neu einrichten.

Ich habs bisher noch nicht probiert, aber ich meine es gäbe da auch so eine UPnP (UDP Plug'n'Play glaub ich der Name) Funktion/Lib für den ESP, dann kann er sofern es beim Router eingeschaltet ist, die Weiterleitung auch selber festlegen!

HaWe
07.06.2017, 10:52
ok, danke für die ausführliche Antwort!
Um hinten anzufangen: die feste IP im Heimnetz kriege ich im ESP8266 Programm über
IPAddress ip(192,168,2,117);
IPAddress gateway(192,168,2,1);
IPAddress subnet(255,255,255,0);
WiFi.config(ip, gateway, subnet);

aber in meinem WLAN Router mag ich nicht rumpfuschen (das ist extrem unübersichtlich, ich kenne mich darin überhaupt nicht aus, fürchte, dass ich irgendwas ins Nirwana schicke, und ich weiß noch nicht mal ob da überhaupt was derartiges einstellbar ist).

Einen eigenen Account beantragen bei dynDNS : geht das kostenlos, und wenn ja, wie?

Bleibt die Frage nach dem Webserver, dem Universum, und dem ganzen Rest.

Ceos
07.06.2017, 11:01
>Einen eigenen Account beantragen bei dynDNS : geht das kostenlos, und wenn ja, wie?

kalr kostenlos, google nach dynDNS

ohne im router rum zu werkeln wird das aber nix

ich begreif jetzt die frage nach einem webserver nicht, dein ESP stellt doch selber den webserver, du musst nur eine Verbindung von außen zum ESP schaffen (übr den router, oder UPNP mit viel glück, dann brauchst am router nichts einstellen)

HaWe
07.06.2017, 12:22
ja, webserver war sicher falsch, ist alles noch komplett Neuland.
Ich meine einfach einen Weg, meine Website, die ich lokal über den ESP8266 Server im Heimnetz verfügbar habe, jetzt auch im www per url erreichbar haben kann, z.B. das obige Testprogramm.
Im Router herumwerkeln will ich aber wirklich nicht, das ist mir zu riskant.

Ceos
07.06.2017, 13:05
nu denn, ohne eingriff in den router generell ZERO chance!

du musst mindestens dyndns in die reihe bekommen, dann kannst du nur auf UPNP setzen und hoffen das dein router das aus dem stand raus geregelt bekommt und die UPNP unterstützung auch funktioniert wie sie soll, sonst hast du schlicht keine chance ohne die port weiterleitung manuell zu machen

HaWe
07.06.2017, 13:26
dynDNS kostet aber Geld!
40$/y., 60$/y. oder 7$/Monat!
Das wollte ich aber ja nicht!


was gibt es also kostenlos (empfehlenswerterweise, Link)?

Ceos
07.06.2017, 13:31
oh mann was ein müll, seit wann kostet das denn bitte geld?!
da bin ich aber schon sehr lange out of date mit meinen informationen

tja, dann hast du wohl vorerst ein problem, den webserver von überall aus aufrufen wird dann erstmal nichts

die nächste variante wäre irgendwo einen gammligen webhost zu finden, eine kleine webseite für lau mit irgend einer kostenlos subdomain zu nehmen, da drauf dann eine kleine webseite bauen die ein frontend zum bedienen serviert und im hintergrund eine service webseite, die du zum einen von deinem ESP aus zyklisch mit daten fütterst und zum anderen darauf für den ESP steuerinformationen abbildest, die du vom frontend her einstellst.

dein ESP ruft dann sozusagen zyklisch seine sollwerte von der webseite ab udn aktualisiert gleichzeitig seine ist werte

die webseiet ist nur eine art interface für dich

HaWe
07.06.2017, 13:38
hatte zuerst dynDNS.org, habe jetzt spdyn.de probiert, der scheint kostenlos zu sein.

2 Optionen:
ip4 Host anlegen
ip6 Host anlegen

was brauche ich?
Die Website bietet keinerlei Erklärungen oder Hilfstellung oder einen interaktives Menü

wie gesagt, ich möchte nur meine Website, die mein ESP8266 fürs Heimnetz generiert, jetzt von außen zugänglich machen, keine extra Website erstellen.

Ceos
07.06.2017, 13:43
geh erstmal auf wieistmeineip.de (vorzugsweise vom Anschluss zu Hause)

da erfährst du für dich privat was du für eine Anbindung hast, i.d.R. reicht ipv4 aber das könnte sich in ein paar jahren ändern!

du müsstest irgendwo die information bekommen, an welchen server dein router die updates schicken muss, im router kannst du dann ganz simpel dynDNS einschalten udn den genannten server als adresse angeben, den rest macht dein router

und für den rest braucht es dann nur UPNP hoffentlich

ich habe allerdings für dich gerade einen SEHR hilfreichen artikel gefunden der dir eventuell helfen kann

https://hackaday.com/2017/04/12/diy-dyndns-with-esp8266-and-dweets/

statt den dweet ans handy kannst du dann auch eine dyndns request mit irgend einer passenden lib an den dyndns provider schicken, so musst du selbst DAS nicht am router einrichten

möglicherweise ein sansatz für UPNP findest du hier

https://github.com/dannybackx/arduino-upnp

HaWe
07.06.2017, 14:04
da sehe ich die alte Form 93.123.456.789

- - - Aktualisiert - - -

edit, verstehe ich alles noch nicht, ist irgendwie völlig wirr und konfus, was man da machen muss.
Ich bräuchte einen Schritt-für Schritt-Guide, in deutsch, und klar zielführend für das, was für meine Zwecke exakt wichtig ist.

Ceos
07.06.2017, 14:07
"alte form" == ipv4 falls ich da etwas unklar war :)

nundenn, ändert nichts daran, dass du entweder Funktionen deines Routers einsetzt oder dich damit beschäftigst, wie du dem dynDNS Provider deine per webseite erkannte IP mitteilst damit dieser deinen domain eintrag aktualisiert

und natürlich wie du deinem router per UPNP protokoll begreiflich machst, dass du einen webserver auf port 80 deines ESP zur verfügung stellst, der von außen zugänglich sein soll

HaWe
07.06.2017, 14:16
ok, das mit dem Router (Telekom) und dem Port 80 muss ich dann vielleicht extra klären, notfalls mit der Telekom Hotline, aber für den ganzen Rest bräuchte ich wirklich eine exakte (deutsche) Schritt-für Schritt-Anleitung, wo ich die einzelnen Punkte nacheinander abarbeiten und abhaken kann, inkl. dyn DNS Anbieter, urls kriegen, einrichten, konfigurieren, und was alles sonst noch.

Ceos
07.06.2017, 14:24
also dafür solltest du dir einen fachkundigen aus deinem bekanntenkreis, vorzugsweise 30 jahre alt oder jünger besorgen, wenn älter wirds mit dem aktuellen kenntnisstand dünner

aber das einrichten der portweiterleitung und des dyns ist so dermaßen routerabhängig (oder du versucsht es mit der reinen softwarelösung und suchst dir ein paar libs)

damit das übers internet per anleitung klappt, müsstest du schon deine hardwaredaten rausrücken und jemanden mit der gleichen hardware finden oder der ahnung von der hardware hat, ansonsten kostet das recherchieren nämlich einiges an zeit
und das schreiben einer anleitung dafür entsprechend auch :) ich mein ich helf ja gerne aber so viel zeit und laune hab ich nun auch nicht übrig

PS außerdem müsste ich mir selber erst bei dem provider einen account anlegen damit ich mehr erfahre ... grundsätzlich schon in bisschen schwach von denen

HaWe
07.06.2017, 17:43
fachkundig, unter 30, im Bekanntenkreis? keine Chance.
Ich sehe schon, alles viel komplizierter als ich mir vorgestellt habe. Ich dachte, mit dem ganzen IoT und Internet 4.0 Hype müsste das inzwischen viel einfacher klappen, einfach irgendwo Zugangsdaten eintragen wie wenn man sich in einem Forum anmeldet, sich ne feste URL holen, und fertig. So wie momentan ist das für mich aber komplett sinnlos und ein Spaßfaktor ist dann auch nicht mehr vorhanden. Schade, ich hatte mir mehr erhofft von dem ESP-Kram. Vlt gehts ja in ein paar Jahren einfacher, aber ob es dann für mich noch Sinn macht - kA.

cdk
07.06.2017, 21:35
Vorschlag zur Güte: Vergiß DNS für den Anfang. Zumindest zum Ausprobieren brauchst Du das nicht. Warum? Die technischen Adressen im Internet sind nämlich IP-Adressen und die alleine genügen bereits um ein Netzwerkgerät gezielt anzusprechen. Deine 93.123.456.789 ist übrigens geschwindelt, denn eine IP(v4)-Adresse besteht aus 4 Byte und ein solches kann nunmal nicht die Zahlenwerte 456 oder 789 annehmen ;).
DNS, also das Domain Name System, ist da nur draufgesetzt, u.a. weil man sich diese Zahlenkolonnen eben schlecht merken kann. Beispiel Google. Sein DNS-Name ist google.de, eine seiner vielen IP-Adressen ist 172.217.22.67 (http://172.217.22.67) - wenn Du diese in die URL-Zeile des Browsers eingibst kommst Du ebenso dorthin. Probier's mal. So ist das auch bei Deinem eigenen Webserver sprich Internetanschluß.

Der Haken daran ist nur daß diese IP-Adresse bei Privatkunden nicht dauerhaft vergeben wird. Bei DSL-Anschlüssen wechselt sie gerne schon nach 24h - sprich morgen hast Du bereits eine andere. Bei Kabelanschlüssen bleibt sie (leider) oft monatelang und noch länger bestehen - was in Deinem Fall natürlich zu begrüßen wäre. Schau doch morgen mal wie das bei Dir ist. Aber wie auch immer - wenn Du Deinen Webserver von außerhalb ansprechen willst benötigst Du "lediglich" diese IP-Adresse, damit werden die Daten zielsicher zumindest mal an Deinen Router geschickt.

Allerdings läuft Dein Webserver ja nicht im Internet, sondern in einem gaaanz anderen Netz - nämlich Deinem LAN. Das Bindeglied zwischen beiden ist der Router und hier kommt die berühmte Portweiterleitung ins Spiel. Ohne diese geht's nunmal nicht. Aber hey, Du hast es geschafft Dein ESP8266 Board per Arduino-IDE zu programmieren - Du wirst es auch schaffen eine lausige Portweiterleitung einzurichten ;). Eine Anleitung für den Speedport Router gibt es z.B. hier (http://praxistipps.chip.de/speedport-port-freigeben-so-gehts_37855), Anleitungen für andere Router gibt's woanders (suchen...). Hier (https://www.aidex.de/software/webserver/guide/nat-config.html) irgendein anderer Router, aber mit einer verständlichen Erklärung zum was und warum.

Wenn ein Browser eine Webseite anfordert hängt er nämlich "insgeheim" noch eine TCP-Portnummer an, für HTTP ist das Port 80. Diese ANfrage landet also am Internetanschluß des Routers. Jetzt mußt Du diesem nur noch beibringen daß er sie grundsätzlich an Deinen Webserver im LAN weiterleitet, also nach 192.168.2.117 und zwar auch auf Port 80. Das ist schon alles.

Für die dauerhafte Produktivnutzung Deines Webserver ist es natürlich nicht so elegant nur die IP-Adresse nutzen zu können, insbesondere wenn sie täglich wechselt. Hier kommen dann Dienste wie DynDNS ins Spiel. Es gibt noch viele andere und es gibt sicherlich auch noch kostenlose. Da muß man sich mal umschauen. Aber wie gesagt - zum Ausprobieren ist das erstmal nicht erforderlich...

HaWe
07.06.2017, 22:54
ok, wenn es nur um irgendwas einstellen im Router mit Port 80 ginge - wenn ich genau weiß, wo und wie, das kriege ich notfalls mit der Telekom-Hotline hin.
Aber was dann noch außerdem, um meine ESP-Website mit Daten und Buttons von außen sichtbar und interaktiv steuerbar zu machen? Und zwar für dauerhaft, also wohl mit dynDNS, was immer das konkret auch heißen mag.
Solange die nächsten konkreten Schritte dafür nicht feststehen, brauche ich auch nicht im Router herumspielen und auch nicht noch html dafür lernen.
Nur fürs Heimnetz macht die Sache daher keinen Sinn, wenn von vornherein klar ist dass die Schwelle fürs www nicht einfach und simpel überwindbar ist - schwierig genug wird das dann hinterher eh noch mit dem ganzen Ratteschwanz an html code.
Sinn, um damit anzufangen, macht es nur fürs www, und dafür bräuchte ich jetzt die korrekte, einfach zu befolgende Anleitung, oder ich muss die Sache komplett stecken.
Lieber ein Ende mit Schrecken als ein Schrecken ohne Ende. 8)

HaWe
08.06.2017, 10:10
ps,
ist auch mit dem Router viel schwieriger als gedacht. Zum Einen muss man "TCP-Portbereiche" (??) angeben (im Video 1111, 2222, aber nichts mit 80), und zum Anderen konnte ich der Telekom-Dame nicht begreiflich machen, dass das Gerät kein Windows PC mit bestimmtem Namen ist wie PChawe oder PC_123, sondern um was es sich stattdessen bei einem ESP8266 handelt und wie der im Netz heißt, und welchen Geräte-Namen man folglich in dem Feld "Gültig für Gerät" angeben muss für die Portweiterleitung

HaWe
08.06.2017, 15:11
nur nochmal zur Sicherheit:
kann also niemand oder doch jemand hier erklären,
- wie mein ESP8266 Gerätename ist für den Speedport-Eintrag "Gültig für Gerät" ?
- ob ich dort, wo im Video für "TCP-Portbereiche" 1111, 2222,... etc steht, jetzt einfach 80 eintragen muss?
- was sonst noch im Speedport besonderes zu beachten ist (außer Gerätename und Port) speziell für den ESP8266 für meinen Zweck ?

Andree-HB
08.06.2017, 16:33
nur nochmal zur Sicherheit:
kann also niemand oder doch jemand hier erklären,


...vielleicht wollen Manche, die es könnten auch einfach nur nicht! ;-)

HaWe
10.06.2017, 11:04
also dafür solltest du dir einen fachkundigen aus deinem bekanntenkreis, vorzugsweise 30 jahre alt oder jünger besorgen, wenn älter wirds mit dem aktuellen kenntnisstand dünner


das war tatsächlich die richtige Idee - mein Sohn kannte einen, der einen kennt...
Jetzt funktioniert es!

Ceos
10.06.2017, 15:19
direkt an der box zu sitzen und es einzurichten ersetzt 1000 erklärende worte und mind 30minuten am telefon :)

freut mich dass du noch jemanden gefunden hast