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?
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
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.
> 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.
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.
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.
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.
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.
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?
> 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).
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
> 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 :-)
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.