ESP8266, Arduino IDE ohne Arduino Overhead?

OP #5708141
Lesenswert?

Ich würde gerne die Arduino IDE für die Programmierung des ESP8266 
verwenden, allerdings ohne die Bibliotheken von Arduino.
D.h. ich möchte lediglich von der komfortablen Bedienung und dem 
Vorteil, dass das SDK bereits aufgesetzt ist, profitieren.

Nun kompiliert ein Arduino-Sketch allerdings nicht ohne setup() und 
loop() Funktion. Sobald ich diese beiden Funktionen ohne Inhalt 
hinzufüge, verwendet ein simpler ESP-8266 Sketch, der lediglich einen 
Hardware-Timer initialisiert, gleich mal 283kByte Flash und 27kByte RAM.

Kann man irgendwie ohne setup() und loop() auskommen?
Gast #5708194
Lesenswert?

Das geht nicht (beim ESP8266).

Der Overhead durch das Arduino Framework ist ohnehin minimal, da es auf 
dem SDK aufbaut. Du kannst Du ja mal die Quelltexte des Cores anschauen, 
da steht nicht viel drin.

Die 256kB Flash Bedarf ergeben sich aus dem SDK, davon belegt das 
Arduino Framework höchstens 2kB.
OP #5708213
Lesenswert?

Danke für deine Antwort.

Wie ist denn das Vorgehen, wenn man das SDK direkt benutzt (ohne 
Arduino)?

Ruft man die user_init dann in setup auf? So etwa:
1
#include "user_hw_timer.c"
2

3

4
void hw_test_timer_cb(void){
5
  os_printf("Hello World.");
6
}
7

8

9
void ICACHE_FLASH_ATTR user_init(void){
10
  hw_timer_init(NMI_SOURCE, 1);
11
  hw_timer_set_func(hw_test_timer_cb);
12
  hw_timer_arm(1000);
13
}
14

15
void setup(){
16
  user_init();
17
}
18
void loop(){}

Stefanus F. schrieb:
> Die 256kB Flash Bedarf ergeben sich aus dem SDK, davon belegt das
> Arduino Framework höchstens 2kB.

Dann nehme ich an, dass der hohe RAM-Bedarf auch vom SDK kommt?
Gast #5708218
Lesenswert?

Max M. schrieb:
> Wie ist denn das Vorgehen, wenn man das SDK direkt benutzt (ohne
> Arduino)?

1) SDK Downloaden: 
https://www.espressif.com/en/support/download/sdks-demos
2) Die mitgelieferte Doku lesen
3) Das "ESP8266 SDK Getting Started Guide" lesen 
https://www.espressif.com/en/support/download/documents
4) Falls du das IDF verwendest, dass dessen Doku lesen: 
https://docs.espressif.com/projects/esp-idf/en/latest/
5) Die weiterführenden Dokus lesen die darin genannt werden.
OP #5708271
Lesenswert?

Max M. schrieb:
> Wie ist denn das Vorgehen, wenn man das SDK direkt benutzt (ohne
> Arduino)?

Damit meinte ich, wie ich in der Arduino IDE die SDK-Funktionen 
verwende.

VirtualBox mit Linux aufsetzen nur damit das SDK läuft halte ich nicht 
mehr für zeitgemäß (siehe 
https://www.espressif.com/sites/default/files/documentation/2a-esp8266-sdk_getting_started_guide_en.pdf).
Gast #5708291
Lesenswert?

Max M. schrieb:
> Damit meinte ich, wie ich in der Arduino IDE die SDK-Funktionen
> verwende.

Ach so war das gemeint. Ich würde versuchen, sie einfach aufzurufen (so 
wie du es gemacht hast).

Allerdings ist das bei Arduino nicht wirklich vorgesehen. Wegen der 
möglichen Seiteneffekte würde ich das vermeiden - insbesondere wenn es 
um Timer und Interrupt-Handler geht.

Bisher bin ich immer mit den Funktionen ausgekommen, die das Arduino 
Framework bereit stellt. Um Dinge Zeitgesteuert zu starten, benutze ich 
millis() in der main Loop. Zum Beispiel so:
1
unsigned long start=0;
2

3

4
void loop()
5
{
6
    if (millis()-start > 1000)
7
    {
8
        Serial.println("Eine Sekunde ist rum");
9
        start=millis();
10
    }
11
}
#5708318
Lesenswert?

Hallo,

Max M. schrieb:
> VirtualBox mit Linux aufsetzen nur damit das SDK läuft halte ich nicht
> mehr für zeitgemäß (siehe
> 
https://www.espressif.com/sites/default/files/documentation/2a-esp8266-sdk_getting_started_guide_en.pdf).

niemand hindert Dich, es unter Windows einzurichten:
https://www.esp8266.com/wiki/doku.php?id=setup-windows-compiler-esp8266

Ich habe es nicht gemacht, nur das IDF für den ESP32 habe ich hier 
drauf, nutze es aber eigentlich nicht wirklich.
Ich nutze ja die ESPs hautpsächlich wegen der WLAN-Fähigkeit, da muß das 
ja sowieso alles auf den ESP rauf, eagl, ob aus Arduino oder SDK.
Zugriff auf die SDK bzw. IDF Funktionen hat in ja auch aus der 
ArduinoIDE, Abhängigkeiten zu genutzten Resourcen gibt es dann zwar, mit 
denen kann man aber umgehen.

Gruß aus Berlin
Michael
OP #5708406
Lesenswert?

Mike R. schrieb:
> Ich würde mir da mal eine der möglichen Alternativen (z.B. VS Code mit
> PlatformIO) ansehen. Da kann man dann das SDK gleich als entsprechendes
> Framework auswählen.

Hab ich versucht, leider verwendet PlatformIO standardmäßig ein 
veraltetes SDK (bei mir noch version 2.1.0, obwohl inzwischen 3.0 
aktuell ist). Kann man das irgendwie einstellen?
Gast #5708422
Lesenswert?

Max M. schrieb:
> Hab ich versucht, leider verwendet PlatformIO standardmäßig ein
> veraltetes SDK (bei mir noch version 2.1.0, obwohl inzwischen 3.0
> aktuell ist). Kann man das irgendwie einstellen?

Was heißt schon veraltet? Ich benutze ganz bewusst das SDK 1.5.4, weil 
ich mit dessen Macken vertraut bin und heraus gefunden habe, wie ich es 
absolut stabil einsetzen kann.

Ich habe kein Bock mehr darauf, noch länger den Betatester für Espressif 
zu spielen. Ich habe aufgehört, jahrelang auf die Umsetzung von wilden 
Marketing-Versprechungen zu warten.

Wenn bei mir das SDK 1.5.4 für irgendeine Anwendung nicht ausreicht, 
wechsele ich eher zu einem anderen Hersteller. Denn auch andere haben 
inzwischen preisgünstige Alternativen im Programm. Zwar nicht so billig, 
wie Espressif, aber billig genug.
OP #5708432
Lesenswert?

Stefanus F. schrieb:
> Was heißt schon veraltet?

Ich gehe mal davon aus, dass Espressif mit späteren Versionen diverse 
Fehler aus den früheren SDKs behoben hat. Zum Beispiel ärgere ich mich 
gerade mit einem seltsamen Fehler "undefined reference to 
`user_rf_cal_sector_set'" herum. Die Google-Ergebnisse zu diesem Fehler 
sind spätestens von 2017. Da vermute ich stark, dass der mit 
nachfolgenden Versionen behoben wurde.

Irgendwie schade, dass es selbst 2019 noch keine benutzerfreundliche 
Alternative zu Arduino mit Native-SDK gibt.
Gast #5708439
Lesenswert?

Max M. schrieb:
> Ich gehe mal davon aus, dass Espressif mit späteren Versionen diverse
> Fehler aus den früheren SDKs behoben hat.

Das hoffst du. Und ich weiß, dass viele bekannte Fehler jahrelang 
verschleppt wurden während jedes Release neue Probleme eingeführt hat. 
besonders sei Einführung des ESP32 hat die Entwicklung des ESP8266 stark 
nachgelassen.

> user_rf_cal_sector_set

Damit hatte ich noch keinen Kontakt. Vielleicht bestätigt das meine 
Vorliebe für die Version 1.5.4.
Gast #5708471
Lesenswert?

Max M. schrieb:
> Stefanus F. schrieb:
>> Denn auch andere haben
>> inzwischen preisgünstige Alternativen im Programm. Zwar nicht so billig,
>> wie Espressif, aber billig genug.
>
> Magst du die kurz aufzählen?

Ich erinnere mich daran, das hier im Forum mehrere Alternativen genannt 
wurden. Kann mich anderen Namen/Nummern jedoch nicht erinnern. Wie du 
gesehen hast komme ich für meine Basteleien mit dem ESP8266 ganz gut 
klar.

Google mal nach "programmable wlan wifi module -esp" und gehe dann auf 
die Bilder-Ansicht. Da findest du ganz schnell welche.
OP #5708663
Lesenswert?

Stefanus F. schrieb:
> Das "ESP8266 SDK Getting Started Guide" lesen

Warum steht da "HTML" in der Übersicht in der Spalte "Download" wenn auf 
eine GitHub Seite weitergeleitet wird? Noch dazu ist diese GitHub 
Ansicht nicht zu gebrauchen, da diverse Links darauf nicht 
funktionieren.

Michael U. schrieb:
> niemand hindert Dich, es unter Windows einzurichten:

Die Version ist bereits veraltet.
Gast #5719761
Lesenswert?

Stefanus F. schrieb:
> Ich kann dein Argument nachvollziehen. Andererseits läuft der Compiler
> unter Linux (auch in einer VM) sehr viel schneller, als unter Windows.

Hi,

heisst Du zufällig Stefan Frings und hast diese irre aufwändige Seite im 
Netz, wo ich schon so oft drauf war?

http://stefanfrings.de/esp8266/

Habe nach einigen Tagen laufzeit gemerkt, dass die Funktion 
isConnected() nicht wirklich merkt, wann das wlan offline ist von der 
Fritzbox.  Ich bin über Richtfunk ans Netz angebunden im 
Entwicklungsland Deutschland und das fällt öfter mal aus, da reicht 
schon kräftiger Schneefall und alle sind hier offline. Nach einer Weile 
trennt dann auch das wlan die Geräte ab, wenn der DSL Kanal aus ist.

Ich weiss nicht genau was da abgefragt wird aber so ein ping wäre 
verrmutlich sicherer. Zudem ist die neue ESP 8266 2.4.2. nicht mehr 
lauffähig bei mir und hat glatt 100kb mehr, also 422 kb nur die Lib. 
Daher Downgrade auf 2.4.1. Die Beta 2.5.1. und 2.5.2. laufen auch nicht.

if (!WiFi.isConnected())
WifiStart();

Gruss,
Christian
Gast #5719970
Lesenswert?

Christian J. schrieb:
> heisst Du zufällig Stefan Frings und hast diese aufwändige Seite

Ja, das ist meine.

> Habe nach einigen Tagen laufzeit gemerkt, dass die Funktion
> isConnected() nicht wirklich merkt, wann das wlan offline ist von der
> Fritzbox.

Du benutzt die falsche Funktion. Den Status der Funkverbindung prüft man 
mit
1
if (WiFi.status()==WL_CONNECTED) ...

Die Doku des Arduino Cores ist da leider ein bisschen Lückenhaft. Ich 
habe einige hilfreiche Hinweise in der Doku der aktuellen Version 
gefunden - obwohl ich immer noch eine ältere Version benutze (hab keine 
Lust auf neue Probleme).

> Zudem ist die neue ESP 8266 2.4.2. nicht mehr
> lauffähig bei mir und hat glatt 100kb mehr, also 422 kb nur die Lib.
> Daher Downgrade auf 2.4.1. Die Beta 2.5.1. und 2.5.2. laufen auch nicht.

Ich empfehle immer noch die Version 2.3.0 (die auf dem SDK 1.5.4 
aufbaut). Denn danach begannt die Featuritis: Man wollte wohl unbedingt 
das neue SDK 2.x mit dem etwas schnelleren lwIP v2 Stack und ipv6 
Support verwenden.

Zeitlich überlappend kam der viel spannendere ESP32 heraus, dem sich die 
meisten SDK-Entwickler anscheinend zugewendet haben. Das SDK 2.x vom 
ESP8266 ist in einem sehr schlechten Zustand, und das wirkt sich jetzt 
auch auf Arduino aus. Da wird sich auch nicht mehr viel tun - denke ich 
- denn es wird bereits am IDF (=Nachfolger des SDK) gearbeitet.

Der ESP32 ist trotz der grossen Entwicklungsaktivität leider noch keine 
Empfehlung wert, weil seine Firmware schlicht instabil läuft und 
zahlreiche Hardwarefunktionen noch nicht unterstützt werden. Ich 
schätze, dass der ESP32 den kleineren Bruder im Laufe der nächsten 5 
Jahre ablösen wird.

Das ist nicht schlimm, denn mit Version 2.3.0 haben wir einen stabilen 
Arduino Core, der nicht verschimmeln wird. Ich würde mir an Deiner 
Stelle eine funktionierende Kombination aus Arduino IDE (im Portable 
Modus) mit ESP8266 Core 2.3.0 sichern - nur für den Fall dass man es 
nicht mehr herunterladen kann.

Spätestens wenn der ESP32 kommerziell interessant wird, können wir damit 
rechnen, dass die übrigen ESP8266 Module für noch weniger Geld 
verscherbelt werden. Das wird der Moment sein, wo ich mir ein 100er Pack 
kaufe :-)
Gast #5720052
Lesenswert?

Ich bin wahrlich kein Fan von Arduino, doch das Espressif SDK 1.5.4 ist 
so kompliziert anzuwenden, dass ich hierfür auch lieber Arduino 
verwendet.

Angeblich soll das SDK 2.x komfortabler sein, aber das will ich wegen 
der bekannten Instabilitäten nicht verwenden. Ich habe noch etwas 
anderes zu tun, als fortlaufend meine Projekte an neue Versionen 
anzupassen, ohne die Gewissheit dass das irgend etwas nützt.

Dieses Spiel habe ich von Version 0.irgendwas bis 1.5.4 lange genug 
mitgemacht.

IPv6 brauche ich noch nicht. Bis es soweit ist, wird der ESP8266 
Geschichte sein.
Gast #5720075
Lesenswert?

Max M. schrieb:
> Hab ich versucht, leider verwendet PlatformIO standardmäßig ein
> veraltetes SDK (bei mir noch version 2.1.0, obwohl inzwischen 3.0
> aktuell ist). Kann man das irgendwie einstellen?

Natürlich, in der platform.ini
1
[env:stable]
2
platform = espressif8266
3

4
[env:development]
5
platform = https://github.com/platformio/platform-espressif8266.git
6
# oder mit Angabe eines branches:
7
# platform = https://github.com/platformio/platform-espressif8266.git#feature/stage
8

9
[env:v1.8.0]
10
platform = espressif8266@1.8.0

(die versionsnummer @1.8.0 und müsste m.W. die ESP-SDK-Version 2.4.2 
verwenden)

So kannst du mit ein paar Änderungen im platformio.ini alle möglichen 
Espressiv-SDK ± arduino-Versionen durchprobieren, mit den GIT-Versionen 
müsste auch 2.5.2 und neuer dabei sein.
Gast #5720082
Lesenswert?

Danke für die Infos und den ausführlichen Bericht! Ich dachte mir fast 
schon sowas bei meiner kleinen Anwendung mit den paar LEDS und einem 
OLED Display. So richtig kann ich den Netzen dieses Dings auch nicht 
einschätzen. Es kann rechnen und ich kann was mit dem Wlan machen. Und 
es kann schön schnell rechnen :-) Aber dafür gibts auch den Cortex.

Und ja, mit Arduino war ich in 2 Tagen "drin", es lief und ich konnte 
auf einem Beispiel aufbauen. Ohne genau zu wissen was da drin ist. Habe 
noch nie ins Datenblatt geschaut, die Lib Header reichten mir vollkommen 
und die Beispiele.
OP #5720093
Lesenswert?

Christian J. schrieb:
> Aber dafür gibts auch den Cortex

Aber der kann nicht ins WLan.

Christian J. schrieb:
> So richtig kann ich den Netzen dieses Dings auch nicht einschätzen.

Viel RAM und Flash. Viel Rechenleistung, WLAN fähig. Sehr günstig. Und 
du kannst den Nutzen nicht einschätzen??

Spaßverderber schrieb:
> mit den GIT-Versionen müsste auch 2.5.2 und neuer dabei sein.

Nein, ist es nicht. Auf GitHub gibt es diverse Issues, wo Leute seit 
Monaten auf eine Unterstützung für neuere native SDKs warten. Arduino 
geht sicher, aber das will ich explizit nicht.
Inzwischen läuft bei mir SDK 3.1 auf einem Linux Subsystem in Win10 und 
alles funktioniert einwandfrei.
Gast #5720099
Lesenswert?

Max M. schrieb:
> Aber der kann nicht ins WLan.

Das nützt die aber alles nix, wenn du auf deinem Maschinchen keine 
leistungsfähigen Server Anwendungen hast oder Clients, die das Internet 
bedienen können..... Mein TV kann sich mit DNLA mit meinem Server 
verbinden, ganz einfach unter Linux. Kann das der esp auch? Ich ja schon 
froh dass er TLS hat denn die Wetter Map hat auf https umgestekllt..
Gast #5720100
Lesenswert?

Christian J. schrieb:
> 2.3.0 läuft nicht, keine Ausgabe auf der Seriellen.

Probiere zum Vergleich mal einen meiner Beispiel-Sketche. Das hat ja mal 
funktioniert, warum sollte es plötzlich anders sein?

Zur Not kann ich Dir ein ZIP File von meiner Installation geben. Aber 
ich vermute eher, dass du einen Fehler in deinem Sketch hast.
Gast #5720112
Lesenswert?

Max M. schrieb:
> Dir ist hoffentlich klar, dass in einem Fernseher mehrere Prozessoren im
> Kaliber eines A9 werkeln, plus diverse FPGAs und ASICs.

Ach nee.... ? Und darum ist vielleicht so ein ESP Steinchen nicht mehr 
als eine Spielerei, die grad mal ausreicht ein Relais zu schalten, weil 
die umgebende Technik schon viel zu komplex ist um mehr damit zu machen. 
Ich sehe da nichts weiter als einen Bastel uC. Für was Kommerzielles 
fehlt mir die Phantasie. Ändert sich irgendwas, zb mal eben http nach 
https wäre schon ein Update notwendig für den End User. Und OTA kennt er 
sicher auch nicht.
Gast #5720131
Lesenswert?

Also Stefan, nur 2.4.2 erzeugt bei mir eine serial Ausgabe auf dem 
hauseigenen COM Debug Feld 2.4.1 schon nicht mehr. Ich nutze immer F 
makros. Aber das wäre einen Aufgabe für Doofe die überall raus zu 
nehmen. keine Ahnung was ich da falsch mache, dass 2.3.0 nicht läuft. Es 
ist einfach nur das schnöde SerialPrint.... die Anwendung läuft 
teilweise. Unterstützt 2.3.0 denn auch SecureClient?
Angehängte Dateien:

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