BLYNK
HOME       📲 GETTING STARTED       📗 DOCS       ❓HELP CENTER       👉 SKETCH BUILDER

Help me to format my code for displaying sensor value to i2c lcd

So, my project is monitoring garden system, im using notify in blynk and led as the output following the sensor value. I want to make, if blynk notify and led is ON, i want the LCD display the notify too, but im confused with the code. The LCD will display notify following the blynk notify and LED, if its not, the LCD will display the sensor value

Im using :
• Nodemcu ESP8266, DHT 22 Sensor, Soil Moisture sensor (im using the A0,VCC, and GND), 2 LED, 1 LCD with I2C
• Smartphone Android
• Blynk server or local server
• Blynk Library version

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>


// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "9wiBL8RDQjWOnIHOaCIn4Szb0Ekw_n2Z"; //Enter the Auth code which was send by Blink

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "GARPU_SIOMAY";  //Enter your WIFI Name
char pass[] = "katasandi";  //Enter your WIFI Password

#define DHTPIN 2          // Digital pin 4
const int sensorpin = A0; //Analog Pin
int greenLed = 14; // Digital Pin 5
int yellowLed = 12; // Digital Pin 6
int sensorvalue=0;
int outputvalue=0;
LiquidCrystal_I2C lcd(0x3F, 16, 2);

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11     // DHT 11
#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21   // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
const int sensorPin = A0;
// This function sends Arduino's up time every second to Virtual Pin.
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
 LiquidCrystal_I2C lcd(0x3F, 16, 2);

  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);  //V5 is for Humidity
  Blynk.virtualWrite(V6, t);  //V6 is for Temperature
  lcd.setCursor(0, 0);
  lcd.print("Humid=");
  lcd.setCursor(10, 0);
  lcd.print(h);
 
  // Pindahkan kursor ke baris berikutnya dan cetak lagi
  lcd.setCursor(0, 1);      
  lcd.print("Temp="); 
  lcd.setCursor(10, 1);      
  lcd.print(t); 
  
  }

void sendSensor2()
{
  int greenLed = 14;
  int yellowLed = 12;
  int sensorvalue=analogRead(sensorpin);
  outputvalue=map(sensorvalue,0,1023,0,100);
  digitalWrite(greenLed, HIGH);
  digitalWrite(yellowLed, LOW);
  if(outputvalue>74)
  {
       Serial.println("Please give me water");
       Serial.print(outputvalue);
       digitalWrite(yellowLed, HIGH);
       digitalWrite(greenLed, LOW);
       Blynk.notify("Please give me water");
       delay(60000); //delay notifikasi
  }
  else if(outputvalue<45)
  {
       Serial.println("Soil is wet enough to water");
       Serial.print(outputvalue);
       digitalWrite(yellowLed, LOW);
       Blynk.notify("Soil is wet enough to water");
       delay(60000);// delay notifikasi

}
Blynk.virtualWrite(V1, outputvalue);
}

void setup()
{
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  Serial.begin(9600); // See the connection status in Serial Monitor
  Blynk.begin(auth, ssid, pass);  
  dht.begin();
  lcd.begin(16,2);

  // Setup a function to be called every second
  timer.setInterval(2000L, sendSensor);
  timer.setInterval(1000L, sendSensor2);
}

void loop()
{ 
  Blynk.run(); // Initiates Blynk
  timer.run(); // Initiates SimpleTimer
}

I’ve tried the code, but i have an error

invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]

Please help

Which line of code is this error occurring?

Also, why are you re-declaring the lcd object once every two seconds…

Pete.

temperatureblynklcd:26:34: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
LiquidCrystal_I2C lcd(0x3F, 16, 2);

I think sir, if i declare again, it would be works. Sorry im bad in code

^So that picture are using NewLiquid Crystal library, then i remove it, i search on manage libraries to find liquid crystal i2c, now im using that, but my LCD doesnt show any words.
the code still same, it done to uploaded it but i have a message

WARNING: library LiquidCrystal_I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp8266 architecture(s).

I don’t understand what this means.

There are dozens of LCD libraries for C++ out there, unless you provide a link to the exact library that you are using, along with details of which version of the library you have installed, it’s impossible to comment.

Pete.

GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays
Im using this library sir with the new version

Well, that library is designed for AVR (Arduino) architecture and therefore is unlikely to support ESP8266 devices.

Is there a reason why you chose that particular library?

Also, I still don’t understand many of your previous comments in the topic, so I’m struggling to understand exactly what you’ve tried and what you haven’t.

Pete.

I just search the library on the manage libraries and i type
'liquid crystal i2c, then i found many library, but that library is on of the top searching, so i download it.


#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "9wiBL8RDQjWOnIHOaCIn4Szb0Ekw_n2Z"; //Enter the Auth code which was send by Blink

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "GARPU_SIOMAY";  //Enter your WIFI Name
char pass[] = "katasandi";  //Enter your WIFI Password

#define DHTPIN 2          // Digital pin 4
const int sensorpin = A0; //Analog Pin
int greenLed = 14; // Digital Pin 5
int yellowLed = 12; // Digital Pin 6
int sensorvalue=0;
int outputvalue=0;


#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321


DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
const int sensorPin = A0;

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Blynk.virtualWrite(V5, h);  //V5 is for Humidity
  Serial.println(h);
  Blynk.virtualWrite(V6, t);  //V6 is for Temperature
  Serial.println(t);
  }

void sendSensor2()
{
  int greenLed = 14;
  int yellowLed = 12;
  int sensorvalue=analogRead(sensorpin);
  outputvalue=map(sensorvalue,0,1023,0,100);
  digitalWrite(greenLed, HIGH);
  digitalWrite(yellowLed, LOW);
  if(outputvalue>74)
  {
       Serial.println("Please give me water");
       Serial.print(outputvalue);
       digitalWrite(yellowLed, HIGH);
       digitalWrite(greenLed, LOW);
       Blynk.notify("Please give me water");
       delay(60000); //delay notifikasi
  }
  else if(outputvalue<45)
  {
       Serial.println("Soil is wet enough to water");
       Serial.print(outputvalue);
       digitalWrite(yellowLed, LOW);
       Blynk.notify("Soil is wet enough to water");
       delay(60000); // notification delay

}
Blynk.virtualWrite(V1, outputvalue);
}

void setup()
{
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  Serial.begin(9600); // See the connection status in Serial Monitor
  Blynk.begin(auth, ssid, pass);  
  dht.begin();
  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
  timer.setInterval(1000L, sendSensor2);
}

void loop()
{ 
  Blynk.run(); // Initiates Blynk
  timer.run(); // Initiates SimpleTimer
}

I want to display my value of sensor to I2C LCD and Blynk apps, so the value is same in LCD and Blynk, but the problem is

  1. LCD showed nothing, maybe because wrong library
  2. I dont know, but this is new problem, so now my NodeMCU sometimes go online, sometimes offline, i dont know why it happens and the value of sensor is different im serial monitor and Blynk apps

There have been problems with the Blynk server in Singapore, which covers Asia. There are several topics about this, but the issue is fixed now.

Pete.