Forum: Mikrocontroller und Digitale Elektronik ESP über Webinterface programmieren?


von chris (Gast)


Lesenswert?

Gibt es eine Möglichkeit oder fertige Lösung, einen ESP8266 oder ESP32 
über ein Webinterface zu programmieren?

Ich könnte mir z.B. ein Python-Terminal im Browser vorstellen.

von Joachim S. (oyo)


Lesenswert?

Möglich ist das durchaus, fertige Lösungen sind mir auf Anhieb 
allerdings nicht bekannt.
Wobei das auch nur dann einfach funktioniert, wenn der ESP mit einer 
Firmware für eine Script-Sprache (LUA, Python, JavaScript o.Ä.) 
betrieben wird, nicht mit der Arduino-Software.

von Rainer U. (r-u)


Lesenswert?


von chris (Gast)


Lesenswert?

>Hier z.B.
>http://www.esp8266.com/viewforum.php?f=38

Danke für den Link. Das ist schon mal ein sehr interessanter Hinweis.
Hier gibt's die Originalseite
https://www.esp8266basic.com/

und das Repository:
https://github.com/esp8266/Basic/tree/NewWebSockets

von Chr. M. (snowfly)


Lesenswert?

Die Arduino IDE gibt es doch auch als Web-Service und der ESP kann OTA
geflasht werden.
Ist aber wahrscheinlich nicht das was du suchst.

ESPeasy lässt sich stark konfigurieren.

Lässt sich LUA nicht über IP ansprechen?

von chris (Gast)


Lesenswert?

>Die Arduino IDE gibt es doch auch als Web-Service und der ESP kann OTA
>geflasht werden.
>Ist aber wahrscheinlich nicht das was du suchst.

Danke, darauf bin ich auch schon gestoßen. Aber es schien so, dass man 
spezielle Arduino-IDE-Versionen ( 1.6.9 ... ) braucht und das war mir 
suspekt.

Der Grund für mein Vorhaben: ich hatte ein Geburtstagsgeschenk mit einem 
Arduino Nano-Klon und CH340 gebastelt und beim "Beschenkten" ist es dann 
an der Treiberinstallation gescheitert. Ich hatte das Problem schon mal 
bei verschiedenen Workshops und ich schätze, dass es bei ca. 1 von 10 
Rechnern größere Probleme gibt.
Deshalb will ich jetzt etwas haben, dass direkt über den Browser ohne 
Installation funktioniert.
Für die Bastelleien reicht meistens sowieso ein einfacher 
Script-Interpreter mit dem man z.B. ein Servo "ge-timed" vor und zurück 
laufen lassen kann oder zur Not auch mal auf einen Sensorwert triggern 
kann.

von holger (Gast)


Lesenswert?

>Danke, darauf bin ich auch schon gestoßen. Aber es schien so, dass man
>spezielle Arduino-IDE-Versionen ( 1.6.9 ... ) braucht und das war mir
>suspekt.

OTA hat nichts mit der Arduino Version zu tun. OTA wird in den ESP
geflasht und von da an kannst du per Browser dein Programm runterladen,
komplett ohne Arduino IDE.

von Stefan F. (Gast)


Lesenswert?

Deine Anforderung klingt für mich nach NodeMCU bzw. Luna Scripte. Kennst 
du das?

von Stefan F. (Gast)


Lesenswert?

Die online IDE dazu ist espsky.com

von chris (Gast)


Lesenswert?

>Deine Anforderung klingt für mich nach NodeMCU bzw. Luna Scripte. Kennst
>du das?

Danke, kenne ich nicht, werde es aber mal anschauen.

Im Moment gibt's gerade ein anderes Problem: Ich habe die NodeMCUs schon 
länger herum liegen, aber noch nie was damit gemacht. Jetzt habe ich mal 
testweise das Arduino-AccessPoint Beispiel geflasht

https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino

aber statt das sich das Ding mit "ESPap" meldet, taucht 
"FarryLink_3DEEB1" mit voller Signalstärke und offen auf.
Wie muss ich das interpretieren?

von Horst (Gast)


Lesenswert?

Stefan U. schrieb:
> Luna Scripte

Luna? Was hat der Esp mit BitchX zu tun?
Oder meinst Du eher LUA? Das würde dann wieder zu NodeMCU passen?

von Stefan F. (Gast)


Lesenswert?

> Wie muss ich das interpretieren?

Wenn man keinen bestimmten Namen festlegt wird einer automatisch 
generiert nach diesem Muster. Scheinbar hast du da einen Bug entdeckt. 
Bei meinem WiFi Monitor klappt das jedoch.

Dass das Ding einen AP darstellt ist Sinn dieses Programms.

Meinst du mit "offen" ohne Passwort? Im Quelltext ist aber ein Passwort 
definiert und bei meinem Wifi Monitor funktioniert das auch definitiv.

Es kommt mir so vor, als hättest du ein anderes Programm installiert, 
als das von Dir verlinkte.

Probiere das mal: http://stefanfrings.de/esp8266/WifiMonitor.zip

Sorry ja ich meinte LUA, nicht Luna.

von chris (Gast)


Lesenswert?

>Scheinbar hast du da einen Bug entdeckt.
>Bei meinem WiFi Monitor klappt das jedoch.

Zuerst hatte ich das Arduino-Blink-Programm geflasht, was einwandfrei 
ging.
Dann zum Test den genannten simplen Access-Point.
Vielleicht liegt es an der Version des NodeMCU, die ich habe:
https://www.amazon.de/gp/product/B01N4OYOKD/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

da steht "ESP8266 12E"
In der Arduino IDE kann man zwei Flashgrößen auswählen. In der 
Beschreibung finde ich aber nicht welche.

von chris (Gast)


Lesenswert?

>Probiere das mal: http://stefanfrings.de/esp8266/WifiMonitor.zip

Sorry, das hat sich jetzt überschnitten, weil Du nochmals editiert hast, 
während ich schon schrieb.

Dein WifiMonitor meldet sich korrekt.
Warum auch immer das Arduino-Webserver mit dem falschen Namen meldet 
....

von Stefan F. (Gast)


Lesenswert?

An der Version des ESP Moduls wird es vermutlich nicht liegen denn 
Arduino tauscht beim Upload immer die gesamte Firmware aus.

von chris (Gast)


Lesenswert?

Irgendwas ist seltsam. Nach Deinen WifiMonitor habe ich noch mal den 
einfachen AccesPoint gefflasht. Jetzt meldet er sich mit dem richtigen 
Namen, dafür kann sich mein Tablet aber nicht authentifizieren.

Für heute gebe ich's mal auf ... mal morgen weiter sehen ..

von Stefan F. (Gast)


Lesenswert?

Die SSID und das Passwort werden nach jeder Änderung automatisch 
dauerhaft gespeichert. Möglicherweise wird in diesem problematischen 
Testprogramm die WiFi Klasse falsch initialisiert. Eventuell kommt es 
auf die Reihenfolge der Befehle an:
1
    WiFi.mode(WIFI_AP_STA);
2
    WiFi.softAP(apName, password);
3
4
    WiFi.begin(ssid, pass);
5
    WiFi.reconnect();

von Frank (Gast)


Lesenswert?

chris schrieb:
> dafür kann sich mein Tablet aber nicht authentifizieren

Sonderzeichen in der SSID evtl Mal entfernen falls welche drin sind. 
Kommen immernoch nicht alle Geräte mit klar...

von chris (Gast)


Lesenswert?

Danke für die Beiträge.
Mittlerweile funktioniert es. Das mit der Authentifizierung hat auch 
geklappt. Es geht nur sehr lange, bis sich das Tablet mit dem ESP 
verbunden hat. Scheinbar werden dafür mehrere Versuche gebraucht.

Im Moment experimentiere ich gerade ein wenig mit dem ESP-Basic.
Man kann tatsächlich den ESP über die Weboberfläche programmieren und 
hier gibt es Beispiele dazu:

https://www.esp8266basic.com/examples.html

Der Syntax Unterscheidet sich ein wenig von dem was ich kenne.
Die "delay" Funktion funktioniert nur im Sekundenbereich gut. Alles was 
schneller sein soll ist ungleichmäßig.

Außerdem musste ich erst die Pin-Zuordnung heraus finden. Es werden 
nämlich nicht die logischen PinNummern ( D0, D1, D2 usw ) sondern die 
GPIO PinNummern verwendet.

Was ich auch noch nicht weiß: gibt es einen Autostart? Sonst muss man 
jedesmal zuerst in der Weboberfläche das Programm starten.

von K. J. (Gast)


Lesenswert?

Autostart hat das, glaub nach einer minute

von Stefan F. (Gast)


Lesenswert?

> Die "delay" Funktion funktioniert nur im Sekundenbereich gut. Alles
> was schneller sein soll ist ungleichmäßig.

Das liegt an der Funktionsweise der Firmware und dürfte jede 
Programmiersprache betreffen.

von chris (Gast)


Lesenswert?

>Das liegt an der Funktionsweise der Firmware und dürfte jede
>Programmiersprache betreffen.

Vermutlich die Routinen für den Wifi-Zugriff.
Gibt es so was ähnliches wie das ESP8266-Basic für den ES32? Da sollte 
das Problem dann vermeidbar sein.

von chris (Gast)


Lesenswert?

>Autostart hat das, glaub nach einer minute

Ich habe es gerade raus gefunden: In den "Settings" muss man ein 
Häckchen setzen, dann startet es nach einer Weile automatisch.

von chris (Gast)


Angehängte Dateien:

Lesenswert?

In den Examples gibt es ein Beispiel für einen "Analog Graph".
Hat das schon mal jemand probiert, bei mir wirft es immer einen Fehler.

von chris (Gast)


Lesenswert?

Der Aufbau des ESP8266-Basic ist interessant. Es wird die Arduino-API 
als Unterbau benutzt.
Ich hatte mich schon gewundert, warum das Basic so viel Peripherie wie 
z.B. TFT-Displays unterstützt. Durch die Arduino-API können die ganzen 
für Arduino verfügbaren Libraries eingebunden werden und damit steht ein 
riesiges Treiber-Reservoir zur Verfügung.

An das Basic werden dann nur noch die Treiber über Basic-Kommandos drann 
gehängt.

Hier ist das Kommandointerpreter-File:
https://github.com/esp8266/Basic/blob/NewWebSockets/ESP8266Basic/Commands.ino

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Das ESP-Basic hat schon einige graphische Bedienelement eingebaut, die 
es in eine HTML-Seite einbinden kann.

Ich habe mal alle Elemente in eine GUI-Demo gepackt, die ich gefunden 
habe.

von stefan (Gast)


Lesenswert?

vielleicht das hier
https://learn.adafruit.com/micropython-basics-esp8266-webrepl/access-webrepl

micropython bietet auf dem ESP8266-Port eine WebREPL an

von chris (Gast)


Lesenswert?

Python finde ich auch besser als Basic. Ich weiß aber nicht wie gut sich 
MicroPython gegenüber Python schlägt.

Wenn ich es richtig sehe, braucht WebRepl auch eine Installation auf der 
Rechnerseite.
EspBasic hat demgegenüber einen riesigen Vorteil. Man kann einfach über 
den Browser darauf zugreifen. Ob über's Smartphone, Tablet, Mac, Linux, 
Windows: es funktioniert überall über den Webbrowser. Das ist in einer 
Zeit, in der man 50% seiner Zeit mit der Suche von Installationsfehlern 
beschäftigt ist, Gold wert.

von stefan (Gast)


Lesenswert?

WebREPL geht auch ohne Installation auf PC-Seite
https://micropython.org/webrepl/

Und was die Unterschiede zu CPYthon angeht:
https://github.com/micropython/micropython/wiki/Differences

von chris (Gast)


Lesenswert?

MicroPython klingt interessant. Für was steht WebRepl? Web-Reply?

Praktischerweise gibt es einen Port für den ESP32:
https://github.com/micropython/micropython-esp32/tree/esp32/ports/esp32

und fertige Binaries für den ESP:
http://micropython.org/download

von Joachim S. (oyo)


Lesenswert?

chris schrieb:
> Für was steht WebRepl? Web-Reply?

REPL steht für "Read-Eval-Print-Loop":
https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop

Etwas vereinfacht gesagt:
Mit REPL bezeichnet man die Shell bei Programmiersprachen, die eine 
interaktive Shell anbieten (z.B. Python, JavaScript, Node.js, LUA, LISP 
usw.).
Eine solche interaktive Shell (ein "Webinterface" ist ja eigentlich auch 
nichts anderes) hängt eng mit der Verfügbarkeit einer "eval"-Funktion 
zusammen: Wenn eine Programmiersprache eine "eval"(uate)-Funktion hat, 
dann hat die Programmiersprache normalerweise auch eine interaktive 
Shell, und dann ist es normalerweise auch sehr einfach möglich, ihr ein 
"Webinterface" zu verpassen.
Und eine "eval"-Funktion haben normalerweise nur interpretierbare 
Script-Sprachen, die vor der Ausführung nicht erst (wie z.B. Java- oder 
C/C++-Code) kompiliert werden müssen.

Der Name REPL kommt von LISP, wo sich eine interaktive Shell als 
Einzeiler aus genau diesen vier Befehlen implementieren lässt:
1
(loop (print (eval (read))))

von chris (Gast)


Lesenswert?

Ah ... danke für die ausführliche Erklärung :-)

Jetzt versuche ich mal, MicroPython auf dem ESP32 zu installieren.

Dazu brauche ich


- das esptool.py
https://github.com/espressif/esptool


- eine Installationsanleitung
https://techtutorialsx.com/2017/05/20/esp32-micropython-support/
( leider für Windows )

1. Flash löschen
1
 esptool.py --port /dev/ttyUSB0 erase_flash

2. Binary flashen
1
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp32-20171205-v1.9.2-445-g84035f0f.bin

Das flashen funktioniert scheinbar gut und ergibt mir dieses Meldung:
1
esptool.py v2.2
2
Connecting........_____.....___
3
Detecting chip type... ESP32
4
Chip is ESP32D0WDQ6 (revision 0)
5
Uploading stub...
6
Running stub...
7
Stub running...
8
Changing baud rate to 460800
9
Changed.
10
Configuring flash size...
11
Auto-detected Flash size: 4MB
12
Compressed 936288 bytes to 587494...
13
Wrote 936288 bytes (587494 compressed) at 0x00000000 in 13.6 seconds (effective 550.1 kbit/s)...
14
Hash of data verified.

Jetzt brauche ich Minicom als Terminal:
http://processors.wiki.ti.com/index.php/Setting_up_Minicom_in_Ubuntu

Aber leider gibt mir der ESP32 folgendes zurück:
1
ets Jun  8 2016 00:22:57
2
3
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
4
flash read err, 1000
5
Falling back to built-in command interpreter.
6
OK
7
>

Hat jemand eine Ahnung, warum es diesen Fehler geben könnte?

von chris (Gast)


Lesenswert?

Es gab hier schon mal einen Beitrag
Beitrag "Re: BASIC für ESP8266 Module"

von Chr. M. (snowfly)


Lesenswert?

chris schrieb:
> Auto-detected Flash size: 4MB

Das passt möglicherweise nicht zu deinem 8MB Binary.

von chris (Gast)


Lesenswert?

>Das passt möglicherweise nicht zu deinem 8MB Binary.
Das wäre ein gutes Argument, aber ich habe das Binary von hier:
http://micropython.org/download#esp32
und wenn ich es richtig sehe, hat es kleiner 1MByte:
>Auto-detected Flash size: 4MB
>Compressed 936288 bytes to 587494...

von Stefan F. (Gast)


Lesenswert?

Das muss nicht viel heißen. Es kann sein, dass diese Firmware den Flash 
Bereich von 5-8MB für Konfigurationsdaten oder ein OTA Update nutzt.

von chris (Gast)


Lesenswert?

Aufgrund der Hinweise habe ich es noch mal probiert.

Das Flashen muss ab Adresse 0x1000 passieren:
1
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20171205-v1.9.2-445-g84035f0f.bin

Minicom zeigt jetzt dieses:
1
Willkommen zu minicom 2.7
2
3
Optionen: I18n 
4
Übersetzt am Feb  7 2016, 13:37:27.
5
Port /dev/ttyUSB0, 09:34:17
6
7
Drücken Sie CTRL-A  Z für Hilfe zu speziellen Tasten
8
ets Jun  8 2016 00:22:57
9
10
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
11
ets Jun  8 2016 00:22:57
12
13
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
14
configsip: 0, SPIWP:0xee
15
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
16
mode:DIO, clock div:2
17
load:0x3fff0018,len:4
18
load:0x3fff001c,len:4332
19
load:0x40078000,len:0
20
load:0x40078000,len:10992
21
entry 0x4007a6c4
22
I (205) cpu_start: Pro cpu up.
23
I (205) cpu_start: Single core mode                                             
24
I (205) heap_init: Initializing. RAM available for dynamic allocation:          
25
I (209) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM                       
26
I (215) heap_init: At 3FFDCD68 len 00003298 (12 KiB): DRAM                      
27
I (221) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM                    
28
I (227) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM                   
29
I (234) heap_init: At 4008FC7C len 00010384 (64 KiB): IRAM                      
30
I (240) cpu_start: Pro cpu start user code                                      
31
I (34) cpu_start: Starting scheduler on PRO CPU.                                
32
OSError: [Errno 2] ENOENT                                                       
33
MicroPython v1.9.2-445-g84035f0f on 2017-12-05; ESP32 module with ESP32         
34
Type "help()" for more information.                                             
35
>>>
Was ich als gutes Zeichen werte. Allerdings reagiert es nicht auf meine 
Eingaben ....

von chris (Gast)


Lesenswert?

Mit Teraterm auf Windows funktioniert MicroPython einwandfrei ( VT100 
Emulation ).
Mit Minicom auf Linux erhält MicroPython scheinbar keine 
Tastatureingaben ( Einstellung VT102 )

von uxdx (Gast)


Lesenswert?

ich habe mal Micropython an 0x00000 geflasht und siehe da, es geht auch 
mit minicom unter Linux:

./esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0 
esp8266-20171101-v1.9.3.bin
1
l�#4 ets_task(40100130, 3, 3fff837c, 4)
2
OSError: [Errno 2] ENOENT
3
4
MicroPython v1.9.3-8-g63826ac5c on 2017-11-01; ESP module with ESP8266
5
Type "help()" for more information.
6
>>> a=1
7
>>> b=2
8
>>> print(a+b)
9
3
10
>>>

von chris (Gast)


Lesenswert?

Meine Installation war für den dem ESP32, weil ich vermute, dass der 
weniger durch Webzugriffe ausgebremst wird und hoffe, dass für das 
Micropython auch der zweite Kern benutzt wird.
1
Detecting chip type... ESP32

Im Moment tendiere ich aber noch zu ESP8266BAsic, da es dort einfache 
Graphikbeispiele für den Webbrowser gibt:

https://www.esp8266basic.com/graphics-example.html

Gibt es ähnliche Graphikwebserverbeispiele für Micropython?

von Stefan F. (Gast)


Lesenswert?

Der ESP8266 läuft normalerweise mit 80Mhz. Davon geht nur ein Bruchteil 
für die Netzwerk-Kommunikation drauf (laut Hersteller 1/4). Man kann die 
Taktfrequenz darüber hinaus nochmal verdoppeln.

> ESP32, weil ich vermute, dass der weniger durch Webzugriffe
> ausgebremst wird

Mach Dir darüber weniger Sorgen.

von mp (Gast)


Lesenswert?


von chris (Gast)


Lesenswert?

Wenn ich es richtig sehe, geht es dort um Displays.
ESP8266Basic bietet die Graphk aber für die Browseroberfläche.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.