Часы на esp8266 и max7219 + android управление

Тема в разделе "Глядите, что я сделал", создана пользователем IvanUA, 28 авг 2017.

?

Вы повторили это проект?

  1. Нет (просто ознакомился)

    35 голосов
    13,2%
  2. Да, один раз (попробовал)

    111 голосов
    41,9%
  3. Да, не однократно

    123 голосов
    46,4%
Можно выбрать сразу несколько вариантов.
  1. urg2000

    urg2000 Нерд

    После отключения питания или перезагрузки если был пассивный режим зуммера, активируется функция активный зуммер на форуме уже писали об этом баге.

    Может уже кто-то добавил в прошивку выход на реле через MQTT или веб кнопку (будильник) с удовольствием протестировал бы. У меня прозрачный корпус, 3-4 светодиода можно завести на реле (мосфет) и получился управляемый ночник или свето-будильник
     
  2. IvanUA

    IvanUA Гуру

    Какая у Вас версия прошивки?
     
  3. max50a5

    max50a5 Гик

    В версии 4.1 все хорошо.
     
  4. urg2000

    urg2000 Нерд

    Последняя 4.1 переделал свои часы в 2х строчные и наблюдается такая проблема после выключения или сброса через веб интерфейс. Ставил bin фаил
     
  5. IvanUA

    IvanUA Гуру

    Тут как бы ясно
    А тут не совсем
     
  6. SteinMark

    SteinMark Гик

    Иван здравствуйте! прошивка с датчиком Sgp 30 будет включена в файл APK?
     
  7. IvanUA

    IvanUA Гуру

    Да, будет позже обновление андроид приложения.
     
  8. urg2000

    urg2000 Нерд

    Были часы однострочные с прошивкой двухмесячной давности, добавил ещё одну матрицу залил прошивку 4.1 bin и после перезагрузки заметил такую проблему с зуммером, на форуме уже кто-то писал о такой-же проблеме.

    По просьбе: добавить выход на GPIO 9 или 10 для MQTT или веб кнопки? Будет когда не буть реализовано?
     
  9. IvanUA

    IvanUA Гуру

    За тип зуммера отвечает переменная buzzerSet - проверил (не bin конечно) - эта переменная сохраняется в памяти. Так что при выключении/сбросе, она должна сохраняться. Попробуйте скомпилировать прошивку самостоятельно. Если проблема останется, то будем думать в чем может быть проблема.
    А как вы видите реализацию?
     
    Последнее редактирование: 3 июл 2020
  10. urg2000

    urg2000 Нерд

    К сожалению я в программировании не силён, могу принять участие в тестировании если кто-то реализует.
    Если вообщем делать через web интерфейс будет кнопка при нажатии её на пин будет приходить высокий уровень если ещё раз нажаты то на пине будет низкий уровень.
    По MQTT топики с 1 высокий уровень на пине если в топик 0 пришёл то перевести пин в низкий уровень.
    Я это так вижу.
    На ютубе попадался ролик часы с передатчиком 433мгц по MQTT сигнал получает передатчик передаёт или через пульт, приёмник включает любую нагрузку
     
  11. urg2000

    urg2000 Нерд

    Решил через Ардуино ИДЕ залить прошивку, ага :mad: Подскажите какие настройки есп комунити версию выставить может ещё что где-то.
    Короче ошибки сыпит
    VZ_Clock_x2_v4.1:310:14: error: 'loadConfig' was not declared in this scope

    loadConfig();
     
  12. Pigulka1

    Pigulka1 Нуб

    Dziękuję Ivan za twoją pracę.
     
  13. IvanUA

    IvanUA Гуру

    Nie ma za co. Proszę korzystać się.
    [​IMG][​IMG]

    PS. Кстати о птичках, в этом сообщени (Часы на esp8266 и max7219 + android управление) я давал ссылку на тестовую версию х2_4.2 (на гугло диске). Там в основном изменение в поддержке датчика углекислого газа, но в целом, этого бинарника хватит что бы проверить сбрасывается настройка базера или нет.
     
    Последнее редактирование: 5 июл 2020
  14. SteinMark

    SteinMark Гик

    в этой версии mqtt не работает должным образом, только в Informer/mess выводит текстовые сообшение и предупреждения с сенсора sgp 30.
    Как можно сделать?
     
  15. IvanUA

    IvanUA Гуру

    Вы должны полностью стереть "ЕСП" при смене прошивки.
     
  16. IvanUA

    IvanUA Гуру

    Ну тут как бы с программированием проблем нет. Я просто не понимаю смысла в этом действии. Вы хотите к часам к примеру прилепить еще реле, и через МКТТ или веб управлять этим реле?. А не проще тогда просто взять отдельную еспху и и нагрузить ее функцией включения реле, тем более что прошивок для этого более чем предостаточно.... Поймите правильно, но с таким подходом это уже не часы, а домашний комбайн получается))) Или я все таки не совсем верно все понял? Поясните плз.
     
  17. ttolich

    ttolich Нерд

    В первую очередь хочу поблагодарить автора проекта за то, что поделился своей работой, тем самым дал возможность попробовать, поучиться и что-то даже изменить для себя. Отдельное спасибо за комментарии. Я на основе скетча сделал школьные часы. Так как работаю учителем информатики в школе, то делал так, как мне кажется удобным. При этом огромная проблема в том, что мой личный опыт программирования микроконтроллеров – менее месяца, да и Си – не моя стихия, потому мои добавки, мой спагетти-код безусловно ужасен, и показывать его стыдно. Но так как проект уже работает, могу рассказать детали, возможно кто-то захочет взять себе мои идеи или просто сделать что-то подобное свои детям в школу в качестве подарка.


    Согласно украинскому законодательству о языке – все сообщения такие школьные часы должны выводить на украинском (альтернативно – лишь английском) – еще раз спасибо автору скетча – в нем все предусмотрено на сей счет.


    Итак – школьные часы.

    Оборудование: плата контроллера на базе esp8266 (в моем варианте NODE MCU v3) + светодиодная панель (однострочная, четыре модуля)

    Возможности:

    — Показывают точное время (как ни странно :)

    — Показывают дату, день недели, показывают три погоды: сейчас (температура, ветер, давление, влажность), прогнозы на сегодня и на завтра - это все уже есть в скетче

    — Если идет урок, показывают который сейчас идет урок по номеру и время, когда он завершится (например: Третий урок завершится в 11:15)

    Если идет перемена, показывают, когда начнется ближайший урок и которым он будет по номеру, это позволит планировать время (например: Четвертый урок начнется в 11:30)

    mqtt я не поборол, но подумал, что у школы есть сайт на нормальном хостинге, я же могу туда положить файл, в котором в json-формате будет все, что нужно. Тем более в скетче видно, как красиво и просто все это делается в плане десериализации. А потому…

    — Часы умеют показывать нестандартные расписания звонков (рабочая суббота, вторая смена, сокращенные уроки) - информацию о таких нестандартных случаях часы сами берут на сайте школы. Это удобно - забросили на хостинг сегодняшнее нестандартное расписание звонков — все школьные часы его скачали и начали использовать при показе.

    — Часы, подготовленные для младшей школы могут показывать расписание звонков для младшей школы (там уроки короче, все что нужно – просто стягивать с сайта иной файл и уменьшить скорость перемещения бегущей строки – пусть малыши читают, мотивация).

    — Если часы находят на сайте школы информационные сообщения (еще один json файл), они начинают их показывать на экране согласно графика. Например, в файле на сайте школы написано, что сообщение «Мойте руки с мылом» необходимо показывать каждую минуту, а сообщение «Вы можете в любое время бесконтактно измерить температуру» - раз в 10 минут. Актуально, такова жизнь. Тексты сообщений и периодичность показа можно корректировать прямо на сайте - часы скачают себе обновленные файлы и будут уже новыми пользоваться при показе. Если в настоящее время пришло время показать несколько сообщений, они покажутся все последовательно.

    — В ночное время, чтобы не крутить кучу информации, часы показывают только время, с уменьшенной яркостью светодиодов – это есть в скетче

    — Светодиодная матрица может быть с зелеными, синими или красными светодиодами, ее можно заменять – можно попробовать или подобрать как лучше видно в данном месте или выбрать системный цвет для всех часов школы.


    Так как в стандартном скетче веб-сервер часов открыт, то я не могу его в школе использовать в таком виде. Любой сканер сети покажет айпишники устройств в сети, и найти часы несложно. Конечно, в школьной WiFi сети более сотни устройств обычно (все коридоры школы уже несколько лет накрыты WiFi полностью по всем этажам), но попробовать поймать можно (собственно я и учу своих учеников, что открытый веб-сервер с настройками – дыра в безопасности). Потому просто веб сервер выключил. Если кто подскажет кусок кода, который сделает вход в веб-сервер через пусть простую, но авторизацию, буду рад. Я такого явно пока не нашел. Если б так, то таким образом можно будет подправлять прошивку, заливая через web новую, например. А то после того как я выключил поднятие веб-сервера, то теперь нужно все точно вписать в скетч (название точки доступа, например) и тогда прошивать. Что не так – топать снимать контроллер и перепрошивать снова. Но пока именно так, потому что все уже работает и с точки зрения безопасности вроде как в порядке.

    Буду рад, если кому пригодятся идеи из поста и еще раз спасибо автору проекта за проделанную работу и форумчанам. Интересно здесь.
     
    IvanUA и Pigulka1 нравится это.
  18. ИгорьК

    ИгорьК Гуру

    Стыдно бояться высказываний какого-нибудь му@ка. Часы работают? Значит код великолепный.
     
    IvanUA, Pigulka1 и issaom нравится это.
  19. IvanUA

    IvanUA Гуру

    Мне кажется что здесь для детей было бы удобно видеть сколь осталось времени перемены до следующего урока. (например: Четвертый урок начнется через 8 минут)
    MQTT вам позволит отправлять на часы срочные сообщения. При чем если для разных часов прописать разные топики, то сообщения можно будет отправлять на определенные часы. Но, в вашем случае, я бы поднял MQTT сервер на собственной платформе (у меня он стоит на OrangePiZero), - это бы обезопасило ваши сообщения и вы бы не зависили от внешнего канала интернет, и всяких там условий тарифного плана MQTT сервера.
    Я когда то тоже задумывался над этим вопросом. И думаю что в скором времени постараюсь реализовать.

    Самое простое что мне приходит на ум это:
    1. Строка запроса страницы должна содержать авторизационные данные
    сейчас к примеру 192.168.0.100/index.html
    а должно быть 192.168.0.100/index.html?auth=1234asdf5678
    И так каждый запрос страницы....
    2. Как обработать этот запрос:
    сейчас так server.on("/index.html", [](){server.send_P(200, "text/html", P_index);});
    а должно быть так server.on("/index.html", auth_index);
    Тоесть мы при запросе страницы index, не сразу отдаем веб страницу, а переходим на функцию котора проверит есть ли в запросе авторизационные данные, и если они совпадают, то выдаст страницу...
    к примеру так:
    Код (C++):
    void auth_index() {
      if(server.arg("auth")==auth) server.send_P(200, "text/html", P_index);// auth - переменная которая содержит авторизационные данные
    }
    3. Во все запросы с веб страниц на переход на другие страницы тоже стоит поправить, что бы они тоже содержали авторизационные данные. Это немого сложнее, но стоит только попробовать и разберетесь. Аналогичные функции уже используются в скетче.
    4. Ну и стоит конечно сделать страницу 192.168.0.100/ - для авторизации. К примеру написать, что то типа, вы подключаетесь к часам, введите ключ авторизации + input поле и кнопка "ОК". Пользователь вводи код типа 1234asdf5678 и отправляет его на часы. Часы проверяют, и если он совпадает, то выдают к примеру страницу настройки WiFi а от туда уже можно добраться ко всем остальным страницам.

    ПС. Будут вопросы пишите в личку, чем смогу, постараюсь помочь.
    ППС. Вот кстати еще о чем подумалось, в принципе как вы выключили отображение веб интерфейста, то его так же можно дистанционно выключать и включать при помощи MQTT или дописать немного кода и через телеграмм бота к примеру)))
     
    Последнее редактирование: 6 июл 2020
    ttolich нравится это.
  20. SteinMark

    SteinMark Гик

    Ivan! Доброе время суток! В тестовой прошивке с сенсором SGP30 на всех языках при выводе 2 предупреждения отсутствует первая буква пример в
    немецком: "ACHTUNG !!! ... TVOC = 0 " нормально, - далее "CHTUNG !!! ... eCO2 = 400"
    английском "TTENTION!!! ... eCO2 = 400"
    украинском "(символ)ВАГА!!! ... еСО2 = 400
    русском "(символ)НИМАНИЕ!!! ... еСО2 = 400
    польском - просто "WAGA!!! ... = 400"
    Временно решил пробелами tAlarm = в скетче перед " ACHTUNG !!! ";
    tAlarm = " ATTENTION!!! ";
    tAlarm = " УВАГА!!! ";
    tAlarm = " ВНИМАНИЕ!!! ";
    tAlarm = " UWAGA !!! ";