คือผมจะเขียน แบบแบ่งเป็นฟังก์ชัน(FreeRTOS) ของใครของมันอะครับ(เซนเซอร์ของผมค่อยข้างเยอะ )แต่ติดอยู่ตรงนี้ compil Error ไม่รู้จะแก้ยัง (Code ยังเขียนไม่100%นะครับ คือเขียนไป compli ไปทีละส่วน เพื่อดูปัญหา )
***** ส่วนตัวคิดว่าน่าจะเป็นที่ library แต่ไม่รู้จะแก้ยังไง
-Esp8266
-Blynk
ผมอ้างอิง Code จาก https://medium.com/@visitwnk , https://medium.com/@thanahongsuwan สองท่านนี้ครับ
แนะนำเพิ่มเติมได้นะครับ
/*#include <Arduino_FreeRTOS.h>*/ //น่าจะเป็นส่วนนี้ครับที่ error กับ ส่วนที่สร้างมัลติทาสก์ ครับ
#include <Time.h>
#include <TimeLib.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <Blynk.h>
#include <DHT.h>
#include <BlynkSimpleEsp8266.h>
#include <time.h>
#include <TridentTD_LineNotify.h>
//LINE TOKEN
#define LINE_TOKEN ""
//WiFi config
char ssid[] = "";
char pass[] = "";
//Blynk config
char auth[] = "";
char server[] = "oasiskit.com";
unsigned int port = 8080;
// Water Config
#define PercentWatering = 80
//Timer Config
#define sendSensorTime = 120000 //ตั้งเวลาส่งข้อมูลให้ BLYNK SERVER ทุกๆ 2 นาที
#define sendSensor2Time = 180000 //ตั้งเวลาส่งข้อมูลให้ BLYNK SERVER ทุกๆ 3 นาที
#define checkConnectionTime = 10000 //ตั้งเวลาให้เช็คว่า Blynk เชื่อมต่ออยู่หรือไม่ทุกๆ 10 วินาที
// Pin Setup ** ขา GPIO
#define SoilSensorPin 10 //เซนเซอร์วัดความชื้นในดิน
#define Relay1 14 //รีเลย์ตัวที่ 1
#define LEDBUILIN 5 //ไฟสถานะเชื่อมต่อสำเร็จ
//ตัวแปรระบบบ Blynk
#define BLYNK_PRINT Serial
//กำหนดขา V pin ให้ App Blynk
#define Widget_WateringButon V5
#define Widget_SoilLevel V1
#define Widget_Terminal V6
#define Widget_Led V8
WidgetTerminal terminal(Widget_Terminal);
//กำหนดตัวแปรทั่วไป
//เรียกใช้การตั้งเวลาของ Blynk
#define BLYNK_TIMEOUT_MS 750
#define BLYNK_HEARTBEAT 17
#define BlynkTimer timer;
//กำหนดตัวแปรเริ่มต้น
int WifiSignal;
bool isFirstConnect = true;
int MapReadSoilValue;
/*-----------------------------------------------------*/
BLYNK_CONNECTED(){
digitalWrite(LEDBUILIN, HIGH);
Serial.println("Blynk Connect Success!!");
if(isFirstConnect){
// Blynk.syncALL();
Blynk.syncVirtual(Widget_Led);
isFirstConnect = false;
}
delay(2000);
}
BLYNK_WRITE(Widget_WateringButon){
if(param.asInt() == 1){
if(digitalRead(Relay1) != LOW){
digitalWrite(Relay1, LOW);
LINE.notify("PUMP on");
}
delay(2000);
}
}
/*-----------------------------------------------------*/
void setup() {
//เรียกใช้งาน Serial Monitor
Serial.begin(115200);
//เชื่อมต่อ WIFI
Blynk.begin(auth, ssid, pass, server, port);
while (WiFi.status() != WL_CONNECTED){ Serial.print("."); delay(500); }
//เรียกใช้งาน LINE NOTIFY
LINE.setToken(LINE_TOKEN);
Serial.println(LINE.getVersion());
//LINE.notify("WIFI CONNECTED!");
//กำหนดดหมดให้ขา GPIO
pinMode(LEDBUILIN, OUTPUT);
//pinMode(Widget_Led, OUTPUT);//wdt reset
pinMode(Relay1, OUTPUT);
pinMode(SoilSensorPin, INPUT);
//กำหนดสถานะเริ่มต้นให้ขา GPIO เพื่อป้องกันการทำงานเองตอนรีบูต
digitalWrite(LEDBUILIN, HIGH);
digitalWrite(Relay1, HIGH);
/*
// สร้างมัลติทาสก์
//TASK1: เช็คค่าความชื้นในดิน
xTaskCreate(&Task1, "Task1", 2000, NULL, 1, NULL);
//TASK2: เช็คการกดปุ่มรดน้ำ
xTaskCreate(&Task2, "Task2", 1000, NULL, 1, NULL);
//TASK3: เช็คการเชื่อมต่อ WiFi และให้เชื่อมต่อเอง
xTaskCreate(&Task3, "Task3", 3000, NULL, 1, NULL);
//TASK4: รดน้ำตามเวลาที่กำหนด
xTaskCreate(&Task4, "Task4", 3000, NULL, 1, NULL);
/* //ตั้งเวลาส่งข้อมูลให้ BLYNK SERVER
timer.setInterval(sendSensorTime, sendSensor);
//ตั้งเวลาส่งข้อมูลให้ BLYNK SERVER
timer.setInterval(sendSensor2Time, sendSensor2);
//ตั้งเวลาให้เช็คว่า Blynk เชื่อมต่ออยู่หรือไม่
timer.setInterval(checkConnectionTime, CheckConnection);*/
Serial.println();
Serial.print("WiFi Connected: ");
Serial.println(WiFi.localIP());
Serial.print("WiFi signal RSSI: ");
Serial.print(WiFi.RSSI());
Serial.println("dBm");
}
/*-----------------------------------------------------*/
void loop() {
Blynk.run();
//timer.run();
}
/*--------------------------------------------------------*/
void NotifyLine(String t) {
WiFiClientSecure client;
if (!client.connect("notify-api.line.me", 443)) {
Serial.println("Connection failed");
return;
}
String req = "";
req += "POST /api/notify HTTP/1.1\r\n";
req += "Host: notify-api.line.me\r\n";
req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";
req += "Cache-Control: no-cache\r\n";
req += "User-Agent: ESP8266\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: " + String(String("message=" + t).length()) + "\r\n";
req += "\r\n";
req += "message=" + t;
Serial.println(req);
client.print(req);
delay(20);
Serial.println("-------------");
while(client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
} //while
} //loop
Sketch เสร็จ
Arduino: 1.8.9 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
In file included from C:\Users\Swagg\Documents\Arduino\libraries\FreeRTOS\src/Arduino_FreeRTOS.h:56:0,
from C:\Users\Swagg\Documents\Arduino\Melon_System_2\Melon_System_2.ino:1:
C:\Users\Swagg\Documents\Arduino\libraries\FreeRTOS\src/FreeRTOSConfig.h:31:20: fatal error: avr/io.h: No such file or directory
#include <avr/io.h>
^
compilation terminated.
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.