WEB-метеостанция

Введение

Прошлой осенью, я поддался искушению и прикупил себе модуль с E-ink дисплеем LILYGO T5-4.7 для того что бы сделать на нём себе WEB-метеостанцию. Конечно, сначала я пошел по простому пути – начал искать готовые прошивки/исходники. Остановился на исходниках LilyGo-EPD-4-7-OWM-Weather-Display (ссылка).

В данной реализации меня привлекло наличие графиков, прогноз на несколько дней. В общем будем делать!
Для начала пришлось адаптировать код под PlatformIO, так как я не пользуюсь Arduino IDE. После я «выкурил» за ненадобностью из кода всё, что относится к имперской системе мер. Сделал отображение давления в миллиметрах ртутного столба, а не в гектопаскалях, мне так привычнее. Добавил направление ветра в секцию прогноза. Классно получилось. Можно наблюдать, как меняется, закручивается ветер. В общем «причесал» под себя.

Но! Но вся эта радость в один прекрасный день полетела в помойку, нет, не весь модуль, а только прошивка. Дело в том, что два или три раза в течение месяца, источник погоды openweathermap.org/, используемый в прошивке дал сбой, а именно, при температуре на улице всего -9°C, данные приходили -20°С. Конечно это не в какие ворота не лезет.

Мой выбор

Ладно, подумал я. Не беда, на openweathermap клин светом не сошелся. Будем искать. И я искал…
Критериев было всего два: рейтинг (что народ любит) и удобство использования. Конечно, народ любит openweathermap, а я его невзлюбил. Перепробовал еще парочку сервисов, в конце концов, мой выбор пал на Yandex. Как-то он роднее, в большинстве случаев очень близко к погоде за окном. Решено, будем использовать Yandex. Но и тут не всё шоколадно. Да, Yandex даёт прогноз погоды на период, очень подробный, но за деньги! Есть тестовый период – 30 дней. Не подходит. Но у Yandex также есть и бесплатный тариф. В бесплатно тарифе доступно:

• фактические погодные значения
• прогноз на два ближайших периода (ночь, утро, день или вечер)

Лимит обращений — 50 запросов в сутки. Ну что ж, два периода так два периода. Я подумал – мне хватит. Будем брать!

Реализация

Раз набор данных другой, то и интерфейс будет другим. Да, с графиками придется распрощаться. Да фиг с ними, достоверность важнее.
Поехали!
От старой прошивки я оставил:
• Отображение направления ветра
• Время захода и восхода солнца
• Строку статуса
• Реализацию пробуждения и сна


Интерфейс

Дисплей поделён на четыре зоны:
Зона статуса – узкая полоска сверху дисплея, на которой отображаются: название населённого пункта; время и дата последнего обновления данных; уровень заряда; мощность Wi-Fi сигнала

Зона фактической погоды – занимает бОльшую часть дисплея, на которой отображаются: иконка погоды; расшифровка погодной иконки; время года; температура; температура ощущения; влажность; давление; время восхода и захода солнца; фаза луны; секция направления ветра, где отображается направление, скорость и скорость порывов ветра.

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



Последнее и, пожалуй, самое главное отличие моей программы от оригинала – это отображение иконок погоды.
В оригинале, все иконки рисуются кодом, то есть программно! Сначала я подумал: кодом так кодом! Можно было бы реализовать соответствие погодного описания соответствующей функции рисования иконки, но я это делать не стал, потому, что не все иконки в лоб соответствовали описаниям Yandex. И что-то еще было, я уж не вспомню.
Yandex, присылает код погодной иконки, по которому можно скачать иконку в формате SVG. Но этот способ не подходит, библиотека дисплея не позволяет отображать SVG. Она даже растр в чистом виде не отображает, хотя в библиотеке есть функция вывода растрового изображения — epd_draw_grayscale_image. Функция в качестве параметров принимает: area (описание прямоугольной области для вывода картинки) и указатель на массив данных картинки. Сама же картинка хранится в специальном заголовочном файле, в котором содержатся: константы размеров и массив картинки. Этот заголовочный файл получается при помощи утилиты на python imgconvert.py. Скармливаем этой утилите JPEG или PNG и на выходе получаем заголовочный файл. Это я всё к тому, что я придумал все погодные иконки хранить в прошивке в растре, и вызывать их по коду иконки, а не программно рисовать. Красиво? Нет! Хранить такое количество иконок в коде, а их сейчас аж 44, в заголовочных файлах – так себе затея.
Сделаем мы вот что! Преобразуем заголовочный файл с картинкой в бинарный файл, на первом этапе руками. Запишем этот файл в SPIFFS. Далее в программе считываем его в память и выводим на дисплей. Разумеется, что в качестве имени файла иконки лучше использовать код иконки, так проще искать. Красиво? Ну, почти. В один из дней, я обнаружил, что на месте иконки пусто! Дело в том, что в моем наборе не оказалось соответствующей иконки. Видимо источник, из которого я взял имена иконок был не полным. На это случай я реализовал следующий алгоритм: если на файловой системе отсутствует нужная иконка, то я скачиваю её с Yandex и сохраняю на SPIFFS в формате SVG, а вместо иконки я вывожу код, что бы видеть что есть новая иконка, требующая добавления в коллекцию. Вот так как-то…
Разумеется, делать эти картинки вручную, поштучно – то еще развлечение. Я написал две маленькие программки на Qt. Первая, используя скрипт на python, преобразовывает в пакетном режиме растровые иконки(преобразованные из SVG) в заголовочные файлы, а вторая программка, преобразовывает заголовочные файлы в бинарные. Таким образом, я очень быстро получил два набора иконок – маленькие(100x100) и большие(250x250). Бинарники получились меньше заголовочников по объёму, меньше места на SPIFFS занимают. Вот теперь красиво!

Фишка

Собственно фишек три. Все они в совокупности приближают нашу поделку к «продукту». В своей прошивке я сделал WEB-интерфейс для настройки станции, FTP-сервер для частичного изменения содержимого SPIFFS и библиотека Elegant-OTA для обновления прошивки по воздуху.

В WEB-интерфейсе есть следующие настройки:
AP SSID – имя вашей Wi-Fi сети.
AP PASS – пароль Wi-Fi сети.
City – название населенного пункта. Можно писать всё что угодно, в запросе погоды не участвует.
Latitude – широта населённого пункта. Участвует в запросе погоды.
Longitude – долгота населённого пункта. Участвует в запросе погоды.
Time zone – временная зона.
Update interval – интервал обновления в часах.
API key – API ключ. Если ключ не введён, то станция будет всегда запускаться в режиме настройки. Ключ необходимо получить в кабинете разработчика учетной записи Yandex. Подробно про сервис API Yandex-погода можно почитать тут: yandex.ru/dev/weather/.
Test data – отладочная опция, требуется для отладки или изменения интерфейса, экономия запросов. При установленной опции, в качестве данных выводятся последние полученные данные.
Кнопка «Confirm» – отправка данных контроллеру.
Кнопка «Firmware» – обновление прошивки.



Тут, в общем, то почти всё очевидно. Пустые поля игнорируются. Если нам надо поправить всего один параметр, то нет нужды снова все прописывать.

FTP-сервер нужен для частичного изменения содержимого SPIFFS или для скачивания новой иконки. FTP-сервер активен в режиме настройки. В качестве FTP-клиента я использую Total Commander.
Настройка FTP в Total Commander:



Прошивка и первый запуск

Первично необходимо прошить модуль с компьютера, а уж потом можно будет по Wi-Fi.
Шаги прошивки:
1. Скачиваем проект: github.com/discover1977/YWInformer.git
2. Открываем проект в PlatformIO
3. Строим проект
4. Строим образ SPIFFS
5. Прошиваем SPIFFS
6. Прошиваем основную программу
После успешной прошивки модуля, станция загрузится в режиме настройки, на станции включена точка доступа. На дисплее будут отображены параметры подключения и Qr-коды для подключения к точке доступа и ссылка страницу настройки.



Qr-коды сделаны для настройки с мобильных устройств. Для активации режима настройки необходимо нажать и удержать самую правую кнопку на модуле. Станция перезагрузиться, и войдёт в режим настройки.


Вот так как-то…

Котейка



Добавить в избранное +137 +199
+
avatar
  • BOBKAQ
  • 16 марта 2022, 22:38
+11
Котейка прикольный!
+
avatar
+5
Симпатично получилось! За рукастость всегда плюс)
Мне бы такую в Череповец))
+
avatar
+2
Ух ты! Земляки!
+
avatar
0
на двоих соберём?
+
avatar
0
Могу подсобить. :-)
+
avatar
+2
Очень цивильно. Производить надо в больших масштабах.
+
avatar
+2
Круто! Только одна претензия не к вам, а вообще, на тему что ни делай все метеостанция выходит. У самого лежит гдето епд от книги и управлять ими тот еще квест и пляска с напряжениями, хотя есть готовые епд контроллеры. Или как у вас дисплеи уже с вшитым контроллером и управление по протоколу.
Лично я пришел к выводу, что eink хорош только в книге, еще немного времени и подешевеют олед матрицы. Или от мобильных телефонов сделают переходник.
Куда информативнее будет выводить на олед, а показывать только в момент, когда юзер смотрит, для этого можно пир датчик экономичный или инфракрасный лазерный дальномер. Вот вы сколько раз в день используете информацию с него и сколько секунд за раз? Интересно сколько потреблял бы oled если бы вывести данные одним цветом максимально подобрав экономичные шрифты, но такие же разбрчивые на секунед 5-6?
В конце-концов хочу сказать, что интерфейс у вас получился лучше, все эти графики понты, а у вас реально полезная информация. За это плюс, ну и за труды.
+
avatar
+1
Согласен, ничего кроме метеостанции на ум не пришло. Смотрю два раз в будние дни, утром и вечером, на выходных чаще.
+
avatar
  • tklim
  • 16 марта 2022, 23:43
+2
Все несложно если паять смд умеете.
Программная часть чуть сложнее.
/экран от 9,7" киндла
+
avatar
  • VlaoMao
  • 17 марта 2022, 17:17
0
Тоже начинал с такой, экран разбитый пришел((
+
avatar
  • tklim
  • 19 марта 2022, 22:44
0
Мой китайцы хорошо запаковали.
но сам по себе экран «ориджинал» так себе. Мое фото вполне реально отображает «контрастность».
А так, для своей задачи — показывать погоду возле входной двери — вполне ок
+
avatar
0
Метеостанция это простое, что уже есть в паблике.
Я брала такой лилиго чтобы запилить вывод google календаря со встречами, вывод тасков из Jira, todo list и т.д. Но до этого проекта пока так руки так и не дошли, на столе до сих пор стоит метеостанция :)
+
avatar
0
Есть проекты на hackaday, и там толтко календарь, туду лист или метеодисплей. Это ограничение диктуется медленным обновлением экрана и для большего заполнения нужно пиксели перемагничивать. Лучшее решение это дисплеи пиксели на основе масла (вроде мирасол) или технология трансфлетивного от шарпа. Но все это дорого, мало, и просто популярно тем чтобы заняться сексом, а на сколько это решает проблему это для гиков вторично.
Во вторых разрешение и диагональ у еинк и одноцветность убивают все идеи на корню.
Есть более технологичные решения и в метеостанции и в календаре. От переносного до стационарного.
+
avatar
0
еинк уже давно есть и 3-цветные и 8-цветные, и размеры до 12 дюймов, так что для проектов еще не все потеряно :)
+
avatar
+2
Цена их сопостовима с проектором на стену лазерным или китай планшет с олед панелью + тонкий аккум на все 12 дюймов, если нужна портативность, к тому же можно сделать беспроводную зарядку. И самый сок, в том что не нужно ковырять это в ide, а завести с помощью более высокого уровня яп, или сделать вывод html с сервера
+
avatar
  • ASPtr
  • 17 марта 2022, 03:00
+20
Печатная плата — есть, вылизанная прошивка — есть, корпус — нет!!! Эх, как мне это знакомо ((
Хотя для своей метеостанции, сподобился таки сделать. Всё таки элемент интерьера.

+
avatar
+2
Супер!
+
avatar
0
Печатная плата — есть, вылизанная прошивка — есть, корпус — нет!!! Эх, как мне это знакомо ((
Это да, извечная проблема. Но сейчас придумали 3д принтеры — все по легче :)
+
avatar
  • Voveton
  • 17 марта 2022, 05:55
+1
Обратите внимание на сервис foreca.ru(com, org, me) Служба получает данные от региональных метеостанций. Довольно точный прогноз дается, с интервалом обновления ~ 1.5 час.
З.ы. сейчаст посмотрел ради интереса, информация имеется в Вашем регионе с метеостанций Белозерска, Устюжна, Череповца. ))))
+
avatar
  • shmikt
  • 17 марта 2022, 07:41
0
С narodmon не завязано?
+
avatar
0
Нет
+
avatar
0
и не нужно пусть завидуют))
+
avatar
  • okela
  • 17 марта 2022, 08:42
+3
А более подробную инструкцию где курить??
+
avatar
  • xkspy
  • 17 марта 2022, 09:27
+1
тоже бы хотелось бы увидеть (узнать), как для чайников )))
+
avatar
+1
плюсую,
уже с первого шага не совсем стандартно понятно где и как эту PlatformIO брать и как устанавливать.
С установкой на Ардуино IDE проблем не возникло совсем.
А автору — большой респект за труды, молодец, заморочился и почти с 0 все запилил!
+
avatar
0
Как устанавливать и настраивать PlatformIO — это уже другая статья, их в интернете навалом.
+
avatar
0
по приведенному описанию ни один человек не сможет повторить то о чем написано за исключением небольшой группки, которая и сама может запрограмить подобное
вопрос — для чего тогда все эти буквы в посте сверху
самолюбие тешить?
признание?
или…
+
avatar
  • redcap
  • 17 марта 2022, 22:31
+2
по приведенному описанию ни один человек не сможет повторить то о чем написано за исключением небольшой группки,
И не нужно. Поставил приложение на смартфон и всего делов :)
+
avatar
  • rustamt
  • 17 марта 2022, 21:30
0
ставить полную IDE и что-то настраивать там в общем-то и не нужно, для сборки прошивки достаточно иметь установленый питон и pip, дальше поставить модуль и запустить сборку типа такого:
pip install --user platformio
~/.local/bin/platformio run

под винду соответственно путь к platformio чуть другой(где-то внутри ~/AppData/Roaming/Python/), но суть та же. оно то, конечно, для тех кто в теме и так все понятно, но для остальных можно было бы добавить инструкцию по быстрой сборке в README файле. хотя наверняка и к этому бы кто-то придрался, типа непонятно как питон скачать ;)
+
avatar
  • Kabron
  • 17 марта 2022, 08:44
0
А я еще добавил кажущуюся температуру
+
avatar
  • okela
  • 17 марта 2022, 08:58
0
так там же есть, ощущается
+
avatar
  • Kabron
  • 17 марта 2022, 17:40
+1
Сорян спутал с оригиналом
+
avatar
  • Bako
  • 17 марта 2022, 09:20
+2
Удивился за «претензию» к Яндексу из-за платности. Это как раз нормально для этой конторы. Я бы больше опасался точности их погоды. Фиг знает, где они её берут, может тоже по бесплатной подписке, но ситуации когда у них солнце в час дня, а ты в лесу в футболке под проливным дождём пошёл собирать грибы поверив прогнозу — довольно частое явление.
+
avatar
0
Да, наверное звучит как претензия, но на самом деле констатация факта.
+
avatar
+1
Прочитал название гнас пункта — ТОШНИЛОВО :)))

Если без шуток, отличный проект. За 30 баксов до МИРА было отлично :((((
+
avatar
0
Стесняюсь спросить: где вы Тошнилово прочитали?
+
avatar
0
В левом верхнем углу на первой картинке :)))
+
avatar
0
А где можно ознакомиться со схемой?
+
avatar
+2
www.lilygo.cn/claprod_view.aspx?TypeId=62&Id=1386&FId=t28:62:28
Схемы нет, есть готовый модуль.
+
avatar
+13
Вариант моей станции) Висит так лет 5 уже с открытым приложением погоды)
Снизу крючок из икеи, позади магнитом к стене
+
avatar
  • and361
  • 17 марта 2022, 16:07
0
Агонь! валяется у меня роскошный 6" рабочий фаблет сони t2 ultra на андроиде еще 5м, все никак не решу куда приспособить, в car-pc бы но никак — не включается этот фаблет при подаче его в порт usb, ну не умеет.
Есть мысль из него плейер-часы-метеостанцию на кухню слабать.
+
avatar
  • loole
  • 17 марта 2022, 21:42
+8
Даже четвертый Андроид для такой ерунды не приговор.
Тратить время на постройку с нуля- особый вид изврхобби…
+
avatar
+3
Вот мой вариант часов перед рабочим столом

Андроид 4.0.4
+
avatar
0
О, прикольно. Что за софт используется?
+
avatar
  • sav1812
  • 24 марта 2022, 09:43
0
Дисплей не выгорает?
+
avatar
+1
старые планшеты ведь LCD матрицы, они особо не выгорают, только подсветка тускнеет
+
avatar
  • sav1812
  • 25 марта 2022, 02:37
0
Как показывает опыт — выгорают… Если эксплуатировать в режиме статичного изображения, как это и бывает в метеостанциях — наверняка останется видимый после выключения след.
+
avatar
+4
Реализация отличная! Но как по мне — интерфейс перегружен не слишком нужной инфой. Для меня эталонным стал Gismeteo. Метеостанция по аналогии с комментом выше из старого смартфона Nexus 5. Очень удобно собираться утром — видишь температуру и осадки на день.
+
avatar
0
Гениальная идея, у меня как раз валяется старый ненужный аппарат :)))))
+
avatar
  • Genn0k
  • 21 марта 2022, 14:04
0
я тоже пошел по этому пути. поставил на самсунг который уже и не открывает почти ни чего. Параллельно запустил «Маяк» с интернет радио. Висит на работе, рассказывает новости, поёт, пикает по часам, а надо погоду посмотреть — тыкнул пальцем.
+
avatar
0
Добрый вечер, какой использовали вариант 18650 9102 Chip или PH 2.0 9102 Chip?
+
avatar
0
18650
+
avatar
+4
Финальный вариант веселый. Кто-то день не может вспомнить, некоторые месяц. А тут проснулся и сразу видишь: сегодня зима! :)
+
avatar
0
Архи важная информация, может быть полезной после новогодних каникул.
Яндекс счел важным сообщить время года, я вывел на дисплей :-)
+
avatar
0
для бункера норм
+
avatar
0
Идея интересная. Парни, а вообще в природе существует что-то типа конструктора, чтоб можно было самому собрать какую информацию, и как отображать на экране модуля? Может кинете ссылкой, где почитать про это?
+
avatar
0
Вот прямо с языка снял, вчера думал об этом.
Вопрос в источнике данных. У всех по разному, нет единого стандарта.
+
avatar
0
Надо унифицировать данные, потом можно думать о конструкторе.
+
avatar
0
1. Можно ли отобразить скорость ветра на неделю?
2. Возможна ли аналогичная реализация на основе, например, б/у электронной книги?
3. Как бы еще прикрутить gps модуль с Али, что бы он локацию автоматом брал?
4. Что с реализацией подсветки?
+
avatar
+1
1. Я использую Яндекс, бесплатно есть только текущая погода и на пол суток вперёд, два периода.
2. Возможно. В интернете есть примеры.
3. Тоже можно, думал об этом. Решил, что не нужно. Надо всего раз забить координаты.
4. Нет у этого модуля подсветки.
+
avatar
0
GPS необходим, т.к. планирую использовать на яхте.
+
avatar
0
Посмотрите еще accuweather.com там есть данные по качеству воздуха.
+
avatar
  • sav1812
  • 25 марта 2022, 02:38
0
скорость ветра на неделю
А это вообще возможно, хотя бы в теории??
+
avatar
+1
Сервисов предостаточно, тот же windfinder, wunderground, gismeteo, windy. Самый удобный windguru, но он заблокировал наши ip.

Дополнительная информация

+
avatar
  • sav1812
  • 25 марта 2022, 05:00
0
Да я не про сервисы — про принципиальную возможность предсказания скорости ветра на такой период. :)
+
avatar
0
Для этого надо понимать природу возникновения ветра.
+
avatar
  • sav1812
  • 25 марта 2022, 17:09
0
Мало этого.
Очень многое надо не только понимать, но и знать текущее состояние, взаимное влияние и характер изменений всего этого. Вот я и интересуюсь, насколько это реально в наше время.
+
avatar
+1
Сажу проще: я занимаюсь парусным спортом и недельный прогноз помогает в походах. Редко когда подводит. Если будет дуть больше 8 узлов, заранее сработают часы «Storm Alarm». Все остальное, как с температурой воздуха — относительно.
+
avatar
  • sav1812
  • 26 марта 2022, 02:06
0
Ну, помогает — и хорошо. :)
Хотя долгосрочные прогнозы в существенной степени относятся — для меня, во всяком случае — к вопросам веры… :))

Ну а ответ на вопрос о принципиальной возможности предсказаний ветра искать мне, видимо, стоит где-то в другом месте. :)