Ошибка компилятора при подключении библиотек (в данном случае от ESP32)

Здравствуйте уважаемые программисты!

Решили мы с ребёнком поизучать проект Smart Home от keyesudio. И при компиляции простого кода, где есть есть какие-либо библиотеки (в данном случае <analogWrite.h>) компилятор выдаёт ошибку. Уже много раз инсталлировал всё заново, никак не получается… ума не приложу… ) Подскажите, пожалуйста, как это вылечить?

#include <analogWrite.h>  //Import PWM output library files
#define led_y 12    //Define LED pins  

void setup()
{
  pinMode(led_y, OUTPUT);  //Set pin to output mode
}

void loop(){
  for(int i=0; i<255; i++)  //The for loop statement increments the value of variable i until it exits the loop at 255  
  {
    analogWrite(led_y, i);  //PWM output, control LED brightness
    delay(3);
  }
  for(int i=255; i>0; i--)  //The for loop statement continues to decrease the value of variable i until it exits the loop at 0
  {
    analogWrite(led_y, i);
    delay(3);
  }
}

Коды ошибок на english в Arduino IDE:

c:\Users\ivan_\Documents\Arduino\libraries\ESP32_AnalogWrite\src\analogWrite.cpp: In function ‘int analogWriteChannel(uint8_t)’:
c:\Users\ivan_\Documents\Arduino\libraries\ESP32_AnalogWrite\src\analogWrite.cpp:44:9: error: ‘ledcSetup’ was not declared in this scope
44 | ledcSetup(channel, _analog_write_channels[i].frequency, analog_write_channels[i].resolution);
| ^~~~~~~~~
c:\Users\ivan
\Documents\Arduino\libraries\ESP32_AnalogWrite\src\analogWrite.cpp:45:9: error: ‘ledcAttachPin’ was not declared in this scope; did you mean ‘ledcAttach’?
45 | ledcAttachPin(pin, channel);
| ^~~~~~~~~~~~~
| ledcAttach

Прочитайте здесь описание функции. Возьмите пример и не добавляя ни каких строк попробуй откомпилировать.

Функция ‘ledcSetup’ была удалена из новой версии пакета ЕСП32
Подробнее тут

1 лайк

Если честно, стало ещё более непонятно))

Т.е. старые коды теперь никак не применимы???!

Применимы с оговорками. Конкретно для ESP32 изменили несколько разных API. Все изменения документированы и описаны способы доработки или переработки. В случае возникновения ошибок компиляции программ под ESP32 нужно сходить на сайт API Reference - ESP32 - — ESP-IDF Programming Guide v4.3 documentation и посмотреть что изменилось. С другими платами ардуино пока всё без изменений.

“Революция” случилась только для плат ЕСП32, для большинства остальных плат коды 5-10 летней давности компилируются без проблем.

/*
 * Fade
 * Using PWM to fade the onboard LED.
 */

const int ledPin = 13; // BUILTIN_LED;  // the onboard LED
int brightness = 0;        // how bright the LED is (0 = full, 512 = dim, 1023 = off)
int maxbrig=255;
int fadeAmount = 5;        // how many points to fade the LED by
const int delayMillis = 50;      // how long to pause between each loop

void setup() 
{
  // Initialize Serial Monitor
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);  // initialize onboard LED as output
}
float t=0.,t1=0.;
void loop() 
{
  // set the LED brightness
  analogWrite(ledPin, brightness);

  // increment/decrement the brightness for the next loop
  brightness = brightness + fadeAmount;

  // limit to 10-bit (0-1023)
  if (brightness < 0) 
  {brightness = 0;Serial.print("0 ");
  t=(millis()-t)/1000.;Serial.println(t);t=millis();}

  if (brightness > maxbrig) 
  {brightness = maxbrig;
  Serial.print("maxbrig ");
  t=(millis()-t)/1000.;Serial.println(t);t=millis();}

  // reverse the direction of the fading at each end
  if (brightness == 0 || brightness == maxbrig) 
  {
    fadeAmount = -fadeAmount;
    Serial.print("fade ");
     t=(millis()-t)/1000.;Serial.println(t);t=millis();
  }

  // pause so you can see each brightness level
  delay(delayMillis);
}

Приведенное работает в Arduino ide 2.1.1 c платой ESP32 dev module

и что?
Версия ИДЕ не важна, важна версия пакета поддержки ЕСП32:

Действительно в Boards manager было esp32 by Espressif System 2.0.17 но после Update to 3.0.7 заняло примерно полчаса, все моргает по прежнему!!

ну значит вам повезло. Попробуйте скомпилить скетч ТС из первого сообщения

Первый проход - нет библиотеки analogwrite.h LibManager предложил AnalogWriteESP32 второй проход - нет библиотеки AnalogWriteESP32, хотя установка библиотеки прошла.

Зачем эти библиотеки? Это до версии 3.0 в ядре esp32 не было метода analogWrite(). С версии 3.0 он появился, никакие сторонние библиотеки больше не нужны

Обобщаю - всегда, когда удается, лучше обходиться без библиотек.
Что касается обсуждаемой AnalogWrite_ESP32, то это пример плохой библиотеки. Во-первых, ее название в программе не совпадает с названием при установке. Это очень не удобно.
Во-вторых, ни один из сопровождающих библиотеку примеров не проходит компиляцию. И если ошибка находится в тексте, то ее можно попытаться обойти, но ошибки в тексте библиотеки, это уж через чур.

и все же как решить проблему.есть набор keyes studio 5009 на esp32. на github приведен скетч, но его не получается скомпилировать.
если версия в менеджере плат 3.0 то ругается на LedcSetup, я пытался заменить на LedcAttach, но все равно не комплируется и сссылается на строки, гже уже нет данной функции.

Если версия в менеджере плат 2.0.17, то другая ошибка
c:/users/sirius/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/…/lib/gcc/xtensa-esp32-elf/8.4.0/…/…/…/…/xtensa-esp32-elf/bin/ld.exe: C:\Users\Sirius\AppData\Local\arduino\sketches\52AA5859CAD7C10635BBF9B101406066\core\core.a(esp32-hal-ledc.c.o): in function analogWriteResolution': C:\Users\Sirius\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.14\cores\esp32/esp32-hal-ledc.c:258: multiple definition of analogWriteResolution’; C:\Users\Sirius\AppData\Local\arduino\sketches\52AA5859CAD7C10635BBF9B101406066\libraries\ESP32_AnalogWrite\analogWrite.cpp.o:c:\Users\Sirius\Documents\Arduino\libraries\ESP32_AnalogWrite\src/analogWrite.cpp:74: first defined here
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

очень хотелось бы победить эту историю