ESP8266 mit 5V-MAX485 Schnittstelle od 3.3V ?

selfmade01

Lieutenant
Registriert
Okt. 2012
Beiträge
727
Hallo

ich versuche gerade ein Modbus-Anemometer bei mir am ESp8266 (später an einem ESP32_Cam) anzuschliessen.
Dabei bin ich auf folgende Webseite gestoßen
https://www.hackster.io/philippedc/arduino-esp8266-rs485-modbus-anemometer-45f1d8

und dem Code sowie der Doku auf Github
https://github.com/philippedc/Arduino-ESP8266-RS485-MODBUS-Anemometer

Verdrahten würde er den ESP8266 od den Mini wie auf dem Bild zu sehen
esp8266_anemometer_diagram_5QyOk0PmlE.jpg


in Der Doku auf Github steht

Some people will scream when they will see that I mix 5V supplied devices with the ESP8266 which works with a supply of 3.3V. In fact, you will definitively burn your esp8266 if you supply it with 5V – there is a 3.3V supply regulator on the Wemos D1 mini module – But, my anemometer is still working weeks after I built it. So it is possible to plug on an ESP8266 any 5V devices, when the 5V is only on the inputs / outputs of the microcontroller. In another words the ESP8266 is 5V tolerant, even if it must not been supplied over 3.3V. For the sceptics they can read this: https://www.ba0sh1.com/blog/2016/08/03/is-esp8266-io-really-5v-tolerant In fact I get an IDE error when I download the code. After several research I’ve found that D8 must be at 0 during download. D8 is the default CS pin for the SD card. But I’ve seen that D8 stays stuck at Vcc… So I invert D8 with D0. However it is not enough. So I finally decide to power off the 5V supply to all components – except ESP8266 – each time I download the code, then I switch on them back again.

Mir macht das schon ein bisschen Sorgen.
Auch das rumgefummel mit dem Upload bzw. Neustart und dem Abstöpseln des 5V ...

Braucht der MAX485 zur Datenübertragung 5V?
sollte ich hier besser zusätzlich mit einem Levelshifter arbeiten damit ich auf den Datenleitungen auch nur max 3.3v habe?


Grüße Jürgen
 
Zuletzt bearbeitet:
Schau mal, das Datenblatt gibt die elektrischen Charakteristika her.
Da sind Minimal- und Maximalspannung für VCC, aber auch die I/O Pins festgesetzt.
https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

Innerhalb der elektischen Charakteristika ist Funktion garantiert.
Dann hast du noch maximale Angaben, ab denen du von einem katastrophalen Defekt ausgehen darfst (sind nicht im Datenblatt hier enthalten).
Dazwischen ist alles möglich. Sollte man das Teil so betreiben? Nein.
Dafür gibt es dann Logic-Level-Shifter für I/O, wenn das Datenblatt das erlaubt, kann man auch einen Widerstand vor den I/O Pin setzen.
 
Die 3,3V haben ja nichts mit D8 zu tun. Das würde ja dennoch einen Wert zwischen 0 und 1 halten. Es ist halt wichtig, dass keine Restladung in dem Bereich befindet. Weiß nicht wie das in der Schaltung ist, ist auch schlecht erklärt von mir :D Bei ner Schaltung von mir hab ich dafür nen Low-Pull-Widerstand, aber ich glaub das brauchst du da nicht.

Aber so ganz versteh ich dein Problem glaub nicht.
Auf den Arduino gibst du 5V über USB. Und deinem Bauteil gibst du einfach 3,3V. Dafür gibts ja extra den Pin.
 
madmax2010 schrieb:
nein, zur stromversorgung :p Daten pins sind andere
Wiedermal der Helfer in der Not. Danke @madmax2010

mmmh... seit meinem letzten 3.3V Dilemma messe ich jetzt immer an den Leitungen.
Das habe ich nun auch mit dem MAX485
mein MAX485
auf den Seriellen Anschlüssen DI, DE, RE und RO konnte ich stets die 5V messen...
laut der Doku und einem Link in der Doku wäre angeblich der ESP8266 5V tolerant
weiss aber nicht ob ich dem vertrauen soll...

Auf dem MAX485 kann ich nicht erkennen ob es 3.3V tauglich ist
Ergänzung ()

Cardhu schrieb:
Aber so ganz versteh ich dein Problem glaub nicht.
Auf den Arduino gibst du 5V über USB. Und deinem Bauteil gibst du einfach 3,3V. Dafür gibts ja extra den Pin.
das ist schon richtig das ich auch 3.3V Pins habe und nutzen kann... aber ich weiß halt nicht ob mein MAX485 3.3v tauglich ist... sonst müsste ich doch noch alles über einen Levelshifter laufen lassen (wäre schön wenn ich das vermeiden kann)


edit: Laut ESP8266 sind die I/O Pins nur max 3.6V tauglich.....
ok. muss nur noch wissen ob der MAX485 auch mit 3.3v funktioniert

edit:

auf der Amazonseite des Moduls (ist ja kein Datenblatt vorhanden) steht nur was von 5V...für das MAX485
 
Zuletzt bearbeitet:
Also ich hab genau den Arduino. Da läuft alles wunderbar mit 5V. Außer der 3,3V Anschluss, der läuft mit 3,3V
:daumen:

selfmade01 schrieb:
aber ich weiß halt nicht ob mein MAX485 3.3v tauglich ist.
Hast du Bedenken, dass er mit weniger betrieben werden müsste?
Oder ob der mit 5V betrieben werden sollte?
Weil letzteres ist doch kein Problem.
Und sicher, dass es sowas fürn Arduino mit unter 3,3V gibt?
 
  • Gefällt mir
Reaktionen: madmax2010
Für ESP's gibt es einen speziellen MAX3485 der ist 3V tauglich. alle anderen die meist verkauften MAX485 sind 5V... also nur für Arduinos... ESP's brauchen angeblich den MAX3485 oder eben einen MAX485 mit Levelshifter.

Ich hab meine Schaltung nun mit Levelshifter aufgebaut damit ich beim ESP auf der sicheren Seite bin.

aber Daten bekomme ich noch keine vom Windsensor... da habe ich aber wohl noch einen Codefehler....

vielleicht kann mir da jemand kurz helfen

definiert habe ich
Code:
// Anemometer
// Modbus to serial an Modul Max485
#define RX        13    //Serial Receive pin
#define TX        15    //Serial Transmit pin
#define RTS_pin   12    //RS485 Direction control
#define RS485Transmit    HIGH
#define RS485Receive     LOW
SoftwareSerial RS485Serial(RX, TX);


die RX-Leitung habe ich auf den Az-delivery ESP8266-Lolin auf GPIO13, den TX auf GPIO15und den RTS auf GPIO12

im void setup() steht
C++:
  pinMode(RTS_pin, OUTPUT);
  Serial.begin(9600);
  Serial.println("Anemometer");
  RS485Serial.begin(9600);

im loop
C++:
digitalWrite(RTS_pin, RS485Transmit);     // init Transmit
  byte Anemometer_request[] = {0x01, 0x03, 0x00, 0x16, 0x00, 0x01, 0x65, 0xCE}; // inquiry frame
  RS485Serial.write(Anemometer_request, sizeof(Anemometer_request));
  RS485Serial.flush();
 
  digitalWrite(RTS_pin, RS485Receive);      // Init Receive
  byte Anemometer_buf[8];
  RS485Serial.readBytes(Anemometer_buf, 8);
 
  Serial.print("wind speed : ");
  for( byte i=0; i<7; i++ ) {
  Serial.print(Anemometer_buf[i], HEX);
  Serial.print(" ");
  }
  Serial.print(" ==> ");
  Serial.print(Anemometer_buf[4]);
  Serial.print(" m/s");
  Serial.println();               
  delay(100);


wenn der Anemometer sich dreht. ändert sich dann die Spannung an dem RX/TX oder wie kann ich das gegenprüfen?
ob da überhaupt vom Anemometer was kommt

edit: habe mal bei der Datenleitung vom Windsensor die Spannung gemessen... die verändert sich wenn der Sensor sich dreht... der Sensor scheint also zu funktionieren (habe den gleichen wie im Beispiel .... ein 3001-FS mit 4 Anschlussleitungen , 12V +/- und die Daten - und Daten + Leitung
 
Zuletzt bearbeitet:
Hallo
sorry an Alle.
Habe meinen Anemometer geprüft und festgestellt das ich einen falschen bestellet habe. Habe hier einen 0-5V und keinen der via RS485 kommuniziert
 
Man kann auch einfach Level Shifter nehmen bei Datenleitungen an 5V Sensoren etc - die verbau ich immer wenn ich 5V und 3,3V mixe, sind bidirektional und kosten "nix" - naja fast nix. - ja nachdem wie viel man bastelt kauft mit ja nicht einzelen sondern in Sackgrösse - werden ja auch nicht alt :D

Bei 5V Sensoren ist halt 1 = High oft 5V auch wenn die ESP das sicher oft abkönnen, der Level Shifter dazwischen macht es halt "sauber".

https://www.amazon.de/level-shifter-3-3v-5v/s?k=level+shifter+3.3v+5v


Seriell ist beim ESP auch 3,3V = High also auch sinnvoll da die Pegel zu wandeln auch wenn es meist ne Weile so geht.
 
Zuletzt bearbeitet:
Zurück
Oben