Still working on my provisioning question from the weekend, making some headway but still muddling around so no real updates there yet.
New question:
Does the Blynk LCD widget operate any differently with Blynk2.0? I’ve never used the widget before in either Blynk, but I feel I am doing something incorrect, as nothing displays in the “lcd” of the app.
I was unsure which datastream type to use, assumed String but I have tried all the types and no change in function.
Here is the code, I don’t get any compile errors, and everything else seems to be working fine, just not getting any displayed text in the LCD.
Thanks in advance for any help.
I am operating the LCD in “advanced” mode as I am mainly using it for text display, not unit values.
// Fill-in information for your Blynk connection here
#define BLYNK_TEMPLATE_ID "xxxxxx"
#define BLYNK_DEVICE_NAME "xxxxxx"
#define BLYNK_HEARTBEAT 30
#define BLYNK_FIRMWARE_VERSION "0.2.2"
#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
// 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[] ="xxxxx";
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;
String coopImageURL; //= "https://coopcommandimages.000webhostapp.com/uploads/1.png";
int i = 1;
int ic = 1;
int imageFlip = 1;
char coopRx; // 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,doorLocked);
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;
}
void lcdDisplay (void) {
if (coopRx == 'O') { //If CoopCommand says the door is up
lcd.clear(); //Use it to clear the LCD Widget
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
lcd.clear(); //Use it to clear the LCD Widget
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
lcd.clear(); //Use it to clear the LCD Widget
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
lcd.clear(); //Use it to clear the LCD Widget
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 doorLocked (void) {
if (doorLock) {
Serial.print('D');
doorLock = 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();
}