blynkkk / blynk_Issues

6 stars 6 forks source link

LCD Widget Displays Nothing (Android) #194

Closed hms-11 closed 2 years ago

hms-11 commented 2 years ago

Login Email: coreyearl1985@gmail.com Logs sent from: corey@hotchsautoparts.com Issue is in App Android IOS Version 11 Logs sent

Datastream set as Virtual Pin V8 - String

Issue: When using the LCD widget in Advanced mode, nothing displays in app. Attempting to send simple char data ("Door Open", "Door Closed", etc

Related Issues: Sometimes the widget in the app seems to "lose" its datastream, and need to be repointed at the correct stream.

Code:

// Fill-in information for your Blynk connection here

#define BLYNK_TEMPLATE_ID "xxxxx"
#define BLYNK_DEVICE_NAME "xxxxx"
#define BLYNK_HEARTBEAT 30
#define BLYNK_FIRMWARE_VERSION        "0.2.3"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG

// Pin Defines

#define PHOTOCLICK V5
#define LED 4
#define DOORUP V7
#define DOORDOWN V6
#define DOORLOCK V9
#define DOORLOCKUPPIN V10

// Uncomment your board, or configure a custom board in Settings.h
//define USE_WROVER_BOARD

// Libraries

#include "BlynkEdgent.h"
#include "esp_camera.h"
#include "Arduino.h"
#include <ESP32_FTPClient.h>
#include "soc/soc.h"           // Disable brownout problems
#include "soc/rtc_cntl_reg.h"  // Disable brownout problems

// Blynkv LED setup

WidgetLED led1(V1);
WidgetLED led2(V2);
WidgetLED led3(V3);
WidgetLED led4(V4);
WidgetLCD lcd(V8);

// Pin definition for CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

//FTP server information and setup

char ftp_server[] = "files.000webhost.com";
char ftp_user[] = "xxxxx";
char ftp_pass[] ="xxxxxx";
ESP32_FTPClient ftp (ftp_server,ftp_user,ftp_pass, 5000, 2); // you can pass a FTP timeout and debbug mode on the last 2 arguments

// Variables 

bool takePhoto = false; 
bool loading = false;
bool newImage = false;
bool newDisplay = false;
bool doorLock = false;
bool doorLockUp = false;
String coopImageURL; //= "https://coopcommandimages.000webhostapp.com/uploads/1.png";
int i = 1;
int ic = 1;
int imageFlip = 1;
char coopRx; // Info received from CoopCommand
char lastCoopRx; // last info received from CoopCommand
bool newDataRx = false; //has CoopCam received new data from CoopCommand

void setup() {

  // Startup Serial, Blynk, Blynk Timers and initial imamge. Disable brownout detector
  Serial.begin(115200);
  delay(50);
  BlynkEdgent.begin();
  pinMode(LED, OUTPUT);
  timer.setInterval(500,coopCom);
  timer.setInterval(150,loadingImage);
  timer.setInterval(500,doorLockedDown);
  timer.setInterval(500,doorLockedUp);
  timer.setInterval(500,lcdDisplay);
  Blynk.virtualWrite(V0, 3); 

  //disable brownout detector
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); 

  // Configure the Camera

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG; 

// Image settings depending on PSRAM availability

  if(psramFound()){
    config.frame_size = FRAMESIZE_SVGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 20;
    config.fb_count = 2;
  } 
  else {
    config.frame_size = FRAMESIZE_VGA;
    config.jpeg_quality = 20;
    config.fb_count = 1;
  }
  // Initialize Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    return;
  }

}

// Changes image in Blynk app depending on camera state
void loadingImage( void ) {
if (loading) { 
  Blynk.virtualWrite(V0, (i+2));
  if (i <= 9) {
    i ++;
  }
  else if (i > 9) {
    i = 1;
  }
}
else if (!loading) {
  if (ic == 1) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic5.jpg";
  }
  else if (ic == 2) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic6.jpg";
  }
  else if (ic == 3) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic7.jpg";
  }
  if (newImage) {
  Blynk.setProperty(V0, "url", (ic-1), coopImageURL);
  Blynk.virtualWrite(V0, (ic-1));
  newImage = false;       
}
i = 1; 
}
}

// Sends a new image to the FTP server 

void sendPhoto ( void ) {
   if (takePhoto) {

   camera_fb_t * fb = NULL;

  // Take Picture with Camera
  fb = esp_camera_fb_get(); 
  digitalWrite(LED, LOW); 
  delay (50);
  if(!fb) {
    ESP.restart();
    return;
  }

if (imageFlip == 1) {
  ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic5.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 2;
  ic = 1;
  esp_camera_fb_return(fb);
    Serial.print('N');
   }
else if (imageFlip == 2) {
   ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic6.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 3;
  ic = 2;
  esp_camera_fb_return(fb);
  Serial.print('N');
   }
else if (imageFlip == 3) {
   ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic7.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 1;
  ic = 3;
  esp_camera_fb_return(fb);
  Serial.print('N');
   }
}
}

// Serial communication with CoopCommand board

void coopCom ( void ) {

  if (Serial.available() > 0) {
    coopRx = Serial.read();
    newDataRx = true;
  }
  if (newDataRx == true) {
    if (coopRx == 'O') { //If CoopCommand says the door is up
      led1.on();
      led2.off();
      led3.off();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'S') { //If CoopCommand says the door is down

      led1.off();
      led2.on();
      led3.off();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'U') { //If CoopCommand says the door is opening
      led1.off();
      led2.off();
      led3.on();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'D') { //If CoopCommand says the door is closing
      led1.off();
      led2.off();
      led3.off();
      led4.on();
      newDataRx = false;
    }
  }
}

// Put the door up

BLYNK_WRITE(DOORUP) {
Serial.print('U');
}

// Put the door down

BLYNK_WRITE(DOORDOWN) {
Serial.print('D');
}

BLYNK_WRITE(DOORLOCK) {
doorLock = true;
}

BLYNK_WRITE(DOORLOCKUPPIN) {
doorLockUp = true;
}

void lcdDisplay (void) {
    if (coopRx == 'O') { //If CoopCommand says the door is up
      if (lastCoopRx != coopRx) {
        lcd.clear(); //Use it to clear the LCD Widget
        lastCoopRx = coopRx;
      }
      lcd.print(4, 0, "COOP DOOR:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      lcd.print(4, 1, "OPEN"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
    if (coopRx == 'S') { //If CoopCommand says the door is down
      if (lastCoopRx != coopRx) {
        lcd.clear(); //Use it to clear the LCD Widget
        lastCoopRx = coopRx;
      }
      lcd.print(4, 0, "COOP DOOR:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      lcd.print(4, 1, "CLOSED"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
    if (coopRx == 'U') { //If CoopCommand says the door is opening
      if (lastCoopRx != coopRx) {
        lcd.clear(); //Use it to clear the LCD Widget
        lastCoopRx = coopRx;
      }
      lcd.print(4, 0, "COOP DOOR:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      lcd.print(4, 1, "OPENING"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
    if (coopRx == 'D') { //If CoopCommand says the door is closing
      if (lastCoopRx != coopRx) {
        lcd.clear(); //Use it to clear the LCD Widget
        lastCoopRx = coopRx;
      }
      lcd.print(4, 0, "COOP DOOR:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      lcd.print(4, 1, "CLOSING"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}
}

void doorLockedDown (void) {
  if (doorLock) {
     Serial.print('D');
     doorLock = false;
  }
}

void doorLockedUp (void) {
  if (doorLockUp) {
     Serial.print('U');
     doorLockUp = false;
  }
}

// Take a photo and display it in the app

BLYNK_WRITE(V5) {
digitalWrite(LED, HIGH);
Serial.print('L'); 
takePhoto = true;
loading = true;
newImage = true;
loadingImage();
timer.setTimeout(250, sendPhoto);
timer.setTimeout(3000, []()
{
  loading = false;
  loadingImage();
});
}

void loop() {
  BlynkEdgent.run();
}
hms-11 commented 2 years ago

Here is a screenshot from the app, screen appears blank. https://photos.app.goo.gl/iUZ3L3SQeTYAT9mh9

alexkipar commented 2 years ago

@hms-11 I've checked your logs: it seems that LCD updates from the sketch are updating datastream with V8 pin, while the widget has as a "LCD Test" datastream (V1)

hms-11 commented 2 years ago

@alexkipar Sorry, must have sent the wrong logs. Just resent the logs with the appropriate widget settings.

alexkipar commented 2 years ago

@hms-11 got it; I hope this week to release a new bugfix version with this fix.

hms-11 commented 2 years ago

@alexkipar Awesome, thanks Alex. Tag me when you release it and I'll run some tests right away.

hms-11 commented 2 years ago

@alexkipar, just wanted to let you know the update you just released seems to have fixed this issue.

Thanks!