ESP über Webinterface programmieren?

#5228352
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.
Gast #5228823
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.
Gast #5228837
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.
Gast #5228912
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?
Gast #5228926
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.
Gast #5228940
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.
Gast #5228974
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 ..
Gast #5229162
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();
Gast #5229247
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.
Gast #5229257
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.
Gast #5229621
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.
Gast #5231156
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
Gast #5231745
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.
#5233174
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))))
Gast #5233181
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?
Gast #5237331
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 ....
Gast #5238330
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
>>>
Gast #5238601
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?
Gast #5238648
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren