GyverHUB, обсуждение библиотеки

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Виноват, погорячился. Не глянул, был уверен, что она работает на прерываниях, уж очень хорошо и мгновенно отрабатывала.
Проверял факт срабатывания по факту выводом в консоль промежуточных результатов. Зря Вы гоните на неё, код срабатывает по факту смены состояния, смотрите обработку флагов, просто и элегантно. Попытаюсь заюзать Вашу библиотеку, спасибо за ссылку. О результатах отпишусь.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
да чего на неё гнать, то... самая примитивная либа для кнопок какую только можно написать. Она бесконечно читает состояние пина в цикле - естественно она будет выдавать его состояние по факту, ну плюс задержка у неё есть антидребезг, не более того. Это ни хорошо, ни плохо это примитивный бесконечный опрос пинов. Соответственно если вы бесконечно опрашивате ее состояние, то ваше условие срабатывать будет бесконечно.

напишите вот так и всё увидите
Код:
if(boiler1RelayI.isPressed()){
   hub.update("IBoiler1Relay").value(1); 
   Serial.println("update Hub value: 1");
}
if(boiler1RelayI.isReleased()){
   hub.update("IBoiler1Relay").value(0);
   Serial.println("update Hub value: 0");
}
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
@vortigont,
Это первое, что я сделал при проверке этой либы... Всё там ОК с реакцией только по факту изменения.

Смотрел Вашу библиотеку, на ней нет поддержки 8266, для меня это необходимо. Сделал на этом говне, 8266, кучу простейших автоматизаций для знакомых: кому домофон из Телеграм открыть, кому удалённо электронагреватель на даче включить и контролировать. Приходится поддерживать этот зоопарк теперь и, по мере накопления опыта, переводить на нормальный код. Сам, естественно, буду впредь юзать только ESP32, мне понравилось грузить оба ядра разными действиями. :).

Разочарован уровнем написания библиотек под ESP. Нам 30 лет назад говорили: "Самое эффективное и оптимальное - использование аппаратных прерываний". Почему бы их не используют в библиотеках, предназначенных имеенно для этого, - работа с портами - хз, я был уверен в том, что все они основны именно на аппаратных прерываниях, схватил одну не глядя... Надо смотреть, всё проверять, уровень там - действительно простейший, вопреки ожиданиям...
Сейчас попытался работать вот с этой:

И вот возникает вопрос... Почему показометр нагрузки процессора wokwi при реализации аппаратного прерывания показывает 65-74%, а при прямом непрерывном опросе пинов: 38-41%. Что за...??? Ещё один пример говнокода, цитируемый во всех советах по "оптимизации" кнопкодавления в интернетах?
Обычный код классического использования прерывания, без всяких библиотек и дебаунсеров выдаёт 30-32% :). Начинаю прозревать.
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
Всё там ОК с реакцией только по факту изменения.
не знаю как там может быть "всё ОК", если при "нажатой" кнопке метод button.isPressed() возвращает false и в этом же состоянии button.isReleased() так же возвращает false, то с этой либой явно что-то не так. Кнопка ни нажата ни отжата, посередине зависла? :)
Если автор имел ввиду какую-то другую логику работы этих методов, то с интуитивно понятным названием он явно промахнулся.

Почему показометр нагрузки процессора wokwi
потому что это "показометр". В "ардуно" где крутится бесконечный loop() и в нем есть хоть один вызов загрузка процессора всегда 100%, ничего другого там быть не может. Сколько бы ни было ресурсов, всё будет отдано под этот бесконечный цикл.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
Сейчас попытался работать вот с этой:
а зачем вам прерывания если всё равно в луп воткнут какой-то вызов?
Код:
void loop() {
  // keep watching the push button, even when no interrupt happens:
  button.tick();
}
это все равно что заходить в автобус с проездным и еще покупать билет у водителя )
 

gidiara666

★✩✩✩✩✩✩
5 Май 2023
59
13
Вот такая вот судьба у порта на прерывании... Выгодней сделать в loop обработку по флагу прерывания, чем тормозить весь процессор, засовывая в функцию прерывания вот это вот всё. Смотрел код уважаемого Гайвера- так он завсегда так делает. И да, с показометром загрузки процессора wokwi - всё ок. Показывает как надо, очень помогает быстро прикинуть оптимальность кода.
 
Изменено:

Rushns

✩✩✩✩✩✩✩
11 Июл 2024
1
0
@gidiara666,Насчет телеграмма я не уверен, когда в Башкортостане заблокировали ватсап и телегу все ESP в которых я использовал телегу жутко тормозили (loop() отрабатывал где то 1 в 10 секунд, считай что устройства просто отказали). Пришлось экстренно вырезать весь телеграмм с кода и оставил только mqtt, благо с ним таких тормозов нет. Телегу использую через wqtt только для оповещения..