ESP, IoT CatFeeder. Модификация проекта GyverFeeder 2 на NodeMCU v3

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
Cat Feeder
IMG_20220831_181719.jpg
Особенности
  • Oled дисплей
  • Автоматическое выключение экрана при простое
  • Управление 2 кнопками
  • Полноценный веб интерфейс для управления устройством
  • Часы с синхронизацией времени по протоколу NTP
  • Управление по MQTT с возможной интеграцией в систему умного дома через Яндекс Алису или Home Asistent
  • 4 независимых будильника для кормления в заданное время
  • Возможность внеочередного кормления по нажатию кнопки, через веб интерфейс или отправки сообщения в MQTT топик
  • Видимость и настройка порции кормления как через веб интерфейс, так и на oled экране
  • Обновление прошивки по воздуху


Компиляция и прошивка
Все использованные библиотеки находятся в папке libraries в архиве проекта. Настройки arduino ide для NodeMCU

Файловую систему заливать вот по этому гайду https://wikihandbk.com/wiki/ESP8266:Прошивки/Arduino/Работа_с_файловой_системой_в_аддоне_ESP8266_для_IDE_Arduino , предварительно внеся в feeder.ino настройки WiFi и прочего. При последующих запусках настройки будут применены автоматически

Схема подключения


Веб интерфейс
При первом запуске, если вы проигнорировали предыдущий шаг, и не стали изменять настройки WiFi, либо кормушке не удалось подключиться к вашей сети WiFi, то устройство перейдет в режим точки доступа с именем CatFeeder и паролем 12345678. После чего запустит веб интерфейс по адресу 192.168.4.1, где вы сможете произвести все необходимые настройки. Если же подключение к вашей сети WiFi было успешным, то веб интерфейс будет доступен по адресу указанному на первом экране Oled дисплея
main_screen1.png
mainscreen2.png
info_screen.png

Обновление прошивки
Обновление прошивки доступно либо через Arduino IDE>Скетч>Загрузка. Либо через веб интерфейс устройства по адресу http://ip.ad.re.ss/update Обновление файловой системы можно так же осуществить несколькими способами.1) Arduino IDE>Инструменты>ESP8266 Sketch Data Upload 2)Через веб интерфейс устройства по адресу http://ip.ad.re.ss/update Поставить флажок возле Filesystem и загрузить fs.bin 3) Вручную через файловый менеджер по адресу http://ip.ad.re.ss/edit заменяя только необходимые файлы. Чаще всего в релизах меняется только index.html, так что если хотите быстро получить доступ к новым функциям без сброса настроек, то этот способ наиболее предпочтителен

Управление кнопками
На основном экране. Одиночное нажатие Кнопки 1 - Выдать порцию корма. Одиночное нажатие Кнопки 2. Перейти на экран настройки будильников. Долгое нажатие кнопки 2. Перейти на экран настроек. На экране будильников. Долгое нажатие Кнопки 2 - переход в режим редактирования. Короткое нажатие кнопки 2 - возврат на основной экран. В режиме редактирования Кнопка 1 - вверх, Кнопка 2 - вниз. Долгое нажатие Кнопки 1 - изменение настроек. Долгое нажатие Кнопки 2 - сохранение параметров и выход из режима редактирования На экране настроек. Кнопка 1 - изменение. Кнопка 2 - переход к следующему пункту. Долгое нажатие Кнопки 2 - сохранение настроек и выход на основной экран

MQTT
Для управления используется топик CatFeeder/feed. Список команд

  • feed - выдать порцию
  • feam xxx - установить размер порции. Где xx число от 0 до 99

Скачать
Актуальная версия проекта всегда доступна на Github по адресу https://github.com/altJSV/CatFeeder
Либо же здесь Скачать
 
Изменено:

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
@Геннадий П, так интернет же есть не всегда. У провайдера в очередной раз оборудование прикажет долго жить, свет "моргнул" и все расписание накрылось медным тазом. А так хоть буду уверен, что при включении света, кормежка будет в заданное время.
Да и в конце-концов в кормушке есть режим точки доступа где выхода в интернет совсем нет. Тут-то время откуда брать?
 
Изменено:

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
CatFeeder 1.2


Добавлено

  • Несколько новых команд для MQTT. Описание в Readme.md
  • Страница в веб интерфейсе с полезной ( и не очень) информацией
  • В веб интерфейс добавлены настройки движения шнека
Исправлено

  • Иногда по срабатыванию таймера порция выдавалась 2 раза подряд
  • Исправлено срабатывание кормушки по таймеру

info_screen.png2022-09-09_19-20-42.png
Скачать можно на github - https://github.com/altJSV/CatFeeder/releases
 

Nikolai96

✩✩✩✩✩✩✩
1 Май 2021
16
0
Добрый день
Делал что то подобное с тингиверс, но там толи движок слабый, толи вся кормушка плохо спроектирована, корм застряет и движок пропускает.
Заинтересовал ваш проект, хотел бы повторить и так сказать не оставить котика голодным.
Могли бы вы сделать список элементов которые нужны для повторения вашего проекта ?
 

superfillodark

✩✩✩✩✩✩✩
29 Май 2021
5
0
Здравствуйте, что за ошибка не могу понять
Arduino: 1.8.10 (Windows 10), Плата:"NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new can abort), All SSL ciphers (most compatible), 4MB (FS:none OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

C:\Users\Alexander\Desktop\Feeder\WebServer.ino: In function 'void WIFIinit()':

WebServer:6:42: error: cannot pass objects of non-trivially-copyable type 'class String' through '...'

Serial.printf("Connecting to %s ", ssid);

^

Несколько библиотек найдено для "NTPClient.h"
Используется: C:\Program
Несколько библиотек найдено для "ESP8266WiFi.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi
Несколько библиотек найдено для "Adafruit_SSD1306.h"
Используется: C:\Program
Несколько библиотек найдено для "ESP8266SSDP.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266SSDP
Несколько библиотек найдено для "Adafruit_I2CDevice.h"
Используется: C:\Program
Несколько библиотек найдено для "ElegantOTA.h"
Используется: C:\Program
Несколько библиотек найдено для "iarduino_RTC.h"
Используется: C:\Program
Несколько библиотек найдено для "Wire.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\Wire
Несколько библиотек найдено для "ESP8266WebServer.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WebServer
Несколько библиотек найдено для "Adafruit_GFX.h"
Используется: C:\Program
Несколько библиотек найдено для "GyverTimer.h"
Используется: C:\Users\Alexander\Documents\Arduino\libraries\GyverTimer
Не используется: C:\Program
Несколько библиотек найдено для "PubSubClient.h"
Используется: C:\Program
Несколько библиотек найдено для "ArduinoJson.h"
Используется: C:\Program
Несколько библиотек найдено для "EncButton2.h"
Используется: C:\Program
Несколько библиотек найдено для "SPI.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\SPI
Несколько библиотек найдено для "ESP8266HTTPUpdateServer.h"
Используется: C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266HTTPUpdateServer
exit status 1
cannot pass objects of non-trivially-copyable type 'class String' through '...'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

1670524514292.png
 

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
Здравствуйте, что за ошибка не могу понять
С библиотеками что-то у вас. Только что проверил. У меня компилируется без проблем. Вам же могу посоветовать просто закомментировать проблемную строку, чтобы далеко в дебри не вдаваться
C++:
Serial.printf("Connecting to %s ", ssid);
По сути никакой полезной нагрузки она не несет, просто отладочную информацию в ком порт выдает.
Ну или замените на такую конструкцию
C++:
Serial.print("Connecting to ", ssid);
Также заметил, что у вас не верно выставлены настройки платы. ДОлжно быть Flash Size: FS 2mb OTA ~1019kb
Без файловой системы не заработает. Оттуда читаются и пишутся настройки ну и веб интерфейс частично из нее подгружается

Могли бы вы сделать список элементов которые нужны для повторения вашего проекта ?
Все элементы необходимые на схеме есть или вам конкретно названия нужны?
И после пары месяцев эксплуатации все же косяк нашел. Кормушка очень капризна к влажности корма. Если слишком влажный, то через какое-то время гранулы слипаются и перестают на шнек сыпаться. Как таковых застреваний нет, движок мощный, плюс еще с вибрацией работает. Просто при проектировании 3д модели стоило горловину для подачи корма чуть пошире сделать. А пока с кормом слегка поэкспериментировал и выяснил, что с Whiskas и Felix в целом без проблем работает. Perfect fit - зависит от партии. Иногда слегка влажноват бывает, гранулы слипаются и иногда в горловине застревают. Purina One 50/50. Но в целом хватает пару раз в день кормушку ногой пнуть, чтобы гранулы разлепились и можно спокойно уходить. Котики голодными не останутся
 

superfillodark

✩✩✩✩✩✩✩
29 Май 2021
5
0
@altJSV,Спасибо за ответ,до этого на ноутбуке пробывал, тоже самое было. А какая у вас версия esp?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
не помню как в esp, но вот ардуина может выводить в print, или в printf 2 аргумента. Достаточно их сложить и можно вывести
Serial.print("Connecting to "+ ssid);
 

superfillodark

✩✩✩✩✩✩✩
29 Май 2021
5
0
Всем спасибо! все проблемы ушли, очистил плату, поставил ядро 3.0.2, до этого на 2.7.4 и сразу прошилась и на строку ругаться перестал

Появилась еще одна проблема, после прошивки, не хочет подключаться к wifi, только через интерфейс, если я отключаю питание, на долгое время, то после включения, плата не подключается к wifi, при включении пишет ip unset, точка доступа высвечивается как esp36EA6E
 

Вложения

superfillodark

✩✩✩✩✩✩✩
29 Май 2021
5
0
@altJSV, да, web интерфейс есть, какой версией ядра esp и ESP8266FS вы шьете?

Все работает пока я не вшью файловую систему, как только вшиваю начинается такое

Если я ставлю ESP8266FS-0.3.0 или 0.4 то система не шьется

[SPIFFS] data : C:\Users\Alexander\Desktop\Feeder\data

[SPIFFS] size : 2024

[SPIFFS] page : 256

[SPIFFS] block : 8192

/bootstrap.min.css.gz
/cat.png
/config.json
/edit.htm.gz
/function.js
/index.htm
/style.css
[SPIFFS] upload : C:\Users\ALEXAN~1\AppData\Local\Temp\arduino_build_582142/Feeder.spiffs.bin

[SPIFFS] address : 0x200000

[SPIFFS] reset : --before default_reset --after hard_reset

[SPIFFS] port : COM3

[SPIFFS] speed : 115200

[SPIFFS] python : python.exe

[SPIFFS] uploader : C:\Users\Alexander\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\tools\upload.py



Python SPIFFS Upload failed!
 
Изменено:

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
Для начала из папки data config.json удалите. SSID и пароль в скетче укажите. Почему-то при прямом редактировании файла на компе при сохранении он битым получается. Потом все настройки в веб интерфейсе сделаете. Или кнопками в кормушке.
Во вторых. Когда ESP прошивали настройки правильно указали? Flash Size: FS 2mb OTA ~1019kb
 
Изменено:

superfillodark

✩✩✩✩✩✩✩
29 Май 2021
5
0
Да проблема походу в нем config.json я утром сам уже в нем копался, удалять не стал просто вбил свои, вроде как проблема ушла, но сейчас точно проверить не могу
 

Nikolai96

✩✩✩✩✩✩✩
1 Май 2021
16
0
@altJSV, Добрый, на стадии сборки вашего проекта, плату прошил все круто.Хотел узнать по поводу застревания корма, вы ранее писали что нужно горло больше сделать, Могли бы вы скинуть исходники 3д моделей?
 

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
К сожалению последних исходников я так и не нашел. Могу скинуть один из ранних вариантов дизайна. Не помню почему я от него отказался, но как основа вполне пойдет
 

Вложения

Nikolai96

✩✩✩✩✩✩✩
1 Май 2021
16
0
@altJSV, подскажи а у тебя есть возможность и желание, подвязать весы HX-711?
 

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
Да наверное можно, но скорее всего в железные проблемы очень быстро упрусь. Для считывания показаний датчика еще 2 пина нужно выделить. CLOCK и DATA, а с ними засада. Безопасные пины все израсходованы, а остальные использовать уже пляски с бубном нужны. То ESP вообще не стартует из-за того, что уровень сигнала на одном из пинов отличается от того, что она ожидает, то работает все в целом через пень колоду. Короче в целом можно попробовать, но боюсь знаний не хватит все это обойти. Ну либо вторую ESP или ардуинку по I2C подключить, но чет не хочется огород городить
 

Veta-Kompozitor

★✩✩✩✩✩✩
6 Ноя 2019
29
10
Собрал схему, но без экрана, работает, но иногда не коректно работакт физическая кнопка 1, выдать порцию.
Какое то время работала правильно, потом стала работать только если удерживать 1 секунду, чуть меньше или чуть больше уже не срабатывает.
Подозреваю что в этот момент я нахожусь в какомто пункте меню и его не вижу. Если нажать ресет не помогает.
Как лучше исправить этот баг, может закоментировать какие то строки чтоб можно было работать без меню пока экран не подъехал?
 

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
@Veta-Kompozitor,
Кнопку одну на D3 подключить. На вкладке functions закомментировать функцию void buttons_check()
Вместо нее вставить эту заглушку
C++:
void buttons_check(){
  btn.tick();
if (btn.click()) {
feed();
  }
}
По нажатию на кнопку будет только выдача порции. Больше ничего. Все настройки через браузер
 
  • Лойс +1
Реакции: Veta-Kompozitor

Veta-Kompozitor

★✩✩✩✩✩✩
6 Ноя 2019
29
10
@altJSV Не стал ставить заглушку, дождался дисплея, теперь появилась проблема яркости при простое, она не хочет снижаться. Не пойму, экран должен погаснуть совсем или стать намного тусклее светить, потому что на глаз я снижение не ощущаю. В коде есть где-то на сколько нужно снизить яркость?

@altJSV строки 185-192, вроде, но не пойму на сколько. И в вебморде время простоя вроде как в секундах, а в скетче в мсек. Но выставить больше 1000 не получается.
 
Изменено:

altJSV

★✩✩✩✩✩✩
23 Фев 2021
29
22
39
projectalt.ru
@Veta-Kompozitor, В скетче нет плавного снижения яркости . то есть либо горит, либо нет.
Реализовать вроде как можно, но о у меня об этом весьма смутные представления. Разве что с контрастностью чуть поиграться или библиотеку пробовать копать. Если верить интернету кому-то это удавалось, но конкретики мало. Просто демонстрация работы
За обработку времни выключения экрана отвечает процедура
C++:
void handle_time_scr() {
  int temp_time_scr;
  temp_time_scr = server.arg("time_scr").toInt(); // Получаем значение time_scr из запроса сохраняем в глобальной переменной
  scr_off_ms=temp_time_scr*1000;
  if (temp_time_scr>0){
  reduceBright.setInterval(scr_off_ms);
  }
  else reduceBright.stop();
  saveConfig();                
  server.send(200, "text/plain", "OK"); // отправляем ответ о выполнении
}
В веб морде время выставляется в секундах. максимальное значение 999 секунд. Или 16 минут 39 секунд. Для того чтобы подсветка горела постоянно необходимо значение в веб интерфейсе сделать равным 0. В процедуре обработчике секунды автоматически переводятся в миллисекунды и перезапускается таймер гашения подсветки. Если вам необходимо выставить большее время ожидания, то можете в /data/index.html изменить эту строку
C++:
<input id="time_scr" value="{{time_scr}}" class="form-control" pattern="[0-9. ]{1,3}" placeholder="Таймаут подсветки">
Конкретно pattern="[0-9. ]{1,3}" Числа в фигурных скобках отвечают за то, сколько цифр можно ввести в данное поле. То есть в данном случае от 1 до 3. Можете 3 заменить на 4 или даже 9, тогда максимальный интервал ожидания можно будет выставить до 999999999 секунд
 
  • Лойс +1
Реакции: Veta-Kompozitor

Veta-Kompozitor

★✩✩✩✩✩✩
6 Ноя 2019
29
10
@altJSV, у меня почему-то сколько в веб морде не выставлю, горит постоянно. Что может быть не так?
 

Nikolai96

✩✩✩✩✩✩✩
1 Май 2021
16
0
Добрый собрал схему, все работает отлично кроме кнопки на D4. Esp8266mod, D3 нормально отрабатывает, D4 при нажатии загорается диод на esp и на этом все. что может быть ?
 

Nikolai96

✩✩✩✩✩✩✩
1 Май 2021
16
0
@Nikolai96, пока как понял у меня там еще диод на самой ESP сидит, Возможно можно переназначить эту кнопку на D0? Выяснил что D0 это gpio 16, пробовал подставлять вместо EncButton2<EB_BTN> btn2(INPUT, 2), EncButton2<EB_BTN> btn2(INPUT, 16). после запуска попадаю сразу в меню с выбором порции и кнопка не работает, кто может подсказать как переназначить кнопку на другой пин ?