Во-первых, всех причисляющих себя к семейству радиокошачих - с наступившими\наступающими праздниками!!
Во-вторых - нижайше прошу уважаемого автора прокомментировать (по-русски) файл clock.h и выложить его тут. Выше уже тема комментариев обсуждалась, комментировать весь скетч - нереально трудоёмко, но, если будут объяснены хотя бы все переменные - желающие разберутся и в скетче.
abomin, Во первых спасибо, во вторых и вас с наступившими\наступающими праздниками!!!
Прокомментировал часть файла, оставшуюся часть попытаюсь доделать завтра.
String fw = "3.2"; // Версия прошивки String vers = "BIM v" + fw; // Версия прошивки int rssi = 0; // Уровень WiFi сигнала File fsUploadFile; // переменная для принятия файла прошивки (по воздуху) char text_buf[255] = ""; // вспомогательная переменная для формирования строк разных
struct{ // группа переменных конфигурации часов char ssid[40] = ""; // Имя сети WiFi char pass[40] = ""; // Пароль сети char apssid[40] = "Clock"; // Имя сети в режиме точки доступа char appass[40] = "1234567890"; // Пароль точки доступа char apip[16] = "192.168.4.1"; // IP адрес в режиме точки доступа char apmask[16] = "255.255.255.0"; // Маска подсети в режиме точки доступа uint8_t chnl = 1; // Номер канала WiFi в режиме точки доступа int8_t utc = 0; // Часовой пояс uint8_t daylight = 0; // Надобность перехода на летнее время bool time_format = false; // Формат часов: 12 или 24 часовой uint8_t day_bright = 0; // Дневная яркость дисплея 1 uint8_t day_bright2 = 0; // Дневная яркость дисплея 2 uint8_t night_bright = 0; // Ночная яркость дисплея 1 uint8_t night_bright2 = 0; // Ночная яркость дисплея 2 bool type = 0; // Тип получения IP адреса: статический или динамический IP char ip[16] = ""; // IP адрес в режиме статического IP char mask[16] = ""; // Маска подсети в режиме статического IP char gw[16] = ""; // Шлюз в режиме статического IP char dns1[16] = ""; // Предпочитаемый DNS адрес в режиме статического IP char dns2[16] = ""; // Альтернативный DNS адрес в режиме статического IP int hd = 0; // Время перехода дисплея 1 в дневной режим (часы) int hd2 = 0; // Время перехода дисплея 2 в дневной режим (часы) int md = 0; // Время перехода дисплея 1 в дневной режим (минуты) int md2 = 0; // Время перехода дисплея 2 в дневной режим (минуты) int hn = 0; // Время перехода дисплея 1 в ночной режим (часы) int hn2 = 0; // Время перехода дисплея 2 в ночной режим (часы) int mn = 0; // Время перехода дисплея 1 в ночной режим (минуты) int mn2 = 0; // Время перехода дисплея 2 в ночной режим (минуты) char ntp[40] = "time.nist.gov"; // Адрес NTP сервера uint32_t chid = 0; // Channel ID для сервиса thingspeak.com uint8_t disp = 1; // Тип дисплея 1: tm1637 или max7219 uint8_t disp2 = 2; // Тип дисплея 2: tm1637 или max7219 uint32_t ntp_period = 300; // Период обновления NTP uint8_t tupd = 5; // Неактуально bool thngsend = false; // Нужно ли отправлять данные на thingspeak bool thngrcv = false; // Нужно ли принимать данные с thingspeak uint8_t tf1 = 0; // Что отправлять в поле 1 thingspeak uint8_t tf2 = 0; // Что отправлять в поле 2 thingspeak uint8_t tf3 = 0; // Что отправлять в поле 3 thingspeak uint8_t tf4 = 0; // Что отправлять в поле 4 thingspeak uint8_t tf5 = 0; // Что отправлять в поле 5 thingspeak uint8_t tf6 = 0; // Что отправлять в поле 6 thingspeak uint8_t tf7 = 0; // Что отправлять в поле 7 thingspeak uint8_t tf8 = 0; // Что отправлять в поле 8 thingspeak char rdkey[40] = ""; // Write API key для thingspeak char wrkey[40] = ""; // Read API key для thingspeak uint8_t dp[6] = {6, 2, 0, 0, 0, 0}; // Периоды отображения данных на дисплее 1 uint8_t d2p[6] = {6, 2, 0, 0, 0, 0}; // Периоды отображения данных на дисплее 2 uint8_t dt[6] = {1, 1, 1, 1, 1, 1}; // Типы датчиков для отображения на дисплее 1 uint8_t d2t[6] = {1, 1, 1, 1, 1, 1}; // Типы датчиков для отображения на дисплее 1 char dc[6][5] = {"#FFF", "#FFF", "#FFF", "#FFF", "#FFF", "#FFF"}; // Неактуально char d2c[6][5] = {"#FFF", "#FFF", "#FFF", "#FFF", "#FFF", "#FFF"}; // Неактуально char ds[6][4] = {"C", "C", "C", "C", "C", "C"}; // Типы данных (температура, давление, влажность, время, дата) для отображения на дисплее 1 char d2s[6][4] = {"C", "C", "C", "C", "C", "C"}; // Типы данных для отображения на дисплее 2 char username[40] = "admin"; // Имя пользователя (для веб интерфейса) char password[40] = "1111"; // Пароль (для веб интерфейса) uint8_t provider = 0; // Источник прогноза погоды uint8_t citysearch = 0; // Способ поиска города для прогноза char city[40] = ""; // Название города для прогноза char lat[32] = ""; // Широта города для прогноза char lon[32] = ""; // Долгота города для прогноза char cityid[12] = ""; // ИД номер города для прогноза char appid[40] = ""; // API ключ openweathermap char appkey[40] = ""; // API ключ weatherbit uint8_t bme_plc = 0; // Расположение датчика BME280 (в доме, на улице или не указано) для дисплея 1 uint8_t bmp_plc = 0; // Расположение датчика BMP180 для дисплея 1 uint8_t sht_plc = 0; // Расположение датчика SHT21 для дисплея 1 uint8_t dht_plc = 0; // Расположение датчика DHT22 для дисплея 1 uint8_t ds18_plc = 0; // Расположение датчика DS18B20 для дисплея 1 uint8_t ds32_plc = 0; // Расположение датчика DS3231 для дисплея 1 uint8_t ths_plc = 0; // Расположение датчика thingspeak для дисплея 1 uint8_t wet_plc = 0; // Расположение датчика "прогноз погоды" для дисплея 1 uint8_t bme_plc2 = 0; // Расположение датчика BME280 (в доме, на улице или не указано) для дисплея 2 uint8_t bmp_plc2 = 0; // Расположение датчика BMP180 для дисплея 2 uint8_t sht_plc2 = 0; // Расположение датчика SHT21 для дисплея 2 uint8_t dht_plc2 = 0; // Расположение датчика DHT22 для дисплея 2 uint8_t ds18_plc2 = 0; // Расположение датчика DS18B20 для дисплея 2 uint8_t ds32_plc2 = 0; // Расположение датчика DS3231 для дисплея 2 uint8_t ths_plc2 = 0; // Расположение датчика thingspeak для дисплея 2 uint8_t wet_plc2 = 0; // Расположение датчика "прогноз погоды" для дисплея 2 } config;
himikat123, добрый день! Часы отличные! И спасибо за реализацию вывода разной информации на разные дисплеи! (Правда tm1637 у меня оказались не рабочие, даже с примером из библиотеки, микросхема не выдает напряжение на сегменты...) Есть пара вопросов: - возможно ли отключить мигание точками (тире)? хотел попробовать отключить в файле clock.h, но с любыми библиотеками куча ошибок компиляции, а после обновления всех - ошибки в процедурах... -возможно ли сделать вывод времени (на дисплее max7219) только в 4 сегмента, опять же чтоб не было лишних миганий секунд?
Я для "баловства" с часами переношу папку libraries куда-нибудь, а вместо нее вставляю папку с библиотеками, подобранными специально для данной конструкции. По окончании все возвращаю взад. https://wdfiles.ru/cac957
Mizetsky, к сожалению смена версий не помогла. пробовал даже версией 2.0, там правда другие ошибки на функции, которые еще не поддерживались. А с версии 2.6 уже та же ошибка на xtensa
Mizetsky, тьфу, точно, спасибо, теперь заработало. По началу их 5 и было, правда о папке дата не подумал, и тоже были ошибки, в ходе экспериментов 2 и оставил... Всем спасибо за помощь!
И все таки что-то делаю не так...прошивается все без ошибок (с библиотеками от Mizetsky), clock.h clock.ino cloud.ino web.ino languages.h и папка data все в папке clock, но после подключения к его wi-fi, HTTP 404 - File Not Found, как будто папка дата не записывается... При прошивке бинарником никаких проблем нет, но есть необходимость в отключении мигания точек и скорей всего нужно будет убрать знак С после градусов, поэтому и пытаюсь прошить через ардуино...
но есть необходимость в отключении мигания точеи скорей всего нужно будет убрать знак С после градусов, поэтому и пытаюсь прошить через ардуино...
В библиотеке для дисплея пошаманьте, можно с бубном TM1637_6D.cpp static int8_t TubeTab[] И, наверное, в скетче, void tm1637_fill(uint8_t type, uint8_t disp) Но здесь не уверен, точнее Автор подскажет.
Несколько нескромный вопрос - а на ..УЯ отключать моргание - часы должны "тИкать"
Добавить бы "тикалку" на какой-нибудь ГПИО, ну очень коротенький щелчок, с выводом на какую-нибудь пищалку - ......
Символ"С" - чем помешал? Сделайте Фаренгейты или Кельвины - всего-то пару строк в скетч добавить. Но буковку "К" (Кельвин) Х его З как изобразить
Mizetsky, по поводу тиканья поддерживаю. Но супругу всегда раздражало тиканье часов, которые, вдобавок, были в каждой комнате. Постепенно заменили на часы с плавным ходом стрелок Но это мы найдем, где мигание отключается... А вот С хотел отключить, т.к. дисплей 4-х значный, и - будет теряться при большом холоде, но тоже уже догадываюсь, где... Вот только так и не могу победить вебморду, после загрузки папки дата, так же ошибка - отсутствие файлов...Раньше только с PICами имел дело, там свои конечно нюансы, но решение найти попроще было
Вот, делюсь допилингом... Прикручиваю статику на HC595.
Первое видео - плата на 4 разряда. На ней пришлось ключ управления разделительной точкой допаивать. Спойлер Второе видео - плата на 6 разрядов, но в настройках выбрано 4 разряда. Спойлер Третье видео - плата на 6 разрядов, в настройках выбрано 6 разрядов. Спойлер Платы с индикаторами покупал здесь, у камрада zenner (за что ему спасибки). У него ещё есть.
Прикладываю пропатченный скетч, там вывод на ТМ1637 заменён на вывод в НС595. Поэтому в вебморде выбирать ТМ1637 с 4-мя или 6-ю разрядами. Другие файлы не менял, доп.либы не нужны. Подключение пинов смотрите в скетче. Яркость пока не реализовывал, но это возможно: надо от всех НС595 выводить сигнал ОЕ и подавать на него ШИМ.
Давненько я на Радиокот не заходил. Всех приветствую!
abomin, класс, как допилите управление яркостью - выкладывайте сюда, с вашего позволения добавлю в проект новый дисплей.
strangle, прошейтесь бинарником, а затем шейте свои изменения из-под Ардуино. Прошивка (только скетча) из-под Ардуино не стирает всю память ESP8266, в частности файловую систему, так что, это способ, если не шьётся файловая система.