• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Evgeniy163

New member
@voldemar2005 огромное спасибо за Ваш проект.
Вот... прирукожопил :) вифи внешний термометр. Софтописатель из меня еще тот :), но все работает.
 
Последнее редактирование:

RedCat

New member
ну проще всего заполнять массив int dig[6] нужными числами...
Таки заполнить dig[6] нужными числами вроде как несложно и выходит вполне успешно, но вот не получается у меня побороть ваши мигающие точки и пробелы между цифрами если приглушить точки, слишком в разных местах это все сидит. Видимо придется приклеивать второй дисплей :( либо присоединиться к гласу вопиющему к ТС:
А могли бы сделать? За отдельную благодарность.
ЗЫ Ну и дабы два раза не вставать подскажите, братцы, как мне добиться любви понимания от #define DEBUG_UDP? Вроде как ConsoleAddressUDP прописал, ConsolePortUDP вижу, пытаюсь зайти на IP : Port - а зайти не получается?
 
либо присоединиться к гласу вопиющему к ТС
у меня часы с этим дисплеем на работе, а там не совсем сподручно отлаживать код. А какой алгоритм то хочется, по возможности сделаю ...

это я делал для удаленного вывода диагностических сообщений, вместо console. Порядок следующий:
ConsoleAddressUDP IP компьютера, ConsolePortUDP любой свободный порт, запускаем утилитку UdpTerm_Std.exe из архива, в ней Ctrl+N прописываем адреса и порт, Ctrl+P сохранить настройки. И после этого, при подключенном WiFi, все сообщения посланные через DEBUG_MSG будут выводится на экран UDP терминала.
 

RedCat

New member
Благодарю за ответ!
Про утилитку-то я и не подозревал :).
А алгоритм хочется следующий:
- показываем время (период t1, желательно настраиваемый);
- меняем на показания температуры, давления, влажности и пр. из подготовленного заранее буфера (период t2, желательно настраиваемый) попутно разбираясь с пробелами и высотой шрифтов (2 и 3 позиции разделены двоеточием, 5 и 6 позиции выводятся шрифтом znak8x4s_0);
- возврат на п.1.
Это по-скромному :oops:, ну а если наглеть - то добавить п.3
- выводим бегущей строкой любую фразу (поздравление с ДР, НГ, прогноз погоды итд разумеется заканчивающуюся кодом str += " © voldemar2005" ;).
 
алгоритм хочется следующий:
первая тестовая сборка.
для работы есть две переменные:
  • add_val - значение, которое хотим показать *10 (т.е. хотим показать -23.4 записываем в переменную -234), сейчас туда пишется текущая температура
  • add_val_sec - сколько секунд в конце каждой минуты показываем
выводим бегущей строкой любую фразу
это 100% делать не буду
 

Вложения

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

RedCat

New member
Ой спасибо, блин, большое! (с) Масяня

Все работает, дальше есть больший простор для колупания, по крайней мере подход понятен и таки да, он системный. А я ковырял по верхам.
Слегка матерится компилятор на несоответствие типов при преобразовании:
E:\Arduino\Sketch\Clock5web\show_time.ino:10:34: warning: narrowing conversion of '(int)(ds3231.tmElements_t::Hour / 10u)' from 'int' to 'uint8_t {aka unsigned char}' inside { } [-Wnarrowing]

uint8_t dig[6] = { ds3231.Hour / 10, ds3231.Hour % 10, ds3231.Minute / 10, ds3231.Minute % 10, ds3231.Second / 10, ds3231.Second % 10 };


PS Ругань убрал инициализацией массива нулями uint8_t dig[6] = { 0, 0, 0, 0, 0, 0 }; все равно он там чуть ниже заполняется значениями.
И таки да, не смог создать условия при которых включается точка доступа ap_init(). Как или когда она включается?
 
Последнее редактирование:
не смог создать условия при которых включается точка доступа ap_init()
ну например в настройках прописать несуществующее имя точки доступа

Как или когда она включается?
после пяти неудачных попыток подключения к точке доступа ...
 

Сергей_Ф

Moderator
Команда форума
@voldemar2005, ты забыл учесть один нюанс. Если нет датчика - то в конце каждой минуты вылазит пустой экран. Надо бы условие поставить.
Код:
#ifndef NO_DS18B20
  if( ds3231.Second < (60 - add_val_sec) )
  {
#endif 
    dig[0] = ds3231.Hour / 10;
    dig[1] = ds3231.Hour % 10,
    dig[2] = ds3231.Minute / 10,
    dig[3] = ds3231.Minute % 10,
    dig[4] = ds3231.Second / 10,
    dig[5] = ds3231.Second % 10;
    add_val_pr = false;

#ifndef NO_DS18B20
  }
  else
  {
    int16_t prom;
    uint8_t v;
    bool pr_minus;

    if( add_val >= 0) { prom = add_val; pr_minus = false; }
    else              { prom = -add_val; pr_minus = true; }

    if( count_dig == 4) prom /= 10;

    for( int8_t i = count_dig-1; i >= 0; i--)
    {
      if ( prom == 0 && i < 4)
      {
        if ( pr_minus)
        {
          v = 10;
          pr_minus = false;
        }
        else
          v = 11;
      }
      else
        v = prom % 10;
      dig[i] = v;
      prom /= 10;
    }
    add_val_pr = true;
  }
#endif
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@voldemar2005 не, ну везде условия стоят, а здесь нет. Понятно что можно обнулить, но просто он не имеет смысл при отсутствии датчика и потому логично от него избавится при компиляции. Разве нет?
 

Evgeniy163

New member
Допилил внешний термометр для часов, вроде бы все работает.
Код для часов могу выложить, но только с разрешения автора @voldemar2005.
 

Вложения

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

Сергей_Ф

Moderator
Команда форума
@Evgeniy163 а как Вы синхронизируете включение wifi в часах и в термометре? Или в часах он у Вас включен постоянно?
 

Evgeniy163

New member
Если разрешен внешний датчик температуры (включается на вебморде), то wifi включен постоянно. В противном случае wifi работает как обычно.
 

Evgeniy163

New member
@RedCat А что делать, кому сейчас легко? :) Можно использовать какой нибудь "посредник" в инете, передавать данные туда, а часы периодически бы от туда считывали. Но это уж больно заморочено.
 

RedCat

New member
Так никому особо не легко.
Не совсем понимаю какое отношение имеет "посредник" к процедуре инициализации и проверки WiFi подключения, но у автора все это вполне работает, и именно этим пользуюсь для считывания раз в 15 мин показаний внешнего (уличного) термометра инициализируя и выключая затем WiFi. Изящненько и экологично... :)

Ну и таки да - всех с наступающим!
Всем - бобра!!! ;)
 

RedCat

New member
Помилуйте, батенька, как можно так о себе? Какой из меня автор? @voldemar2005 все за нас сделал уже. Процедуры называются void sta_init() и bool sta_check(), используйте их и будет вам счастье.
 

Evgeniy163

New member
именно этим пользуюсь для считывания раз в 15 мин показаний внешнего (уличного) термометра инициализируя и выключая затем WiFi. Изящненько и экологично... :)
А как термометр узнает, что нужно передавать данные, он же в глубокой спячке и просыпается раз в несколько минут. Или же он держит постоянное соединение и отвечает на запрос часов? Т.е как правильно спросил @Сергей_Ф, как синхронизируете часы и термометр?
 
Последнее редактирование:

RedCat

New member
Термометры в виде DS18B20 в количестве пяти штук у меня привязаны к малинке (Raspberry Pi 3). Там по крону баш скрипт раз в пять минут считывает показания и записывает в базу MySQL. Параллельно показания двух датчиков, в т.ч. наружного записываются в файлики, данные из которых используются потом для вывода температуры среди всего прочего на инфомониторе. И вот здесь у меня начались метания - как прирукожопить эти показания к часам в спальне. Были варианты с samba-швамба, комарами-mosquitto, но как-то вечером после двух бокалов пива меня ВНЕЗАПНО осенило! Зачем плодить ненужные сущности и загружать ESP-шку хламом, когда у нас все уже есть! И отечество спас простой GET запрос. Вот как-то так, да.
С наступающим всех!!!
 
Сверху Снизу