Arduino Nano in Verbindung mit ESP8266-01S Modul

Guten Abend,

das hier ist mein erster Post - ich hoffe ich liefere genug Informationen :slight_smile:

Ich habe mich an dieses Video gehalten: Easy way to program an ESP8266 - YouTube
Mittlerweile kann ich Code an meinen ESP8266 übertragen. Nun möchte ich aber die Aus und Eingänge des Nanos nutzen und nicht wie überall beschrieben die GPIOs des ESP8266.
Kann mir jemand sagen, wie genau ich nun die PINs am Arduino Nano ansprechen kann anhand eines kurzen Code Beispiels?

Vielen lieben Dank,
Christian

Der Nano wird normalerweise über USB Anschluss programmiert. die Pins kann man 1/2/3/4, D1/D2/D3/D4, PB1/PB2/PB3/PB4 nennen oder auch das ganze Register als ganzes auslesen
byte a = PINB; //liest alle 8 Pins am Port B des Atmega328, bzw. PORTB

In der Arduino-Programmierumgebung haben die Pins Nummern. Beim Arduino-Nano 0-19, wobei die Analog-Pins auch A0 .. A7 genannt werden können, und A0 oder 14 derselbe Pin ist.
Kurze Code Beispiele liefert die Programmierumgebung mit.

Die direkte AVR-Programmierung des atmega328p eines Arduino Nano, die @kolaha erwähnt hat, (PORTB / PINB) kannst du zwar auch verwenden, bist dann aber hardware-abhängiger.

man muss eigentlich immer aufpassen für was ist Code geschrieben, denn z.B. nicht alle UNO Sketches passen zu Mega trotz passende Pinbelegung, denn I2C und SPI sind anders belegt.

Bitte mache einen Schaltplan aus welchem ersichtlich ist, wie der Nano an den ESP angebunden ist.

PS: Wesentlich einfacher und sinnvoller wäre wohl einfach einen NodeMCU zu nehmen und dessen Pins zu nutzen...

He? was hat die Pin Belegung damit zu tun?
Das macht die IDE selbst.
Oder schreibst du immer
Wire.begin (A4,A5)?

Nur an Verkabelung muss man aufpassen, wen es geht um I2C und SPI.
Wo man aufpassen soll, muss ist direkte Port Manipulation, Timer, IRQ usw. aber damit spielen Anfänger selten.

Das, was dir das Video zeigt, ist ja "nur" die Programmierung des ESP8266-01S. Damit kannst du dem Modul mitteilen, was es machen soll.
Damit du dem Nano noch beibringst, die entsprechenden Eingänge (GPIO) zu nutzen, musst du auch diesen extra programmieren. Dafür gibt es im Web zahlreiche Beispiele, sowie auch in der IDE. Zusätzlich musst du eine ständige Verbindung zwischen den beinen (Nano und ESP) programmieren, damit sich auch beide "unterhalten" können. Da hast du dir für den Anfang doch ein recht kompliziertes "Projekt" vorgenommen.

Wie das einfacher geht, wurde ja schon beschrieben. Nimm einen NodeMCU mit dem ESP8266 oder einen Wemos D1mini. Beide haben entsprechende GPIO, die du auch direkt, ohne Umweg über einen Nano, nutzen kannst.
Oder hast du einen bestimmten Grund, den ESP8266-01S einzusetzen, dann bitte eine kurze Beschreibung dazu.

Hast du denn hier schon Erkenntnisse ?

Grüß Euch,

vielen Dank für die ganzen Infos und sorry, dass ich mich erst heute zurückmelde. Gerade viel zu tun.
HotSystems: Danke für die Antwort, die scheint am ehesten mein Problem zu beschreiben. Ja - für mich sieht es so aus, als hätte ich den ESP Programmiert. Und der kann sich offensichtlich nicht mit dem Nano einfach so unterhalten, weil ich den Nano wohl zu zum Übertragen des Codes auf den ESP verwendet habe.

Den ESP verwende ich so, wegen den verbleibenden PINs. Mir geht es darum, dass ich nun über WIFI (den HTTP Server habe ich schon zum Laufen bekommen) nun einen PIN am Nano schalten/auslesen kann.

Allerdings fehlt mir aktuell noch jede Idee dazu. Hast du Beispiele, wie sich die beiden unterhalten können?

Das kann man bestimmt besser zeichnen - hoffe das hilft?
Den Schalter zwischen GND und GP0 verwende ich, damit ich den ESP in den Programmiermodus bekomme. GND auf RST zum neu starten. Habe auch bemerkt, dass ich den ESP nicht programmieren kann wenn ich am Nano RST und GND nicht brücke. Habe viel rumprobiert - vielleicht liege ich auch falsch.

Liebe Grüße,
Christian

Hallo,
ein Kommunikation zwischen den beiden Boards kannst du per I2C oder seriell (UART).
Du musst dann beide Boards dafür programmieren.
Aber nochmal, das ist nicht einfach und als Anfänger kein Projekt was man mal so eben aufbaut. Und ohne Erfahrung nochmal schwieriger.

Warum muss es der ESP8266-01S sein ?

Eine andere Möglichkeit wäre es den ESP8266-01S mit einem I2C-Portexpander (PCF8574 oder MCP23017) zu erweitern.
Dennoch empfehle ich dir die Nutzung eines kompletten Boards wie z..b. den NodeMCU oder Wemos D1 mini, beide mit dem ESP8266.
Das wird dir sicher leichter fallen und später kannst du immer noch den ESP8266-01S nutzen.

Bei deiner Schaltung gibt es schon mal mehrere Probleme.
Die serielle Verbindung musst du RX auf TX und TX auf RX schalten. Auch brauchst du einen Widerstand in der Verbindung da du nicht die 5V des Nano auf die Pins des ESP schalten darfst.
Und 5V auf dem VIN-Pin des Nano ist zu wenig, der braucht min. 6,5V.

Gruß Dieter

Bedenke zusätzlich beim Zusammenschalten, dass der ESP max. 3,3V an seinen Signalpins verträgt und nicht 5V-tolerant ist.
Nur ESP8266-NodeMCU oder -D1 mini (evtl. mit Portexpander) ist einfacher.
Ansonsten mal als Beispiel eine Zusammenschaltung NodeMCU und UNO (I2C über Pegelwandler)

Gruß Tommy

hättest dir vor 3 Tagen einen NodeMCU oder Wemos D1 bestellt, wäre der spätestens morgen da.

  • Ein Prozessor - Ein Problem --> der Source Code am ESP
  • Zwei Prozessoren - Drei Probleme --> zwei Source Codes und die Kommunikation zwischen den Prozessoren

Warum tut man sich das nur freiwillig an !?!

Hey Tommy,

ok - ich habe nun einen NodeMCU bestellt :slight_smile: Habe hier halt nur 8 Ports zur Verfügung soweit ich das richtig verstehe. Wie würdet ihr diese auf dem MCU erweitern? Kann man diese dann für Analog und Digital gleichermaßen verwenden?

Brauch ich für die Nutzung von I2C bestimmte PINs oder kann ich irgendwelche dafür nutzen? Wie komme ich an die BUS Adresse der Devices? (Master/Slave)

lg. Christian

Wenn du einen Slave baust, gibst du ihm die Adresse in Wire.begin(adr); mit.
Der Master hat Adresse 0 (oder du lässt sie weg: Wire.begin();)

nimm einfach die standardmäßingen I2C Pins auf IO05 und IO04
03 und 01 reservierst du dir für die Serielle Schnittstelle
15, 02, 00 und 16 mit Vorsicht verwenden (siehe Einschränkungen), gehen aber
10 habe ich nur als Ausgang verwenden können.
09 hat bei mir nie funktioniert und verwende ich daher nicht.

Wenn Pins ausgehen, nimm einen I2C Portexpander wie z.B. ein PCF8574 oder ein MCP23008 oder MCP23017

Master wurde dir schon genannt. Die Slave-Adresse bekommst du im Datenblatt des jeweiligen Device. Bedenke dabei, ein ESP8266 ist als I2C-Slave bisher nicht (oder nur sehr kompliziert) zu nutzen.

Welche Ports meinst du damit ?
Die Pins (GPIO) (hier keine Ports) kannst du wie schon in Post #8 beschrieben, mit den entsprechenden Bausteinen (für digital und analog (ADS1115) unterschiedlich) erweitern. Das sind dann alles Slave, somit kein Problem.

Achtung: Als Ergänzung. Der ESP8266 muss Master sein.
Die Slave-Adresse für den Nano >10 wählen, da die kleineren für Sonderzwecke sind.
Porterweiterungen (Beispiel) sind digital. Deren Adressen erfährst Du aus dem Datenblatt.
Wen Du den einen analogen Eingang erweitern willst, brauchst Du Analogmultiplexer.

Gruß Tommy

Unglaublich wie toll diese Gemeinschaft hier ist! Alles absolut brauchbare Informationen! Ich bestelle mal ein paar Sachen und muss das dann mal testen. Ich melde mich dann vermutlich nächste Woche wieder mal hier :slight_smile: Vielen Dank euch allen und schönes Wochenende!

Christian

Wegen der analogen Eingänge: Der von mir bevorzugte ESP32 hat sechs analoge Eingänge, deren Qualität zwar nicht überragend ist, aber für manche Aufgabe genügt es.

ESP32 Pinout Reference: Which GPIO pins should you use?

Nicht für das Steckbrett geeignet, aber schön klein: ESP32 D1 Mini

Wenn Du digitale 5V-Pins benötigen solltest, kannst Du an einen ESP8266/ESP32 per I²C-Levelshifter einen mit 5 V versorgten Portexpander wie MCP23017 anschließen.

Bei dem ESP muss man die Pins angeben.
Sonst tut da nix.

Beim ESP hast du Auswahl.
Beim Nano nicht.

Du bist der Gott,
Dein ist die Macht.