ใส่โค้ดส่งค่าไป ที่ NETPIE แต่ Error มือใหม่มากๆครับ

ก่อนจะใส่ให้ส่งค่าเข้า NETPIE ทำงานได้ปกติกติครับ ผมจะทำการชี้บอกน่ะครับว่าเพิ่มโค้ดอะไรมามั้ง
ตรงที่มี (=========) โค้ดด้านในคือ ที่เพิ่มมาใหม่

#include <Wire.h>                
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DS1302.h>
DS1302 rtc(D8, D5, D3);
#include <TridentTD_LineNotify.h>
BlynkTimer timer;
#define BLYNK_PRINT Serial
//เชื่อมต่อ Wifi pass line และtoken blynk
#define LINE_TOKEN  "OTKGp3dyfjT0LnxHmkFPcVuaYm9MyPWaMC0BEtz4pZx"
char auth[] = "8iPbvgBv7NRgi-toCzn4mFnw2ZwxDNbD";  //token
char SSID[] = "GrandATS-Wifi_2.4G"; 
char PASS[] = "atsserver137"; 

//ส่งกราฟอุณหภูมิย้นหลัง
//=====================================================================
#include <MicroGear.h>
#define APPID "DHT22TIMP"
#define KEY "lRR3MaPVxu37upB"
#define SECRET "xEIiymoqXIMuQnQPAs68qva9l"

#define ALIAS "piedht"

#define FEEDID "SensorDHT22Wifi"
#define INTERVAL 15000 
#define T_INCREMENT 200 
#define T_RECONNECT 5000 
#define BAUD_RATE 115200 
#define MAX_TEMP 100 
#define MAX_HUMID 100

WiFiClient client;

char str[32];

int humid;
int temp;

MicroGear microgear(client);
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  Serial.print("Incoming message -- >"); msg[msglen] = '\0';
  Serial.println((char *)msg);
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.setAlias(ALIAS);
}
//=====================================================================//กำหนดขาและรุ่น DHT
#define DHTPIN D4
#define DHTTYPE DHT22

//กำหนดขา relay
#define relay1 D6
#define relay2 D7

byte auto_relay = 0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 2, 16);

#define BLYNK_Green     "#23C48E"
#define BLYNK_Blue      "#04C0F8"
#define BLYNK_Red       "#D3435C"
#define BLYNK_White     "#ffffff"

#define INTERVAL_MESSAGE1 3600000    //กำหนดหน่วงเวลา
unsigned long time_1 = 0;            //กำหนดเวลาให้ทำซํ้า
         
float temp_auto=0,humi_auto=0;

//กำหนดขา จอ LCD

WidgetLED led1(V10);
WidgetLED led2(V11);

BLYNK_CONNECTED() {
  Blynk.syncAll();
} 
BLYNK_WRITE(V0)  //กำหนดปุ่มในแอป 
{
  if (param.asInt() == 1&&auto_relay==0) {
    digitalWrite(relay1, !digitalRead(relay1));       //เปิดปิด Relay1 ในโหมด Manual
    if (digitalRead(relay1) == LOW) {
      led1.on();
    }
    else {
      led1.off();
    }
  }
}

BLYNK_WRITE(V9)   //กำหนดปุ่มในแอป
{
  auto_relay = param.asInt();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  led1.off();
  led2.off();
}
BLYNK_WRITE(V5)   //กำหนดปุ่มในแอป
{
  temp_auto = param.asInt();                //กำหนดค่าอุณหภูมิจากBlynk
}
BLYNK_WRITE(V6)  //กำหนดปุ่มในแอป
{
  humi_auto = param.asInt();                //กำหนดค่าความชื้นจากBlynk
}
BLYNK_WRITE(V7)  //กำหนดปุ่มในแอป                      
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);             //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}  
BLYNK_WRITE(V8)  //กำหนดปุ่มในแอป
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);          //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}
void setup() {
//=====================================================================
  {
  dht.begin();
microgear.on(MESSAGE, onMsghandler);
  microgear.on(CONNECTED, onConnected);
Serial.begin(115200);
  Serial.println("Starting...");
if (WiFi.begin(SSID, PASS)) {
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  }
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY, SECRET, ALIAS);
microgear.connect(APPID);
}
//=====================================================================
 { // กำหนดแสดงขึ้นจอ LCD
  lcd.begin();
  lcd.display();        //เปิดหน้าจอ
  lcd.backlight();      //เปิดไฟ backlight
  lcd.clear();          //ล้างหน้าจอ
  lcd.setCursor(0, 0);
  lcd.print("Dowloading...");
  Serial.begin (115200);
  Blynk.begin(auth, SSID, PASS);
  led1.setColor(BLYNK_Blue);
  led2.setColor(BLYNK_Blue);
  timer.setInterval(1000L, LCD);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  dht.begin();
  lcd.clear();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
 
  Serial.begin(9600);
  lcd.backlight();
  
  Serial.begin(9600); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASS);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }   //เชื่อมต่อ  WiFi
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());  
  LINE.setToken(LINE_TOKEN);  // กำหนด Line Token
  dht.begin();
//=====================================================================
  }
  dht.begin();
microgear.on(MESSAGE, onMsghandler);
  microgear.on(CONNECTED, onConnected);
Serial.begin(115200);
  Serial.println("Starting...");
if (WiFi.begin(SSID, PASS)) {
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  }
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY, SECRET, ALIAS);
microgear.connect(APPID);
}
//=====================================================================
void LCD() 
{
  
//  lcd.clear();
  float h = dht.readHumidity();             //รับค่าความชื้น
  float t = dht.readTemperature();  
   
  lcd.setCursor(2, 0);
  lcd.print("Smart Farm GATS");//รับค่าอุณหภูมิ
  lcd.setCursor(3, 1);
  lcd.print("Temp = " + String(t, 1) + " C"); //แสดงค่าอุณหภูมิ
  lcd.setCursor(3, 2);
  lcd.print("Humi = " + String(h, 1) + " %"); //แสดงค่าความซื้น
  
  Blynk.virtualWrite(V20, String(t,1));     //ส่งค่าอุณหถูมิไปยังBlynk
  Blynk.virtualWrite(V21, String(h,1));     //ส่งค่าความชื้นไปยังBlynk
 
  
  if (auto_relay == 1) {                        
    if ((t > temp_auto) || ( h < humi_auto)) {   
      digitalWrite(relay1, LOW);                    //กำหนด การทำงานเปิดปิดในแอป
      led1.on();
      }else ((t < temp_auto) || ( h > humi_auto));
      digitalWrite(relay1, HIGH);
      led1.off();
    }
}
void print_time(unsigned long time_millis);

  void loop(){
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if(millis() - time_1 > INTERVAL_MESSAGE1){
  time_1 = millis();
  LINE.notify("อุณหภูมิขณะนี้ "+String(t)+" องศา" + "ความชื้นขณะนี้ "+String(h)+" %"); //ส่งค่าอุณภูมิไปในไลน์
    } 
  {
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());         //ส่งค่าเวลา
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());

  lcd.setCursor(10, 3);
  lcd.print(rtc.getDateStr());
  lcd.setCursor(0, 3);
  lcd.print(rtc.getTimeStr());
  delay (1000);
  }        //กำหนดเซ็นเซอร์
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!")); //ส่งข้อความเมื่อเซ็นเซอร์ไม่ได้
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  {
    if (t > 70) {
    String LineText;
    String string1 = "อุณหภูมิ เกินกำหนด ";  //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string2 = " °C";
    LineText = string1 + t + string2;
    LINE.notify(LineText);
  }
  
  else if (h < 38){
    String LineText;
    String string3 = "ความชื้น เกินกำหนด ";   //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string4 = " %";
    LineText = string3 + h + string4;
    LINE.notify(LineText);
   }
  }
//=====================================================================
 {
    humid = dht.readHumidity();
    temp = dht.readTemperature();
  
  if (microgear.connected()) {
    Serial.println("connected");
    microgear.loop();
    
    if (timer >= 1000) {
      sprintf(str, "%d,%d", humid, temp);
      Serial.println(str);
Serial.print("Sending -- >");
      microgear.publish("/dht", str);
      String H = "{\"humid\":";
      //microgear.writeFeed("DHT22TestingFeed","H");
String data = "{\"Humid\":"; 
      data += humid ; 
      data += ", \"Temp\":"; 
      data += temp ; 
      data += "}";  
      microgear.writeFeed(FEEDID,data);
      
      timer = 0;
    }
    else timer +=
        100;
  } else {
    Serial.println("connection lost, reconnect...");
    if (timer >= 5000) {
      microgear.connect(APPID);
      timer = 0;
    }
    else timer += 100;
  }
  delay(100);
}
//=====================================================================
{
   Blynk.run();    //แอป Blynk
   timer.run();    //รันของแอปกำหนดความชื้นและอุณภูมิ
  }
  }

ด้านล่างเป็นงี้ครับ

C:\Users\Usernameo\Desktop\13092564\13092564.ino: In function 'void loop()':
13092564:286: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  286 |     if (timer >= 1000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:300: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  300 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:302: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  302 |     else timer +=
      |          ~~~~~~^~
  303 |         100;
      |         ~~~     
13092564:306: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  306 |     if (timer >= 5000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:308: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  308 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:310: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  310 |     else timer += 100;
      |          ~~~~~~^~~~~~
exit status 1
no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')

วางโค้ตที่ error มาเลยครับ ดูแล้วงงๆ











C:\Users\Usernameo\Desktop\13092564\13092564.ino: In function 'void loop()':
13092564:272: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  272 |     if (timer >= 1000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:286: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  286 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:288: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  288 |     else timer +=
      |          ~~~~~~^~
  289 |         100;
      |         ~~~     
13092564:292: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  292 |     if (timer >= 5000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:294: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  294 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:296: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  296 |     else timer += 100
      |          ~~~~~~^~~~~~
13092564:302: error: expected '}' at end of input
  302 |   }
      |   ^
C:\Users\Usernameo\Desktop\13092564\13092564.ino:217:14: note: to match this '{'
  217 |   void loop(){
      |              ^
exit status 1
no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')

โค้ตเต็มที่ใช้ด้วยครับ

#include <Wire.h>                
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DS1302.h>
DS1302 rtc(D8, D5, D3);
#include <TridentTD_LineNotify.h>
BlynkTimer timer;
#define BLYNK_PRINT Serial
//เชื่อมต่อ Wifi pass line และtoken blynk
#define LINE_TOKEN  "OTKGp3dyfjT0LnxHmkFPcVuaYm9MyPWaMC0BEtz4pZx"
char auth[] = "8iPbvgBv7NRgi-toCzn4mFnw2ZwxDNbD";  //token
char SSID[] = "GrandATS-Wifi_2.4G"; 
char PASS[] = "atsserver137"; 

//ส่งกราฟอุณหภูมิย้นหลัง

#include <MicroGear.h>
#define APPID "DHT22TIMP"
#define KEY "lRR3MaPVxu37upB"
#define SECRET "xEIiymoqXIMuQnQPAs68qva9l"

#define ALIAS "piedht"

#define FEEDID "SensorDHT22Wifi"
#define INTERVAL 15000 
#define T_INCREMENT 200 
#define T_RECONNECT 5000 
#define BAUD_RATE 115200 
#define MAX_TEMP 100 
#define MAX_HUMID 100

WiFiClient client;

char str[32];

int humid;
int temp;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  Serial.print("Incoming message -- >"); msg[msglen] = '\0';
  Serial.println((char *)msg);
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.setAlias(ALIAS);
}
//กำหนดขาและรุ่น DHT
#define DHTPIN D4
#define DHTTYPE DHT22

//กำหนดขา relay
#define relay1 D6
#define relay2 D7

byte auto_relay = 0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 2, 16);

#define BLYNK_Green     "#23C48E"
#define BLYNK_Blue      "#04C0F8"
#define BLYNK_Red       "#D3435C"
#define BLYNK_White     "#ffffff"

#define INTERVAL_MESSAGE1 3600000    //กำหนดหน่วงเวลา
unsigned long time_1 = 0;            //กำหนดเวลาให้ทำซํ้า
         
float temp_auto=0,humi_auto=0;

//กำหนดขา จอ LCD

WidgetLED led1(V10);
WidgetLED led2(V11);

BLYNK_CONNECTED() {
  Blynk.syncAll();
} 
BLYNK_WRITE(V0)  //กำหนดปุ่มในแอป 
{
  if (param.asInt() == 1&&auto_relay==0) {
    digitalWrite(relay1, !digitalRead(relay1));       //เปิดปิด Relay1 ในโหมด Manual
    if (digitalRead(relay1) == LOW) {
      led1.on();
    }
    else {
      led1.off();
    }
  }
}

BLYNK_WRITE(V9)   //กำหนดปุ่มในแอป
{
  auto_relay = param.asInt();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  led1.off();
  led2.off();
}
BLYNK_WRITE(V5)   //กำหนดปุ่มในแอป
{
  temp_auto = param.asInt();                //กำหนดค่าอุณหภูมิจากBlynk
}
BLYNK_WRITE(V6)  //กำหนดปุ่มในแอป
{
  humi_auto = param.asInt();                //กำหนดค่าความชื้นจากBlynk
}
BLYNK_WRITE(V7)  //กำหนดปุ่มในแอป                      
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);             //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}  
BLYNK_WRITE(V8)  //กำหนดปุ่มในแอป
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);          //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}
void setup() {
  
     dht.begin();
   microgear.on(MESSAGE, onMsghandler);
   microgear.on(CONNECTED, onConnected);
   
   Serial.begin(115200);
   Serial.println("Starting...");
   
   if (WiFi.begin(SSID, PASS)) {
   while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  }
  
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY, SECRET, ALIAS);
microgear.connect(APPID);

 { // กำหนดแสดงขึ้นจอ LCD
  lcd.begin();
  lcd.display();        //เปิดหน้าจอ
  lcd.backlight();      //เปิดไฟ backlight
  lcd.clear();          //ล้างหน้าจอ
  lcd.setCursor(0, 0);
  lcd.print("Dowloading...");
  Serial.begin (115200);
  Blynk.begin(auth, SSID, PASS);
  led1.setColor(BLYNK_Blue);
  led2.setColor(BLYNK_Blue);
  timer.setInterval(1000L, LCD);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  dht.begin();
  lcd.clear();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
 
  Serial.begin(9600);
  lcd.backlight();
  //==================================================================================================
  Serial.begin(9600); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASS);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }   //เชื่อมต่อ  WiFi
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());  
  LINE.setToken(LINE_TOKEN);  // กำหนด Line Token
  dht.begin();}
 //====================================================================================================
  }
void LCD() 
{
  
//  lcd.clear();
  float h = dht.readHumidity();             //รับค่าความชื้น
  float t = dht.readTemperature();  
   
  lcd.setCursor(2, 0);
  lcd.print("Smart Farm GATS");//รับค่าอุณหภูมิ
  lcd.setCursor(3, 1);
  lcd.print("Temp = " + String(t, 1) + " C"); //แสดงค่าอุณหภูมิ
  lcd.setCursor(3, 2);
  lcd.print("Humi = " + String(h, 1) + " %"); //แสดงค่าความซื้น
  
  Blynk.virtualWrite(V20, String(t,1));     //ส่งค่าอุณหถูมิไปยังBlynk
  Blynk.virtualWrite(V21, String(h,1));     //ส่งค่าความชื้นไปยังBlynk
 
  
  if (auto_relay == 1) {                        
    if ((t > temp_auto) || ( h < humi_auto)) {   
      digitalWrite(relay1, LOW);                    //กำหนด การทำงานเปิดปิดในแอป
      led1.on();
      }else ((t < temp_auto) || ( h > humi_auto));
      digitalWrite(relay1, HIGH);
      led1.off();
    }
}
void print_time(unsigned long time_millis);

  void loop(){
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if(millis() - time_1 > INTERVAL_MESSAGE1){
  time_1 = millis();
  LINE.notify("อุณหภูมิขณะนี้ "+String(t)+" องศา" + "ความชื้นขณะนี้ "+String(h)+" %"); //ส่งค่าอุณภูมิไปในไลน์
    } 
  //================================================================================================
  {
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());         //ส่งค่าเวลา
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());

  lcd.setCursor(10, 3);
  lcd.print(rtc.getDateStr());
  lcd.setCursor(0, 3);
  lcd.print(rtc.getTimeStr());
  delay (1000);
  }        //กำหนดเซ็นเซอร์
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!")); //ส่งข้อความเมื่อเซ็นเซอร์ไม่ได้
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  {
    if (t > 70) {
    String LineText;
    String string1 = "อุณหภูมิ เกินกำหนด ";  //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string2 = " °C";
    LineText = string1 + t + string2;
    LINE.notify(LineText);
  }
  
  else if (h < 38){
    String LineText;
    String string3 = "ความชื้น เกินกำหนด ";   //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string4 = " %";
    LineText = string3 + h + string4;
    LINE.notify(LineText);
   }
  }
 {
    humid = dht.readHumidity();
    temp = dht.readTemperature();
  
  if (microgear.connected()) {
    Serial.println("connected");
    microgear.loop();
    
    if (timer >= 1000) {
      sprintf(str, "%d,%d", humid, temp);
      Serial.println(str);
Serial.print("Sending -- >");
      microgear.publish("/dht", str);
      String H = "{\"humid\":";
      //microgear.writeFeed("DHT22TestingFeed","H");
String data = "{\"Humid\":"; 
      data += humid ; 
      data += ", \"Temp\":"; 
      data += temp ; 
      data += "}";  
      microgear.writeFeed(FEEDID,data);
      
      timer = 0;
    }
    else timer +=
        100;
  } else {
    Serial.println("connection lost, reconnect...");
    if (timer >= 5000) {
      microgear.connect(APPID);
      timer = 0;
    }
    else timer += 100
    }
{
   Blynk.run();    //แอป Blynk
   timer.run();    //รันของแอปกำหนดความชื้นและอุณภูมิ
  }
  }

ปีกกาตรงนี้มันใส่ไม่ได้ครับผิด

ภาพ

ตรงนี้ปีกกาปิดไม่ครบ

ใส่ปีกกาข้ามกันแบบนี้ไม่ได้

ผมว่าเบื้องต้น อ่านหลักการเขียนโปรแกรม ให้ถูกต้องก่อนครับ เขียนผิดแบบเยอะ เรื่องปีกกา


#include <Wire.h>                
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DS1302.h>
DS1302 rtc(D8, D5, D3);
#include <TridentTD_LineNotify.h>
BlynkTimer timer;
#define BLYNK_PRINT Serial
//เชื่อมต่อ Wifi pass line และtoken blynk
#define LINE_TOKEN  "OTKGp3dyfjT0LnxHmkFPcVuaYm9MyPWaMC0BEtz4pZx"
char auth[] = "8iPbvgBv7NRgi-toCzn4mFnw2ZwxDNbD";  //token
char SSID[] = "GrandATS-Wifi_2.4G"; 
char PASS[] = "atsserver137"; 

//ส่งกราฟอุณหภูมิย้นหลัง

#include <MicroGear.h>
#define APPID "DHT22TIMP"
#define KEY "lRR3MaPVxu37upB"
#define SECRET "xEIiymoqXIMuQnQPAs68qva9l"

#define ALIAS "piedht"

#define FEEDID "SensorDHT22Wifi"
#define INTERVAL 15000 
#define T_INCREMENT 200 
#define T_RECONNECT 5000 
#define BAUD_RATE 115200 
#define MAX_TEMP 100 
#define MAX_HUMID 100

WiFiClient client;

char str[32];

int humid;
int temp;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  Serial.print("Incoming message -- >"); msg[msglen] = '\0';
  Serial.println((char *)msg);
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.setAlias(ALIAS);
}
//กำหนดขาและรุ่น DHT
#define DHTPIN D4
#define DHTTYPE DHT22

//กำหนดขา relay
#define relay1 D6
#define relay2 D7

byte auto_relay = 0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 2, 16);

#define BLYNK_Green     "#23C48E"
#define BLYNK_Blue      "#04C0F8"
#define BLYNK_Red       "#D3435C"
#define BLYNK_White     "#ffffff"

#define INTERVAL_MESSAGE1 3600000    //กำหนดหน่วงเวลา
unsigned long time_1 = 0;            //กำหนดเวลาให้ทำซํ้า
         
float temp_auto=0,humi_auto=0;

//กำหนดขา จอ LCD

WidgetLED led1(V10);
WidgetLED led2(V11);

BLYNK_CONNECTED() {
  Blynk.syncAll();
} 
BLYNK_WRITE(V0)  //กำหนดปุ่มในแอป 
{
  if (param.asInt() == 1&&auto_relay==0) {
    digitalWrite(relay1, !digitalRead(relay1));       //เปิดปิด Relay1 ในโหมด Manual
    if (digitalRead(relay1) == LOW) {
      led1.on();
    }
    else {
      led1.off();
    }
  }
}

BLYNK_WRITE(V9)   //กำหนดปุ่มในแอป
{
  auto_relay = param.asInt();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  led1.off();
  led2.off();
}
BLYNK_WRITE(V5)   //กำหนดปุ่มในแอป
{
  temp_auto = param.asInt();                //กำหนดค่าอุณหภูมิจากBlynk
}
BLYNK_WRITE(V6)  //กำหนดปุ่มในแอป
{
  humi_auto = param.asInt();                //กำหนดค่าความชื้นจากBlynk
}
BLYNK_WRITE(V7)  //กำหนดปุ่มในแอป                      
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);             //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}  
BLYNK_WRITE(V8)  //กำหนดปุ่มในแอป
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);          //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}
void setup() {
  
     dht.begin();
   microgear.on(MESSAGE, onMsghandler);
   microgear.on(CONNECTED, onConnected);
   
   Serial.begin(115200);
   Serial.println("Starting...");
   
   if (WiFi.begin(SSID, PASS)) {
   while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  }
  
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY, SECRET, ALIAS);
microgear.connect(APPID);

  // กำหนดแสดงขึ้นจอ LCD
  lcd.begin();
  lcd.display();        //เปิดหน้าจอ
  lcd.backlight();      //เปิดไฟ backlight
  lcd.clear();          //ล้างหน้าจอ
  lcd.setCursor(0, 0);
  lcd.print("Dowloading...");
  Serial.begin (115200);
  Blynk.begin(auth, SSID, PASS);
  led1.setColor(BLYNK_Blue);
  led2.setColor(BLYNK_Blue);
  timer.setInterval(1000L, LCD);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  dht.begin();
  lcd.clear();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
 
  Serial.begin(9600);
  lcd.backlight();
  //==================================================================================================
  Serial.begin(9600); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASS);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }   //เชื่อมต่อ  WiFi
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());  
  LINE.setToken(LINE_TOKEN);  // กำหนด Line Token
  dht.begin();
 //====================================================================================================
  }
void LCD() {
//  lcd.clear();
  float h = dht.readHumidity();             //รับค่าความชื้น
  float t = dht.readTemperature();  
   
  lcd.setCursor(2, 0);
  lcd.print("Smart Farm GATS");//รับค่าอุณหภูมิ
  lcd.setCursor(3, 1);
  lcd.print("Temp = " + String(t, 1) + " C"); //แสดงค่าอุณหภูมิ
  lcd.setCursor(3, 2);
  lcd.print("Humi = " + String(h, 1) + " %"); //แสดงค่าความซื้น
  
  Blynk.virtualWrite(V20, String(t,1));     //ส่งค่าอุณหถูมิไปยังBlynk
  Blynk.virtualWrite(V21, String(h,1));     //ส่งค่าความชื้นไปยังBlynk
 
  
  if (auto_relay == 1) {                        
    if ((t > temp_auto) || ( h < humi_auto)) {   
      digitalWrite(relay1, LOW);                    //กำหนด การทำงานเปิดปิดในแอป
      led1.on();
      }else ((t < temp_auto) || ( h > humi_auto));
      digitalWrite(relay1, HIGH);
      led1.off();
    }
}
void print_time(unsigned long time_millis);

  void loop(){
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if(millis() - time_1 > INTERVAL_MESSAGE1){
  time_1 = millis();
  LINE.notify("อุณหภูมิขณะนี้ "+String(t)+" องศา" + "ความชื้นขณะนี้ "+String(h)+" %");} //ส่งค่าอุณภูมิไปในไลน์

  
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());         //ส่งค่าเวลา
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());

  lcd.setCursor(10, 3);
  lcd.print(rtc.getDateStr());
  lcd.setCursor(0, 3);
  lcd.print(rtc.getTimeStr());
  delay (1000);
          //กำหนดเซ็นเซอร์
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!")); //ส่งข้อความเมื่อเซ็นเซอร์ไม่ได้
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  {
    if (t > 70) {
    String LineText;
    String string1 = "อุณหภูมิ เกินกำหนด ";  //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string2 = " °C";
    LineText = string1 + t + string2;
    LINE.notify(LineText);
  }
  
  else if (h < 38){
    String LineText;
    String string3 = "ความชื้น เกินกำหนด ";   //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string4 = " %";
    LineText = string3 + h + string4;
    LINE.notify(LineText);
   }
  }
  
    humid = dht.readHumidity();
    temp = dht.readTemperature();
  
  if (microgear.connected()) {
    Serial.println("connected");
    microgear.loop();
    
    if (timer >= 1000) {
      sprintf(str, "%d,%d", humid, temp);
      Serial.println(str);
Serial.print("Sending -- >");
      microgear.publish("/dht", str);
      String H = "{\"humid\":";
      //microgear.writeFeed("DHT22TestingFeed","H");
String data = "{\"Humid\":"; 
      data += humid ; 
      data += ", \"Temp\":"; 
      data += temp ; 
      data += "}";  
      microgear.writeFeed(FEEDID,data);
      
      timer = 0;
    }
    else timer +=
        100;
  } else {
    Serial.println("connection lost, reconnect...");
    if (timer >= 5000) {
      microgear.connect(APPID);
      timer = 0;
    }
    else timer += 100
    }
{
   Blynk.run();    //แอป Blynk
   timer.run();    //รันของแอปกำหนดความชื้นและอุณภูมิ
    }
   }

image

image

image

ผมไม่ได้ศึกษามาแล้วได้มาจับเลยอะคับพี่ ตอนนี้ก็ครบ 1 เดือนโดยที่ผมก็ดูผิดถูกๆ และถามพี่ๆรอบๆ

1 Likes

ต้องพยายาม มากขึ้นครับ เอาที่นี้เป็นที่เรียนรู้ ไม่รู้อะไรก็ถามได้ ลองผิดลองถูกดู

ได้ครับพี่ ตอนนี้ ก็ยัง Verify ไม่ได้ อยู่ครับ

เอา error มาดูครับ

C:\Users\Usernameo\Desktop\13092564\13092564.ino: In function 'void loop()':
13092564:269: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  269 |     if (timer >= 1000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:283: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  283 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:285: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  285 |     else timer +=
      |          ~~~~~~^~
  286 |         100;
      |         ~~~     
13092564:289: error: no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')
  289 |     if (timer >= 5000) {
      |         ~~~~~ ^~ ~~~~
      |         |        |
      |         |        int
      |         BlynkTimer
13092564:291: error: no match for 'operator=' (operand types are 'BlynkTimer' and 'int')
  291 |       timer = 0;
      |               ^
In file included from C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkApi.h:37,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkApiArduino.h:14,
                 from C:\Arduino18\libraries\blynk-library-master\src/BlynkSimpleEsp8266.h:24,
                 from C:\Users\Usernameo\Desktop\13092564\13092564.ino:6:
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(const BlynkTimer&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'const BlynkTimer&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note: candidate: 'constexpr BlynkTimer& BlynkTimer::operator=(BlynkTimer&&)'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:36:21: note:   no known conversion for argument 1 from 'int' to 'BlynkTimer&&'
   36 | #define SimpleTimer BlynkTimer
      |                     ^~~~~~~~~~
C:\Arduino18\libraries\blynk-library-master\src/Blynk/BlynkTimer.h:41:7: note: in expansion of macro 'SimpleTimer'
   41 | class SimpleTimer {
      |       ^~~~~~~~~~~
13092564:293: error: no match for 'operator+=' (operand types are 'BlynkTimer' and 'int')
  293 |     else timer += 100
      |          ~~~~~~^~~~~~
exit status 1
no match for 'operator>=' (operand types are 'BlynkTimer' and 'int')


สร้างตัวแปรใหม่ครับ มันไปซ้ำกับชื่อ class

ภาพ

ภาพ

มันขึ้น Eror อย่างนี้น่ะครับ

C:\Arduino18\libraries\microgear-esp8266-arduino-master\MicroGear.cpp: In member function 'void MicroGear::syncTime(Client*, long unsigned int*)':
C:\Arduino18\libraries\microgear-esp8266-arduino-master\MicroGear.cpp:152:31: error: 'class BearSSL::WiFiClientSecure' has no member named 'verify'
  152 |             if (clientsecure->verify(tstr, gearauth)) {
      |                               ^~~~~~
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).

ขอดูโค้ตล่าสุดหน่อย


#include <Wire.h>                
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DS1302.h>
DS1302 rtc(D8, D5, D3);
#include <TridentTD_LineNotify.h>

BlynkTimer timer;

#define BLYNK_PRINT Serial
//เชื่อมต่อ Wifi pass line และtoken blynk
#define LINE_TOKEN  "OTKGp3dyfjT0LnxHmkFPcVuaYm9MyPWaMC0BEtz4pZx"
char auth[] = "8iPbvgBv7NRgi-toCzn4mFnw2ZwxDNbD";  //token
char SSID[] = "GrandATS-Wifi_2.4G"; 
char PASS[] = "atsserver137"; 

//ส่งกราฟอุณหภูมิย้นหลัง

#include <MicroGear.h>
#define APPID "DHT22TIMP"
#define KEY "lRR3MaPVxu37upB"
#define SECRET "xEIiymoqXIMuQnQPAs68qva9l"

#define ALIAS "piedht"

#define FEEDID "SensorDHT22Wifi"
#define INTERVAL 15000 
#define T_INCREMENT 200 
#define T_RECONNECT 5000 
#define BAUD_RATE 115200 
#define MAX_TEMP 100 
#define MAX_HUMID 100

WiFiClient client;

int times = 0;
char str[32];

int humid;
int temp;

MicroGear microgear(client);

void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
  Serial.print("Incoming message -- >"); msg[msglen] = '\0';
  Serial.println((char *)msg);
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
  Serial.println("Connected to NETPIE...");
  microgear.setAlias(ALIAS);
}
//กำหนดขาและรุ่น DHT
#define DHTPIN D4
#define DHTTYPE DHT22

//กำหนดขา relay
#define relay1 D6
#define relay2 D7

byte auto_relay = 0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 2, 16);

#define BLYNK_Green     "#23C48E"
#define BLYNK_Blue      "#04C0F8"
#define BLYNK_Red       "#D3435C"
#define BLYNK_White     "#ffffff"

#define INTERVAL_MESSAGE1 3600000    //กำหนดหน่วงเวลา
unsigned long time_1 = 0;            //กำหนดเวลาให้ทำซํ้า
         
float temp_auto=0,humi_auto=0;

//กำหนดขา จอ LCD

WidgetLED led1(V10);
WidgetLED led2(V11);

BLYNK_CONNECTED() {
  Blynk.syncAll();
} 
BLYNK_WRITE(V0)  //กำหนดปุ่มในแอป 
{
  if (param.asInt() == 1&&auto_relay==0) {
    digitalWrite(relay1, !digitalRead(relay1));       //เปิดปิด Relay1 ในโหมด Manual
    if (digitalRead(relay1) == LOW) {
      led1.on();
    }
    else {
      led1.off();
    }
  }
}

BLYNK_WRITE(V9)   //กำหนดปุ่มในแอป
{
  auto_relay = param.asInt();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  led1.off();
  led2.off();
}
BLYNK_WRITE(V5)   //กำหนดปุ่มในแอป
{
  temp_auto = param.asInt();                //กำหนดค่าอุณหภูมิจากBlynk
}
BLYNK_WRITE(V6)  //กำหนดปุ่มในแอป
{
  humi_auto = param.asInt();                //กำหนดค่าความชื้นจากBlynk
}
BLYNK_WRITE(V7)  //กำหนดปุ่มในแอป                      
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);             //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}  
BLYNK_WRITE(V8)  //กำหนดปุ่มในแอป
{
if(param.asInt() == 0)
  {
    digitalWrite(relay1, HIGH);          //กำหนดเปิดปิดการทำงานทุกๆวัน 
  }
if(param.asInt() == 1);
  {
    digitalWrite(relay1, LOW);
  }
}
void setup() {
  
     dht.begin();
   microgear.on(MESSAGE, onMsghandler);
   microgear.on(CONNECTED, onConnected);
   
   Serial.begin(115200);
   Serial.println("Starting...");
   
   if (WiFi.begin(SSID, PASS)) {
   while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  }
  
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY, SECRET, ALIAS);
microgear.connect(APPID);

  // กำหนดแสดงขึ้นจอ LCD
  lcd.begin();
  lcd.display();        //เปิดหน้าจอ
  lcd.backlight();      //เปิดไฟ backlight
  lcd.clear();          //ล้างหน้าจอ
  lcd.setCursor(0, 0);
  lcd.print("Dowloading...");
  Serial.begin (115200);
  Blynk.begin(auth, SSID, PASS);
  led1.setColor(BLYNK_Blue);
  led2.setColor(BLYNK_Blue);
  timer.setInterval(1000L, LCD);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  dht.begin();
  lcd.clear();
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
 
  Serial.begin(9600);
  lcd.backlight();
  //==================================================================================================
  Serial.begin(9600); Serial.println();
  Serial.println(LINE.getVersion());
  WiFi.begin(SSID, PASS);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }   //เชื่อมต่อ  WiFi
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());  
  LINE.setToken(LINE_TOKEN);  // กำหนด Line Token
  dht.begin();
 //====================================================================================================
  }
void LCD() {
//  lcd.clear();
  float h = dht.readHumidity();             //รับค่าความชื้น
  float t = dht.readTemperature();  
   
  lcd.setCursor(2, 0);
  lcd.print("Smart Farm GATS");//รับค่าอุณหภูมิ
  lcd.setCursor(3, 1);
  lcd.print("Temp = " + String(t, 1) + " C"); //แสดงค่าอุณหภูมิ
  lcd.setCursor(3, 2);
  lcd.print("Humi = " + String(h, 1) + " %"); //แสดงค่าความซื้น
  
  Blynk.virtualWrite(V20, String(t,1));     //ส่งค่าอุณหถูมิไปยังBlynk
  Blynk.virtualWrite(V21, String(h,1));     //ส่งค่าความชื้นไปยังBlynk
 
  
  if (auto_relay == 1) {                        
    if ((t > temp_auto) || ( h < humi_auto)) {   
      digitalWrite(relay1, LOW);                    //กำหนด การทำงานเปิดปิดในแอป
      led1.on();
      }else ((t < temp_auto) || ( h > humi_auto));
      digitalWrite(relay1, HIGH);
      led1.off();
    }
}
void print_time(unsigned long time_millis);

  void loop(){
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if(millis() - time_1 > INTERVAL_MESSAGE1){
  time_1 = millis();
  LINE.notify("อุณหภูมิขณะนี้ "+String(t)+" องศา" + "ความชื้นขณะนี้ "+String(h)+" %");} //ส่งค่าอุณภูมิไปในไลน์

  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());         //ส่งค่าเวลา
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());

  lcd.setCursor(10, 3);
  lcd.print(rtc.getDateStr());
  lcd.setCursor(0, 3);
  lcd.print(rtc.getTimeStr());
  delay (1000);
          //กำหนดเซ็นเซอร์
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!")); //ส่งข้อความเมื่อเซ็นเซอร์ไม่ได้
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  {
    if (t > 70) {
    String LineText;
    String string1 = "อุณหภูมิ เกินกำหนด ";  //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string2 = " °C";
    LineText = string1 + t + string2;
    LINE.notify(LineText);
  }
  
  else if (h < 38){
    String LineText;
    String string3 = "ความชื้น เกินกำหนด ";   //เมื่อเกินกำหนด ความชื้น ส่งไปไลน์
    String string4 = " %";
    LineText = string3 + h + string4;
    LINE.notify(LineText);
   }
  }
  
    humid = dht.readHumidity();
    temp = dht.readTemperature();
  
  if (microgear.connected()) {
    Serial.println("connected");
    microgear.loop();
    
    if (times >= 1000) {
      sprintf(str, "%d,%d", humid, temp);
      Serial.println(str);
Serial.print("Sending -- >");
      microgear.publish("/dht", str);
      String H = "{\"humid\":";
      //microgear.writeFeed("DHT22TestingFeed","H");
String data = "{\"Humid\":"; 
      data += humid ; 
      data += ", \"Temp\":"; 
      data += temp ; 
      data += "}";  
      microgear.writeFeed(FEEDID,data);
      
      times = 0;
    }
    else times +=
        100;
  } else {
    Serial.println("connection lost, reconnect...");
    if (times >= 5000) {
      microgear.connect(APPID);
      times = 0;
    }
    else times += 100;}
   Blynk.run();    //แอป Blynk
   timer.run();    //รันของแอปกำหนดความชื้นและอุณภูมิ
    }   

ขออภัย ตอบช้า ตอนนี้เป็นไงย้างอัพเดทหน่อยครับ