Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Очень простые часы с WiFi

Чт янв 06, 2022 00:07:13

Во-первых, всех причисляющих себя к семейству радиокошачих - с наступившими\наступающими праздниками!!

Во-вторых - нижайше прошу уважаемого автора прокомментировать (по-русски) файл clock.h и выложить его тут. Выше уже тема комментариев обсуждалась, комментировать весь скетч - нереально трудоёмко, но, если будут объяснены хотя бы все переменные - желающие разберутся и в скетче.

Re: Очень простые часы с WiFi

Чт янв 06, 2022 02:17:45

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;

Re: Очень простые часы с WiFi

Чт янв 06, 2022 06:01:36

Благодарю! Жду окончания! :music:

Re: Очень простые часы с WiFi

Чт янв 06, 2022 12:47:18

Оставшая часть файла пожалуйста:

struct{
int8_t clock_dig[2][8] = {{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}}; // Бинарные образы изображения экранов
int8_t clock_points[2][8] = {{0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}; // Состояние точек TM1637 (горят, не горят)
bool dots = true; // Состояние точек дисплея 1
bool dots2 = true; // Состояние точек дисплея 2
bool halb = false; // Флаг обновления диплея, полусекундный интервал
bool weather_upd = true; // Флаг обновления погоды, 20 минутный интервал
bool thing_upd = true; // Флаг обновления данных с thingspeak, 30 секундный интервал
bool thing_snd = true; // Флаг отправки данных на thingspeak, 30 секундный интервал
uint8_t prev_sec = 60; // Флаг обновления данных с проводных датчиков, 1 секндный интервал
bool clock_synchronized = false; // Флаг успешной синхронизации часов с NTP сервером
time_t prev_millis = 0; // Временнóй слот дисплея 1
time_t prev_millis2 = 0; // Временнóй слот дисплея 2
uint8_t snum = 5; // Номер временнóго слота дисплея 1
uint8_t snum2 = 5; // Номер временнóго слота дисплея 2
float temp_web = 404.0; // Температура прогноза погоды
float hum_web = 202.0; // Влажность прогноза погоды
float pres_web = 4040.0; // Давление прогноза погоды
float thing[9] = {4040.0, 4040.0, 4040.0, 4040.0, 4040.0, 4040.0, 4040.0, 4040.0, 4040.0}; // Данные с thingspeak
time_t thing_tm = 0; // Время и дата данных с thingspeak
time_t wet_tm = 0; // Время и дата данных о прогнозе погоды
bool is_day = true; // Сейчас день или ночь, для дисплея 1
bool is_day2 = true; // Сейчас день или ночь, для дисплея 2
// bool ap_mode = false;
bool ip_mode = false; // Режим отображения IP адреса
uint8_t ip_cnt = 0; // Смещение IP адреса, для его прокрутки на экране
} datas;

struct{
bool bme280_det = false; // Обнаружен BME280
bool bmp180_det = false; // Обнаружен BMP180
bool sht21_det = false; // Обнаружен SHT21
bool dht22_det = false; // Обнаружен DHT22
uint8_t ds18_det = 0; // Обнаружен DS18B20
bool ds32_det = false; // Обнаружен DS3231
float bme280_temp = 404.0; // Температура BME280
float bme280_temp_corr = 0.0; // Коррекция температуры BME280
float bme280_hum = 202.0; // Влажность BME280
float bme280_hum_corr = 0.0; // Коррекция влажности BME280
float bme280_pres = 4040.0; // Давление BME280
float bme280_pres_corr = 0.0; // Коррекция давления BME280
float bmp180_temp = 404.0; // Температура BMP180
float bmp180_temp_corr = 0.0; // Коррекция температуры BMP180
float bmp180_pres = 4040.0; // Давление BMP180
float bmp180_pres_corr = 0.0; // Коррекция давления BMP180
float sht21_temp = 404.0; // Температура SHT21
float sht21_temp_corr = 0.0; // Коррекция температуры SHT21
float sht21_hum = 202.0; // Влажность SHT21
float sht21_hum_corr = 0.0; // Коррекция влажности SHT21
float dht22_temp = 404.0; // Температура DHT22
float dht22_temp_corr = 0.0; // Коррекция температуры DHT22
float dht22_hum = 202.0; // Влажность DHT22
float dht22_hum_corr = 0.0; // Коррекция влажности DHT22
float ds18_temp = 404.0; // Температура DS18B20
float ds18_temp_corr = 0.0; // Коррекция температуры DS18B20
float ds32_temp = 404.0; // Температура DS3231
float ds32_temp_corr = 0.0; // Коррекция температуры DS3231
} sensors;

// Функции
void half(void); // Возведение флага обновления диплея, полусекундный интервал
void w_upd(void); // Возведение флага обновления погоды, 20 минутный интервал
void t_upd(void); // Возведение флага обновления данных с thingspeak, 30 секундный интервал
void t_snd(void); // Возведение флага отправки данных на thingspeak, 30 секундный интервал
void data_prep(void); // Подготовка данных для отображения на дисплее
void tm1637_fill(uint8_t type, uint8_t disp); // Заполнение дисплея TM1637
void max7219_fill(uint8_t type1, uint8_t type2); // Заполнение дисплея MAX7219
void display_fill(void); // Заполнение дисплеев
bool get_clock(bool dots, uint8_t displ); // Заполнение образа экрана текущим временем
bool get_date(uint8_t displ); // Заполнение образа экрана текущей датой
bool get_temp(float temperature, uint8_t displ); // Заполнение образа экрана температурой
bool get_hum(float humidity, uint8_t displ); // Заполнение образа экрана влажностью
bool get_pres(float pressure, uint8_t displ); // Заполнение образа экрана давлением
void read_eeprom(void); // Чтение файла конфигурации
void connectToWiFi(void); // Подключение к сети
void sensors_init(void); // Инициализация проводных датчиков
void sensors_read(void); // Чтение проводных датчиков
//String httpData = "";
void getWeatherNow(void); // Получение данных текущей погоды
String weatherRequest(String url); // Запрос текущей погоды
void parseWeatherNow(String httpData); // Парсинг данных текущей погоды
void thingspk_recv(void); // Получение данных с thingspeak
String thingRequest(String url); // Запрос данных с thingspeak
void parseThing(String httpData); // Парсинг данных с thingspeak
void thingspk_send(void); // Отправка данных на thingspeak
String getContentType(String filename); // Получение типа файла
bool handleFileRead(String path); // Выдача файла
bool FileRead(String path); // Чтение файла
void handleFileUpload(void); // Загрузка файла
void web_settings(void); // Инициализация веб сервера

Re: Очень простые часы с WiFi

Пн фев 07, 2022 09:26:02

himikat123, добрый день! Часы отличные! И спасибо за реализацию вывода разной информации на разные дисплеи! (Правда tm1637 у меня оказались не рабочие, даже с примером из библиотеки, микросхема не выдает напряжение на сегменты...)
Есть пара вопросов:
- возможно ли отключить мигание точками (тире)? хотел попробовать отключить в файле clock.h, но с любыми библиотеками куча ошибок компиляции, а после обновления всех - ошибки в процедурах...
-возможно ли сделать вывод времени (на дисплее max7219) только в 4 сегмента, опять же чтоб не было лишних миганий секунд?

Re: Очень простые часы с WiFi

Пн фев 07, 2022 10:26:32

Я для "баловства" с часами переношу папку libraries куда-нибудь, а вместо нее вставляю
папку с библиотеками, подобранными специально для данной конструкции.
По окончании все возвращаю взад.
https://wdfiles.ru/cac957

Re: Очень простые часы с WiFi

Пн фев 07, 2022 11:36:14

Mizetsky, Спасибо, но так же ошибки...Может дело еще в версии arduino ide?
Вложения
4.jpg
(212.69 KiB) Скачиваний: 144

Re: Очень простые часы с WiFi

Пн фев 07, 2022 13:02:12

Попробуйте версию платы поменять в "Менеджере плат" на 2.7.4

Re: Очень простые часы с WiFi

Пн фев 07, 2022 14:26:10

Mizetsky, к сожалению смена версий не помогла. пробовал даже версией 2.0, там правда другие ошибки на функции, которые еще не поддерживались. А с версии 2.6 уже та же ошибка на xtensa

Re: Очень простые часы с WiFi

Пн фев 07, 2022 15:23:08

Попробовал с этим набором библиотек, ИДЕ 1.8.12 и 1.8.19 - все отлично.
Даже не знаю, что посоветовать.

Re: Очень простые часы с WiFi

Пн фев 07, 2022 15:40:25

strangle, какие файлы у Вас лежат в папке cloick?

Re: Очень простые часы с WiFi

Пн фев 07, 2022 16:34:34

abomin, clock.h и clock.ino

Re: Очень простые часы с WiFi

Пн фев 07, 2022 16:55:52

Маловато будет, Должно быть пять файлов
clock.h clock.ino cloud.ino web.ino languages.h и папка data

Re: Очень простые часы с WiFi

Пн фев 07, 2022 19:41:58

Mizetsky, тьфу, точно, спасибо, теперь заработало.
По началу их 5 и было, правда о папке дата не подумал, и тоже были ошибки, в ходе экспериментов 2 и оставил...
Всем спасибо за помощь!

Re: Очень простые часы с WiFi

Сб мар 05, 2022 14:20:09

И все таки что-то делаю не так...прошивается все без ошибок (с библиотеками от Mizetsky), clock.h clock.ino cloud.ino web.ino languages.h и папка data все в папке clock, но после подключения к его wi-fi, HTTP 404 - File Not Found, как будто папка дата не записывается...
При прошивке бинарником никаких проблем нет, но есть необходимость в отключении мигания точек и скорей всего нужно будет убрать знак С после градусов, поэтому и пытаюсь прошить через ардуино...

Re: Очень простые часы с WiFi

Сб мар 05, 2022 14:59:23

Пака data прошивается после прошивки самого скетча через
"Инструменты" -> "ESP8266 Scetch Data Upload"

Re: Очень простые часы с WiFi

Вс мар 06, 2022 02:42:45

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

В библиотеке для дисплея пошаманьте, можно с бубном :beer:
TM1637_6D.cpp
static int8_t TubeTab[]

И, наверное, в скетче,
void tm1637_fill(uint8_t type, uint8_t disp)
Но здесь не уверен, точнее Автор подскажет.

Несколько нескромный вопрос - а на ..УЯ отключать моргание - часы должны "тИкать"

Добавить бы "тикалку" на какой-нибудь ГПИО, ну очень коротенький щелчок,
с выводом на какую-нибудь пищалку - ...... :hunger:

Символ"С" - чем помешал? Сделайте Фаренгейты или Кельвины - всего-то пару строк
в скетч добавить. Но буковку "К" (Кельвин) Х его З как изобразить :))

Re: Очень простые часы с WiFi

Сб мар 12, 2022 04:53:02

Mizetsky, по поводу тиканья поддерживаю. Но супругу всегда раздражало тиканье часов, которые, вдобавок, были в каждой комнате. Постепенно заменили на часы с плавным ходом стрелок :))
Но это мы найдем, где мигание отключается...
А вот С хотел отключить, т.к. дисплей 4-х значный, и - будет теряться при большом холоде, но тоже уже догадываюсь, где...
Вот только так и не могу победить вебморду, после загрузки папки дата, так же ошибка - отсутствие файлов...Раньше только с PICами имел дело, там свои конечно нюансы, но решение найти попроще было

Re: Очень простые часы с WiFi

Вс мар 13, 2022 22:30:48

Привет, народ!

Вот, делюсь допилингом... Прикручиваю статику на HC595.

Первое видео - плата на 4 разряда. На ней пришлось ключ управления разделительной точкой допаивать.
Спойлер

Второе видео - плата на 6 разрядов, но в настройках выбрано 4 разряда.
Спойлер

Третье видео - плата на 6 разрядов, в настройках выбрано 6 разрядов.
Спойлер

Платы с индикаторами покупал здесь, у камрада zenner (за что ему спасибки). У него ещё есть.

Прикладываю пропатченный скетч, там вывод на ТМ1637 заменён на вывод в НС595. Поэтому в вебморде выбирать ТМ1637 с 4-мя или 6-ю разрядами. Другие файлы не менял, доп.либы не нужны. Подключение пинов смотрите в скетче. Яркость пока не реализовывал, но это возможно: надо от всех НС595 выводить сигнал ОЕ и подавать на него ШИМ.
Вложения
clock.zip
(8.45 KiB) Скачиваний: 109

Re: Очень простые часы с WiFi

Вт мар 15, 2022 21:22:14

Давненько я на Радиокот не заходил. Всех приветствую!

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

strangle, прошейтесь бинарником, а затем шейте свои изменения из-под Ардуино. Прошивка (только скетча) из-под Ардуино не стирает всю память ESP8266, в частности файловую систему, так что, это способ, если не шьётся файловая система.
Ответить