• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Простые WiFi часы

Pilnikov

Active member
@Pilnikov , ваш вариант с парсингом conf_data получился более красивым :)

Теперь можно какой-нибудь бутстрап туда впихнуть.
И наконец доделаю NRF24.
В планах добавить редактор строк(писать в вебморде то что будет выводиться на экране).
Кстати у вас будильник больше похож на планировщик задач ;)
В планах сделать "поминальник" - он же элемент управления "календарь" - чтобы в бегущей строке к примеру отображались дни рождения, праздники, и тд.
Я делал компиляцию для WiseClock (один канадский проект) - в нем много чего такого есть - можно позаимствовать.
По идее можно сделать текстовый файл с сообщениями - а редактировать его уже ч/з веб-морду
 

loginkr

New member
В планах сделать "поминальник" - он же элемент управления "календарь" - чтобы в бегущей строке к примеру отображались дни рождения, праздники, и тд.
Я делал компиляцию для WiseClock (один канадский проект) - в нем много чего такого есть - можно позаимствовать.
По идее можно сделать текстовый файл с сообщениями - а редактировать его уже ч/з веб-морду
Только вот не могу понять , если выключить 'сервер погоды', то вы выключаете веб интерфейс, та и вообще все... и соответственно больше зайти в настройки нельзя, приходится заново загружать конфиг
Зачем ?
 

Pilnikov

Active member
Изначально было так;). (Посмотрите оригинальные часы в этой теме) Вай фай запускался по кнопке (и щас так-же - кнопку подержите 5 сек - он запустится) и отключался за ненадобностью через минуту неактивности. В оригинале вайфай нужен изредка - только для настройки каких то параметров через вебморду. Когда проект "вырос" до клиент-серверного появилась необходимость держать вайфай постояноо включеным.
 

loginkr

New member
Вместо кириллицы кракозябры, и между цифрами часов нет пробела. В какую сторону копать?
 

Pilnikov

Active member
Вместо кириллицы кракозябры, и между цифрами часов нет пробела. В какую сторону копать?
В adafruit gfx заменить. Опосля перед компиляцией обязательно рестартануть дурину - она могет либы из кеша подгружать. Сам недавно наступил на эти грабли - гфикс обновилась, я файлик поздно поменял - попрыгать пришлось.
 

Вложения

Последнее редактирование:

demman

New member
Доброго времени суток всем.
Скачал архив, прошил, всё супер.
Появилось несколько вопросов:
- хотелось малость раздвинуть цифры от середины к краям матриц. Видимо это где-то в show_time, но вот где? Или придется править шрифт и весь вывод?
- возможно-ли убрать незначащий ноль в десятках часов?
 

Pilnikov

Active member
Доброго времени суток всем.
Скачал архив, прошил, всё супер.
Появилось несколько вопросов:
- хотелось малость раздвинуть цифры от середины к краям матриц. Видимо это где-то в show_time, но вот где? Или придется править шрифт и весь вывод?
- возможно-ли убрать незначащий ноль в десятках часов?
А чей архив? Оригинальный или мой?
 

Pilnikov

Active member
Да там все в шоу тайм. Гашение нуля - сточку hour/10 надо заменить на пустой символ (byte) 0x0 если час == 0
width_razd = 2; - это расстояние между символами
 

demman

New member
Гашение нуля - сточку hour/10 надо заменить на пустой символ (byte) 0x0 если час == 0
Спасибо. С нулём разобрался. Может и не кошерно, но работает. 0x0B - код символа ПРОБЕЛ в шрифте.
Код:
if (ds3231.Hour / 10 == 0 ) {
     dig[0] = byte( 0x0B);
    } else {
    dig[0] = ds3231.Hour / 10;
    }

width_razd = 2; - это расстояние между символами
Судя по экспериментам - это количество мигающих точек. При значении 1 это :, при 2 это ::, при 3 это :::
А я хотел добавить пробелов (пустых столбцов) между цифрами.
 

Pilnikov

Active member
Попробуйте изменить ширину шрифта. Добавить единичку к используемому width_font. Я наискось глянул - походу сделано через формирование строки - а потом она выводится на экран целиком. (Прогу писал уважаемый @voldemar2005, поэтому я, как не автор, могу и ошибаться)
 

demman

New member
Если я Вас правильно понял, то:
Код:
        if ( cur_dig != NULL && (cur_dig[poz] & cur_mask)) str32 |= 1;
      }
//      str32 <<= 1;
     if ( count_dig == 6) str32 <<= 1;   // <<<<<<<<<<<<<<<<<<<<<
       else str32 <<= 2;                 // <<<<<<<<<<<<<<<<<<<<<
    }
    str32 <<= add_shift;
Показания съехали влево. Фотку прилагаю.
Я пробовал добавлять шестой пустой столбец к шрифту. И выглядит это как-то некузяво :) Фотка 2.
В итоге вернул всё назад.
Шрифт тот-же что и в скетче, только я убрал "жирность" поэтому появилась пустая нижняя строка. Да и фиг с ней.
В идеале хочется добавить по пустому столбику перед и после мигающих точек. Если можно конечно.
 

Вложения

В идеале хочется добавить по пустому столбику перед и после мигающих точек.
ну тогда попробуйте заменить код со 145 строки на:
Код:
        str32 <<= 1;
        for ( int poz = 0; poz < width_razd; poz++)
        {
          str32 <<= 1;
          if ( points && (str == 1 || str == 2 || str == 5 || str == 6)) str32 |= 1;
        }
        str32 <<= 2;
 

demman

New member
Всем привет.
Попытался добавить еще один уровень яркости.
В Clock5web изменил:
Код:
uint16_t    brightness_level[6]; // число уровней для автояркости - было 5

и в секции //------------------ set_brightness

    int level;
    for ( int8_t i = 6; i > 0; i--)     // <<<<<  было i = 5
    {
В скетче "eeprom" добавил:
Код:
  eeprom_data.brightness_level[5] = 450;
В скетче "web" добавил:
Код:
 str += "<tr><td colspan='2'>Порог 5</td><td><input type='text' maxlength='4' size='3' id='brd5' name='brd5' value='";
  str += eeprom_data.brightness_level[5];
  str += "' /></td></tr>\n";

и в секции //----------------------- handleSetParam

eeprom_data.brightness_level[0] = 0;
  for( uint8_t i = 1; i <= 5; i++)  // <<<<< изменил 4 на 5
  {
Поле в вебе появляется со значением 450. Но при любых изменениях с сохранением из веба - поле принимает значение 1 и на перезапись не реагирует.
Я что-то видимо пропустил?
 
Я что-то видимо пропустил?
в структуре
Код:
struct eeprom_data_t
увеличить размер массива:
Код:
uint16_t    brightness_level[6];
и в модуле web в районе 105 строки сделать:

Код:
brd1=document.getElementById('brd1').value;\n\
brd2=document.getElementById('brd2').value;\n\
brd3=document.getElementById('brd3').value;\n\
brd4=document.getElementById('brd4').value;\n\
brd5=document.getElementById('brd5').value;\n\
...
url='/set_param?tzone='+tzone+'&abrd='+abrd+'&brd='+brd+'&brd1='+brd1+'&brd2='+brd2+'&brd3='+brd3+'&brd4='+brd4+'&brd5='+brd5+'&antp='+antp+'&hntp='+hntp+'&stim='+stim;\n\
 
Последнее редактирование:

demman

New member
Спасибо. Последние исправления помогли.
Видимо в этой конструкции:
Код:
int level;
    for ( int8_t i = 6; i > 0; i--)     // <<<<<  было i = 5
    {
      if( i == cur_brightness) level = eeprom_data.brightness_level[i] - 20;
      else if( i == cur_brightness+1) level = eeprom_data.brightness_level[i] + 20;
      else level = eeprom_data.brightness_level[i];
     DEBUG_MSG( "i=%d, foto=%d, level=%d\n", i, foto, level);
....
тоже нужно что-то изменить, т.к. в мониторе:
i=6, foto=748, level=-18
переменная foto реагирует на свет, а level так и остается и яркость не регулируется :(
 
Сверху Снизу