#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 เท่านั้น

free
hit counter