Forum: Mikrocontroller und Digitale Elektronik Atmel AVR mit ESP32 NodeMCU ins WLAN?


von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hi!

Ich überlege gerade, ob ich einen Atmel AVR bzw. vorerst seine serielle 
Schnittstelle mit einem ESP32 NodeMCU ins WLAN zu stellen - testweise um 
die Verkabelung zu sparen, später soll evtl. ein Webserver auf dem ESP32 
laufen und die Kommunikation mit dem AVR regeln.

Da das mein erster Versuch ist, kommen da ein paar Fragen auf. 
Vielleicht kann die jemand mit etwas mehr Erfahrung schnell und 
unkompliziert beantworten...

1. Welche Stolperfallen gibt es dabei, worauf sollte man beim Design 
schon aufpassen, was einem sonst hinterher auf die Füße donnert?

2. Sind die Pins des ESP32 bzw. des NodeMCU DevBoards 5V-tolerant oder 
sollte man besser mit einem Level Shifter auf 3,3V runter? Den AVR mit 
3,3V laufen lassen müsste ich schauen ob man das hinkriegt, im Moment 
brauche ich die 5V an seinen Pins.

3. Wo gibt es gute Beispielsoftware? Die erste Idee, eine serielle 
Schnittstelle (5V TTL USART) an einen PC im LAN/WLAN weiterzureichen, so 
daß sie da irgendwo als virtuelle COM-Schnittstelle auftaucht, ist ja 
sicherlich nicht neu. Ich hätte sowas gerne erstmal lauffähig, um 
auseinanderzunehmen wie die ESPs funktionieren.

Ein älteres NodeMCU V3 (glaube mit ESP8266) hätte ich auch noch zur 
Verfügung. Brächte das einen großen Vorteil bezüglich des 
Stromverbrauchs oder anders, bringt der ESP32 einen großen Vorteil im 
Vergleich zum ESP8266?

Würde mich freuen, wenn mir da jemand etwas Licht ins Dunkel bringen 
kann, danke schon einmal dafür.

von Harald K. (kirnbichler)


Lesenswert?

Ben B. schrieb:
> Sind die Pins des ESP32 bzw. des NodeMCU DevBoards 5V-tolerant

Nein.

Ben B. schrieb:
> Den AVR mit
> 3,3V laufen lassen müsste ich schauen ob man das hinkriegt, im Moment
> brauche ich die 5V an seinen Pins.

Wofür genau? Verwende da doch Deine Levelshifter, und nur da, wo sie 
wirklich nötig sind.

Je nach Anzahl der benötigten I/Os kannst Du natürlich den AVR gleich 
ganz weglassen und Deine Anwendung direkt auf dem ESP8266/ESP32 laufen 
lassen. Beide haben deutlich mehr Rechenleistung und deutlich mehr 
Arbeitsspeicher als irgendein AVR, und I/Os sowie diverse Peripherie 
haben sie auch.

Ben B. schrieb:
> Die erste Idee, eine serielle
> Schnittstelle (5V TTL USART) an einen PC im LAN/WLAN weiterzureichen, so
> daß sie da irgendwo als virtuelle COM-Schnittstelle auftaucht, ist ja
> sicherlich nicht neu.

Das ist gar nicht so trivial, je nach verwendetem Betriebssystem, denn 
da brauchst Du etwas, was zwischen "virtueller COM-Schnittstelle" und 
Netzwerk übersetzt. Für Windows könnte man da com2tcp verwenden (das ist 
Bestandteil von com0com https://com0com.sourceforge.net/, und auf dem 
ESP8266/ESP32 müsstest Du halt einen dazu passenden 
TCP-auf-Seriell-Umsetzer implementieren.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

>> Den AVR mit 3,3V laufen lassen müsste ich schauen ob man das
>> hinkriegt, im Moment brauche ich die 5V an seinen Pins.
> Wofür genau?
Ich würde den gerne mit recht hoher Frequenz betreiben (11..14 MHz 
angepeilt, weniger für Rechenleistung, sondern für die PWM-Counter), 
muss ich raussuchen ob der das mit 3,3V schafft (glaube er braucht 
mindestens 2,7V für 10Mhz), aber das größere Problem ist, daß er mittels 
PWM-pseudo-DAC 0..5V erzeugen können soll, auf zwei oder drei Kanälen. 
Ich muss schauen, ob ich da von den 5V weg komme.

> Verwende da doch Deine Levelshifter, und nur da,
> wo sie wirklich nötig sind.
Ich habe das bereits einmal zwischen so einer Schaltung und einem 
SIM800L-GSM-Modul gemacht, das hat prima funktioniert und war kein 
großer Aufwand.

> Je nach Anzahl der benötigten I/Os kannst Du natürlich den AVR
> gleich ganz weglassen und Deine Anwendung direkt auf dem
> ESP8266/ESP32 laufen lassen. Beide haben deutlich mehr
> Rechenleistung und deutlich mehr Arbeitsspeicher als irgendein
> AVR, und I/Os sowie diverse Peripherie haben sie auch.
Das werde ich mir noch anschauen, aber ich brauche viele ADC-Eingänge, 
mindestens 3 PWM-Kanäle und "ein paar GPIOs" wie man das so schön 
schreibt. Eigentlich war ein LCD in Planung, aber das verliert gegen die 
WLAN-Anbindung oder serielle Kommunikation.

Ich bin mit dem ESP32 noch kein bißchen erfahren, weiß noch nicht welche 
Peripherie der genau hat, was damit möglich ist und dann ist es immer 
schwierig, gleich volle MSR-Aufgaben damit anzugehen, auf die man sich 
hinterher verlassen können möchte.

> Schnittstelle (5V TTL USART) an einen PC im LAN/WLAN weiterzureichen
> Das ist gar nicht so trivial, je nach verwendetem Betriebssystem,
Tja, Windows... ich weiß, ich bin raus. ;)

Ich werde mir dazu mal ein Tutorial suchen. An dieser Stelle das Rad von 
Grund auf neu zu erfinden, halte ich für wenig zielführend. Das haben 
andere sicherlich schon 50mal gemacht, ich würde Zeit verschwenden.

von Stefan F. (Gast)


Lesenswert?

Ich würde dafür ein ESP-01 Modul verwenden, denn das wurde für genau 
solche Zwecke gemacht (einen vorhandenen Mikrocontroller ans WLAN 
hängen). Die dazu vorgesehene "AT Firmware" ist auf diesen Module in der 
Regel vorinstalliert.

Bei den NodeMCU und Wemos Boards solltest du bedenken, dass deren 
serielle Schnittstellen mit einem USB-UART ausgestattet sind. Du kannst 
sie daher direkt mit einem PC verbinden, aber nicht mit dem AVR.

Die großen Varianten mit ESP32 haben vermutlich mindestens eine zweite 
serielle Schnittstelle die du mit dem AVR verbinden kannst. Allerdings 
musst du dazu erst mal eine passende Firmware schreiben.

Beim ESP-01 Modul könntest du hingegen erste Versuche machen, ohne es zu 
programmieren.

Lesestoff zum ESP8266: http://stefanfrings.de/esp8266/index.html

> bringt der ESP32 einen großen Vorteil im Vergleich zum ESP8266?

Es gibt nicht "den" ESP32, sondern zahlreiche unterschiedliche Modelle. 
Einige haben zwei CPU Kerne, alle haben mehr I/O Pins, mehr RAM und mehr 
Funktionen als der ESP8266. Wenn du diese zusätzliche Komplexität nichts 
brauchst, sehe ich das eher als Nachteil. Mit Arduino sind sowohl 
ESP8266 als auch ESP32 relativ einfach zu programmieren. Für den vollen 
Funktionsumfang muss man sich aber mit dem Espressif SDK beschäftigen, 
was ungleich komplexer ist.

Die ESP32 Module nehmen mehr Strom auf.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Danke Dir für Deine Tips, ich werde mir die verlinkte Seite mal 
anschauen.

Nur noch eine kurze Frage zu Deinen Ausführungen zum ESP8266. Du 
schreibst die NodeMCU haben eine USB-Schnittstelle, meinst Du damit die 
Programmierschnittstelle bzw. die mit dem CH340 und USB-Port? Kann man 
den CH340 nicht umgehen wenn man den AVR direkt an die Stiftleisten des 
NodeMCU oder direkt an das ESP8266-Modul anschließt?

von Stefan F. (Gast)


Lesenswert?

Schau mal: 
https://docs.espressif.com/projects/esp-at/en/latest/esp32/Get_Started/Hardware_connection.html

Offenbar gibt es die AT Firmware auch für ESP32 Boards und sie 
unterstüttz sogar einen zweiten seriellen Port. Das sieht doch nach 
genau dem aus, wonach du gefragt hattest. Zumindest für den Anfang, 
solange du noch keine eigene Firmware programmieren kannst oder willst.

von Stefan F. (Gast)


Lesenswert?

Ben B. schrieb:
> Nur noch eine kurze Frage zu Deinen Ausführungen zum ESP8266. Du
> schreibst die NodeMCU haben eine USB-Schnittstelle, meinst Du damit die
> Programmierschnittstelle bzw. die mit dem CH340 und USB-Port?

Ja

> Kann man den CH340 nicht umgehen wenn man den AVR direkt an die
> Stiftleisten des NodeMCU oder direkt an das ESP8266-Modul anschließt?

Ja kann man, zumindest bei originalen NodeMCU Board. Siehe 
http://stefanfrings.de/esp8266/NODEMCU_DEVKIT_SCH.png

Der USB-UART ist über zwei 470Ω Widerstände mit dem ESP8266 verbunden. 
Diese Signale kannst du durch externe Beschaltung überschreiben. 
Allerdings brauchst du bei 5V anständige Pegelwandler die genug Strom 
auf der 3,3V Seite liefern.

Mit einfachen Spannungsteilern oder gar den gängigen I²C Pegelwandlern 
(1 Transistor pro Leitung) wird das wahrscheinlich nicht klappen. Wir 
hatten hier neulich jemanden, bei dem es nicht ging. Zum Umprogrammieren 
der Firmware musst den AVR (bzw. den Pegelwandler) abtrennen.

Ich kann dir mit dem ESP8266 gerne helfen. ESP32 Boards habe ich noch 
nicht verwendet.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hmmmm, danke Dir, das ist auf jeden Fall eine Sache, die man schnell 
falsch machen kann wenn man das nicht bedenkt. Wird der CH340 nach dem 
Programmiervorgang nicht passiv, bzw. schaltet seine Pins auf High-Z?

In ein paar Tutorials habe ich gesehen, daß manche ihre 5V direkt an die 
Stiftleisten des NodeMCU-Boards klemmen, aber das hältst Du bestimmt 
auch nicht für eine gute Idee, oder?

Im Moment geht's nur um einen Prototypen (wieder mal), heißt das 
NodeMCU-Board wollte ich mit Stiftleisten auf diesen aufstecken. Falls 
mehr draus wird, käme sowieso nur das nackte ESP-Modul zum Einsatz 
(wobei diese Devboards derzeit günstiger verkauft werden als die nackten 
Module... komisch). Während der Programmierung könnte man die 
NodeMCU-Platine einfach vom Prototypen herunternehmen, dann gibt's auch 
keine Probleme mit der zweiten Spannungsversorgung über USB.

Edit:
Im Moment tendiere ich auch eher zum ESP8266, das ESP32S NodeMCU-Board 
verbraucht deutlich mehr Strom. Das würde nur Sinn machen, wenn man den 
AVR rausschmeißt und alles mit dem ESP32 macht - dann bräuchte ich 
mindestens seine ADCs, die der ESP8266 nicht zu haben scheint.

: Bearbeitet durch User
von Helmut -. (dc3yc)


Lesenswert?

Denke dran, dass die ESP32-ADCs schrottig sind und nicht verwendet 
werden sollten, wenn die WLAN-Funktion aktiv ist. Denn dann sind sie nur 
reine Schätzeisen! Ich würde externe I2C-ADCs verwenden und dann den 
ESP8266.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Yep, das habe ich auch gerade festgestellt und war not very amused. 
Durch die Nichtlinearität dieser ESP32-ADCs sind die komplett für den 
Arsch wenn man das nicht zuverlässig durch Herausrechnen der 
Nichtlinearität beheben kann (danach suche ich gerade).

Schade, damit hätte das ein echt guter Controller sein können, aber mit 
solchen heftigen Schnitzern verkommt das Ding wirklich nur zum 
Kommunikations-Controller weil es für MSR-Aufgaben nur auf Umwegen zu 
gebrauchen ist. Dann kann ich das auch gleich einem AVR (oder was auch 
immer) überlassen und der ESP darf sich mit der WLAN-Konnektivität 
begnügen. Echt schade.

Edit:
Wahrscheinlich ist das auch wieder eine Sache, die man ausprobieren 
muss, das Ding scheint einen weitgehend linearen Bereich zu haben, der 
evtl. für meine Zwecke ausreichend ist. Über 2,56V könnte ich bei der 
AVR-Variante auch nicht messen. Man muss halt schauen, daß man diesen 
Bereich nicht nach unten verlässt. Den Offsetfehler muss man ja sowieso 
messen und herausrechnen, den hat man durch Ungenauigkeiten der 
Referenzspannung(en) immer.

https://www.youtube.com/watch?v=RlKMJknsNpo&t=92s

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ben B. schrieb:
> Wird der CH340 nach dem
> Programmiervorgang nicht passiv, bzw. schaltet seine Pins auf High-Z?

Nein, leider nicht.

Ben B. schrieb:
> In ein paar Tutorials habe ich gesehen, daß manche ihre 5V direkt an die
> Stiftleisten des NodeMCU-Boards klemmen

Eine kleine Minderheit hält das für eine gute Idee, weil es mal geklappt 
hat und wein angeblich irgendein Mitarbeiter von Espressif in einem 
Diskussionsforum bestätigt habe, dass die I/O Pins vom ESP8266 5V 
vertragen. Zum ESP32 gibt es keine solche Aussage. Laut Datenblatt 
vertragen beide Chips maximal 3,6 Volt. Nur darauf ist Verlass.

von Rainer W. (rawi)


Lesenswert?

Ben B. schrieb:
> Den Offsetfehler muss man ja sowieso messen und herausrechnen, den hat
> man durch Ungenauigkeiten der Referenzspannung(en) immer.

Nein, eine Ungenauigkeit der Referenz erzeugt keinen Offset-, sondern 
einen Skalierungsfehler.

von Thomas S. (doschi_)


Lesenswert?

Zum ADC des ESP32 bzw. der Korrektur der Nichtlinearität gibt es u.a. 
einen Beitrag bei
https://forum.arduino.cc/t/fixing-the-non-linear-adc-of-an-esp32/699190

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

>> Wird der CH340 nach dem Programmiervorgang nicht passiv,
>> bzw. schaltet seine Pins auf High-Z?
> Nein, leider nicht.
Großer Haufen Kackakacka. Wieso bauen die Chinesen sowas? Na ich glaube, 
wenn ich anfange, mit dem Board herumzuspielen, dann wird an dieser 
Stelle gleich mal die erste Modifikation fällig - ein oder zwei Jumper 
zum Abziehen.

Aktuell bin ich am Überlegen, beim ursprünglichen Entwurf zu bleiben 
(AVR für MSR und ESP8266 für WiFi) oder ob ich einfach mal probiere, den 
ADC des ESP32 zu verwenden und zu schauen, was dabei herauskommt.

von Harald K. (kirnbichler)


Lesenswert?

Ben B. schrieb:
> Großer Haufen Kackakacka. Wieso bauen die Chinesen sowas?

Welche andere USB-UART-Bridge verhält sich so?

Nix "kackacka", nur komische Erwartungshaltung.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ich bin jetzt nicht so fit mit USB/UART-Bridges, aber quasi jeder 
In-System-Programmer verhält sich so und für groß was anderes wird man 
das USB-Interface bei den NodeMCU-Boards kaum verwenden. Klar wäre das 
eine Option, aber eigentlich will man damit WiFi und kein USB.

Es ist ja auch nicht "schlimm" wenn es so ist wie es ist, aber dann 
finde ich es zumindest schade, daß der Jumper zum Auftrennen dieser 
Verbindung nicht bereits ab Fertigung vorhanden ist.

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.