Оглавление:

Еще одна умная метеостанция, но : 6 шагов (с изображениями)
Еще одна умная метеостанция, но : 6 шагов (с изображениями)

Видео: Еще одна умная метеостанция, но : 6 шагов (с изображениями)

Видео: Еще одна умная метеостанция, но : 6 шагов (с изображениями)
Видео: Как не про**ть ещё один год? 2024, Ноябрь
Anonim
Image
Image
Еще одна умная метеостанция, но …
Еще одна умная метеостанция, но …
Еще одна умная метеостанция, но …
Еще одна умная метеостанция, но …
Еще одна умная метеостанция, но …
Еще одна умная метеостанция, но …

Хорошо, я знаю, что таких метеостанций доступно повсюду, но потратьте несколько минут, чтобы увидеть разницу …

  • Низкая мощность
  • 2 дисплея электронной бумаги…
  • но 10 разных экранов!
  • ESP32 на основе
  • акселерометр и датчики температуры / влажности
  • Обновление Wi-Fi
  • Чехол для 3D-печати

и много других полезных трюков…

Основная идея - отображать различную информацию на обоих дисплеях в зависимости от ориентации бокса. Корпус выполнен в форме параллелепипеда, брусчатки, с своеобразным ремнем, выполняющим роль ступни.

Запасы

Как видите, система состоит из 2-х экранов для электронной бумаги и коробки, напечатанной на 3D-принтере. Но в нем много чего:

  • ESP32
  • Один акселерометр MPU6050
  • Датчик DHT22
  • LiPo аккумулятор
  • Печатная плата для соединения всего этого
  • Самодельные нитки duPont

и подключение к Wi-Fi. Фактически заявлено 3 сети, система тестирует их одну за другой, пока не удастся подключиться.

Шаг 1. Зачем нужна еще одна метеостанция?

Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?
Зачем нужна еще одна метеостанция?

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

Акселерометр определяет движение и ориентацию и запускает дисплеи.

Для экономии энергии я выбрал экраны из электронной бумаги (см. Ссылки ниже), которые сохраняют изображение, даже если они больше не работают. Точно так же для ESP32 я выбрал модуль Lolin32 (известный своей бережливостью), и мне пришлось научиться управлять глубоким сном и пробуждением при прерывании, генерируемом акселерометром.

Экраны подключаются через SPI, я довольно долго поискал, прежде чем найти правильные контакты для подключения их к ESP32, зная, что мне также нужен I2C для акселерометра, контакт для чтения DHT22 и 2 других для измерения напряжения батареи. ESP32 почти полностью заряжен! Зная, что некоторые контакты доступны только для чтения (я использовал их для датчика DHT), а другие нельзя использовать вместе с Wi-Fi, было немного сложно найти правильную конфигурацию.

Коробку можно ориентировать в 4-х направлениях, плюс плоскую. В итоге получается 4 * 2 + 2 = 10 возможных типов информации для отображения всего на 2 экранах. Таким образом, он позволяет отображать множество вещей:

  • Дата и святой дня
  • Текущее время
  • Прогноз погоды на сегодня
  • Прогнозы погоды на ближайшие часы
  • Прогнозы погоды на ближайшие дни
  • Уровень заряда аккумулятора
  • А так как у меня еще оставалось место, случайная цитата со специализированного сайта.

Шаг 2: Что вам нужно?

Что тебе нужно ?
Что тебе нужно ?
Что тебе нужно ?
Что тебе нужно ?
Что тебе нужно ?
Что тебе нужно ?
  • ESP32: модуль Lolin32 (очень низкое энергопотребление, оснащен разъемом для аккумулятора, может заряжать аккумулятор через USB plus)
  • 2 дисплея электронной бумаги: 4,2 дюйма и 2,9 дюйма. Выбрал модели из магазина Good Display.
  • Датчик DHT22
  • Акселерометр MCU6050 - датчик гирометра I2C
  • LiPo аккумулятор
  • Для измерения напряжения батареи: 2 резистора 10 кОм, 1 резистор 100 кОм, 1 конденсатор 100 нФ, 1 транзистор MOSFET
  • Припой и паяльник, печатная плата
  • Доступ к 3D-принтеру для кейса

Прикрепленное изображение показывает положение всех компонентов на плате: мне пришлось сэкономить место, чтобы поместиться в корпус, который не должен быть слишком большим.

Чтобы получать данные о погоде, вам также необходимо зарегистрироваться в API погоды и поместить ключи в нужные места в файле Variables.h (см. Ниже).

Веб-сайты о погоде:

  • Apixu
  • аккувезер

Шаг 3. Этот проект заставил меня задуматься и многому научиться …

Этот проект заставил меня задуматься и многому научиться …
Этот проект заставил меня задуматься и многому научиться …
Этот проект заставил меня задуматься и многому научиться …
Этот проект заставил меня задуматься и многому научиться …
Этот проект заставил меня задуматься и многому научиться …
Этот проект заставил меня задуматься и многому научиться …

Эта система должна была быть маломощной, чтобы вам не нужно было заряжать аккумулятор каждую ночь … Для экономии энергии я выбрал экраны из электронной бумаги, которые сохраняют дисплей, даже если они больше не питаются. Точно так же для ESP32 я выбрал модуль Lolin32 (известный своей бережливостью), и мне пришлось научиться управлять глубоким сном и сигналом пробуждения при прерывании, генерируемым акселерометром.

Коробку можно ориентировать в 4-х направлениях, более плоскую. В итоге получается 4 * 2 + 2 = 10 возможных типов информации для отображения. Таким образом, он позволяет вам делать множество вещей: дату и святой дня, время, прогноз погоды на сегодня, прогнозы погоды на ближайшие часы или дни, уровень заряда батареи и случайную цитату со специализированного веб-сайта.

В Интернете есть что искать, и, как вы знаете, Wi-Fi - враг энергосбережения …

Таким образом, мы должны управлять подключением, чтобы отображать актуальную информацию, не тратя слишком много времени на подключение. Еще одна довольно сложная проблема: сохранение достаточно точного времени. Мне не нужен RTC, так как я могу найти время в Интернете, но внутренние часы ESP32 немного дрейфуют, особенно в периоды сна. Мне нужно было найти способ оставаться достаточно точным, ожидая сброса часов через Интернет. Я повторно синхронизирую его в Интернете каждый час.

Таким образом, существует компромисс между автономностью (частотой подключения к Интернету) и точностью отображаемой информации.

Еще одна проблема, которую необходимо решить, - это память. Когда ESP32 находится в глубоком спящем режиме, память теряется, за исключением того, что называется RTC RAM. Размер этой памяти составляет 4 МБ, из которых только 2 могут использоваться для программы. В этой памяти я должен хранить различные программные переменные, которые должны сохраняться от одного выполнения к другому после фазы сна: прогнозы погоды, время и дата, имена файлов значков, цитаты и т. Д. Мне пришлось научиться с этим справляться..

Говоря об иконках, они хранятся в SPIFFS, файловой системе ESP32. После закрытия бесплатного API погоды Wunderground мне пришлось искать других бесплатных поставщиков данных о погоде. Я выбрал два: один для погоды на текущий день с прогнозом на 12 часов, а другой для прогнозов на несколько дней. Значки не совпадают, поэтому у меня возникли две новые проблемы:

  • Выберите набор иконок
  • Сопоставьте эти значки с кодами прогнозов 2 сайтов.

Это соответствие также хранится в ОЗУ RTC, поэтому его не нужно перезагружать каждый раз.

Последняя проблема с иконками. Невозможно хранить их все в SPIFFS. Слишком мало места для всех моих файлов. Пришлось делать сжатие изображения. Я написал сценарий на Python, который считывает мои файлы значков и сжимает их в RLE, а затем сохраняет сжатые файлы в SPIFFS. Вот и держится.

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

Данные, читаемые в Интернете, часто представлены в формате json: данные о погоде, святой дня. Для этого я использую (отличную) библиотеку arduinoJson. Но цитаты не такие. Я беру их со специального сайта, поэтому мне приходится читать их, просматривая содержимое веб-страницы. Для этого мне пришлось написать специальный код. Каждый день около полуночи программа заходит на этот сайт, считывает около десяти случайных цитат и сохраняет их в оперативной памяти RTC. Один из них отображается наугад, когда корпус ориентирован большим экраном вверх.

Передаю вам проблему отображения символов с диакритическими знаками (извините, но кавычки на французском языке)….

Когда маленький экран поднят, отображается напряжение батареи с рисунком, чтобы лучше видеть оставшийся уровень. Необходимо было сделать электронную сборку для считывания напряжения аккумулятора. Поскольку измерение не должно разряжать аккумулятор, я использовал схему, найденную в Интернете, где в качестве переключателя используется полевой МОП-транзистор, чтобы потреблять ток только во время измерения.

Для того, чтобы собрать эту схему и поместить в коробку все, что я хотел как можно меньше, мне пришлось сделать печатную плату для соединения всех компонентов системы. Это моя первая печатная плата. Мне повезло, потому что с этой стороны с первого раза все получилось хорошо…

См. Карту имплантации: «Запретная зона» - это область, зарезервированная для подключения USB-кабеля. Модуль Lolin32 позволяет заряжать аккумулятор через USB: аккумулятор заряжается, если подключен USB-кабель, и модуль при этом работает.

Последний пункт: шрифты. Их нужно было создавать и хранить разного размера, жирные или нет. Библиотека Adafruit GFX очень хорошо позаботится об этом, если вы установили файлы шрифтов в правильный каталог. Для создания файлов я использовал сайт Font Converter, очень удобно!

Убедитесь, что вы выбрали:

  • Предварительный просмотр: TFT 2,4 дюйма
  • Версия библиотеки: Шрифт Adafruit GFX

Итак, подведем итог: большой проект, который позволил мне многому научиться

Шаг 4. Использование дисплеев для электронной бумаги

Использование дисплеев для электронной бумаги
Использование дисплеев для электронной бумаги

Главный недостаток этих экранов хорошо виден на видео: обновление дисплея занимает одну или две секунды и осуществляется миганием (альтернативное отображение нормальной и инвертированной версий двух экранов). Это приемлемо для информации о погоде, потому что я не очень часто ее обновляю (каждый час, кроме смены ориентации окна). Но не на время. Вот почему (и для ограничения потребления) я все еще использую отображение ЧЧ: ММ (а не секунды).

Поэтому пришлось искать другой способ обновить дисплей. Эти экраны (некоторые из них) поддерживают частичное обновление (применяемое либо к области экрана, либо ко всему экрану…), но для меня это было не очень хорошо, потому что мой большой экран (на котором отображается время) хранит призраки пикселей. которые заменены. Например, при переходе от 10:12 к 10:13 «2» немного видна внутри «3», и становится еще более заметной после «4», «5» и т. Д. Чтобы указать, что это относится к моему экрану: я обсуждал это с автором библиотеки отображения электронной бумаги GxEPD2, который сказал мне, что он не наблюдал этого явления на своих собственных экранах. Мы пытались изменить параметры, но безуспешно в охоте на призраков.

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

Шаг 5: Делаем это

Делая это
Делая это
Делая это
Делая это
Делая это
Делая это
Делая это
Делая это

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

Вскоре я установлю разъем для внешнего USB-микрофона, поэтому мне не придется открывать корпус для подзарядки аккумулятора.

Может быть, меня тоже заинтересует обновление по OTA, чтобы все это доработать….

Шаг 6: Код и файлы

Image
Image

Предоставляются три архивных файла:

  • Weatherstation.zip: код Arduino, для загрузки с помощью Arduino IDE.
  • Boite ecran.zip: файлы САПР и 3D-принтера для кейса
  • data.zip: файлы для загрузки в SPIFFS ESP32.

Если вы не знаете, как загружать файлы в SPIFFS ESP32, просто прочтите это руководство, в котором представлен очень полезный плагин и способы его использования в среде Arduino IDE.

Программирование глубокого сна сильно отличается от стандартного программирования Arduino. Для ESP32 это означает, что ESP32 просыпается и выполняет настройку, а затем переходит в спящий режим. Итак, функция цикла пуста и никогда не выполняется.

Некоторая фаза инициализации должна выполняться только один раз при первом выполнении (например, получение времени, данных о погоде, котировок и т. Д.), Поэтому ESP32 должен знать, является ли текущее пробуждение первым или нет: для этого Решение состоит в том, чтобы сохранить переменную в ОЗУ RTC (которая остается активной даже во время фаз глубокого сна), которая увеличивается при каждом пробуждении. Если он равен 1, то это первое выполнение, и ESP32 выполняет фазу инициализации, в противном случае эта фаза пропускается.

Чтобы разбудить ESP32, есть несколько возможностей:

  • Пробуждение по таймеру: код вычисляет продолжительность глубокого сна перед сном. Это используется для обновления времени (каждые 1, 2, 3 или 5 минут) или данных о погоде (каждые 3 или 4 часа) цитат и святого дня (каждые 24 часа).
  • Прерывание пробуждения: акселерометр отправляет сигнал, который используется для пробуждения ESP32. Это используется для обнаружения изменения ориентации и обновления дисплеев.
  • Пробуждение сенсорного сенсора: ESP32 оснащен несколькими контактами, действующими как сенсорные датчики, но они не могут использоваться с пробуждением по таймеру, поэтому я не использовал это.

Есть и другие приемы программирования в другом месте кода, чтобы поддерживать точное время при экономии энергии (т.е. не подключать сервер NTP каждую минуту), чтобы убрать акценты, которые не поддерживаются библиотекой Adafruit GFX, чтобы избежать обновления дисплея, если нет необходимости настраивать параметры акселерометра, особенно для пробуждения по прерыванию, точно рассчитывать время перехода в спящий режим в случае пробуждения по таймеру, избегать использования последовательной консоли, если она не подключена к IDE (для повторной экономии энергии), отключите Wi-Fi, когда он не нужен, и т. д. и код полон комментариев, которые помогают понять функции.

Спасибо, что прочитали это руководство (мое самое первое). Надеюсь, вам понравится, и вы получите удовольствие от создания этой метеостанции

Конкурс датчиков
Конкурс датчиков

Финалист конкурса датчиков

Рекомендуемые: