Problem mit Lichtsensor und Blynk

Hallo zusammen,
ich habe einen ESP32 DevKit C V4 mit Blynk am laufen. Funktioniert problemlos.
Nun möchte ich einen Ausgang über einen Lichtsensor (AZ Delivery KY-018) mit ansteuern.
Das auslesen des Sensors als alleiniger Sketch funzt richtig. Es ist lediglich ein analogRead(pin).
Wenn ich diese aber im Sketch mit Blynk benutze kommt als Wert immer nur 0 heraus.
Egal welchen Pin ich als analog eingang benutze.
Hat jemand eine Ahnung warum das ohne blynk klappt aber mit blynk keine werte giebt?
Ich hoffe das ich hier richtig bin.
Danke schonmal
Jens

Nein, ohne Script muss man zu viel Raten.

Aber als Tipp. Ein Analog-Pin liefert keine 0 + 1 sondern einen Wert. Diesen Wert musst du analysieren. Was heißt du musst auf den Wert reagieren.

Gruß

Pucki

Hallo
Ich vermute es fehlt was.
Bau dir ein paar serial.println() ein damit du etwas sehen kannst

Du hast das Ergebniss von analogRead(Pin) auf eine globale Variable gelegt.
messwert = analogRead(Pin)
Dann kannst du doch an beliebigen stellen mit Serial.print(messwert) das anzeigen lassen

danke für eure schnelle reaktion.
der selbe pin im sketch ohne blynk liefert werte von 0 bis 4000.
mit blynk ist er 0. den analogread(4) lege ich im loop auf sensorwert.
ohne blynk klappt das richtig.
auch andere pins liefern eine 0 mit blynk.
den sketch kann ich euch gerne geben. ( wie geht das hier?? sorry)

In der IDE -> Bearbeiten -> Für Forum kopieren, danach hier Einfügen.

bis 4000 !?!?

Auf das Script bin ich neugierig.

Gruß

Pucki

Schreibt Er doch das ohne Blynk funktioniert.
Ein digitaler Pin gibt 0 oder 1 aus, keinen 0 + 1, neue Form vom Platzhalter ?

du nervst.

ohne Gruß

Pucki

Nur zu Info ESP32 kann 12Bit.
Resolution of ESP32 ADC raw results under Single Read mode is 12-bit .
PWM auch bis 4900 wen mich nicht irre, bin jetzt zu Faul genaue angaben aussuchen.
Hofe das jetzt nicht nerve :wink:

int sensorWert = 0;             // die Variabel "sensorWert" wird erstellt

void setup() {
  Serial.begin(9600);           // die serielle Kommunikation wird mit 9600 bits pro Sekunde inizialisiert
}

void loop() {
  sensorWert = analogRead(4);  // der Wert beim Analogen Pin A2 wird ausgelesen
  Serial.print ("Lichtwert: ");  
  Serial.println(sensorWert);  // der eingelesene Wert wird am seriellen Monitor ausgegeben.
  if(sensorWert>700){
    Serial.println("Wert sagt dass es dunkel ist");
  }
  delay(1000);                     // ein möglichst kurzes Delay, damit man sehr viele Werte bekomt
}

das ist das ohne blynk. @puck007 : Das ergiebt werte von 4095(total dunkel) bis 0 (total hell).
in die sonne gehalten ist der wert 16.

und noch etwas,,,, bitte nicht streiten.
soll ich blmein blynk noch bereitstellen für euch??

Nö. Das war man eine Sinnvolle mir nicht bekannte Info. Ich habe bisher analoge Daten nur mit einen Nano abgefragt.

Gruß

Pucki

Aber unbedingt.

Weil ich kann in den Script kein Fehler finden.

Gruß

Pucki

/*************************************************************

  This is a simple demo of sending and receiving some data.
  Be sure to check out other examples!
 *************************************************************/

/* Fill-in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID "TMPL4dZ0O9w4A"
#define BLYNK_TEMPLATE_NAME "Beleuchtung im Garten"
#define BLYNK_AUTH_TOKEN "9xgX1U5PA6pmVY0b6tIn9YX7LPtmE_Yu"

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <WiFi.h>

#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "WLAN";
char pass[] = "Pass";

BlynkTimer timer;
// Define the Relay pin and related variables
const int Terrassee = 23;
const int Brunnen = 21;
const int Seite = 22;
const int Eingang = 19;
const int Reserve = 18;
int switchStatus = 0;


// This function is called every time the device is connected to the Blynk.Cloud
/*BLYNK_CONNECTED()
{
  // Change Web Link Button message to "Congratulations!"
  Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
  Blynk.setProperty(V3, "onImageUrl",  "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
  Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}
*/
// This function sends Arduino's uptime every second to Virtual Pin 2.
void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V2, millis() / 1000);

}


void setup()
{
  pinMode(Terrassee, OUTPUT);
  pinMode(Brunnen, OUTPUT);
  pinMode(Seite, OUTPUT);
  pinMode(Eingang, OUTPUT);
  pinMode(Reserve, OUTPUT);
  // Debug console
  Serial.begin(115200);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  // You can also specify server:
  //Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Setup a function to be called every second
  timer.setInterval(1000L, myTimerEvent);


}

void loop()
{
  Blynk.run();
  timer.run();
  
}
// This function is called every time the device is connected to the Blynk.Cloud
BLYNK_CONNECTED() 
{
  Blynk.syncVirtual(V0); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V5); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V6); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V7); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V8); // updates Virtual Pin V0 to the latest stored value on the server .
}
// This function is called every time the Virtual Pin 0 state changes

BLYNK_WRITE(V0) 
{
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Terrasse wurde eingeschaltet.");
    digitalWrite(Terrassee, HIGH);
  } else 
  {
    Serial.println("Der Schalter Terrasse wurde ausgeschaltet.");
    digitalWrite(Terrassee, LOW);
  }
}

BLYNK_WRITE(V5) 
{
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Brunnen wurde eingeschaltet.");
    digitalWrite(Brunnen, HIGH);
  } else 
  {
    Serial.println("Der Schalter Brunnen wurde ausgeschaltet.");
    digitalWrite(Brunnen, LOW);
  }
}

BLYNK_WRITE(V6) 
{
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Seitenbeleuchtung wurde eingeschaltet.");
    digitalWrite(Seite, HIGH);
  } else 
  {
    Serial.println("Der Schalter Seite wurde ausgeschaltet.");
    digitalWrite(Seite, LOW);
  }
}
BLYNK_WRITE(V7) 
{
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Eingangsbeleuchtung wurde eingeschaltet.");
    digitalWrite(Eingang, HIGH);
  } else 
  {
    Serial.println("Der Schalter Eingang wurde ausgeschaltet.");
    digitalWrite(Eingang, LOW);
  }
}

BLYNK_WRITE(V8) 
{
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Reserve kann nicht eingeschaltet werden.");
    digitalWrite(Reserve, LOW);
  } else 
  {
    Serial.println("Der Schalter Reserve kann nicht ausgeschaltet werden.");
    digitalWrite(Eingang, LOW);
  }
}

Wenn ich hier den sensor einbringe, funktioniert das nicht

Werst Du schon bei Wolle? habe nur überflogen :wink:

Hat auch Beispiel mit Poti also Analog .

danke fony für den Tip. Von Wolle habe ich den blynk sketch. Aber das mit dem Poti muss ich mir ansehen. wäre ja quasi analog mit dabei.
nur heute nicht mehr. sonst kriege ich ärger mit meiner Chefin :slight_smile:

Hallo,
wäre jetzt echt hilfreich wenn Du uns den skech zeigst der nicht funktioniert, bzw die Stelle angibst wo Du den Analogeingang einliesst.

mach das doch mal driekt im loop und die def von sensorwert nicht vergessen :wink:

Guten Morgen
ich habe hier mal den sketch. er funktioniert . nur der lichtwert ist immer 0.

/*************************************************************

  This is a simple demo of sending and receiving some data.
  Be sure to check out other examples!
 *************************************************************/

// Fill-in information from Blynk Device Info here
#define BLYNK_TEMPLATE_ID "TMPL4dZ0O9w4A"
#define BLYNK_TEMPLATE_NAME "Beleuchtung im Garten"
#define BLYNK_AUTH_TOKEN "9xgX1U5PA6pmVY0b6tIn9YX7LPtmE_Yu"
#include <ArduinoOTA.h>
//Comment this out to disable prints and save space
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <time.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Your WiFi credentials.
//Set password to "" for open networks.
char ssid[] = "TP-OTTER";
char pass[] = "OTTERSWLAN";
// Zeit
const char* NTP_SERVER = "de.pool.ntp.org";
const char* TZ_INFO = "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00";
int WZ = 0;  // Winterzeit
char wochentage[7][12] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
String monat[12] = { "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" };

time_t now;
tm tm;
BlynkTimer timer;
int potValue = 10;  // die Variabel "sensorWert" wird erstellt

// Define the Relay pin and related variables
const int Terrassee = 23;
const int Brunnen = 21;
const int Seite = 22;
const int Eingang = 4;
const int EinVorn = 19;
const int Reserve = 18;
int switchStatus = 0;


// This function is called every time the device is connected to the Blynk.Cloud
BLYNK_CONNECTED() {
  // Change Web Link Button message to "Congratulations!"
  Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
  Blynk.setProperty(V3, "onImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
  Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}

// This function sends Arduino's uptime every second to Virtual Pin 2.
void myTimerEvent() {
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V2, millis() / 1000);
}


void setup() {
  Serial.begin(115200);

  WiFi.hostname("TestOTA");
  pinMode(Terrassee, OUTPUT);
  pinMode(Brunnen, OUTPUT);
  pinMode(Seite, OUTPUT);
  pinMode(15, INPUT);
  pinMode(EinVorn, OUTPUT);
  pinMode(Reserve, OUTPUT);
  // Debug console
  Serial.begin(115200);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  // You can also specify server:
  //Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Zeit
  configTime(0, 0, NTP_SERVER);
  setenv("TZ", TZ_INFO, 1);

  // Setup a function to be called every 5 second
  timer.setInterval(5000L, myTimerEvent);
  ArduinoOTA.setHostname("TestOTA");
  ArduinoOTA.setPassword("123");
  ArduinoOTA.begin();
}

void loop() {
  delay(500);
  //sensorWert = analogRead(4);  // der Wert beim Analogen Pin 4 wird ausgelesen
  potValue = analogRead(4);
  Serial.print("Lichtwert: ");
  Serial.println(potValue);  // der eingelesene Wert wird am seriellen Monitor ausgegeben.

  if (potValue > 1500)  // Lichtsensor Wert
  {
    Serial.println("Wert sagt dass es dunkel ist");
    Serial.println("Der Schalter Eingangsbeleuchtung wurde eingeschaltet.");
    ///digitalWrite(EinVorn, HIGH);
  } else {
    Serial.println("Der Schalter Eingang wurde ausgeschaltet.");
    //digitalWrite(EinVorn, LOW);
  }

  ArduinoOTA.handle();
  Blynk.run();
  timer.run();

  // Zeit
  time(&now);              // Liest die aktuelle Zeit
  localtime_r(&now, &tm);  // Beschreibt tm mit der aktuelle Zeit
                           // Serial.printf("%02d-%02d-%04d \t", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900);



  //Serial.printf("%02d %s %04d \t", tm.tm_mday, monat[tm.tm_mon], tm.tm_year + 1900);  // Monat ausgeschrieben


  Serial.print(wochentage[tm.tm_wday]);
  Serial.print(tm.tm_wday);  // Wochentag als Zahl, 0 = Sonntag    Serial.print("\tder ");
  Serial.print(tm.tm_mday);
  Serial.print(" " + monat[tm.tm_mon] + " ");
  Serial.print(tm.tm_year + 1900);

  Serial.printf(" \tUhrzeit: %02d:%02d:%02d \n", tm.tm_hour, tm.tm_min, tm.tm_sec);

  //Abfrage ob es ein Wintermonat ist ---> Monatsrechnung ist dabei von 0 (Jan) bis 11 (Dez)


  if (tm.tm_mon >= 10 || tm.tm_mon <= 1) {
    if (tm.tm_hour >= 19 && tm.tm_hour <= 23) {
      WZ = 1;
      //Serial.printf("Es ist  Winterzeit : %02d \n", tm.tm_hour);
    }

    else {
      WZ = 0;
      //Serial.printf("Es ist keine Winterzeit : %02d \n", tm.tm_hour);
    }
  }


  if (WZ == 1) {
    //Serial.printf("Monat : %02d \n", tm.tm_mon);
    //Serial.printf("Stunden : %02d \n", tm.tm_hour);
    //Serial.print(WZ) ;
    digitalWrite(EinVorn, HIGH);
  } else {
    digitalWrite(EinVorn, LOW);
    // Serial.print("\n Schalter ist aus ");
  }

  delay(5000);
}
// This function is called every time the device is connected to the Blynk.Cloud
/*
BLYNK_CONNECTED()
{
  Blynk.syncVirtual(V0); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V5); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V6); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V7); // updates Virtual Pin V0 to the latest stored value on the server.
  Blynk.syncVirtual(V8); // updates Virtual Pin V0 to the latest stored value on the server .
}
*/
// This function is called every time the Virtual Pin 0 state changes

BLYNK_WRITE(V0) {
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Terrasse wurde eingeschaltet.");
    digitalWrite(Terrassee, HIGH);
  } else {
    Serial.println("Der Schalter Terrasse wurde ausgeschaltet.");
    digitalWrite(Terrassee, LOW);
  }
}

BLYNK_WRITE(V5) {
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Brunnen wurde eingeschaltet.");
    digitalWrite(Brunnen, HIGH);
  } else {
    Serial.println("Der Schalter Brunnen wurde ausgeschaltet.");
    digitalWrite(Brunnen, LOW);
  }
}

BLYNK_WRITE(V6) {
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Seitenbeleuchtung wurde eingeschaltet.");
    digitalWrite(Seite, HIGH);
  } else {
    Serial.println("Der Schalter Seite wurde ausgeschaltet.");
    digitalWrite(Seite, LOW);
  }
}

BLYNK_WRITE(V7) {
}

BLYNK_WRITE(V8) {
  switchStatus = param.asInt();  // Set incoming value from pin V0 to a variable

  if (switchStatus == 1) {

    Serial.println("Der Schalter Reserve kann nicht eingeschaltet werden.");
    digitalWrite(Reserve, LOW);
  } else {
    Serial.println("Der Schalter Reserve kann nicht ausgeschaltet werden.");
    digitalWrite(EinVorn, LOW);
  }
}

Ist auch mit OTA.

Hallo

Ich denke du nutzt den falschen Pin

Leses mal

Lass die den Wert im Seriellen Monitor anzeigen. Mit Text.

Dann siehst du OB und wie oft der den Sensor abgefragt wird.

Du musst dann einfach an den passenden Stellen dir den Wert wieder anzeigen lassen. Schreibe dazu im Text wo die Stelle ist. So kannst du jeden Wert Debuggen und verfolgen.

Auf diese Weise löst du dein Problem und lernst Debuggen :wink:
Und Debuggen ist das wichtigste was du können musst.

Ach ja, ich würde eine so wichtige Variable GLOBAL setzen. Sonst ist Sensorwert nur in der
void loop() gültig. Und woanders ist der Logoweis 0.

Gruß

Pucki