простые часы на базе ESP8266 ESP-12e

Вдохновил пост на хабре "Бескнопочные часы" http://geektimes.ru/post/267718/

но, хочу немного по своему:
 - заказл с али 5 штук синих индикаторов с ОК высотой 1.8"
   это для отображения времени, даты
 - купил на вороне 3 штуки белых с ОК 0.56"
   это для отображения температуры, влажности, дня недели
 - думаю поставить фоторозистор и регулировать яркость в зависимости от 
   освещённости.
 - вывод надумал делать динамический, на MAX7219, поэтому индикаторы с ОК
 - дошло, что невыгорит управлять большими индикатороми этой мс. пришлось 
   лепить транзисторы - "вечер перестаёт быть томным".
 - индикаторы 1.8" вроде как бывают на 9 вольт и на 6.5, жду пока приедут.
 - где-то кто-то писал, что у него MAX7219 нормально управляет большими 
   индикаторами (1.8 или 2.3"), вобщем жду что приедет.

на 31.12.2015 всё.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Wall Segment Clock

После двух дней ебли с nodemcu решил для своего проектика остановится на Sming.
за основу взял проект "MeteoControl", выкинул I2C LCD Display, добавил 
обновление сайта из "HttpClient_ThingSpeak", добавил обработку DHT22 из 
"Humidity_DHT22", хотел добавить FTP сервер -- но оно не влезло.
В качестве датчика освещённости можно будет использовать "Light_BH1750", или 
останется фоторезистор.

"ThingSpeak" планирую заменить на что-то своё, на своём сервере, что ещё 
предстоит придумать и реализовать. Возиожно это будет не HTTP а что-то на 
основе UDP (клиент/сервер).

Осталось добавить поддержку для MAX7221 и сделать вывод на индикаторы...
Возможно, по ходу дела придётся что-то выкидывать, чтобы влезло нужное.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

out/firmware/spiff_rom.bin---------->0x4C000

FTP не влезло на 1594 байта :-(

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
WebTime занимает слегка меньше места чем NTPclient.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.01.29

Прикрутил поддержку max7219 с программным spi.
Сделал вывод времени -- пора проверять в железе.

Нужно придумать как выводить всё остальное -- дату, показания датчиков.
Как считать дни недели, как определять переход на зимнее/летнее время?
Как взаимодействовать с внешним миром -- оставлять вебсервер,
или переходить на UDP сервер/клиент?

по поводу дня недели:
https://ru.wikibooks.org/wiki/Реализации_алгоритмов/Вечный_календарь
---
struct struct_date
{
    short day;
    short month;
    short year;
};

int what_day(const struct struct_date  const date)
{
    int a = (14 - date->month) / 12;
    int y = date->year - a;
    int m = date->month + 12 * a - 2;
    return (7000 + (date->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}
---

Пример вывода:
каждые 25-29 и 55-59 секунд на верхние индикаторы выводить дату, а на нижние день недели.
(01 29 / ПОН ВРН СРЕ ЧРГ ПНА СУБ ВОС)
в остальное время на нижних чережовать каждые 5 сек темп/влажность (XXc/XXh).
делать мжно с помощью таймеров и однократного запуска.
нужно разрисовать подобие КА.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.02.01

Уберу http-клиент, поменяю чуть сбор данных, json буду отдавать с точностью
в 2 знака.
Возмжно попробую добавить udp-сервер и ftp-сервер.

Управление внешним выходом в зависимости от температуры/влажности -- это
конечно прикольно, но мне в часах оно нахрен не нужно.

Далее в планах -- переделать под себя страницу конфигурации,
убрать всё лишнее, добавить нужное -- например, задание 2-4 порогов регулировки
яркости в зависимости от внешнего освещения.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.02.02

Переделал обработку времени, поправил обработку данных от датчика.

FTP сервер уже влазит, вот только нужен ли он? 

UDP Server тоже влез. Если я всё правильно понял, то на строку "get_sensors"
должен возвращать температуру и влажность. На любые другие данные -- echo.

Переделал конфигурацию -- выбросил всё ненужное, добавил настройку уровней 
освещённости (два) и ировней яркости индикатора (три). Пока не использую.
План такой:
	if (ADCVAL < LLow) {
		MAX7219br = BLow
	} else if (ADCVAL > LHigh) {
		MAX7219br = BHigh
 	} else {
		MAX7219br = BMid
	}

Выкинул FTP Server -- какой-то он странный, скачать ничего не вышло,
закачть уже и не пытался.

Выкинул UDP Server -- запросы принимает, ответа от него не видно...
Или я что-то не понимаю, или одно из двух...

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.02.02

Заменил м/с MAX7219 -- и всё чудесным образом заработало.
Один индикатор (ед. часов) бракованый -- не светится верхний левый сегмент,
нужно поменять местами со средним.

Не очень нравится раскладка 5/3, было бы лучше 4/4.

Поменял отображение темп. и влажности -- символ спереди,
так кажется более правильно.

Мигающий минус теперь грубо отображет секунды:
 - с 0 по 14 сек -- "минус"
 - с 15 по 29 сек -- "средний и нижний"
 - с 30 по 44 сек -- "верхний и средний"
 - с 45 по 59 сек -- "верхний, средний и нижний"
Была ещё мысль время выводить в первых четырёх идикаторах, мигать точкой,
а в 5-ом индикаторы "двоичным" кодом отображать секунды, но пока отбросил.

Белые индикаторы светят заметно ярче синих, пока ничего менять не буду,
посмотрим как оно будет под светофильтром.

Решил отказаться от вывода даты и дня недели -- не нужно оно.

Нужно вынести в настройку адрес ntp сервера.
Нужно доделать регулировку яркости. Возможно стоит заменить на плавную.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.02.07

Делаю автоматическую регулировку яркости.

Немогу понять, почему я фоторезистор поставил на землю? Ведь так получается
не уровень яркости, а уровень темноты...

Как-то я собирал несколько дней инфу с подобнго датчика смотрящего на улицу.
Статичечки, его знчение приведённые к уровням 0-16 имеют значимую величину
в диапазоне оот 12 до 16, т.е. всего 4 значения.
Попробую это дела как-то нормализовать.

Пробовал 12-16 растгивать -- сильно грубо.
Сейчас сделал 7-14, лучше, но тоже не сильно нравится.
Похоже, что простое приведение было лучше всего.

Стало зависать постоянно, на ноге сброса -- 0.
Вынес регулировку яркости в отдельную задачу -- прошло...

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.11.15

Перерисовал схему под статику, 4 шт. 1.5" + 4 шт. 0.8".
Большие индикаторы запитал через TD62783A (UDN2981).
MC74HC595A работают и от 3.3В -- отказался от 5-ти вольтового стаба.
Осталось придумать ШИМ для регулировки яркости и можно пытаться разводить.
И нужно что-то придумать с сегментными резисторами (20 и 5 Ом)...
И точки -- или в обход буферов, или больший резистор (185 Ом)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.11.17

Добил схему.
Питание -- внешнее 7В + китайский импульсный стаб на 3.3В.

Добил плату -- раскладку "подсмотрел" у китайцев, всё влезло под индикаторы,
надеюсь что wifi будет работать нормально...
размер платы -- 194 на 67 мм. Перемычек правда вышло шо пипец...

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.11.21

LDO на 3.3 вольта выкинул потому, что одного мало (я насчитал макс. ток ~1.2А) 
а два ставить особо некуда, плюс будут большие потери.

Появилась идея -- убрать сегменты точек. Можно даже сократить один сдвиговый 
регистр, но это принесёт больше гемора. Добавить два синих 3мм ветодиода -- 
засверлить их между 2-ой и 3-ей цифрами. Подключить или вместо точки второго 
индикатора, или, что ещё лучше -- задействовать отдельный вывод ESP и 
транзистр. Хотя тогда появится лишний гемор с регулировкой яркости именно этих 
светодиодов...

Второй момент -- раширить плату в высоту, вытащить ESP и DHT вниз -- уменьшить 
толщину "пакета".

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.11.22

v1 -- исходная версия
v2 -- без точек, с двумя светодиодами.
текущая -- попытался вытащить наружу ЕСП, но не вышло.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2016.11.23

Хочу пропрбовать сделать раскладку "4 сверху / 4 снизу".

получилось. вроде неплохо -- 153 на 84 мм.
переходных -- 59 штук.

ещё попробовать "вынести наружу" ESP и DHT22.
кажется получилось -- плата 152 на 84 мм, 62 переходных.
пока мне этот вариант нравиться больше всего.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2022.10.2

Тут тупик.
Новая ветка будет на базе "Wemos D1 Mini"...
