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