[Gelöst] ESPEasy kommunizieren mit einem ATmega328P oder ähnlich

Begonnen von Gear, 06 März 2019, 20:50:20

Vorheriges Thema - Nächstes Thema

Gear

Ich nutze den Analogeingang des Nano mit 5V, soweit ich das gelesen habe, kann der das.
Zudem zeigt er mir auch die Spannung relativ genau an.

Der Eingang des ESP8266 kann nur 1V.
Den nutze ich im Regelfall um mir die 3,3V anzeigen zu lassen und bei Batterie Geräten die Akkuspannung.
Ist relativ genau, meist stimmt die 3. Stelle nicht, der Rest schon, bei mir zumindest.

Das die Komunikation gut beschrieben ist im Internet stimmt, genau wie das mit dem flashen.
Den ESP kann ich ja problemlos flashen, ich hatte Probleme mit dem Nano.......
Der ESP läuft mit ESPEasy problemlos, der Nano sendet nur nach einer gewissen Zeit leere Nachrichten.

Ich habe ja viel gegoogelt, bin dann aber durch die Probleme mit dem Nano nicht weitergekommen, somit hatte ich hier um Rat gesucht, da ich explizit keine lösung gefunden habe und auch den Grund nicht veratanden habe, waeum der auf einmal nurnoch leere Nachrichten versendet.
Wenn ich nur den Tx des Nano am Rx des ESP habe, dann habe ich keine Probleme bei der Übertragung.
Sobald aber eine Kommunikation in beide Richtungen besteht, dann kommen nach kürzester Zeit nurnoch leere Nachrichten.

So zudem kommen aber nur dann leere Nachrichten, wenn er Variablen mit senden soll.
Wenn ich einen vollen String nehme, kein Problem, sobald ich eben eine Variable mit in den String schreibe, dann besteht eben mein Problem.

Ich hoffe ich kommte das so halbwegs rüberbringen, wo mein Priblem liegt.

Habe ich das echt so uneindeutig geschrieben, dass man denkt, dass ich Probleme mim ESP habe?!?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

DasQ

zu meiner schande muss ich gestehen, dass ich zu ungenau gelesen hab und grundsätzlich misstrauisch bin, was die fähigkeiten des gegenübers anbelangt.

hast mal ein schema wie du des ganze angeschlossen hast? mir würde ja ne einfach handskizze abfotografiert mit`m handy reichen. (willst es schöner geht das ganz einfach, mit "http://fritzing.org/home/")
hast du RX und TX direkt angeschlossen oder ist da irgendwas dazwischen? pegelanpassung? stabilisierung?
http://deloarts.com/de/hardware/logic-level-shifter/


Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Gear

Ich habe das so gemacht, wie in dem Link von dir unter "Uni-Direktional" steht.
Tx des ESP auf Rx des Nano
Tx des Nano über die Widerstände 1k zum Rx des ESP und 2k zu GND.

Hab auch gelesen, es solle ohne gehen, aber da ich nicht sixher bestimmen konnte welche Spannung aus dem Tx des Nano kommt, bin ich von 5V ausgegangen.

Ich hoffe das reicht dir, bin noch auf Arbeit.

Also im Grunde funktioniert die Kommunikation zwischen ESP und Nano problemlos.
Habe gestern noch mal getestet.

Wenn der Nano 3x etwas schickt alle 60sec mit einer warte zeit zwischen den Befehlen von 1sec dann wird genau der String in den ich eine Variable mit einbinde nach einiger Zeit nurnoch eine leere Zeile.

Also folgende 3 Strings sende ich.
Serial.print("T") ;
Serial.print("TaskValueSet,1,1,123") ;
Serial.print("TaskValueSet,1,2,"+ String(analogRead(A0)*(5.0/1023.0)));
Hierbei ist es egal ob ich nen Analogeneingang nehme, eine zuvor deklarierte int Variable mit einer Zahl oder einen string, sobald eine Variable ins Spiel kommt, kommt nurnoch eine leere Zeile, aber das nicht von anfang an.
Und das ganze aber auch nur dann wenn vom ESP der Tx auf den Rx des Nanos geht, ohne dass ich hier irgendetwas sende.

Also die Kommunikation bleibt bestehen, aber der Print mit der Variable wird nur als leere Zeile gesendet.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

DasQ

Zitat von: Gear am 02 April 2019, 12:22:23
Hierbei ist es egal ob ich nen Analogeneingang nehme, eine zuvor deklarierte int Variable mit einer Zahl oder einen string, sobald eine Variable ins Spiel kommt, kommt nurnoch eine leere Zeile, aber das nicht von anfang an.

INT kann nie STRING sein

Müsst mich schon sehr täuschen wenn's anders ist.

Zeig mal bitte das Sketch
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Gear

Vor deinem ersten Post hier, da ist das Sketch, bzw der Code, nur dass ich eben bei meinem Aktuellen Sketch zusätzlich noch wie beschrieben warten und die anderen befehle drin hab.

Ich kann den aktuellen Sketch heute Abend zeigen, bin noch auf Arbeit.

Und wenn du schaust wandel icj den Int in nen String um mit string() ansonsten würde er mir ne Fehlermeldung bringen und garnichts hochladen. :)
Ich hab das in meinem Post nicht erwähnt, dachte anhand meines Stings den ich sende ist das ersichtlich, sry.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Gear

So, das aktuelle Sketch.
void setup() {
  Serial.begin(115200);
}

// the loop function runs over and over again forever
void loop() {
  Serial.print("T\n");
  delay(1000);
  Serial.println("TaskValueSet,1,2,115");
  delay(1000);
  Serial.println("TaskValueSet,1,4,"+ String(analogRead(A0)*(5.0/1023.0)));
  delay(60000);
}
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

andies

#36
Also, wenn mir das passieren würde, wäre meine Reaktion nach etwa zehn verschiedenen ESP-/nano-/Nextion-Installationen:

1. Entweder Hardwaredefekt
2. kalte Löstelle oder
3. Spannungsprobleme (d.h. weniger als 5V etc.)

Am häufigsten hatte ich 3. beobachtet, weil ich nie auf die Stromversorgung besonderen Wert gelegt hatte. Glücklicherweise ist das leicht zu überprüfen.

Einmal hatte ich 2., und das nervt extrem. Inzwischen fotografiere ich, was ich löte.

1. geht dann schnell zu testen, wenn man (von mehreren Herstellern!) die gleichen Produkte vorrätig hat.


Gesendet von iPad mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gear

So, habe jetzt noch mal ein Paar Wemos D1 getestet.

Das Ergebnis mit folgendem Sketch:
long randNumber;
void setup() {
  Serial.begin(115200);
}

// the loop function runs over and over again forever
void loop() {
  randNumber = random(300);
  Serial.println("TaskValueSet,1,1,"+ String(random(100)));
  delay(100);
  Serial.println("TaskValueSet,1,2,"+ String(randNumber));
  delay(100);
  Serial.println("TaskValueSet,1,3,0815");
  delay(100);
  Serial.println("TaskValueSet,1,4,"+ String(analogRead(A0)*(5.0/1023.0)));
  delay(100);
}



21:50:49.811 -> TaskValueSet,1,1,19
21:50:49.914 -> TaskValueSet,1,2,122
21:50:50.016 -> TaskValueSet,1,3,0815
21:50:50.118 -> TaskValueSet,1,4,2.90
21:50:51.207 ->
21:50:51.310 ->
21:50:51.415 -> TaskValueSet,1,3,0815
21:50:51.518 ->
21:50:52.613 ->
21:50:52.716 ->


Man kann sehen, dass der Fix Wert mit  "0815" am Ende noch übertragen wird.

Spannung liegt bei 4,91V / 3,24V beim Nano 3,17V beim ESP.
Das gleiche Ergebnis bei anderen Übertragungsraten oder bei längeren Pausen.

Kalte Lötstelle würde ich mal ausschließen, habe alles nachgeschaut unterm Mikroskop.
Hardwaredefekt würde ich auch ausschließen, da ich aus unterschiedlichen Bestellungen die Wemos verwendet habe.

Bei den 5V, gut, die Spannungen sind nachgemessen.

Da es ja weiterläuft mit dem Fixwert, würde ich hier mal die genannten Fehlerquellen ausschließen.
> Könnte es ggf. am alten Bootloader liegen?

Danke für eure Hilfe. =)
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

PeMue

Zitat von: Gear am 02 April 2019, 22:02:06
> Könnte es ggf. am alten Bootloader liegen?
Würde ich eher ausschließen, da der nur dazu da ist, das Programm über die serielle Schnittstelle zu übertragen und danach nicht mehr verwendet wird.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

andies

kannst du mal die spannung während der übertragung messen?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Gear

Guten Morgen,
Wenn es um die Versorgungsspannung geht, die geht auf 4,86V runter.
Oder geht es um die 3,3V?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Beta-User

Gibt es einen besonderen Grund, warum du die Teile nicht teilweise einfach ohne "ln" raushaust und auf die "Verstringung" verzichtest?
Würde auf ein Speicherproblem auf dem Arduino tippen, deswegen kann der irgendwann nur noch das schreiben, was er schon kennt?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gear

Ich kenne soetwas eig nur als ln für Kommunikation.
Naja, wenn ich einfach eine String Variable nehme, in die ich immer das gleiche reinschreibe oder die ich nur einmal deklariere und einmalig etwas reinschreibe, hier passiert das gleiche.

Ich will später eben die Werte der Analogeingänge des Arduino direkt über MQTT cmd an FHEM senden.
Bei der umsetzung bin ich auf folgendes Problem getroffen, darum einfach simpel zum testen.

Ich kann aber auch einfach nur einen bzw den glwichen String senden, hier passiert das gleiche.
Sobald eine Variable dazu kommt.

Ich werde wenn es bei mir heute Abend noch zwischenrein passt mal schauen, was passiert wenn ich den Tx des Arduino vom ESP trenne.
Hatte bei versuchen am WE keie leeren Zeilen gehabt.
Ich werde es auch mal ohne ln versuchen.

Naja wie soll ich das denn umsetzen, wenn ich es ohne Verstingung mache?
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

DasQ

also wenn ich das hier so seh, trampelst du auf allem rum was ich mal so gelernt hab. kann sein das sich inzwischen einiges getan hat, mein letztes arduino sketch ist scho ein paar tage her. aber ich seh bei dir keine deklaration!
auch trampelst du auf den datentypen rum wie es dir passt, mal ganz davon abgesehn, das ich bis auf primitive serialausgabe noch kein echtes programm gesehn hab.

wie sowas aussehen könnte entnimmst du nem sketch von mir aus 2015 in dem ich mein garagentor damals per RFID öffnen konnte.

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);
int wert1 = 0;         // wert "analog" volt vom esp8266 an A03
int wert2 = 0;         // wert digital positionsschalter
int wert3 = 0;         // wert für digital schalter signal
int z1 = 0;            // zaehler1 auf 0 setzten
int out_D02 = 2;       // output Relais (torsignal öffnen schliessen)
int out_D03 = 3;       // output Beep
int in_D04 = 4;        // input Tor Position
int in_D05 = 5;        // input Taster manueller Betrieb
int in_A03 = 3;        // input HIGH Signl vom ESP8266
int impuls = 200;      // variable für tor impuls

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode (out_D02, OUTPUT);
  pinMode (out_D03, OUTPUT);
  pinMode (in_D04, INPUT);
  pinMode (in_D04, INPUT);
  pinMode (in_A03, INPUT);
  digitalWrite (out_D02, LOW);
}

void loop()
{
 
//Tor öffnen über Wlan

  wert1 = analogRead(in_A03);    // liest Analog pin A03 und übergibt an variable wert1
  if (wert1 > 500 )
      {
          Serial.println("Open via wlan");
          // Warnton 5 Peep bevor tor geöffnet wird
          int peep = 0;                 
          do {
              digitalWrite (out_D03, HIGH);
              delay (500);     
              digitalWrite (out_D03, LOW);
              delay(500);
              peep++;
            } while (peep < 5);
          delay(1500);
          digitalWrite (out_D02, HIGH);
          delay (impuls);     
          digitalWrite (out_D02, LOW);
      }

// RFID lesen

  if ( ! mfrc522.PICC_IsNewCardPresent())
      {
        return;
      }

  if ( ! mfrc522.PICC_ReadCardSerial())
      {
        return;
      }
 
// RFID ergebniss an variable uebergeben

long code=0;
  for (byte i = 0; i < mfrc522.uid.size; i++)
      {
        code=((code+mfrc522.uid.uidByte[i])*10);
      }
               
// RFID ueberpruefung

  if (code==832390  or code==153890 or code==1255260 or code==435790 or code==430790 or code==439790 or code==435790 or code==430790 or code==466620 or code==1398390)
      {
        z1++;
      }
// Tor öffnen über RFID

  if (z1 > 0 )
      {
          Serial.println("Open via RFID");
          // Warnton 3 Peep bevor tor geöffnet wird
          int peep = 0;                 
          do {
              digitalWrite (out_D03, HIGH);
              delay (100);     
              digitalWrite (out_D03, LOW);
              delay(100);
              peep++;
            } while (peep < 3);
          delay(3000);
          digitalWrite (out_D02, HIGH);
          delay (impuls);     
          digitalWrite (out_D02, LOW);
      }
}


nicht schön, soll ja auch nur als beispiel herhalten (wenn einer dennoch intresse dran hat, kann ich auch gern mal die finale version zeigen)
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Grundsätzlich würde ich DasQ mal darin zustimmen, dass etwas vertiefteres Grundlagenwissen hilfreich wäre.

Wichtig: String-Inhalte sind unglaublich "teuer", die sollte man auf einem kleinen Microcontroller möglichst vermeiden, und wenn, dann ggf. versuchen, die ins EEPRM zu schreiben (Stichwort: "F()").

Für's testen erst mal (ungetestet, nur auf Basis der hier geposteten loop()):

void loop() {
  randNumber = random(300);
  Serial.print("TaskValueSet,1,1,");
  Serial.println(random(100));
  delay(100);
  Serial.print("TaskValueSet,1,2,");
  Serial.println(randNumber);
  delay(100);
  Serial.println("TaskValueSet,1,3,0815");
  delay(100);
  float analogreading = analogRead(A0)*(5.0/1023.0));
  Serial.print("TaskValueSet,1,4,");
  Serial.println(analogreading);
  delay(100);
}

Ansonsten: Wenn du häufig dasselbe nacheinander tust, solltest du Schleifen verwenden, Ergebnisse (oder zu lesende PINs) in ein Array schreiben usw.... Das ohne zu machen, ist bei 2 Werten (Code von DasQ) eben noch ok, aber ansonsten dringend zu empfehlen (du willst mittelfristig ja einige Analogwerte auslesen).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files