#include <avr/io.h> error: avr/io.h: No such file or directory แก้ยังไงครับ

คือผมจะเขียน แบบแบ่งเป็นฟังก์ชัน(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.

คือผม comment ส่วนที่ error ไว้อะครับ ไม่ทราบว่าเอาออกหรือยัง ผมลืมบอก

***อันนี้ผมเอาออกให้แล้วครับ

ช่วยลองอีกทีได้มั้ยครับ

#include <Arduino_FreeRTOS.h>
#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

อ่าวติดเหมือนกันครับ 55

ตอนนี้ผมไล่แก้มาถึงตรงนี้แล้วครับ เหมือนว่า library ที่เราเอามาใช้ มันคนละสถาปัตยกรรมกัน ทำให้การคอนฟิกภายในมีปัญหามองกันไม่เห็น

In file included from C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/Arduino_FreeRTOS.h:56:0,

                 from C:\Users\ArcHeR\Documents\Arduino\sketch_aug11b\sketch_aug11b.ino:1:

C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\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 Generic ESP8266 Module.

In file included from C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/Arduino_FreeRTOS.h:50:0,

                 from C:\Users\ArcHeR\Documents\Arduino\sketch_aug11b\sketch_aug11b.ino:1:

C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/avr/io.h:549:25: fatal error: avr/version.h: No such file or directory

 #include <avr/version.h>

                         ^

compilation terminated.

exit status 1
Error compiling for board Generic ESP8266 Module.

Arduino: 1.8.9 (Windows 10), Board: "Generic ESP8266 Module, 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), ck, 26 MHz, 40MHz, DOUT (compatible), 1M (64K SPIFFS), 2, nonos-sdk 2.2.1 (legacy), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

In file included from C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src\variantHooks.cpp:29:0:

C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/avr/sleep.h:234:6: error: #error "No SLEEP mode defined for this device."

     #error "No SLEEP mode defined for this device."

      ^

C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src\variantHooks.cpp:31:24: fatal error: util/delay.h: No such file or directory

 #include <util/delay.h>

                        ^

compilation terminated.

exit status 1
Error compiling for board Generic ESP8266 Module.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Arduino: 1.8.9 (Windows 10), Board: "Generic ESP8266 Module, 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), ck, 26 MHz, 40MHz, DOUT (compatible), 1M (64K SPIFFS), 2, nonos-sdk 2.2.1 (legacy), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

WARNING: library Arduino_FreeRTOS-master claims to run on (avr) architecture(s) and may be incompatible with your current board which runs on (esp8266) architecture(s).
In file included from C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/portable.h:93:0,

                 from C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/Arduino_FreeRTOS.h:62,

                 from C:\Users\ArcHeR\Documents\Arduino\sketch_aug11b\sketch_aug11b.ino:1:

C:\Users\ArcHeR\Documents\Arduino\libraries\Arduino_FreeRTOS-master\src/avr/wdt.h:444:23: error: macro "wdt_disable" passed 1 arguments, but takes just 0

 void wdt_disable (void)

                       ^

exit status 1
Error compiling for board Generic ESP8266 Module.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

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

ต้องขอบคุณมากๆเลยนะครับ ที่ที่ช่วยแก้ 5555555 ปวดหัวตามๆกันไป555

ถ้าเลือกเป็น arduino ไม่น่ามีปัญหาครับ แต่นี้เราเอามาใช้กับ esp8266 มันเลยมีปัญหาทางด้านโครงสร้าง

ถ้าอยากใช้ task ให้สมบูณร์ต้องเปลี่ยนไปใช้ esp32 ครับ

โอเครครับ ว่าจะลองใช้อยู่ esp32 เดี๋ยวลองดูครับ

จบข่าวนะครับ เขาบอกว่ามันรองรับเฉพาะ avr เท่านั้น