Hallo Tom,
nochmal........es sind 7 Drahtverbindungen (nicht mehr und nicht weniger).
Hier etwas mit Begründung anders zu machen, kann schon so eines der Probleme sein.
Zumal du ja selber von 1:1-Umsetzung gesprochen hast.....
Anbei die beiden Fotos
Es gibt 74 Antworten in diesem Thema, welches 47.551 mal aufgerufen wurde. Der letzte Beitrag () ist von SolarEngel.
Hallo Tom,
nochmal........es sind 7 Drahtverbindungen (nicht mehr und nicht weniger).
Hier etwas mit Begründung anders zu machen, kann schon so eines der Probleme sein.
Zumal du ja selber von 1:1-Umsetzung gesprochen hast.....
Anbei die beiden Fotos
Hallo Tom,
der gelbe Draht ist wohl mein PINCHANGE-Pin. Das ist bei mir wohl A8
define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
So, nun bitte den Trommelwirbel....
#include <SPI.h>
#include <Ethernet2.h>
#include <PubSubClient.h>
#include <PinChangeInt.h>
byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
IPAddress ip(192, 168, 178, 177);
IPAddress server(192, 168, 178, 76);
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
}
EthernetClient ethClient;
PubSubClient client(ethClient);
long lastReconnectAttempt = 0;
boolean reconnect() {
if (client.connect("arduinoClient")) {
// Once connected, publish an announcement...
client.publish("outTopic","DEUTSCHLAND !");
// ... and resubscribe
client.subscribe("inTopic");
}
return client.connected();
}
#define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
byte CCNible[1500];
byte C2Nible[100];
int daktiv =0;
int iper = 0;
int CCx = 0;
int CC2 = 0;
int vfehl = 0;
int vnix = 0;
byte Zeile[68];
int RetterCC2;
int z=0;
byte TV[3];
byte TK[3];
byte TS[3];
unsigned long time;
String A25DispZeile1 ="";
String A25DispZeile2 ="";
char message_buff_1[68];
char message_buff_2[68];
void setup() {
client.setServer(server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
delay(1500);
lastReconnectAttempt = 0;
Serial.begin(57600);
Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015");
pinMode(PIN, INPUT); //set the pin to input
digitalWrite(PIN, HIGH); //use the internal pullup resistor
PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge
DDRC = B00000000; // set PORTC (digital) to inputs
vfehl = 0;
vnix = 0;
daktiv =0;
}
void loop() {
if (!client.connected()) {
long now = millis();
if (now - lastReconnectAttempt > 5000) {
lastReconnectAttempt = now;
// Attempt to reconnect
if (reconnect()) {
lastReconnectAttempt = 0;
}
}
} else {
// Client connected
client.loop();
}
if (CCx >= 1 && daktiv == 0)
{
delay(150);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 1)
{
delay(90);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 2)
{
delay(60);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 3)
{
delay(30);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 4)
{
daktiv =0;
if (CCx > 1400) CCx = 300;
delay(30); // 30ms warten nach letztem interrupt
//array neu=CCNible alt=C2Nible sind beide arrays gleich?
CC2 = 67;
for (int i=0; i <= CC2; i++)
{
if(CCNible[i] != C2Nible[i]) vfehl++;
}
CC2 = 68;
if (vfehl > 0)
{
vfehl = 0;
vnix = 0;
//array kopieren
for (int i=0; i <= CC2; i++)
{
C2Nible[i] = CCNible[i];
}
//Serial.print(" LCD Anzeige Änderung festgestellt: CCx= ");
CCx = 0;
//Ausgabe ASCII-Zeile
z = 0;
A25DispZeile1 = "";
A25DispZeile2 = "";
for (int i=0; i <= CC2; i++)
{
byte CCNH1 = C2Nible[i];
i++;
byte CCNL1 = C2Nible[i];
CCNH1 = CCNH1 << 4;
byte CCLCD = CCNH1 | CCNL1;
if (CCLCD == 192) CCLCD = 45;
if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile
if (CCLCD > 126) CCLCD = 32;
if (CCLCD < 32) CCLCD = 32;
z++;
Zeile[z] = CCLCD;
//Serial.println(CCLCD,HEX);
//Serial.print (Azure);
Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!!
int Tesla = CCLCD;
if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen
A25DispZeile1 = A25DispZeile1 + char (Tesla);
}
if (i>34) {
A25DispZeile2 = A25DispZeile2 + char (Tesla);
}
// Otto
//Serial.print(CCLCD);
//Serial.print("-");
}
//Ute = Ute.c_str();
Serial.println (A25DispZeile1);
Serial.println (A25DispZeile2);
A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1);
A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1);
///String Test = A25DispZeile1.substring(0,2);
///Serial.println (Test);
//client.publish ("A25DisplayAnzeige",message_buff);
/// OTTOLEIN
/// OTTOLEIN
//Serial.println(" ");
iper = 0;
} //ende vfehl>0
else // vfehl=0
{
vnix++;
if (vnix > 10)
{
//Serial.print(" 10x unverändert CCx= ");
iper = 0;
vnix =0;
}
CCx = 0;
} //ende vfehl=0
} // ende CC2 > 0
{
//Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
{
{
{
// send a standard http response header
// output the value of each analog input pin
for (int z=1; z <= 34; z++)
{
//Serial.print (Zeile[z]);
}
//client.println("<br />");
for (int z=1; z <= 34; z++)
{
//client.write (Zeile[z]);
}
//client.println("<br />");
//client.println("<br />");
//client.println("---------------------------------------------");
//client.println("<br />");
//client.println("<b>Ferndisplay ATMOS A25-Brenner</b>");
//client.println("<br />");
//client.println("---------------------------------------------");
//client.println("<br />");
//client.print("Status Brenner: ");
//client.write(Zeile[2]);
//client.write(Zeile[3]);
//client.write(Zeile[4]);
//client.println("<br />");
// ---------------------------------------------------------------------
if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv)
{
TV[1] = Zeile[14];
TV[2] = Zeile[15];
}
// ---------------------------------------------------------------------
if (Zeile[9] == 84 && Zeile[10] == 75)
{
TK[1] = Zeile[14];
TK[2] = Zeile[15];
}
if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32)
{
TS[1] = Zeile[14];
TS[2] = Zeile[15];
}
//client.print("Speichertemperatur OBEN (Tv): ");
//client.write(TV[1]);
//client.write(TV[2]);
//client.println("<br />");
//client.print("Speichertemperatur MITTE (Tk): ");
//client.write(TK[1]);
///client.write(TK[2]);
//client.print(" ℃");
//client.println("<br />");
//client.print("Speichertemperatur UNTEN (Ts): ");
//client.write(TS[1]);
//client.write(TS[2]);
//client.print(" ℃");
//client.println("<br />");
//client.print("Förderschnecke: ");
if (Zeile[20] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Glühzünder 1: ");
if (Zeile[24] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Glühzünder 2: ");
if (Zeile[26] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Gebläse: ");
if (Zeile[30] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Flamme: ");
if (Zeile[34] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.println("</html>");
//break;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
//Serial.println("client disconnected");
}
if (millis() > (time + 2000)) {
time = millis();
client.publish ("A25DisplayZeile1",message_buff_1);
client.publish ("A25DisplayZeile2",message_buff_2);
}
} // ENDE VOID LOOP
void blink()
{
byte wertC = PINC;
CCNible[CCx] = wertC;
CCx++;
iper++;
}
Alles anzeigen
So, nun bitte den Trommelwirbel....
CAlles anzeigen#include <SPI.h> #include <Ethernet2.h> #include <PubSubClient.h> #include <PinChangeInt.h> byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX }; IPAddress ip(192, 168, 178, 177); IPAddress server(192, 168, 178, 76); void callback(char* topic, byte* payload, unsigned int length) { // handle message arrived } EthernetClient ethClient; PubSubClient client(ethClient); long lastReconnectAttempt = 0; boolean reconnect() { if (client.connect("arduinoClient")) { // Once connected, publish an announcement... client.publish("outTopic","DEUTSCHLAND !"); // ... and resubscribe client.subscribe("inTopic"); } return client.connected(); } #define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display byte CCNible[1500]; byte C2Nible[100]; int daktiv =0; int iper = 0; int CCx = 0; int CC2 = 0; int vfehl = 0; int vnix = 0; byte Zeile[68]; int RetterCC2; int z=0; byte TV[3]; byte TK[3]; byte TS[3]; unsigned long time; String A25DispZeile1 =""; String A25DispZeile2 =""; char message_buff_1[68]; char message_buff_2[68]; void setup() { client.setServer(server, 1883); client.setCallback(callback); Ethernet.begin(mac, ip); delay(1500); lastReconnectAttempt = 0; Serial.begin(57600); Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015"); pinMode(PIN, INPUT); //set the pin to input digitalWrite(PIN, HIGH); //use the internal pullup resistor PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge DDRC = B00000000; // set PORTC (digital) to inputs vfehl = 0; vnix = 0; daktiv =0; } void loop() { if (!client.connected()) { long now = millis(); if (now - lastReconnectAttempt > 5000) { lastReconnectAttempt = now; // Attempt to reconnect if (reconnect()) { lastReconnectAttempt = 0; } } } else { // Client connected client.loop(); } if (CCx >= 1 && daktiv == 0) { delay(150); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 1) { delay(90); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 2) { delay(60); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 3) { delay(30); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 4) { daktiv =0; if (CCx > 1400) CCx = 300; delay(30); // 30ms warten nach letztem interrupt //array neu=CCNible alt=C2Nible sind beide arrays gleich? CC2 = 67; for (int i=0; i <= CC2; i++) { if(CCNible[i] != C2Nible[i]) vfehl++; } CC2 = 68; if (vfehl > 0) { vfehl = 0; vnix = 0; //array kopieren for (int i=0; i <= CC2; i++) { C2Nible[i] = CCNible[i]; } //Serial.print(" LCD Anzeige Änderung festgestellt: CCx= "); CCx = 0; //Ausgabe ASCII-Zeile z = 0; A25DispZeile1 = ""; A25DispZeile2 = ""; for (int i=0; i <= CC2; i++) { byte CCNH1 = C2Nible[i]; i++; byte CCNL1 = C2Nible[i]; CCNH1 = CCNH1 << 4; byte CCLCD = CCNH1 | CCNL1; if (CCLCD == 192) CCLCD = 45; if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile if (CCLCD > 126) CCLCD = 32; if (CCLCD < 32) CCLCD = 32; z++; Zeile[z] = CCLCD; //Serial.println(CCLCD,HEX); //Serial.print (Azure); Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!! int Tesla = CCLCD; if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen A25DispZeile1 = A25DispZeile1 + char (Tesla); } if (i>34) { A25DispZeile2 = A25DispZeile2 + char (Tesla); } // Otto //Serial.print(CCLCD); //Serial.print("-"); } //Ute = Ute.c_str(); Serial.println (A25DispZeile1); Serial.println (A25DispZeile2); A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1); A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1); ///String Test = A25DispZeile1.substring(0,2); ///Serial.println (Test); //client.publish ("A25DisplayAnzeige",message_buff); /// OTTOLEIN /// OTTOLEIN //Serial.println(" "); iper = 0; } //ende vfehl>0 else // vfehl=0 { vnix++; if (vnix > 10) { //Serial.print(" 10x unverändert CCx= "); iper = 0; vnix =0; } CCx = 0; } //ende vfehl=0 } // ende CC2 > 0 { //Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; { { { // send a standard http response header // output the value of each analog input pin for (int z=1; z <= 34; z++) { //Serial.print (Zeile[z]); } //client.println("<br />"); for (int z=1; z <= 34; z++) { //client.write (Zeile[z]); } //client.println("<br />"); //client.println("<br />"); //client.println("---------------------------------------------"); //client.println("<br />"); //client.println("<b>Ferndisplay ATMOS A25-Brenner</b>"); //client.println("<br />"); //client.println("---------------------------------------------"); //client.println("<br />"); //client.print("Status Brenner: "); //client.write(Zeile[2]); //client.write(Zeile[3]); //client.write(Zeile[4]); //client.println("<br />"); // --------------------------------------------------------------------- if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv) { TV[1] = Zeile[14]; TV[2] = Zeile[15]; } // --------------------------------------------------------------------- if (Zeile[9] == 84 && Zeile[10] == 75) { TK[1] = Zeile[14]; TK[2] = Zeile[15]; } if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32) { TS[1] = Zeile[14]; TS[2] = Zeile[15]; } //client.print("Speichertemperatur OBEN (Tv): "); //client.write(TV[1]); //client.write(TV[2]); //client.println("<br />"); //client.print("Speichertemperatur MITTE (Tk): "); //client.write(TK[1]); ///client.write(TK[2]); //client.print(" ℃"); //client.println("<br />"); //client.print("Speichertemperatur UNTEN (Ts): "); //client.write(TS[1]); //client.write(TS[2]); //client.print(" ℃"); //client.println("<br />"); //client.print("Förderschnecke: "); if (Zeile[20] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Glühzünder 1: "); if (Zeile[24] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Glühzünder 2: "); if (Zeile[26] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Gebläse: "); if (Zeile[30] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Flamme: "); if (Zeile[34] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.println("</html>"); //break; } } } // give the web browser time to receive the data delay(1); // close the connection: //Serial.println("client disconnected"); } if (millis() > (time + 2000)) { time = millis(); client.publish ("A25DisplayZeile1",message_buff_1); client.publish ("A25DisplayZeile2",message_buff_2); } } // ENDE VOID LOOP void blink() { byte wertC = PINC; CCNible[CCx] = wertC; CCx++; iper++; }
Hi Volker
Dann teste ich das Mal bei Gelegenheit U d gib Rückmeldung.
Hast du mein Bild gesehen? Der "::" ist der gewollt? War mir bis dato in der Syntax nicht bekannt *grübel
Hat das einen Grund das sehr viel auskomemtiert ist mit "//" ?
Oder les ich's Grad falsch
Danke nochmal für dein Werk und ich melde mich mit Feedback zurück
Gruß Tom
Gesendet von meinem MI 6 mit Tapatalk
So, nun bitte den Trommelwirbel....
CAlles anzeigen#include <SPI.h> #include <Ethernet2.h> #include <PubSubClient.h> #include <PinChangeInt.h> byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX }; IPAddress ip(192, 168, 178, 177); IPAddress server(192, 168, 178, 76); void callback(char* topic, byte* payload, unsigned int length) { // handle message arrived } EthernetClient ethClient; PubSubClient client(ethClient); long lastReconnectAttempt = 0; boolean reconnect() { if (client.connect("arduinoClient")) { // Once connected, publish an announcement... client.publish("outTopic","DEUTSCHLAND !"); // ... and resubscribe client.subscribe("inTopic"); } return client.connected(); } #define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display byte CCNible[1500]; byte C2Nible[100]; int daktiv =0; int iper = 0; int CCx = 0; int CC2 = 0; int vfehl = 0; int vnix = 0; byte Zeile[68]; int RetterCC2; int z=0; byte TV[3]; byte TK[3]; byte TS[3]; unsigned long time; String A25DispZeile1 =""; String A25DispZeile2 =""; char message_buff_1[68]; char message_buff_2[68]; void setup() { client.setServer(server, 1883); client.setCallback(callback); Ethernet.begin(mac, ip); delay(1500); lastReconnectAttempt = 0; Serial.begin(57600); Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015"); pinMode(PIN, INPUT); //set the pin to input digitalWrite(PIN, HIGH); //use the internal pullup resistor PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge DDRC = B00000000; // set PORTC (digital) to inputs vfehl = 0; vnix = 0; daktiv =0; } void loop() { if (!client.connected()) { long now = millis(); if (now - lastReconnectAttempt > 5000) { lastReconnectAttempt = now; // Attempt to reconnect if (reconnect()) { lastReconnectAttempt = 0; } } } else { // Client connected client.loop(); } if (CCx >= 1 && daktiv == 0) { delay(150); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 1) { delay(90); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 2) { delay(60); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 3) { delay(30); CCx = 0; iper = 0; daktiv++; } if (CCx >= 1 && daktiv == 4) { daktiv =0; if (CCx > 1400) CCx = 300; delay(30); // 30ms warten nach letztem interrupt //array neu=CCNible alt=C2Nible sind beide arrays gleich? CC2 = 67; for (int i=0; i <= CC2; i++) { if(CCNible[i] != C2Nible[i]) vfehl++; } CC2 = 68; if (vfehl > 0) { vfehl = 0; vnix = 0; //array kopieren for (int i=0; i <= CC2; i++) { C2Nible[i] = CCNible[i]; } //Serial.print(" LCD Anzeige Änderung festgestellt: CCx= "); CCx = 0; //Ausgabe ASCII-Zeile z = 0; A25DispZeile1 = ""; A25DispZeile2 = ""; for (int i=0; i <= CC2; i++) { byte CCNH1 = C2Nible[i]; i++; byte CCNL1 = C2Nible[i]; CCNH1 = CCNH1 << 4; byte CCLCD = CCNH1 | CCNL1; if (CCLCD == 192) CCLCD = 45; if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile if (CCLCD > 126) CCLCD = 32; if (CCLCD < 32) CCLCD = 32; z++; Zeile[z] = CCLCD; //Serial.println(CCLCD,HEX); //Serial.print (Azure); Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!! int Tesla = CCLCD; if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen A25DispZeile1 = A25DispZeile1 + char (Tesla); } if (i>34) { A25DispZeile2 = A25DispZeile2 + char (Tesla); } // Otto //Serial.print(CCLCD); //Serial.print("-"); } //Ute = Ute.c_str(); Serial.println (A25DispZeile1); Serial.println (A25DispZeile2); A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1); A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1); ///String Test = A25DispZeile1.substring(0,2); ///Serial.println (Test); //client.publish ("A25DisplayAnzeige",message_buff); /// OTTOLEIN /// OTTOLEIN //Serial.println(" "); iper = 0; } //ende vfehl>0 else // vfehl=0 { vnix++; if (vnix > 10) { //Serial.print(" 10x unverändert CCx= "); iper = 0; vnix =0; } CCx = 0; } //ende vfehl=0 } // ende CC2 > 0 { //Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; { { { // send a standard http response header // output the value of each analog input pin for (int z=1; z <= 34; z++) { //Serial.print (Zeile[z]); } //client.println("<br />"); for (int z=1; z <= 34; z++) { //client.write (Zeile[z]); } //client.println("<br />"); //client.println("<br />"); //client.println("---------------------------------------------"); //client.println("<br />"); //client.println("<b>Ferndisplay ATMOS A25-Brenner</b>"); //client.println("<br />"); //client.println("---------------------------------------------"); //client.println("<br />"); //client.print("Status Brenner: "); //client.write(Zeile[2]); //client.write(Zeile[3]); //client.write(Zeile[4]); //client.println("<br />"); // --------------------------------------------------------------------- if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv) { TV[1] = Zeile[14]; TV[2] = Zeile[15]; } // --------------------------------------------------------------------- if (Zeile[9] == 84 && Zeile[10] == 75) { TK[1] = Zeile[14]; TK[2] = Zeile[15]; } if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32) { TS[1] = Zeile[14]; TS[2] = Zeile[15]; } //client.print("Speichertemperatur OBEN (Tv): "); //client.write(TV[1]); //client.write(TV[2]); //client.println("<br />"); //client.print("Speichertemperatur MITTE (Tk): "); //client.write(TK[1]); ///client.write(TK[2]); //client.print(" ℃"); //client.println("<br />"); //client.print("Speichertemperatur UNTEN (Ts): "); //client.write(TS[1]); //client.write(TS[2]); //client.print(" ℃"); //client.println("<br />"); //client.print("Förderschnecke: "); if (Zeile[20] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Glühzünder 1: "); if (Zeile[24] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Glühzünder 2: "); if (Zeile[26] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Gebläse: "); if (Zeile[30] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.print("Flamme: "); if (Zeile[34] == 42) { //client.print ("Ein"); } else { //client.print ("Aus"); } //client.println("<br />"); //client.println("</html>"); //break; } } } // give the web browser time to receive the data delay(1); // close the connection: //Serial.println("client disconnected"); } if (millis() > (time + 2000)) { time = millis(); client.publish ("A25DisplayZeile1",message_buff_1); client.publish ("A25DisplayZeile2",message_buff_2); } } // ENDE VOID LOOP void blink() { byte wertC = PINC; CCNible[CCx] = wertC; CCx++; iper++; }
Hi Volker, falls du noch liest...
Also das Grundprogramm von Jürgen geht jetzt bei mir.
Mein Fehler war ein Farbendreh der Bits. Anbei auch n Bild.
Kannst du mir vll sagen wie du die Tasten noch ausgeknobelt hast und welches Ethernet Board du verbaut hast? (Einkaufsliste)
Dazu Nochmal die alten Beiträge angesehen.
Dein Sketch wird vermutlich wegen des fehlenden Ethernet Boards bei mir noch nicht funktionieren. Aber da jetzt da Grund Projekt läuft bin ich auf dem richtigen Weg*freu
Danke und Gruß
Tom
[Blockierte Grafik: https://uploads.tapatalk-cdn.com/20190115/13b6b47813b6f29c2cc1054a4de12894.jpg][Blockierte Grafik: https://uploads.tapatalk-cdn.com/20190115/9e44c575d34875a49728cd83754f48e3.jpg]
Gesendet von meinem MI 6 mit Tapatalk
Hallo Tom,
Glückwunsch !
Der Rest ist dann ja einfach.
Nutze das Grundprogramm und erweiter es einfach..
Mein Sketch enthält ja noch die Ausgabe der HTML-Seite und den MQTT-Betrieb und....und....
Wichtig ist ja nur der Teil von Jürgen.
Meine Wesentliche Änderung ist die korrekte Darstellung der zweiten Displayzeile mit den Sternen....
Siehst du ja auch an deinem Bild......Zeigt nur Daten aus Zeile 1.
Ethernet-Shield ist auch ein Original. Welches muss ich nachsehen, was leider bis zum Wochende
braucht. Denke aber, das es kein bestimmtes Shield sein muss.
Dito weg. der Tasten. Sind vier Drähte die gegen Masse geschaltet werden.
Die vier Drähte siehst du in meinem „Beweisfotos“ (unten links)
Gruß Volker
Alles anzeigenHallo Tom,
Glückwunsch !
Der Rest ist dann ja einfach.
Nutze das Grundprogramm und erweiter es einfach..
Mein Sketch enthält ja noch die Ausgabe der HTML-Seite und den MQTT-Betrieb und....und....
Wichtig ist ja nur der Teil von Jürgen.
Meine Wesentliche Änderung ist die korrekte Darstellung der zweiten Displayzeile mit den Sternen....
Siehst du ja auch an deinem Bild......Zeigt nur Daten aus Zeile 1.
Ethernet-Shield ist auch ein Original. Welches muss ich nachsehen, was leider bis zum Wochende
braucht. Denke aber, das es kein bestimmtes Shield sein muss.
Dito weg. der Tasten. Sind vier Drähte die gegen Masse geschaltet werden.
Die vier Drähte siehst du in meinem „Beweisfotos“ (unten links)
Gruß Volker
Hi
Mich würde interessieren wie das bei dir im iobroker aussieht wenn's als mqtt rein kommt (Objekte)?
Meinst du kannst da Mal n Bild machen
Grüße
Gesendet von meinem MI 6 mit Tapatalk
Hallo Tom,
zunächst benötigst du eine IOBROKER-Installation auf einem Windows-PC, Raspberry PI, oder oder oder....
Im IOBROKER gibt es unzählige Adapter. Auch welche für MQTT. Einen MQTT musst du aus dem Bereich
der Adapter auswählen und einrichten. Den findest du danach im Bereich der INSTANZEN wieder.
Das ist dann mal die erste Basis. Also ein MQTT als Server....Ist der korrekt eingerichtet, findest du die A25-Display-Daten des Arduino im Bereich der OBJEKTE.
Die weitere Verarbeitung kann dann z.B. in Node-RED (unter IOBROKER) erfolgen.
Hallo Solarengel,
Ich bin wieder zurück am Basteltisch, (ein weiteres Stockwerk und Fassade gemacht ).
sag mal läuft dein ESP32 stabil ?
ich bekomm es einfach nicht stabil zum laufen....
Ich hab sogar 2 ESP32 versucht.. einer der WiFi und die Tasten macht und einer der nur das Display liest.
Das habe ich gemacht weil ich mit einem alleine immer Resets bekommen hab.
Ich möchte das Thema nochmal neu bzw. richtig machen... und überlege ob ich es nochmal mit deiner letzten ESP32 Version mache oder ob ich mir ein Ethernet Aufbau mache.
Kannst Du über MQTT quasi in Echtzeit den Brenner steuern ?
viele Grüße
Andreas
Hallo Andreas,
ja, mein ESP32 läuft inzwischen einige Jahre sehr stabil am A25-Brenner.
Das wichtigste ist ein starkes WLAN-Signal im Heizraum, damit eine 100%ige Wifi-Verbindung mit dem ESP32 möglich ist.
Mit tcpdump oder wireshark kannst ja die Netzwerkverbindung anschauen, dann siehst ja ob ein connect sofort
oder mit mehreren Versuchen funktioniert.
Bei mir laufen im Heizraum inzwischen 3 ESP's mit unterschiedlichen Aufgaben. Die stören sich nicht gegenseitig.
Die Rechenpower vom ESP32 ist viel mehr als ausreichend und mit den 2 Rechenkernen sind 2 zeitkritische Tasks gleichzeitig möglich.
Das war für mich der Grund auf ESP32 umzusteigen, wegen der 2 gleichzeitigen Tasks. Eine Task für das Wifi/MQTT-Geschäft und die
zweite Task für Steuerungsaufgaben.
Ich habe inzwischen mit mehreren Interrupt-gesteuerten zeitkritischen Timern keine Probleme feststellen
können und der Arbeits-Speicher ist zum Programmieren eigentlich riesengroß im Vergleich zu den ARDUINOS.
Der Stromverbrauch ist ebenfalls im 100mA Bereich super.
Ja, den Brenner kann ich über MQTT quasi in Echtzeit steuern mit dem kleinen NODE-RED-Dashboard über Handy oder Tablet oder PC.
Für den manuellen Betrieb schalte ich im Fernsteuer-Menu zuerst die Automatik ab, damit ich in aller Ruhe manuell die
Tasten durch die Menüs bewegen kann. Nach einer gewissen Zeit schaltet sich die Automatik wieder selber ein und dann
geht das Tastendrücken wieder automatisch und sehr viel schneller als von Hand.
Aber das steht ja alles im Programm drin, kannst ja nachlesen.
Gruß
Jürgen
OK... ich hab mir deinen Code nochmal angeschaut. Du hast einmal das Remote und einmal den Logger.
Aber eine SW mit beiden Funktionen hast du nicht oder ? Nur zu meinem besseren Verständnis.
zum WLAN.... ich habe extra eine seperate FritzBox im Mesh in den Kellerraum installiert.
.... hab gemerkt das das Slave programm auch die möglichkeit zur Remote hat ...
aber ich hab keine Ausgabe des aktuellen Displayinhalts gefunden ( im Code und auch nicht im MQTT Ergebnis).
ist das richtig... oder übersehe ich da was ?
Grüße
Andreas
Hallo Jürgen,
So hab alles umgebaut und es lief auch wieder.... der ESP hat sich seit heute morgen schon 2x aufgehängt.
Ich hab nur die MQTT Ausgabe des Displays eingebaut - ohne die kann ich den Brenner schlecht fernbedienen.
Hast Du irgendeine Idee woran das liegen könnte ?
Zwischenzeitlich werde ich mal mein Raspberry Netzteil mit 3A verwenden. Sonst verwende ich immer Handy Ladegeräte.
Grüße
Andreas
Hallo Andreas,
ja, es sind 3 Programme.
1. ESP32_MQTT_A25_SPI_SLAVE.ZIP
ESP32 A25-Wlan_MQTT-Datenlogger_mit_Tropföler-Steuerung (mit A25H MQTT token)
2. ESP32_A25_SPI_MASTER.ZIP
ESP32 Test-Generator (A25-Simulaton) mit Daten einer kompletten Info-Sequenz, AX25-Brenner für den Schreibtisch.
3. ESP32_MQTT_A25_REMOTE.ZIP
ESP32 A25-Fernsteuerungs-Programm, um mit MQTT-Messages am A25 Brenner die 4-Tasten über Wlan zu steuern (mit A25c MQTT token)
Der ESP32 A25-Simulator und das ESP32 Fernsteuerungs-Programm sind Hifsprogramme die zum Testen notwendig waren.
Mit dem ESP32 A25-Simulator hab ich mir meinen A25-Brenner auf den Schreibtisch geholt, weil die ESP32 SPI-Schnittstelle in den interruptgesteuerten SLAVE-Mode
zu bringen nicht ganz einfach für mich war. Da waren permanente Testdaten vom ESP32 A25-Simulator sehr hilfreich.
Das (ESP32_MQTT_A25_REMOTE) ist ein einfaches A25-Fernsteuerungs-Programm für den ESP32. War auch ein Hilfsprogramm für die ersten Fernsteuerübungen.
Es sendet über Wlan MQTT-Messages A25-Fernsteuer-Daten an den MQTT-Broker Mosquitto.
Eine weitere sehr viel komfortablere A25-Fernsteuerung ist das Node-RED Dashboard was im späteren Beitrag gefolgt ist.
Das Node-RED Dashboard sendet ebenfalls MQTT-Messages mit A25-Fernsteuer-Daten an den MQTT-Broker Mosquitto.
Im ESP32-Datenlogger (ESP32_MQTT_A25_SPI_SLAVE) ist alles drin.
Da kannst auch im Heizraum wenn der PC am ESP32 angeschlossen ist, direkt über Tastatur-Eingaben (Fernsteuer-cmds e,r,o,u) im Arduino-Monitor-Fenster die Pfeil-Tasten am Brenner ferngesteuert drücken .
Der ESP32-Datenlogger sendet drahtlos über Wlan MQTT-Messages mit Brenner-Daten an den MQTT-Broker Mosquitto.
Nur der ESP32-Datenlogger empfängt über Wlan MQTT-Messages vom MQTT-Broker Mosquitto mit A25-Fernsteuer-Daten.
Mit der Fernsteuerungs-Funktion im ESP32-Datenlogger werden über Wlan/MQTT die verschiedenen Fernsteuer-Messages empfangen (in der callback-Funktion..if ((MqttCmd..).
Für jeden Pfeil (Pfeil nach oben, Pfeil nach unten, Pfeil nach links, Pfeil nach rechts) in meiner AC07 A25-Brennersteuerung
gibt es eine eigene MQTT-Message die dann die richtige Pfeil-Taste am Brenner ferngesteuert drückt (mit einem Transistor schaltet).
Der ESP32-Datenlogger sendet über Wlan MQTT-Messages keine Fernsteuer-Daten, denn es macht für mich keinen Sinn wenn der ESP32-Datenlogger Fernsteuer-Messages an sich selbst schickt.
Wenn es für dich doch einen Sinn machen sollte, dann kannst den Code aus ESP32_MQTT_A25_REMOTE dafür verwenden und in den ESP32-Datenlogger einbauen.
Weitere Möglichkeit um Netzwerkproblemen auf die Spur zu kommen wäre mal die Logs vom MQTT-Broker Mosquitto anzuschauen. Dort sind auch einige connect-Infos usw. drin enthalten.
Wenn nicht sicher bist ob Störungen von der Stromversorgung herkommen, dann kannst ja mit einem Accupack 5V den ESP32 im Batteriebetrieb weg vom Netz betreiben.. usw.
Musst halt versuchen Fehler einzukreisen, oder die Ursache zu finden.
Wenn mehrere ESP32 betreibst, dann musst peinlich drauf achten, dass jeder ESP32 eine eigene,eindeutige ID beim connect zum MQTT-Broker Mosquitto hat.
Gruß
Jürgen
Hallo Andreas,
.. der ESP hat sich seit heute morgen schon 2x aufgehängt.
Beim Stöbern in meinen diversen Unterlagen zu ESP32 habe ich eine Doku zur Stromversorgung über Micro-USB-Kabel gefunden.
Ich arbeite mit vielen ESP32 und da sind natürlich auch viele Micro-USB-Kabel in Gebrauch.
Es gibt bei mir einige wenige Kabel die produzierten auch bei mir nicht erklärbare RESET-Phänomene. Die hab ich aussortiert und markiert.
In einigen Versuchen hatte ich da den ESP32 ohne Micro-USB-Kabel betrieben, weil am Einsatzort kein PC-Anschluss möglich war und die nicht erklärbaren RESET-Phänomene waren plötzlich weg.
Dabei hat sich dann herausgestellt dass nach einem Micro-USB-Kabel Tausch die nicht erklärbare RESET-Phänomene auch weg waren.
Und dann hatte ich so ein (schlechtes Kabel) an andere ESP32 angeschlossen und der Fehler war immer sofort wieder beliebig oft reproduzierbar vorhanden.
Was ich damit sagen will, wenn nicht erklärbare RESET-Phänomene hast, dann mal den ESP32 ohne Micro-USB-Kabel betreiben und 5V direkt an die CPU-Pins anschliessen. Bei Wifi-Betrieb ist das immer möglich.
Oder mit einem anderen Micro-USB-Kabel nochmal testen.
Gruß
Jürgen
Hallo,
bei der Umstellung auf fixe Ip-Adressen musste auch das in die Jahre gekommene SPI-Slave-Konzept
neu erforscht werden und wurde durch ein schnelles DMA(DirectMemoryAccess)-Konzept ersetzt.
Bei dieser Überarbeitung ist noch ein kleiner Webserver lokal auf dem ESP32 hizugekommen
Bild 1
Auf der Webseite sind alle Informationen und Parameter vom A25 Brenner auf einen Blick angeordnet,
und mit 4 Push-Buttons können die Tasten direkt am Brenner übers Web ferngesteuert werden.
Das linke A25-LCD Fenster zeigt die gleichen Informationen an, wie wenn ich direkt vor dem Brenner stehe und auf die LCD-Anzeige schaue.
Die bisherigen MQTT-Ausgaben und MQTT-Fernsteuerung und Tropföler-Steuerung ist natürlich noch vorhanden.
Das SPI-Slave-Konzept mit DMA ist inzwischen so präzise und schnell geworden, dass ich jeden
Ein-Ausschaltvorgang (Sternchen ganz links in der 2.ten Zeile vom LCD-Display) von der Förderschnecke
sichtbar machen kann und anhand der Zeitstempel der MQTT-Ausgaben den gesamten
Förderzyklus eingestellt mit Parameter T4 und T6 anschauen, prüfen und dokumentieren kann.
MQTT -Log-Auszug zur Analyse eines Ein-Aus-Zyklus von der Förderschnecke
2024-02-02 06:41:21 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:21 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:21 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:21 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:21 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:22 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:22 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:22 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:22 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:23 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:24 a25/stat/SAN b'AN 66/ 46 C * * * '-------->>Beginn Förderzyklus
2024-02-02 06:41:24 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:24 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:25 a25/stat/PAR b'Parametern '
2024-02-02 06:41:25 a25/stat/INF b'Information '
2024-02-02 06:41:25 a25/info/PHO b'Photozelle 100'
2024-02-02 06:41:25 a25/info/TPU b'untere Temp. 45,8 C '
2024-02-02 06:41:25 a25/info/TPO b'oberer Temp. 66,0 C '
2024-02-02 06:41:26 a25/info/VEN b'Ventilator 2840rpm '
2024-02-02 06:41:26 a25/info/FSN b'Forderschnecke OFF '
2024-02-02 06:41:26 a25/info/SNS b'Schneckestorung OK OK '
2024-02-02 06:41:26 a25/info/GLU b'Gluhspirale 1:OFF 2:OFF '
2024-02-02 06:41:27 a25/info/SPI b'Spiralestorung 1: OK 2: OK '
2024-02-02 06:41:27 a25/info/AGR b'Ausgangsreserve 1-OFF '
2024-02-02 06:41:28 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:28 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:28 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:28 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:29 a25/stat/PAR b'Parametern '
2024-02-02 06:41:30 a25/stat/INF b'Information '
2024-02-02 06:41:30 a25/info/PHO b'Photozelle 100'
2024-02-02 06:41:30 a25/info/TPU b'untere Temp. 45,8 C '
2024-02-02 06:41:31 a25/info/TPO b'oberer Temp. 66,1 C '
2024-02-02 06:41:31 a25/info/VEN b'Ventilator 2835rpm '
2024-02-02 06:41:31 a25/info/FSN b'Forderschnecke OFF '
2024-02-02 06:41:31 a25/info/SNS b'Schneckestorung OK OK '
2024-02-02 06:41:31 a25/info/GLU b'Gluhspirale 1:OFF 2:OFF '
2024-02-02 06:41:32 a25/info/SPI b'Spiralestorung 1: OK 2: OK '
2024-02-02 06:41:32 a25/info/AGR b'Ausgangsreserve 1-OFF '
2024-02-02 06:41:33 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:33 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:33 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:33 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:34 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:34 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:34 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:34 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:34 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:38 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:38 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:38 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:38 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:38 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:39 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:39 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:39 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:39 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:39 a25/stat/PAR b'Parametern '
2024-02-02 06:41:40 a25/stat/INF b'Information '
2024-02-02 06:41:40 a25/info/PHO b'Photozelle 100'
2024-02-02 06:41:40 a25/info/TPU b'untere Temp. 45,8 C '
2024-02-02 06:41:40 a25/info/TPO b'oberer Temp. 66,1 C '
2024-02-02 06:41:40 a25/info/VEN b'Ventilator 2840rpm '
2024-02-02 06:41:41 a25/info/FSN b'Forderschnecke ON '
2024-02-02 06:41:41 a25/info/SNS b'Schneckestorung OK OK '
2024-02-02 06:41:41 a25/info/GLU b'Gluhspirale 1:OFF 2:OFF '
2024-02-02 06:41:41 a25/info/SPI b'Spiralestorung 1: OK 2: OK '
2024-02-02 06:41:42 a25/info/AGR b'Ausgangsreserve 1-OFF '
2024-02-02 06:41:43 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:43 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:43 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:43 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:43 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:44 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:44 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:44 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:44 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:45 a25/stat/SAN b'AN 66/ 46 C * * * * '
2024-02-02 06:41:46 a25/stat/SAN b'AN 66/ 46 C * * * '-------->>Ende Förderzyklus
2024-02-02 06:41:46 a25/stat/SAN b'AN 66/ 46 C * * * '
2024-02-02 06:41:47 a25/stat/SAN b'AN 66/ 46 C * * * '
Alles anzeigen
Mit diesem Web Update wurde der A25-Brenner bei mir wieder informativ aufgewertet,
nachdem er schon über 13 Jahre ohne Probleme läuft und hoffentlich noch lange Wärme erzeugt.
Über den Winter hab ich mich nicht nur mit der Arduino-IDE sondern auch mit Visulal Studio Code mit PlatformIO und dem herstellerspezifischen ESpresso-IDF beschäftigt.
Visulal Studio Code gefällt mir am besten, denn es beherrscht mit den jeweiligen Extensions
den Umgang mit allen Programmiersprachen die ich so kenne und verwende.
Somit stehen für mich 3 verschiedene Programmier-Werkzeuge (Umgebungen) für den ESP32 zur Verfügung.
Das Hochladen von externen Dateien (in diesem Projekt das JPEG-Bild vom A25-Brenner)
in den separaten Flash-Speicher vom ESP32 (mit Filesystem LittleFS) ist mit wenigen Klicks
in der Tool-Leiste zu erledigen. Damit kann man nicht nur im kleinen EEPROM-Speicher
sondern im grossen Flash-Speicher vom ESP32 Daten persistent ablegen und ins Programm wieder einlesen.
Der riesige Speicherplatz im Vergleich zu den Arduinos oder Atmels eröffnet mit dem ESP32-Mikrocontroller
sehr viel mehr Spielraum beim Programmieren, sodaß eigentlich kein Speicher Engpass entsteht
und man nicht zum speicherplatzsparenden Assembler-Programmieren genötigt wird.
Der ESP32-Mikrocontroller ist im Vergleich zu einem Raspi viel kleiner und braucht weniger als ein zehntel Strom und ist deutlich betriebssicherer, denn hier laufen schon einige ESP32 jahrelang ohne Absturz fehlerfrei.
Bei mir sind viele ESP32 im Einsatz. (A25-Brenner, LamdaCheck, CO-Messgerät, EnBW-Stromzähler, PylonBatterieBMS, UVR610-ModbusRTU-MQTT-Gateway, KAMO-FWS, AECONVERS-WR, HOYMILES-WR usw.)
Die hängen alle über WLAN und einer MQTT-Verbindung am Mosquitto-MQTT-Broker und erledigen dezentralen Informationsaustausch und Steuerungsaufgaben.
Mit einem ESP32-Mikrocontroller kann man auch alten Geräten die keine LAN- oder WLAN Schnittstelle haben auf die Sprünge helfen und deren Daten ins Energiemanagement vom Haus integrieren.
Die 3 angehängten .ZIP Dateien mit einem UNZIPPER Programm entpacken.
Anschliessend in ein Visulal-Studio-Code Projekt einlesen, kompilieren und auf den ESP32 hochladen.
Gruß
Jürgen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!