Forum: Mikrocontroller und Digitale Elektronik ESP32 API mit Arduino bzw. Espressiv API


von Thorsten M. (cortex_user)


Lesenswert?

Hallöchen,

ich schreibe Zeile um Zeile einer Steuerung und tauche dabei immer 
tiefer in den ESP32 ein, der ein starkes Stück Hardware ist. Beim 
Googlen lande ich immer wieder auf den Seiten des Herstellers und seiner 
API, die viele Funktionen hat, die ich bei der von Arduino nicht 
wiederfinde oder anders.

Manches kann ich mit ESP. ... als Methode aufrufen, anderes hat einen 
ganz eigenen Namen oder es existiert nicht.

Kann mir jemand sagen wie man diese beiden Welten vereinen kann? Die von 
ESPRESSIV scheint mir doch einen sehr viel detailierteren Zugriff zu 
erlauben. Ähnlich wie beim STM32F103, wo man mit Embitz alles erreichen 
und rausholen kann, in der Arduino Welt aber kaum mal einen Timer 
ansprechen kann, geschweige denn die vielen Optionen der ADC nutzen.

Fragen:

Lässt sich das ESPRESSIV Interface irgendwie einbinden?

CPU Taktwechsel 80 auf 260Mhz und zurück, gibt es da Probleme, wenn man 
den bei rechenintensiven Routinen wo ich Standardabweichungen usw 
berechne hochschraubt? Kommt da was aus dem Takt intern?

Gibt es eine Semaphore Struktur wenn ich das RTOS benutze unter Arduino 
um Kollisionen zu vermeiden? Ich würde gern alle Berechnungen für 
Messreihen die ständig laufen um zb Mittelwerte von Tabellen zu bilden, 
Varianz und Sigma auf den Core 0 auslagern, der aber gemeinsamen 
Speicher mit Core 1 benutzt. Da muss ich abriegeln. Muss ich das selbst 
machen oder hat der Hardware die das regelt? RAM ist ja gleich für 
beide.

Gruss,
Thorsten

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Der Arduino Core baut auf dem IDF von Espressif (mit f nicht v) auf. 
Dieses wurde in den Vergangenen Jahren fortlaufend weiter entwickelt, so 
dass du darauf achten musst, die richtige Version der Doku zu benutzen.

Bedenke, dass man nicht beliebig alle Funktionen der beiden Frameworks 
durcheinander verwenden kann. Ich würde dir empfehlen, dich für eine der 
beiden Welten zu entscheiden und dann dabei zu bleiben: Arduino oder 
IDF. Arduino ist dir offenbar zu beschränkt, also sollte die 
Entscheidung leicht fallen.

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> Arduino ist dir offenbar zu beschränkt, also sollte die
> Entscheidung leicht fallen.

Bietet die hauseigene SDK auch den gleichen Luxus was Uploads, debuggen 
usw. angeht?

von Stefan F. (Gast)


Lesenswert?

Thorsten M. schrieb:
> Bietet die hauseigene SDK auch den gleichen Luxus was Uploads, debuggen
> usw. angeht?

Selbstverständlich. Nur halt nicht auf dem Kindischen-Niveau der Arduino 
IDE.

Ich dachte du hast die Doku bereits gefunden!?

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/index.html

von Franz (Gast)


Lesenswert?

Thorsten M.
>Ähnlich wie beim STM32F103, wo man mit Embitz alles erreichen
>und rausholen kann, in der Arduino Welt aber kaum mal einen Timer
>ansprechen kann, geschweige denn die vielen Optionen der ADC nutzen.

Da liegst du ziemlich falsch:
https://github.com/stm32duino/wiki/wiki/HardwareTimer-library

Man kann auch alle Hardwarefunktionen der STM-HAL benutzen (wenn man's 
kann).

von Besserwisser (Gast)


Lesenswert?

Na dann koppel mal den DMA controller an einen ADC der zirkular tastet 
und installiere mal einen Timer CC Interrupt der den DMA anstoesst in 
Deiner bunten Arduino Kindergarten Welt.,.

von J. S. (jojos)


Lesenswert?

Arduino (STMDuino) verwendet HAL, also kann man auch direkt HAL/LL Code 
in Arduino verwenden, auch Cube generierten.
Wenn man es Anwenderfreundlich machen will, dann baut man daraus eine 
C++ Komponente und fertig. Verbietet keiner.

von EAF (Gast)


Lesenswert?

Thorsten M. schrieb:
> Beim
> Googlen lande ich immer wieder auf den Seiten des Herstellers und seiner
> API, die viele Funktionen hat, die ich bei der von Arduino nicht
> wiederfinde oder anders.

Auch wenn unser Stefanus wieder Arduino Bashing betreibt...
Es liegt halt in seinem Wesen. Je weniger Ahnung er von einem Thema hat 
desto lauter und dümmer das Getrööte

Die ganze API des Herstellers steht dir in Arduino zur Verfühgung.

Thorsten M. schrieb:
> Kann mir jemand sagen wie man diese beiden Welten vereinen kann?
Die betreffende *.h Datei einbinden, dann sind auch die API Funktionen 
da.
Das gilt für alle µC und ihre Libs.
Warum sollte das beim ESP anders sein?

Wenn du konkret werden würdest, könnte man dir evtl. eine konkrete 
Antwort liefern.
Aber so ist das nur Gejammere.

von John P. (brushlesspower)


Lesenswert?

Thorsten M. schrieb:
> Lässt sich das ESPRESSIV Interface irgendwie einbinden?

EAF schrieb:
> Die ganze API des Herstellers steht dir in Arduino zur Verfühgung.

Korrekt.

du kannst in Arduino direkt die Espressif IDF funktionen nutzen. Oder 
auch gern direkt auf den Registern arbeiten.

Mache ich selber genauso. Sensor abfragen über Arduino und RMT 
Peripheral über IDF funktionen.

Das einzige was man beachten sollte: Im Arduino Core ist die IDF Version 
meistens eine Version älter.
Sprich: es wird immer erst die IDF aktualisiert und danach der Arduino 
Core nachgezogen.

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Je weniger Ahnung er von einem Thema hat
> desto lauter und dümmer das Getrööte

War meine Antwort falsch?

von Thorsten M. (cortex_user)


Lesenswert?

EAF schrieb:
> Wenn du konkret werden würdest, könnte man dir evtl. eine konkrete
> Antwort liefern.
> Aber so ist das nur Gejammere.

Wie bindet man die API denn genau ein? Ich habe nur ESP.h drin und 
einiges mit wifiserver.h usw. Das mit Registern lassen wir mal schön 
sein ... das behalte ich AVR und PIC vor.

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Thorsten M. schrieb:
> Wie bindet man die API denn genau ein?
Warum wirst du nicht konkret?
Was willst du nutzen?
Wo klemmt es?

EAF schrieb:
> Die betreffende *.h Datei einbinden, dann sind auch die API Funktionen
> da.
> Das gilt für alle µC und ihre Libs.
> Warum sollte das beim ESP anders sein?

Es gibt gefühlt 100 Dateien, welche du da einbinden könntest.
Welche davon nötig ist, kannst nur du wissen.

von Thorsten M. (cortex_user)


Lesenswert?

EAF schrieb:
> Es gibt gefühlt 100 Dateien, welche du da einbinden könntest.
> Welche davon nötig ist, kannst nur du wissen.

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/index.html

Ok, habe es gefunden... heute aber keine Zeit das zu testen.

: Bearbeitet durch User
von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Thorsten M. schrieb:
> da steht nirgendwo was von Header Dateien

Natürlich nicht auf der Übersichts-Seite. Aber auf den dort verlinkten 
Seiten mit den konkreten Funktionen.

von Thorsten M. (cortex_user)


Angehängte Dateien:

Lesenswert?

Stefan F. schrieb:
> Natürlich nicht auf der Übersichts-Seite. Aber auf den dort verlinkten
> Seiten mit den konkreten Funktionen.

Probiere es später aus. Frau macht aber grad Essen...

#include <components/hal/include/hal/adc_types.h>

Gibt Fehlermeldung: No such file

Muss man die erst irgendwo installieren? Falls ja, kannst Du das mal 
beschreiben? Die install.bat bricht sofort ab. Und das ist bereits da 
unter /core, installiert von Arduino

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Thorsten M. schrieb:
> Muss man die erst irgendwo installieren?

Ich habe das starke Gefühl, dass du doch besser bei dem bleiben 
solltest, was Arduino mitbringt.

Natürlich ist der Pfad innerhalb von Arduino anders, als innerhalb des 
IDF. Was dachtest du denn? Es kann ja wohl nicht so schwer sein, den 
Pfad der Dateien herauszufinden.

Ist dir wenigsten der Unterschied zwischen

#include <...>

und

#include "..."

klar? Wenn nicht, finde es heraus und finde heraus, wie du auf deinem 
Computer nach Dateien suchen kannst. Dann kombinierst du beides.

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> #include <...>
>
> und
>
> #include "..."

Ja, ist mir! Heute eh nicht mehr... Familie ...

von Stefan F. (Gast)


Lesenswert?

Hier ein konkretes Beispiel:
https://medium.com/home-wireless/how-to-program-an-esp32-in-arduino-while-using-esp-idf-functions-90033d860f75

Wobei sich mir die Fußnägel hoch rollen, wenn ich den absoluten Pfad im 
#include sehe.

Es wäre besser, dich von Arduino zu trennen und das Espressif SDK zu 
benutzen. Warum, steht dort:

https://community.platformio.org/t/using-esp-idf-library-within-the-arduino-framework-esp32/17226

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> Es wäre besser, dich von Arduino zu trennen und das Espressif SDK zu
> benutzen. Warum, steht dort:

Ist alles schon da:
....AppData\Local\Arduino15\packages\DFRobot\hardware\esp32\0.2.1\tools\ 
sdk\esp32\include

Man muss nur suchen :-)

von EAF (Gast)


Lesenswert?

Stefan F. schrieb:
> Hier ein konkretes Beispiel:
> 
https://medium.com/home-wireless/how-to-program-an-esp32-in-arduino-while-using-esp-idf-functions-90033d860f75
>
> Wobei sich mir die Fußnägel hoch rollen, wenn ich den absoluten Pfad im
> #include sehe.

Völliger Unsinn!
OK, ich habe keine Ahnung auf welcher Baustelle ihr buddelt....

Ich dachte es wäre irgendwas mit Arduino und ESP32.
1
#include "C:\msys32\home\Mark\esp\esp-idf\components\esp32\include\esp_wifi.h"
Solche Pfade sind blödsinnig.


Und so hat es auszusehen:
1
#include "esp_wifi.h"
Fertig!

Die Pfade zu den Includes werden in der Plattformdefinition schon 
korrekt gesetzt. Vergleichbar, wie man es in einem Makefile tun würde.

Und Stefan, wenn du da nicht selber drauf kommst, ist es schade.
Unterstützt allerdings nicht deine Argumentation, sondern du blamiert 
dich eher damit.
Zeigst dich Ahnungslos.
Ich behaupte, unterstelle dir, dass du absichtlich solche schrägen 
Artikel suchst.
Was du davon hast, weiß ich nicht.
Was fühlst du dann?



Verstehe mich richtig:
Das Arduino Gedöns nutzt die IDF ganz intensiv.
Es steht vollständig im Zugriff.
Warum sollte man da nicht selber mit in den Pool greifen und Dinge 
nutzen, welche vom Arduino Framework nicht unterstützt werden?

von Stefan F. (Gast)


Lesenswert?

Stefan F. schrieb:
> Wobei sich mir die Fußnägel hoch rollen, wenn ich den absoluten Pfad im
> #include sehe.

EAF schrieb:
> Und Stefan, wenn du da nicht selber drauf kommst, ist es schade.
> Unterstützt allerdings nicht deine Argumentation, sondern du blamiert
> dich eher damit.
> Zeigst dich Ahnungslos.
> Ich behaupte, unterstelle dir, dass du absichtlich solche schrägen
> Artikel suchst.
> Was du davon hast, weiß ich nicht.
> Was fühlst du dann?

Was stimmt nicht mir dir?

Vielleicht kannst du dem TO helfen, indem du ihm ein Beispiel gibtst, 
wie man diese Header includiert: 
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/index.html

Nehmen wir mal als konkretes Beispiel 
"components/driver/pcnt/include/driver/pulse_cnt.h". Wie inkludiert man 
diese in einem Arduino sketch, ohne den Pfad absolut anzugeben (denn das 
wollen wir beide ja nicht).

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> Was stimmt nicht mir dir?

Das frage ich mich auch ... manche scheinen hier massive Defizite in der 
Diskussionskultur zu haben. Deine Homepage ist schon klasse.

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> Was stimmt nicht mir dir?

Das frage ich mich auch ... manche scheinen hier massive Defizite in der 
Diskussionskultur zu haben. Deine Homepage ist schon klasse.

Das Einbinden ist am einfachsten, in dem man das Ordnerwerk an einen Ort 
kopiert, den Arduino beim Start scannt. Dann sind die Header ohne alles 
drumherum einbindbar. Ich habe es unter cores in appdata kopiert.

Beitrag #7344838 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Thorsten, ich möchte nochmal darauf hinweisen, dass nicht alle IDF 
Funktionen im Arduino Core zur Verfügung stehen, und dass einige (je 
nach dem was du machst) mit dem Arduino Framework kollidieren.

Wenn dir Arduino zu eingeschränkt ist, solltest du dir wirklich mal das 
SDK von Espressif angucken. Da hast du dann auch den vollwertigen 
Debuggen mit dabei, nach dem du gefragt hast.

von J. S. (jojos)


Lesenswert?

Thorsten M. schrieb:
> Das Einbinden ist am einfachsten, in dem man das Ordnerwerk an einen Ort
> kopiert, den Arduino beim Start scannt.

Das hört sich allerdings nach üblem Pfusch und Garantie für 
Seiteneffekte an. Man übergeht das Buildsystem und auch die 
Versionierung die gar nicht mal so schlecht ist.

von EAF (Gast)


Lesenswert?

Stefan F. schrieb:
> Nehmen wir mal als konkretes Beispiel
> "components/driver/pcnt/include/driver/pulse_cnt.h". Wie inkludiert man

Es wurde schon gesagt:
John P. schrieb:
> Das einzige was man beachten sollte: Im Arduino Core ist die IDF Version
> meistens eine Version älter.
> Sprich: es wird immer erst die IDF aktualisiert und danach der Arduino
> Core nachgezogen.

Klarer:
Im Arduino ESP32 Paket steckt IDF V4.4
Du zeigst die Doku von V5.0

In der Version  V4.4 gibt es diese Header Datei nicht.

Also kann ich dir auch nicht zeigen, wie das geht.
Frage mich nach dem nächsten Update auf IDF V5.0 nochmal....


------------

Und damit du nicht dumm sterben musst, auch in der V4.4 finden sich 
schon die Grundzüge des pcnt!
Allerdings an einem anderen Ort, unter anderem Namen.

Hier der Include einer der benötigten Dateien,, zum selber testen. Die 
anderen Dateien findest du selber.
1
#include "hal/pcnt_hal.h"

von J. S. (jojos)


Lesenswert?

am core mit IDF 5.x wird offensichtlich gearbeitet, man könnte ja z.B. 
diesen Branch ausprobieren:
https://github.com/espressif/arduino-esp32/tree/esp-idf-v5.1-libs

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Im Arduino ESP32 Paket steckt IDF V4.4
> Du zeigst die Doku von V5.0

Na also geht doch. Mit fachlichen Infos ohne persönliche Angriffe. Damit 
kann der Fragende etwas anfangen.

Die "pulse_cnt.h" hatte ich übrigens nicht absichtlich gewählt, um dich 
in die Pfanne zu hauen, oder so. Das war einfach meine erstbeste Wahl, 
nachdem der TO schrieb, dass er Peripheriefunktionen nutzen will, die 
das Arduino Framnework ihm nicht direkt zugänglich macht. Die ersten 
Zeilen der Beschreibung klangen für mich nach einem passenden Fall.

von EAF (Gast)


Lesenswert?

Stefan F. schrieb:
> Die "pulse_cnt.h" hatte ich übrigens nicht absichtlich gewählt, um dich
> in die Pfanne zu hauen, oder so.
Da gehe ich aber schwer von aus!
Denn, wenn dein Geist so "wach" wäre, wie du glaubst, dann muss dir 
sowas doch selber auffallen.
Für so intelligent möchte ich dich gerne halten!



Ist es aber nicht, wenn ich dir glaube...
Aber selbst wenn ich annehme, dass du solche Fallen unabsichtlich 
stellst...
Überlege selber, welche Böcke du sonst noch so schießt, ohne es zu 
merken.
(kannst du nicht, denn wie solltest du etwas merken, was außerhalb 
deines Horizonts liegt)

Bedenke, dabei, dass wir "Außenstehende" das vermutlich eher und 
deutlicher bemerken, als du selber.

Ich schätze mal, dieser Vorgang hier macht einigermaßen klar, wenigstens 
einen Teilaspekt, wie und warum du manchen Leuten fürchterlich auf den 
Keks gehst.
U.a. mir.

Dein fortgesetztes Arduino Bashing verbessert die Lage auch nicht 
wirklich.
3 mal in diesem Thread, oder schon 5 mal?
Gebetsmühlenartig....


---------------------

Stefan F. schrieb:
> Da hast du dann auch den vollwertigen
> Debuggen mit dabei

Mit der aktuellen Arduino IDE ist auch der Debugger in die Arduinowelt 
eingezogen. Für ARM geht da schon einiges, für ESP besteht Hoffnung.

von Stefan F. (Gast)


Lesenswert?

Hallo Thorsten,
bitte habe Verständnis, dass ich mich auf dieser Diskussion zurück 
ziehe. Ich habe keine Lust mehr, mich weiterhin von EAF so beschimpfen 
zu lassen. Du kannst ihn ja fragen, wenn du weitere Hilfe brauchst. 
Mach's gut.

von Thorsten M. (cortex_user)


Lesenswert?

Stefan F. schrieb:
> Du kannst ihn ja fragen, wenn du weitere Hilfe brauchst.
> Mach's gut.

Ich denke nicht, dass ich hier noch viel fragen werde in diesem 
offensichtlich unmoderierten Forum, wo einige Wenige, meist nicht 
angemeldete Schreiber ihre narzisstischen Tendenzen frei ausleben um die 
Lufthoheit zu erwerben und kein Moderator sich berufen fühlt 
einzugreifen. Danke für Deine Hilfe, ich weiss Bescheid und komme klar.

von Thorsten M. (cortex_user)


Lesenswert?

J. S. schrieb:
> Man übergeht das Buildsystem und auch die
> Versionierung die gar nicht mal so schlecht ist.

Und warum schreibst Du dann nicht, wie es richtig geht?

Warum gibt es in der Arduino Welt den Befehl esp_random() nicht, der die 
Hardware benutzt? Und wie bindet man ihn ein, dass es ihn gibt?

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Thorsten M. schrieb:
> Warum gibt es in der Arduino Welt den Befehl esp_random() nicht, der die
> Hardware benutzt? Und wie bindet man ihn ein, dass es ihn gibt?

Schon mehrfach gesagt: Binde die richtige Headerdatei ein, dann geht 
das.

1
#include "esp_random.h"
2
3
4
#include <Streaming.h> // die Lib findest du selber ;-)
5
Print &cout = Serial; // cout Emulation für "Arme"
6
7
void setup() 
8
{
9
  Serial.begin(9600);
10
  cout <<  esp_random() << endl;
11
}
12
13
void loop() 
14
{
15
16
}

Compiliert, aber ungetestet, da gerade kein ESP zur Hand

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Binde die richtige Headerdatei ein ... (Beispiel)

+1

von EAF (Gast)


Lesenswert?

Thorsten M. schrieb:
> #include <components/hal/include/hal/adc_types.h>
>
> Gibt Fehlermeldung: No such file
>
> Muss man die erst irgendwo installieren?

Nein!
1
#include "hal/adc_types.h"

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.