• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Не компилируется скетч

hatul

Member
Имеется скетч WiFi часы. Все работало отлично. Скетч неоднократно заливался в ESP8266. Поменялось имя и пароль WiFi. Поменял в скетче. Скетч перестал компилироваться. Пробовал на трех компьютерах. Скачивал разные версии IDE.От версии 1.68 до 1.81. Скетч выдает ошибку.Вкратце ошибка выглядит так:
Arduino: 1.8.2 Hourly Build 2017/02/27 02:33 (Windows 10), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:\Users\alexey\Desktop\CLOCK_ESP8266_1.ino\CLOCK_ESP8266_1.ino.ino: In function 'void updateTime()':
CLOCK_ESP8266_1.ino:354: error: invalid operands of types 'double' and 'long int' to binary 'operator%'
long epoch = round(curEpoch + 3600 * utcOffset + 86400L) % 86400L;
^
Несколько библиотек найдено для "ArduinoJson.h"
Используется: C:\Users\alexey\Documents\Arduino\libraries\ArduinoJson
Не используется: D:\Arduino_IDE\libraries\ArduinoJson
Несколько библиотек найдено для "Wire.h"
Используется: C:\Users\alexey\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\libraries\Wire
Не используется: D:\Arduino_IDE\libraries\Wire
Несколько библиотек найдено для "Adafruit_Sensor.h"
Используется: C:\Users\alexey\Documents\Arduino\libraries\Adafruit_Sensor
Не используется: D:\Arduino_IDE\libraries\Adafruit_Sensor
Несколько библиотек найдено для "Adafruit_BMP280.h"
Используется: C:\Users\alexey\Documents\Arduino\libraries\Adafruit_BMP280_Library
Не используется: D:\Arduino_IDE\libraries\Adafruit_BMP280_Library
Несколько библиотек найдено для "TM1637.h"
Используется: D:\Arduino_IDE\libraries\TM1637
Не используется: C:\Users\alexey\Documents\Arduino\libraries\DigitalTube
Несколько библиотек найдено для "Adafruit_GFX.h"
Используется: C:\Users\alexey\Documents\Arduino\libraries\Adafruit-GFX-Library-master
Не используется: D:\Arduino_IDE\libraries\Adafruit-GFX-Library-master
Несколько библиотек найдено для "Max72xxPanel.h"
Используется: C:\Users\alexey\Documents\Arduino\libraries\arduino-Max72xxPanel-master
Не используется: D:\Arduino_IDE\libraries\arduino-Max72xxPanel-master
exit status 1
invalid operands of types 'double' and 'long int' to binary 'operator%'
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Кроме того на старых IDE пишет "ошибка определения платы". Прошу помощи. Почему 100 процентно работающий скетч перестал компилироваться.
Система Win10.
 

Вложения

cheblin

Member
прям делаем поиск по строке ошибки
invalid operands of types 'double' and 'long int' to binary 'operator%'
и попадаем сразу
Yes. % operator is not defined for double type. Same is true for bitwise operators like "&,^,|,~,<<,>>" as well.
в выражении
long epoch = round(curEpoch + 3600 * utcOffset + 86400L) % 86400L;
читаем про round()
The round() function takes a single argument and returns a value of type double, float or long double type.

как просто правда?
 

hatul

Member
прям делаем поиск по строке ошибки

и попадаем сразу
Yes. % operator is not defined for double type. Same is true for bitwise operators like "&,^,|,~,<<,>>" as well.
в выражении


читаем про round()
The round() function takes a single argument and returns a value of type double, float or long double type.

как просто правда?
Ну для кого просто,а для кого темный лес.Буду очень благодарен, если Вы исправите скетч. Я так понимаю для Вас это не составит труда.
И остается вопрос: почему этот скетч,буквально пару месяцев назад компилировался без проблем.
 

Сергей_Ф

Moderator
Команда форума
почему этот скетч,буквально пару месяцев назад компилировался без проблем.
Скорее всего поменяли ядро esp8266 и забыли. Новые ядра отличаются от старых в части аргументов многих функций.
 

svs2007m

Active member
Библиотеки в скетче "старые". В PlatformIO версии библиотек прописаны ... (поэтому сборка не развалится со временем) в Аrduino IDE беда с этим ...
Вроде скетч написан для ArduinoJson.h -v.5, а сейчас ...
да и другие ....
Посмотрите в именах библиотек и их версиях. Или как сказано по ядру тоже. Откатись назад по ним :)
 

cheblin

Member
млин, ну уже всё рассказал и показал в каком месте ошибка.
причём тут версии прошивки?
этот код в текущем виде скомпилировать невозможно под любым компилятором. нужно делать кастинг в int
вместо
long epoch = round(curEpoch + 3600 * utcOffset + 86400L) % 86400L;
нужно
Код:
long epoch = ((int)round(curEpoch + 3600 * utcOffset + 86400)) % 86400;
а тут точно, при точно функция round нужна? может поучиться и прочитать про неё в интернете
 

cassini

New member
Ну тут явная проблема platformio. Она делает что хочет, обновляет что то сама без спроса.
Не раз сталкивался с тем что скетч написанный пару месяцев назад перестал компилироваться. Ну вот просто взял и перестал. При этом абсолютно НИЧЕГО в скетче не менялось. Скетч под гитом и любые изменения были бы видны. Но platformio что то там обновила сама по себе и абсолютно рабочий скетч перестал компилироваться. Очень нестабильная платформа.
Нет никакой уверенности что я смогу зафиксировать какое то положение вещей и через год перекомпилировать скетч пофиксив пару багов. Потому что скетч просто не скопилится и придется разбираться что там platformio обновила, какие библиотеки, ядра, компиляторы или еще что то.
 

Влад1451

New member
Доброго времени суток. Попытался залить скетч Duino-Coin в ESP8266. Старая версия скетча компилируется без проблем, но она уже не рабочая, разработчики перетащили всё на другой сервер и переписали скетч. Дак вот, новый отказывается компилироваться. Ошибка:

ESP8266_Code:40:17: error: 'experimental' has not been declared
using namespace experimental::crypto;
^
ESP8266_Code:40:31: error: 'crypto' is not a namespace-name
using namespace experimental::crypto;
^
ESP8266_Code:40:37: error: expected namespace-name before ';' token
using namespace experimental::crypto;
^
D:\Coin\Duino-Coin_2.4.9_windows\ESP8266_Code\ESP8266_Code.ino: In function 'void loop()':
ESP8266_Code:253:21: error: 'SHA1' has not been declared
String result = SHA1::hash(hash + String(iJob));
^
exit status 1
'experimental' has not been declared
********************************************************************************
Arduino IDE v1.8.13, библиотека 8266 - v2.4.1, свежее не поставить, так как Win7-32.
 

Вложения

Влад1451

New member
Не знаю сложно или просто ... Загрузил ваш код в виртуалку с Win7, Arduino IDE v1.8.13, 8266 - 2.7.4 - все компилируется
Устанавливать библиотеку для 8266 выше 2.5.0 пробовал, выдаёт ошибку:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Current thread 0x000014f0 (most recent call first):
exit status 3
Ошибка компиляции для платы Generic ESP8266 Module.
 
Сверху Снизу