Forum: Mikrocontroller und Digitale Elektronik Seriellen port doppelt belegen


von Stefan F. (Gast)


Lesenswert?

Ich möchte gerne ein ESP-01 Modul (=ESP8266 mit AT Firmware) mit einem 
Arduino Nano clone (=ATmega328 mit USB-UART) verwenden.

Das Modul soll über WLAN Kommandos vom Smartphone empfangen und Sachen 
ferngesteuert an/aus zu schalten. Und das Smartphone soll den Zustand 
von ein paar digitalen Eingängen abfragen können. Ich möchte mindestens 
100 Kommandos pro Sekunde ausführen können - mein angestrebtes Ziel sind 
1000.

Den USB Port brauche ich zum Flashen und um Debug Meldungen auszugeben. 
Ein zweiter serieller Port ist leider nicht vorhanden.

Deswegen habe ich mir folgende Lösung ausgedacht:
1
                    R4 2,2k
2
    _________   +---[===]---|                _______
3
   | ESP8266 |  |                           | CH341 |
4
   |         |  |  R3 1k           R1 1k    |     D+|-------o
5
   |      RxD|--+-[===]-+   +------[===]----|RxD    |       USB zum PC
6
   |         |          |   |      R2 1k    |     D-|-------o
7
   |      TxD|----|<|---|---|--+---[===]----|TxD    |
8
+--|Reset    |   D1     |   |  |            |_______|
9
|  |_________|          |   |  +---|>|--o 
10
|                     __|___|__|____  D2  3,3V
11
+---[===]---o 3,3V   | PD4 TxD  RxD |
12
|       10k          |              |
13
+---|>|--------------| PD3          |   
14
        D3           |              |    Dioden 3x 1N4148
15
                     |   ATmega328  |
16
                     |   5V 16Mhz   |
17
                     |______________|

Vorgegeben ist:
CH341 und Atmega werden mit 5V versorgt, das ESP Modul aber nur mit 
3,3V.

Die 1k Widerstände befinden sich auf dem Arduino Modul (wieso eigentlich 
der obere?).

Das ESP Modul muss mit 115200 Baud angesprochen werden. Will ich nicht 
ändern.

Ich habe mir dabei folgendes gedacht:

Mit PD3 kann ich den ESP resetten, und außerdem sorge ich durch den 
Pull-Up Widerstand dafür, dass der ESP inaktiv ist, wenn ich den Atmega 
über seinen Bootloader programmiere.

Meine Software kann über TxD Debug Meldungen in Richtung PC ausgeben, 
und sie kann per Soft-Seriell über PD4 Kommandos and den ESP senden.

Der ATmega empfängt normalerweise nur Antworten und Ereignisse vom ESP. 
Solange ich vom PC aus nicht dazwischen plappere, sollte das 
funktionieren. Richtig?

Der Spannungsteiler R3 und R4 passt den Pegel für den RxD Eingang des 
ESP an.

Die Diode D2 und R2 sorgen dafür, dass High pegel am TxD Pin des ESP 
Modul nicht zu hoch sind.

Zur Spannungsversorgung des ESP Modul werde ich einen "externen" 3,3V 
LDO verwenden, der interne Regler im CH341 Chip reicht dazu wohl nicht 
aus.

Kann das so klappen, oder habe ich noch was wichtiges vergessen?

von Michael U. (amiga)


Lesenswert?

Hallo,

über die üblichen Laufzeiten im WLAN bist Du Dir aber im klaren?
Üder willst Du nur einen UDP-Stream schicken, der hinten weitergereicht 
wird?

Ansonsten hänge einen 74HC125 dazwischen und steuere den vom AVR.
Wenn Du den '125 mit PullUp und PullDown passend beschaltest, muß der 
AVR dann nur im Reset bleiben, um den ESP nicht zu stören. 
"Gleichzeitig" geht sowieso so nicht.

Gruß aus Berlin
Michael

von Stephan G. (Firma: privat) (morob)


Lesenswert?

schau dir mal das pretzelboard an

von Stefan F. (Gast)


Lesenswert?

Ja Ich will's erstmal mit UDP versuchen.

> muß der AVR dann nur im Reset bleiben, um den ESP nicht zu stören.

Ich glaube, hier liegt ein Missverständnis vor. Der ESP soll nicht mit 
dem PC kommunizieren.

Der PC soll den AVR Bootloaden können.
Der AVR soll an den PC senden können (Empfang ist unwichtig).
Der AVR soll bidirektion mit dem ESP kommunizieren.

Es macht keine Sinn, den AVR im Reset Zustand zu halten. Denn dann 
funktioniert weder der Bootloader noch kann er dann sein Programm 
ausführen.

von Stefan F. (Gast)


Lesenswert?

> schau dir mal das pretzelboard an

Habe ich gestern gesehen. leider schafft das keine 115200 Baud mit 
seiner Soft-Serial Schnittstelle.

Außerdem möchte ich bestehende Hardware aus meine Bastelkiste verwenden. 
Ansonsten ist das Board natürlich ganz nahme an dem dran, was cih 
brauche.

von Stefan F. (Gast)


Lesenswert?

Ich habe den Reset-Eingang des ESP falsch herum gepolt. So wäre es 
richtig:
1
                    2,2kΩ
2
    _________   +---[===]---|                _______
3
   | ESP8266 |  |                           | CH341 |
4
   |         |  |    1kΩ             1kΩ    |     D+|-------o
5
   |      RxD|--+-[===]-+   +------[===]----|RxD    |       USB zum PC
6
   |         |          |   |        1kΩ    |     D-|-------o
7
   |      TxD|----|<|---|---|--+---[===]----|TxD    |
8
+--|Reset    |          |   |  |            |_______|
9
|  |_________|          |   |  +---|>|--o 
10
|                     __|___|__|____    3,3V
11
|                    | PD2 TxD  RxD |
12
|     1kΩ            |              |
13
+---[===]------------| PD3          |   
14
|                    |              |    Dioden 3x 1N4148
15
+---[===]---|        |   ATmega328  |
16
    2,2kΩ            |   5V 16Mhz   |
17
                     |______________|

Ich hab das gerade auf dem Steckbrett getestet, funktioniert.

von Wolfgang (Gast)


Lesenswert?

Welche Aufgabe hat der ATmega328 dabei? Warum kann das nicht alles der 
deulich leistungsfähigere ESP8266 mit erledigen?
Und in Arduino läßt sich der auch einbinden.

von Stefan F. (Gast)


Lesenswert?

Ich weiss, dass der ESP das auch alles alleine kann.

Ich habe aber momentan keine Lust, die Programmierung des ESP Moduls zu 
lernen. Mit AVR bin ich hingegen vertraut. Außerdem dient der AVR dazu, 
die Anzahl der I/O Pins zu vermehren.

Das könnte ich auch mit Schieberegistern machen. Aber wenn ich auf die 
Preise schaue, ist die Lösung mit AVR sogar billiger.

Die Arduino Entwicklungsumgebung mag ich nicht verwenden. Ich nutze 
jedoch gerne Ardunio Nano clones, weil sie so extrem billig sind.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Du musst nicht solche Krämpfe vollführen, für die Kommunikation mit dem 
ESP kannst du auch eine Software-Serial an einem beliebeigen Anschluss 
erstellen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Hab ich ja, aber nur für die Sende-Richtung (aus Sicht des AVR).
Mit Soft-Serial kann ich keine 115200 baud empfangen.

Ich empfinde die Schaltung nicht als Krampf, denn der USB Port wird im 
Betrieb höchstens zur Ausgabe von Diagnose-meldungen verwendet.

von Eric B. (beric)


Lesenswert?

Stefan U. schrieb:
> Hab ich ja, aber nur für die Sende-Richtung (aus Sicht des AVR).
> Mit Soft-Serial kann ich keine 115200 baud empfangen.
>
> Ich empfinde die Schaltung nicht als Krampf, denn der USB Port wird im
> Betrieb höchstens zur Ausgabe von Diagnose-meldungen verwendet.

Macht es dann nicht mehr Sinn Tx vom AVR für die Kommunikation mit dem 
ESP zu verwenden und PD2 an den PC anzuschliessen?

von Stefan F. (Gast)


Lesenswert?

> Macht es dann nicht mehr Sinn Tx vom AVR für die
> Kommunikation mit dem ESP zu verwenden und PD2 an den PC anzuschliessen?

In der Tat, aber ich verwende fertige Module(Arduino Nano clones).

von Eric B. (beric)


Lesenswert?

Stefan U. schrieb:
>> Macht es dann nicht mehr Sinn Tx vom AVR für die
>> Kommunikation mit dem ESP zu verwenden und PD2 an den PC anzuschliessen?
>
> In der Tat, aber ich verwende fertige Module(Arduino Nano clones).

Ah ja, ich sehe es [*] Rx/Tx sind fest mit demm FT232 verdrahtet. Hm..
Beinchen am FT durchtrennen ist keine Option?

[*] https://www.arduino.cc/en/uploads/Main/ArduinoNano30Schematic.pdf

von Stefan F. (Gast)


Lesenswert?

> Beinchen am FT durchtrennen ist keine Option?

Vielleicht, würde ich aber nur machen, wenn eine Lösung nicht bereits 
funktionieren würde.

Die Hardware ist ja schon verifiziert, das Programm steht auch schon in 
den Grundzügen - bin heute morgen früh ins Bett gekommen :-)

von Stefan F. (Gast)


Lesenswert?

Ich habe das Projekt jetzt ordentlich dokumentiert:
http://stefanfrings.de/wlan_io/index.html

Die Performance ist nicht so doll, UDP Pakete werden meistens innerhalb 
von 0,05-0,1s beantwortet. So komme ich nur auf enttäuschende 10 
Schaltvorgäne pro Sekunde.

Immerhin kann ich mit einem Kommando alle Pins auf einmal abfragen oder 
setzen. Das ist mein Trostpflaster.

Die Ethernet und USB Varianten (mit Kabel) antworten hingegen in weit 
unter 10ms.

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.