ก่อนจะใส่ให้ส่งค่าเข้า 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')