555 กล้อง DSLR ตัวแปลง DSLR to HDMI โต้ะ live ของครบแล้วนะครับ ทำขำๆ อาจจะมีแบบว่าสุดสัปห์ดา มา live รีวิว กระทู้ไหนน่าสดใจบ้าง สำหรับบางคนขี้เกียจอ่านนะครับ
@yothin ใช้ NODE MCU ESP 8266 ใช่มั๊ยครับ
ผมใช้ Library ArduinoJson-5.13.3 นะครับ ให้ลองโหลด Version ลดลงมาที่ Version นี้นะครับ
ส่วนตัว Code ผมปรับปรุงใหม่ล่าสุด แก้ให้แล้วนะครับ Code ที่ Post เดิม ผมแก้ใหม่แล้วครับ
งานทุกอย่างในบ้านผมรวมอยู่ใน โปรเจคเดียวครับแยกแทป ใช้งานเอา ตอนนี้1โปเจคผมใช้ esp8266.ไป 5 ตัวแล้วครับ ถ้าcloneไป จะได้รับทั้งหมดเลย ก็เลย capture แล้วอธิบายเอาครับ
อ่อ แสดงว่ามีหลาย Tab งั้นแสดง UI แบบนี้ก็เยี่ยมละครับพี่
แล้วตรงนี้แก้ยังไงครับ
//ใส่ Blynk token ของเราที่ Blynk ส่งมาทาง Email ตอนที่เรา Create Project ฺBlynk ใหม่กับทาง https://eleceasy.com ครับ
ถ้าใช้ code เดียวกับผม ลอง Copy ไปใส่ใหม่ดูครับ
class Task_5 : public Task {
protected:
void setup() { }
void loop() {
h = dht.readHumidity();
t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
//Serial.println("Failed to read from DHT sensor!");
return;
}
// Serial.print("Humidity is: ");
// Serial.println(h);
//
Serial.print("Temperature is: ");
Serial.println(t);
Blynk.virtualWrite(V18, h);
Blynk.virtualWrite(V17, t);
if (tempMenu == 1) {
if ( t > v6 && t <= v7 ) {
Blynk.virtualWrite(V17, t);
//Blynk.virtualWrite(V10, 1);
digitalWrite(D8, HIGH);
led_3.on();
}
else
{
Blynk.virtualWrite(V17, t);
//Blynk.virtualWrite(V10, 0);
digitalWrite(D8, LOW);
led_3.off();
}
}
if (humidMenu == 1) {
if ( h > v4 && h <= v5 ) {
Blynk.virtualWrite(V18, h);
//Blynk.virtualWrite(V10, 1);
digitalWrite(D8, HIGH);
led_2.on();
}
else
{
Blynk.virtualWrite(V18, h);
//Blynk.virtualWrite(V10, 0);
digitalWrite(D8, LOW);
led_2.off();
}
}
delay(2000);
}
} Task_5_task;
หน้าตาแอพหน้าใช้งานมากครับพี่
Update ฝากเก็บ ครับ Environment + thingspeak.com
#include <ESP8266WiFi.h> //โหลดไลบารี่ ..มาใช้งาน //https://github.com/esp8266/Arduino
#include <ESP8266WebServer.h> //โหลดไลบารี่ ..มาใช้งาน
#include <WiFiManager.h> //โหลดไลบารี่ ..มาใช้งาน //https://github.com/tzapu/WiFiManager
#include <FS.h> //โหลดไลบารี่ ..มาใช้งาน //this needs to be first, or it all crashes and burns...
#include <DNSServer.h> //โหลดไลบารี่ ..มาใช้งาน
#include <ArduinoJson.h> //โหลดไลบารี่ ..มาใช้งาน //https://github.com/bblanchon/ArduinoJson
#include <BlynkSimpleEsp8266.h> //โหลดไลบรารี่ของ BLYNK ..มาใช้งาน
#include <Wire.h>
#include <ClosedCube_OPT3001.h>
ClosedCube_OPT3001 opt3001;
#define OPT3001_ADDRESS 0x44
#include <DHT.h>
#define DHTTYPE DHT21
#define DHTPIN D6
DHT dht(DHTPIN, DHTTYPE);
#include <Scheduler.h>
//------------------------------------------------------------------------------------------------
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
WidgetLED led_1(V52); //แสดงสถานะ ติด 3 วินาที แล้วดับ ใช้ในการแสดง เมื่อกดปุ่มจาก App Blynk เพื่อมา Reset Node MCU ESP8266
WidgetLED led_2(V42); //แสดงสถานะพัดลม on/off
WidgetLED led_3(V43); //แสดงสถานะพัดลม on/off
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน
#define D3 0 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
#define D8 15 //พัดลมทำงาน เมื่อเกิดความชื้นเกิน 95%
#define D7 13 //เชคสัญญาณจาก Microphone Soensor
//#define D5 14
//const int capteur_D = D5;
float h ;
float t ;
//--Humid Fan
int v4;
int v5;
//--Temp Fan
int v6;
int v7;
int tempMenu = 0;
int humidMenu = 0;
//------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------
int blynkIsDownCount = 0; //Integer Variable ตัวแปรชื่อ blynkIsDownCount ใช้เก็บเลขจำนวนเต็ม โดยเริ่มต้นให้มีค่า = 0
char blynk_token[34] = "XXXXXXXXXXXXXXXXXX"; //ใส่ Blynk token ของเราที่ Blynk ส่งมาทาง Email ตอนที่เรา Create Project ใหม่
//Character Variable ตัวแปรที่ใช้เก็บอักขระ
bool shouldSaveConfig = false;
//-------------------------------------------------------------------------------------------------------------------------------------------
BlynkTimer timer;
//-------------------------------------------------------------------------------------------------------------------------------------------
//callback notifying us of the need to save config
void saveConfigCallback () {
Serial.println("Should save config");
shouldSaveConfig = true;
}
//-------------------------------------------------------------------------------------------------------------------------------------------
//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;
//***************************************************************
//------------------------ ตั้งค่าการรีเซ็ตบอร์ดแบบอัตโนมัติ โดยกำหนดค่าเป็นวินาที นาที ชั่วโมง 24 ชั่วโมง วันได้ ---------------------//
const long oneSecond = 1000; // 1000 มิลลิวินาที = 1 วินาทีเท่ากับ
const long oneMinute = oneSecond * 60; // 1 นาที = 1 วินาที x 60 วินาที
const long oneHour = oneMinute * 60; // 1 ชั่วโมง = 1 นาที x 60 นาที
const long oneDay = oneHour * 24; // 1 วัน = 1 ชั่วโมง x 24 ชั่วโมง
const long twoDay = oneDay * 2; // 2 วัน = 1 วัน x 2 วัน
const long threeDay = oneDay * 3; // 3 วัน = 1 วัน x 3 วัน
const long fourDay = oneDay * 4; // 4 วัน = 1 วัน x 4 วัน
const long fiveDay = oneDay * 5; // 5 วัน = 1 วัน x 5 วัน
const long sixDay = oneDay * 6; // 6 วัน = 1 วัน x 6 วัน
const long sevenDay = oneDay * 7; // 7 วัน = 1 วัน x 7 วัน
//------------------------------------------------------------------------------------------------------------------------//
int timereset;
int BlynkresetMCU;
int light;
int rain;
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V50)// ตั้งเวลา Reset board mcu esp8266 ตามการป้อนค่าตัวเลข
{
timereset = param.asInt();
//Serial.println(timereset);
}
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V51)//Reset board mcu esp8266 ภายใน 5 วินาที
{
int pinValue = param.asInt();
if (pinValue == 1) {
BlynkresetMCU = 1;
}
if (pinValue == 0) {
}
}
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V6)// ตั้งค่า ความชื้น ให้พัดลมทำงาน
{
v6 = param.asInt();
}
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V7)// ตั้งค่า อุณหภูมิ ให้พัดลมทำงาน
{
v7 = param.asInt();
}
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V4)// ตั้งค่า ความชื้น ให้พัดลมทำงาน
{
v4 = param.asInt();
}
//------------------------------------------------------------------------------------------------------------------------//
BLYNK_WRITE(V5)// ตั้งค่า อุณหภูมิ ให้พัดลมทำงาน
{
v5 = param.asInt();
}
//------------------------------------------------------------------------------------------------------------------------//
//Timer selection temp control option
BLYNK_WRITE(V2)
{
int pinValue = param.asInt();
if (pinValue == 1) {
Blynk.virtualWrite(V8, 1); //temp menu
tempMenu = 1;
humidMenu = 0;
led_2.off();
}
if (pinValue == 0) {
Blynk.virtualWrite(V8, 0);//humidmenu
tempMenu = 0;
humidMenu = 1;
led_3.off();
}
}
//------------------------------------------------------------------------------------------------------------------------//
//ปุ่มเลือกเมนู
BLYNK_WRITE(V8) {
int pinValue = param.asInt();
if (pinValue == 1) {//ถ้าเลือก Temp Menu LED Humid จะต้อง Off
tempMenu = 1;
humidMenu = 0;
led_2.off();//LED Humid Off
}
if (pinValue == 0) {//ถ้าเลือก Humid Menu LED Temp จะต้อง Off
tempMenu = 0;
humidMenu = 1;
led_3.off();//LED Temp Off
}
}
//------------------------------------------------------------------------------------------------------------------------//
//BLYNK_WRITE(V10)//สั่งให้ Relay ON/OFF
//{
//
// int pinValue = param.asInt();
// if (pinValue == 1) {
// digitalWrite(D8, HIGH);
// }
// if (pinValue == 0) {
// digitalWrite(D8, LOW);
//
// }
//}
////------------------------------------------------------------------------------------------------------------------------//
class Task_1 : public Task {
protected:
void setup() { }
void loop() {
int sensorValue = analogRead(A0);
//Blynk.virtualWrite(V1, sensorValue);
if (sensorValue >= 0 && sensorValue <= 512 )
{
Blynk.virtualWrite(V1, "\xF0\x9F\x8C\x82");
Blynk.virtualWrite(V3, 0);
//Blynk.virtualWrite(V1, "ฝนไม่ตก");
rain = 0;//ฝนไม่ตก
delay(10);
}
else
{
Blynk.virtualWrite(V1, "\xE2\x98\x94");
//Blynk.virtualWrite(V1, "ฝนตก");
Blynk.virtualWrite(V3, 5);
rain = 1;//ฝนตก
delay(10);
}
delay(1000);
}
} Task_1_task;
class Task_2 : public Task {
protected:
void setup() {
configureSensor();
printResult("High-Limit", opt3001.readHighLimit());
printResult("Low-Limit", opt3001.readLowLimit());
}
void loop() {
OPT3001 result = opt3001.readResult();
printResult("OPT3001", result);
delay(500);//เดิม
delay(1000);//ใหม่
}
void configureSensor() {
OPT3001_Config newConfig;
newConfig.RangeNumber = B1100;
newConfig.ConvertionTime = B0;
newConfig.Latch = B1;
newConfig.ModeOfConversionOperation = B11;
OPT3001_ErrorCode errorConfig = opt3001.writeConfig(newConfig);
if (errorConfig != NO_ERROR)
printError("OPT3001 configuration", errorConfig);
else {
OPT3001_Config sensorConfig = opt3001.readConfig();
}
}
void printResult(String text, OPT3001 result) {
if (result.error == NO_ERROR) {
// Serial.print(text);
// Serial.print(": ");
// Serial.print(result.lux);
// Serial.println(" lux");
Blynk.virtualWrite(V0, result.lux);
//Blynk.virtualWrite(V41, (((result.lux * 100) / 83865.60)));
//int LightValue = result.lux;
light = map(result.lux, 0.01, 27000, 0, 100);
//int light = map(result.lux,0.01, 83865.60, 0, 100);
Blynk.virtualWrite(V41, light);
//https://apps.timwhitlock.info/emoji/tables/unicode
//"\xE2\x9B\x85"Sun behind
//"\xE2\x98\x80" :black sun with rays
//"\xE2\x98\x81" cloud
//"\xF0\x9F\x8C\x9C" last quarter moon with face
}
else {
printError(text, result.error);
}
if (result.lux < 50 ) {
Blynk.virtualWrite(V40, "\xF0\x9F\x8C\x9C");//ดวงจันทร์
}
//if (result.lux > 50 and result.lux <= 1000) {
if (result.lux > 50 and result.lux <= 3500) {
Blynk.virtualWrite(V40, "\xE2\x98\x81");//มีเมฆ
}
//if (result.lux > 1000 and result.lux <= 10000 ) {
if (result.lux > 3500 and result.lux <= 9000 ) {
Blynk.virtualWrite(V40, "\xE2\x9B\x85");//ดวงอาทิตย์ซ่อนหลังเมฆ
}
if (result.lux > 9000 and result.lux <= 13000 ) {
Blynk.virtualWrite(V40, "\xE2\x98\x80");//ดวงอาทิตย์ส่องเต็ม
}
if (result.lux > 13000 and result.lux <= 27000 ) {
Blynk.virtualWrite(V40, "\xE2\x98\x80", " \xF0\x9F\x98\xAC");//ดวงอาทิตย์ส่องเต็มเริ่มร้อนมาก
}
if (result.lux > 27000 ) {
Blynk.virtualWrite(V40, "\xE2\x98\x80", " \xF0\x9F\x98\xB1");//ดวงอาทิตย์ส่องเต็มร้อนมาก
}
}
void printError(String text, OPT3001_ErrorCode error) {
// Serial.print(text);
// Serial.print(": [ERROR] Code #");
// Serial.println(error);
Blynk.virtualWrite(V0, error);
}
private:
uint8_t state;
} Task_2_task;
class Task_3 : public Task {
public:
void setup() {
}
void loop() {
//--------------------------------------------------------------------------------------------------------
if (Blynk.connected())
{
Blynk.run();// ถ้าเชื่อมต่อ Blynk Server ได้-----ไฟ LED สีน้ำเงินบนบอร์ด จะติดค้าง
digitalWrite(D0, HIGH); //หลอด LED สีน้ำเงินที่ บอร์ด MCU esp8266 ติดค้างแสดงว่า WiFi ใช้งานได้
//-----// ถ้าเชื่อมต่ Blynk Server ไม่ได้-----ไฟ LED สีน้ำเงินบนบอร์ด จะกระพริบ---------------------------------
//----//หลอด LED สีแดงติดกระพริบแสดงว่ากำลังค้นหา WiFi ----------------------------------------------------
} else {
digitalWrite(D0, LOW);
delay(200);
digitalWrite(D0, HIGH);
delay(100);
}
//--------------------------------------------------------------------------------------------------------
timer.run();//ให้เวลาของ Blynk ทำงาน
delay(100);
//---------Reset Board Node MCU ESP 8266------------//
if (BlynkresetMCU == 1) {
led_1.on();
delay(3000);
led_1.off();
delay(1500);
ESP.restart();
}
//-------------------------------------------------//
}
} Task_3_task;
class Task_4 : public Task {
protected:
void setup() { }
void loop() {
//ถ้ามีค่าเป็น 0 แล้ว reset 1 ครั้ง จะไม่มีการ Reset อีกต่อไป
if (timereset == 1) {
Blynk.virtualWrite(V53, "1 Day Reset" );
//delay(oneMinute1);
delay(oneDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 2) {
Blynk.virtualWrite(V53, "2 Days Reset" );
//delay(oneMinute2);
delay(twoDay );
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 3) {
Blynk.virtualWrite(V53, "3 Days Reset" );
//delay(oneMinute3);
delay(threeDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 4) {
Blynk.virtualWrite(V53, "4 ays. Reset" );
delay(fourDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 5) {
Blynk.virtualWrite(V53, "5 Days Reset" );
delay(fiveDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 6) {
Blynk.virtualWrite(V53, "6 Days Reset" );
delay(sixDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
if (timereset == 7) {
Blynk.virtualWrite(V53, "7 Days Reset" );
delay(sevenDay);
ESP.restart();
//digitalWrite(D7, LOW);//ให้ D7 เป็น 1 ตอนทำงาน LOW = 0
}
}
} Task_4_task;
class Task_5 : public Task {
protected:
void setup() { }
void loop() {
h = dht.readHumidity();
t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
//Serial.println("Failed to read from DHT sensor!");
return;
}
// Serial.print("Humidity is: ");
// Serial.println(h);
//
Serial.print("Temperature is: ");
Serial.println(t);
Blynk.virtualWrite(V18, h);
Blynk.virtualWrite(V17, t);
if (tempMenu == 1) {
if ( t > v6 && t <= v7 ) {
Blynk.virtualWrite(V17, t);
//Blynk.virtualWrite(V10, 1);
digitalWrite(D8, HIGH);
led_3.on();
}
else
{
Blynk.virtualWrite(V17, t);
//Blynk.virtualWrite(V10, 0);
digitalWrite(D8, LOW);
led_3.off();
}
}
if (humidMenu == 1) {
if ( h > v4 && h <= v5 ) {
Blynk.virtualWrite(V18, h);
//Blynk.virtualWrite(V10, 1);
digitalWrite(D8, HIGH);
led_2.on();
}
else
{
Blynk.virtualWrite(V18, h);
//Blynk.virtualWrite(V10, 0);
digitalWrite(D8, LOW);
led_2.off();
}
}
ThingSpeak();
delay(2000);
}
} Task_5_task;
//*****************************************************************************************************
//******************************* void setup *********************************************
//*****************************************************************************************************
void setup() {
//****************************************************************************************************
pinMode(D0, OUTPUT);//กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
pinMode(D3, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config
pinMode(D8, OUTPUT);
pinMode(D7, INPUT);
//pinMode(capteur_D, INPUT);
// ให้ LED ทั้งหมดดับก่อน
digitalWrite(D0, LOW); //ให้หลอด LED สีฟ้าดับก่อน
digitalWrite(D8, LOW); //ให้พัดลมไม่ทำงานก่อน
//***************************************************************************************************
Serial.begin(115200);
opt3001.begin(OPT3001_ADDRESS);
dht.begin();
// timer.setInterval(1500L, Sensor);
//************************* การ อ่าน เขียนค่า WiFi + Password ]ลงใน Node MCU ESP8266 ************
//read configuration from FS json
Serial.println("mounting FS...");//แสดงข้อความใน Serial Monitor
if (SPIFFS.begin()) {
Serial.println("mounted file system");//แสดงข้อความใน Serial Monitor
if (SPIFFS.exists("/config.json")) {
//file exists, reading and loading
Serial.println("reading config file");//แสดงข้อความใน Serial Monitor
File configFile = SPIFFS.open("/config.json", "r");
if (configFile) {
Serial.println("opened config file");
size_t size = configFile.size();
// Allocate a buffer to store contents of the file.
std::unique_ptr<char[]> buf(new char[size]);
configFile.readBytes(buf.get(), size);
DynamicJsonBuffer jsonBuffer;
JsonObject& json = jsonBuffer.parseObject(buf.get());
json.printTo(Serial);
if (json.success()) {
Serial.println("\nparsed json");//แสดงข้อความใน Serial Monitor
strcpy(blynk_token, json["blynk_token"]);
} else {
Serial.println("failed to load json config");//แสดงข้อความใน Serial Monitor
}
}
}
} else {
Serial.println("failed to mount FS");//แสดงข้อความใน Serial Monitor
}
//end read
//************************* จบการ อ่าน เขียนค่า WiFi + Password ]ลงใน Node MCU ESP8266 ***************
//************************** AP AUTO CONNECT **************************************************
WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//set config save notify callback
wifiManager.setSaveConfigCallback(saveConfigCallback);
wifiManager.addParameter(&custom_blynk_token);
for (int i = 5; i > 0; i--) {
digitalWrite(D0, HIGH);
delay(500);
digitalWrite(D0, LOW);
delay(500);
Serial.print (String(i) + " ");//แสดงข้อความใน Serial Monitor
}
if (digitalRead(D3) == LOW) {
digitalWrite(D0, LOW);
Serial.println("Button Pressed");//แสดงข้อความใน Serial Monitor
wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้
// wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID
if (!wifiManager.autoConnect("PUYIOT AP CONFIG")) {
Serial.println("failed to connect and hit timeout");//แสดงข้อความใน Serial Monitor
delay(3000);
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(5000);
}
}
Serial.println("connected........:)");//แสดงข้อความใน Serial Monitor
strcpy(blynk_token, custom_blynk_token.getValue());
//save the custom parameters to FS
if (shouldSaveConfig) {
Serial.println("saving config");//แสดงข้อความใน Serial Monitor
DynamicJsonBuffer jsonBuffer;
JsonObject& json = jsonBuffer.createObject();
json["blynk_token"] = blynk_token;
File configFile = SPIFFS.open("/config.json", "w");
if (!configFile) {
Serial.println("failed to open config file for writing");//แสดงข้อความใน Serial Monitor
}
json.printTo(Serial);
json.printTo(configFile);
configFile.close();
//end save
}
//************************** จบ AP AUTO CONNECT **************************************************
Serial.println("local ip"); //แสดงข้อความใน Serial Monitor
delay(100);
Serial.println(WiFi.localIP());//แสดงข้อความใน Serial Monitor
// Blynk.config(blynk_token);////เริ่มการเชื่อมต่อ Blynk Server แบบปกติ
Blynk.config(blynk_token, server, port);
////เริ่มการเชื่อมต่อ Blynk Server*********สำหรับ Server local ที่แจกให้ เพิ่ม, server, port แค่นี้จบ
timer.setInterval(30000L, reconnecting); //Function reconnect
Scheduler.start(&Task_1_task);
Scheduler.start(&Task_2_task);
Scheduler.start(&Task_3_task);
Scheduler.start(&Task_4_task);
Scheduler.start(&Task_5_task);
Scheduler.begin();
}
//*****************************************************************************************************
//******************************* จบ void setup *********************************************
//*****************************************************************************************************
//*****************************************************************************************************
//******************************* void loop *************************************************
void loop() {}
//******************************* จบ void loop *************************************************
//*****************************************************************************************************
//--------------------------------------------------------------------------------------------------------
void reconnecting()
{
if (!Blynk.connected())
{
blynkIsDownCount++;
BLYNK_LOG("blynk server is down! %d times", blynkIsDownCount);
Blynk.connect(5000);
}
}
//--------------------------------------------------------------------------------------------------------
void ThingSpeak()
{
// ThingSpeak Settings //
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "XXXXXXXXXXXX"; // คีย์จากเมนู key Api แบบ Write API Key
WiFiClient client;
String temp = (String) t; // แปลงเป็น string
String hum = (String) h; // แปลงเป็น string
String Light_ = (String) light; // แปลงเป็น string
String Rainy = (String) rain; // แปลงเป็น string
String data = "field1=" + temp + "&field2=" + hum + "&field3=" + Light_ + "&field4=" + Rainy;
if (client.connect(thingSpeakAddress, 80)) {
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + writeAPIKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(data.length());
client.print("\n\n");
client.print(data); //
}
Serial.println("ThingSpeakloop");
delay(6000);
}
BLYNK_CONNECTED()
{
Blynk.syncAll();//ให้ซิงค์ข้อมูลทั้งหมดล่าสุดจาก Blynk Server
//Serial.println(".");//per debug //แสดงข้อความใน Serial Monitor
}
ช่วงนี้อากาศข้างนอกร้อนมากๆ 09/03/2563
หวั่นๆ ว่า พัดลมระบายกาศในกล่องจะเอาอยู่มั๊ย
แค่ 9.00 โมง อุณหภูมิก็จะทะลุไป 40 องศาแล้ว
อากาศที่ผ่านมา วันที่ 7,8 /03/2563 ดึง Report จาก Blynk มา Plot graph ใน Excel
เปรียบอุณหูมิ นอกบ้าน กับในบ้าน
เริ่มเข้าหน้าร้อนแล้วสินะครับ
Copy error เต็มมาวางด้วยครับ
Downd load Libraries ตัวนี้ครับ
ESP8266Scheduler https://drive.google.com/file/d/1Rx-S8AXVycXHkHUely-kQKZ0nvagssS3/view?usp=sharing
หลังจากโหลด Libraries ESP8266Scheduler ยังไม่ผ่านครับ
Arduino: 1.8.10 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"
WARNING: library Scheduler claims to run on sam, samd architecture(s) and may be incompatible with your current board which runs on esp8266 architecture(s).
In file included from C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3/tools/sdk/libc/xtensa-lx106-elf/include/sys/stdio.h:6:0,
from C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3/tools/sdk/libc/xtensa-lx106-elf/include/stdio.h:63,
from C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/Arduino.h:32,
from sketch\esp8266blynkDHT22Smart.ino.cpp:1:
C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3/tools/sdk/libc/xtensa-lx106-elf/include/sys/pgmspace.h:25:130: error: 'const char HTTP_HEAD []' redeclared as different kind of symbol
#define PROGMEM __attribute__((section( "\".irom.text." __FILE__ "." __STRINGIZE(__LINE__) "." __STRINGIZE(__COUNTER__) "\"")))
^
C:\Users\xxx\Documents\Arduino\libraries\WiFiManager/WiFiManager.h:25:24: note: in expansion of macro 'PROGMEM'
const char HTTP_HEAD[] PROGMEM = "<!DOCTYPE html><html lang=\"en\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/><title>{v}</title>";
^
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:6:0:
C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WebServer\src/ESP8266WebServer.h:33:39: error: previous declaration of 'HTTPMethod HTTP_HEAD'
enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS };
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino: In function 'void setup()':
esp8266blynkDHT22Smart:782:31: error: no matching function for call to 'SchedulerClass::start(Task_1*)'
Scheduler.start(&Task_1_task);
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:782:31: note: candidates are:
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:1:0:
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: static void SchedulerClass::start(SchedulerTask, uint32_t)
static void start(SchedulerTask task, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: no known conversion for argument 1 from 'Task_1*' to 'SchedulerTask {aka void (*)()}'
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: static void SchedulerClass::start(SchedulerParametricTask, void*, uint32_t)
static void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: candidate expects 3 arguments, 1 provided
esp8266blynkDHT22Smart:783:31: error: no matching function for call to 'SchedulerClass::start(Task_2*)'
Scheduler.start(&Task_2_task);
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:783:31: note: candidates are:
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:1:0:
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: static void SchedulerClass::start(SchedulerTask, uint32_t)
static void start(SchedulerTask task, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: no known conversion for argument 1 from 'Task_2*' to 'SchedulerTask {aka void (*)()}'
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: static void SchedulerClass::start(SchedulerParametricTask, void*, uint32_t)
static void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: candidate expects 3 arguments, 1 provided
esp8266blynkDHT22Smart:784:31: error: no matching function for call to 'SchedulerClass::start(Task_3*)'
Scheduler.start(&Task_3_task);
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:784:31: note: candidates are:
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:1:0:
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: static void SchedulerClass::start(SchedulerTask, uint32_t)
static void start(SchedulerTask task, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: no known conversion for argument 1 from 'Task_3*' to 'SchedulerTask {aka void (*)()}'
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: static void SchedulerClass::start(SchedulerParametricTask, void*, uint32_t)
static void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: candidate expects 3 arguments, 1 provided
esp8266blynkDHT22Smart:785:31: error: no matching function for call to 'SchedulerClass::start(Task_4*)'
Scheduler.start(&Task_4_task);
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:785:31: note: candidates are:
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:1:0:
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: static void SchedulerClass::start(SchedulerTask, uint32_t)
static void start(SchedulerTask task, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: no known conversion for argument 1 from 'Task_4*' to 'SchedulerTask {aka void (*)()}'
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: static void SchedulerClass::start(SchedulerParametricTask, void*, uint32_t)
static void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: candidate expects 3 arguments, 1 provided
esp8266blynkDHT22Smart:786:31: error: no matching function for call to 'SchedulerClass::start(Task_5*)'
Scheduler.start(&Task_5_task);
^
D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:786:31: note: candidates are:
In file included from D:\Arduino\esp8266blynkDHT22Smart\esp8266blynkDHT22Smart.ino:1:0:
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: static void SchedulerClass::start(SchedulerTask, uint32_t)
static void start(SchedulerTask task, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:31:14: note: no known conversion for argument 1 from 'Task_5*' to 'SchedulerTask {aka void (*)()}'
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: static void SchedulerClass::start(SchedulerParametricTask, void*, uint32_t)
static void start(SchedulerParametricTask task, void *data, uint32_t stackSize = 1024);
^
C:\Users\xxx\Documents\Arduino\libraries\Scheduler\src/Scheduler.h:32:14: note: candidate expects 3 arguments, 1 provided
esp8266blynkDHT22Smart:787:13: error: 'class SchedulerClass' has no member named 'begin'
Scheduler.begin();
^
Multiple libraries were found for "DHT.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\DHT-sensor-library-master
Multiple libraries were found for "Adafruit_Sensor.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\Adafruit_Sensor-master
Not used: C:\Users\xxx\Documents\Arduino\libraries\Adafruit_Unified_Sensor
Multiple libraries were found for "WiFiManager.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\WiFiManager
Multiple libraries were found for "ClosedCube_OPT3001.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\ClosedCube_OPT3001
Multiple libraries were found for "ESP8266WiFi.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\ESP8266WiFi
Not used: C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi
Multiple libraries were found for "ESP8266WebServer.h"
Used: C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WebServer
Multiple libraries were found for "DNSServer.h"
Used: C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\DNSServer
Multiple libraries were found for "ArduinoJson.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\ArduinoJson
Not used: C:\Users\xxx\Documents\Arduino\libraries\ArduinoJson-5.13.3
Multiple libraries were found for "BlynkSimpleEsp8266.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\Blynk
Multiple libraries were found for "Wire.h"
Used: C:\Users\xxx\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\Wire
Multiple libraries were found for "Scheduler.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\Scheduler
Not used: C:\Users\xxx\Documents\Arduino\libraries\ESP8266Scheduler
Multiple libraries were found for "Task.h"
Used: C:\Users\xxx\Documents\Arduino\libraries\ESP8266Scheduler
exit status 1
no matching function for call to 'SchedulerClass::start(Task_1*)'
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
ความต้องการของ Project (เพื่อป้องกันความผิดพลาดเรื่องของ Version และตรวจสอบย้อนหลังได้)
- Arduino IDE Version 1.8.7
- WiFiManager Version 0.14.0
- ArduinoJson Version 5.13.3
- New-LiquidCrystal-master Version 6.2.4
เอาเป็นว่า ข้อ 1 - 4 มีให้ Download 18 ครับ https://drive.google.com/file/d/1DjlDHdEqHgtwpsiRiaLtD4jR4bji4i-6/view - ESP8266Scheduler https://drive.google.com/file/d/1Rx-S8AXVycXHkHUely-kQKZ0nvagssS3/view?usp=sharing 10