Go Down

Topic: Probleme mit Bord wechseln ESP8266 - uno (Read 252 times) previous topic - next topic

Bodo-Baller

Halli Hallo

Mein Name ist Bodo, komme aus dem schönen Stadt Kassel  :)

Ich habe da mal eine Frage.
Ich habe ein Programm was auf meinem UNO läuft.
Jetzt möchte ich dieses Programm auf einem ESP 8266 laufen lassen.
Aber ich bekomme das einfach nicht zum laufen, weiß aber nicht was ich falsch mache. :smiley-confuse:

Hier das Programm was auf dem UNO läuft:




#include "U8glib.h"
#include <DHT.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

int posicao = 0;
int temp_max = 30;

#define pino_aumenta 5
#define pino_diminui 4
#define pino_rele 7
#define pino_DHT A0
#define DHTTYPE DHT11

DHT dht(pino_DHT, DHTTYPE);

int temperatura;
int aumenta, diminui;

unsigned long previousMillis = 0;
//Intervalo de medicao temperatura
const long interval = 10000;

void draw()
{
//Retangulo temperatura atual
u8g.drawRFrame(0, 17, 84, 46, 2);
u8g.setFont(u8g_font_profont29 );// u8g_font_fub20
//Atualiza a temperatura no display
u8g.setPrintPos(9, 50);
u8g.print(temperatura);
//Circulo grau
u8g.drawCircle(51, 33, 3);
u8g.drawStr( 56, 50, "C");

//Box superior amarelo
u8g.setFont(u8g_font_tpss);
u8g.drawRBox(0, 0, 128, 18, 0);
u8g.setColorIndex(0);
u8g.drawStr( 5, 11, "Temperature Controller");
u8g.setColorIndex(1);

//box temperatura maxima
u8g.drawRFrame(86, 17, 42, 46, 2);
if (temp_max <= temperatura)
{
//Temperature greater than temp. SET
u8g.drawRBox(86, 17, 42, 22, 2);
u8g.setColorIndex(0);
u8g.drawStr(96, 33, "SET");
u8g.setColorIndex(1);
//Aciona saida do rele
digitalWrite(pino_rele, LOW);

}
else
{
//Temperature lower than temp. SET
u8g.drawRFrame(86, 17, 42, 22, 2);
u8g.drawStr(96, 33, "SET");
//Desliga saida do rele
digitalWrite(pino_rele, HIGH);
}
//Atualiza na tela o valor da temp. maxima
u8g.setPrintPos(100, 55);
u8g.print(temp_max);
u8g.drawCircle(120, 47, 2);
u8g.setColorIndex(1);
}

void setup(void)
{
Serial.begin(9600);
pinMode(pino_rele, OUTPUT);
pinMode(pino_aumenta, INPUT);
pinMode(pino_diminui, INPUT);
dht.begin();
}

void loop(void)
{
unsigned long currentMillis = millis();
//Timer para ler o valor da temperatura
if (currentMillis - previousMillis >= interval)
{
temperatura = dht.readTemperature();
previousMillis = currentMillis;
}

//Testa botao aumenta temperatura
aumenta = digitalRead(pino_aumenta);
if (aumenta == 1)
{temp_max++;}
while (digitalRead(pino_aumenta) == 1)
{delay(100);}

//testa botao diminui temperatura
diminui = digitalRead(pino_diminui);
if (diminui == 1)
{temp_max--;}
while (digitalRead(pino_diminui) == 1)
{delay(100);}

u8g.firstPage();
// Chama a rotina de desenho na tela
do
{
draw();
}
while ( u8g.nextPage() );
delay(50);
}


Ich habe dann die eisten Zeilen geändert, für die Anpassung zu ESP 8266


#include "U8glib.h"
#include <DHT.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

int posicao = 0;
int temp_max = 22;
int d2 = 4;
int d1 = 5;
int d3 = 0;
int d7 = 13;
int d2_status = 0;
int d1_status = 0;
int d3_status = 0;
int d7_status = 0;


#define pino_aumenta d1
#define pino_diminui d2
#define pino_rele d7
#define pino_DHT d3
#define DHTTYPE DHT11

DHT dht(pino_DHT, DHTTYPE);

Warum es nicht geht kann ich nicht sagen, deswegen suche ich hier HILFE


Ich möchte das Programm später mit Blynk laufen lassen.

Möchte das es so geht das wenn an 5 Punkten eine eingestellte Temperatur erreicht ist, das dann ein anderer ESP 8266 einen Ausgang schaltet.

Vielleicht kann mir da ja BITTE jemand helfen.
Gruß Bodo und DANKE im Voraus

Derfips

komme aus dem schönen Stadt Kassel  :)

Ansichtssache!!


Der Sketch ist ohne Codetags nicht lesbar, also verwende diese!


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

HotSystems

#2
Dec 08, 2019, 06:13 pm Last Edit: Dec 08, 2019, 06:24 pm by HotSystems
Und mein Tipp:
Verwende beim ESP die GPIO-Bezeichnung, nicht die Dxx, das kann so schief gehen.

Und gibt es eine Fehlermeldung beim Ausführen des Sketches auf dem ESP ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Bodo-Baller

Hallo

Meine Vermutung ist es das die #include "U8glib.h" nicht für den ESP 8266 geeignet ist ( falsche Speicher Zuordnung ) kann das der Grund sein ?

Gruß Bodo

Derfips

Und mein Tipp:
Verwende beim ESP die GPIO-Bezeichnung, nicht die Dxx, das kann so schief gehen.

Wenn das richtige Board ausgewählt ist gibt es keinerlei Probleme!


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

Derfips

#5
Dec 08, 2019, 06:26 pm Last Edit: Dec 08, 2019, 06:26 pm by Derfips
Hallo

Meine Vermutung ist es das die #include "U8glib.h" nicht für den ESP 8266 geeignet ist ( falsche Speicher Zuordnung ) kann das der Grund sein ?

Gruß Bodo
Sketch in "</>" ? ? ? ?



Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

HotSystems

Wenn das richtige Board ausgewählt ist gibt es keinerlei Probleme!


Gruß Fips
Gebe ich dir Recht, aber für uns ist es einfacher, da meist das richtige Board nicht bekannt ist.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HotSystems

#7
Dec 08, 2019, 06:30 pm Last Edit: Dec 08, 2019, 06:31 pm by HotSystems
Hallo,
setze deinen Sketch in Code-Tags.
Dann ist dieser auch lesbar.

Wie das geht, stehthier.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Bodo-Baller

Code: [Select]
#include "U8glib.h"
#include <DHT.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

int posicao = 0;
int temp_max = 30;

#define pino_aumenta 5
#define pino_diminui 4
#define pino_rele 7
#define pino_DHT A0
#define DHTTYPE DHT11

DHT dht(pino_DHT, DHTTYPE);

int temperatura;
int aumenta, diminui;

unsigned long previousMillis = 0;
//Intervalo de medicao temperatura
const long interval = 10000;

void draw()
{
//Retangulo temperatura atual
u8g.drawRFrame(0, 17, 84, 46, 2);
u8g.setFont(u8g_font_profont29 );// u8g_font_fub20
//Atualiza a temperatura no display
u8g.setPrintPos(9, 50);
u8g.print(temperatura);
//Circulo grau
u8g.drawCircle(51, 33, 3);
u8g.drawStr( 56, 50, "C");

//Box superior amarelo
u8g.setFont(u8g_font_tpss);
u8g.drawRBox(0, 0, 128, 18, 0);
u8g.setColorIndex(0);
u8g.drawStr( 5, 11, "Temperature Controller");
u8g.setColorIndex(1);

//box temperatura maxima
u8g.drawRFrame(86, 17, 42, 46, 2);
if (temp_max <= temperatura)
{
//Temperature greater than temp. SET
u8g.drawRBox(86, 17, 42, 22, 2);
u8g.setColorIndex(0);
u8g.drawStr(96, 33, "SET");
u8g.setColorIndex(1);
//Aciona saida do rele
digitalWrite(pino_rele, LOW);

}
else
{
//Temperature lower than temp. SET
u8g.drawRFrame(86, 17, 42, 22, 2);
u8g.drawStr(96, 33, "SET");
//Desliga saida do rele
digitalWrite(pino_rele, HIGH);
}
//Atualiza na tela o valor da temp. maxima
u8g.setPrintPos(100, 55);
u8g.print(temp_max);
u8g.drawCircle(120, 47, 2);
u8g.setColorIndex(1);
}

void setup(void)
{
Serial.begin(9600);
pinMode(pino_rele, OUTPUT);
pinMode(pino_aumenta, INPUT);
pinMode(pino_diminui, INPUT);
dht.begin();
}

void loop(void)
{
unsigned long currentMillis = millis();
//Timer para ler o valor da temperatura
if (currentMillis - previousMillis >= interval)
{
temperatura = dht.readTemperature();
previousMillis = currentMillis;
}

//Testa botao aumenta temperatura
aumenta = digitalRead(pino_aumenta);
if (aumenta == 1)
{temp_max++;}
while (digitalRead(pino_aumenta) == 1)
{delay(100);}

//testa botao diminui temperatura
diminui = digitalRead(pino_diminui);
if (diminui == 1)
{temp_max--;}
while (digitalRead(pino_diminui) == 1)
{delay(100);}

u8g.firstPage();
// Chama a rotina de desenho na tela
do
{
draw();
}
while ( u8g.nextPage() );
delay(50);
}

Derfips

Aber ich bekomme das einfach nicht zum laufen, weiß aber nicht was ich falsch mache.
Fehlermeldung der IDE?


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

Bodo-Baller

Fehlermeldung gibt es so keine, lässt sich auch aufspielen.

Nur der Hinweis, wo mit ich aber nichts anfangen kann.

 IROM   : 239408          - code in flash         (default or ICACHE_FLASH_ATTR)
IRAM   : 27132   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...)
DATA   : 1264  )         - initialized variables (global, static) in RAM/HEAP
RODATA : 13156 ) / 81920 - constants             (global, static) in RAM/HEAP
BSS    : 25208 )         - zeroed variables      (global, static) in RAM/HEAP
Der Sketch verwendet 280960 Bytes (29%) des Programmspeicherplatzes. Das Maximum sind 958448 Bytes.
Globale Variablen verwenden 39628 Bytes (48%) des dynamischen Speichers, 42292 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.

Derfips

Welchen Esp8266 verwendest du?


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

Bodo-Baller


Derfips

NodeMcu:

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t RX   = 3;
static const uint8_t TX   = 1;

Dein Programm:

#define pino_aumenta 5
#define pino_diminui 4
#define pino_rele 7
#define pino_DHT A0

#Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

Tommy56

Die u8glib ist ja schon etwas in die Jahre gekommen und wird nicht weiter entwickelt. Sie hat auch keine ESP-Unterstützung. Du solltest zum Nachfolger u8glib2 wechseln, die kann ESP8266 und ESP32. Im Wicki gibt es auch Hinweise zur Migration.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up