Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Другие проекты", создана пользователем voldemar2005, 13 апр 2016.

  1. Evgeniy163

    Evgeniy163 Читатель

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

    RedCat Новичок

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

    voldemar2005 Авторитетный участник сообщества

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

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

    RedCat Новичок

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

    voldemar2005 Авторитетный участник сообщества

    Сообщения:
    60
    Симпатии:
    53
    первая тестовая сборка.
    для работы есть две переменные:
    • add_val - значение, которое хотим показать *10 (т.е. хотим показать -23.4 записываем в переменную -234), сейчас туда пишется текущая температура
    • add_val_sec - сколько секунд в конце каждой минуты показываем
    это 100% делать не буду
     

    Вложения:

    Последнее редактирование: 27 дек 2016
    RedCat нравится это.
  6. RedCat

    RedCat Новичок

    Сообщения:
    10
    Симпатии:
    0
    Ой спасибо, блин, большое! (с) Масяня

    Все работает, дальше есть больший простор для колупания, по крайней мере подход понятен и таки да, он системный. А я ковырял по верхам.
    Слегка матерится компилятор на несоответствие типов при преобразовании:
    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(). Как или когда она включается?
     
    Последнее редактирование: 27 дек 2016
  7. voldemar2005

    voldemar2005 Авторитетный участник сообщества

    Сообщения:
    60
    Симпатии:
    53
    ну например в настройках прописать несуществующее имя точки доступа

    после пяти неудачных попыток подключения к точке доступа ...
     
  8. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
    @voldemar2005, ты забыл учесть один нюанс. Если нет датчика - то в конце каждой минуты вылазит пустой экран. Надо бы условие поставить.
    типа так (раскрыть)

    Код (Text):
    1. #ifndef NO_DS18B20
    2.   if( ds3231.Second < (60 - add_val_sec) )
    3.   {
    4. #endif
    5.     dig[0] = ds3231.Hour / 10;
    6.     dig[1] = ds3231.Hour % 10,
    7.     dig[2] = ds3231.Minute / 10,
    8.     dig[3] = ds3231.Minute % 10,
    9.     dig[4] = ds3231.Second / 10,
    10.     dig[5] = ds3231.Second % 10;
    11.     add_val_pr = false;
    12.  
    13. #ifndef NO_DS18B20
    14.   }
    15.   else
    16.   {
    17.     int16_t prom;
    18.     uint8_t v;
    19.     bool pr_minus;
    20.  
    21.     if( add_val >= 0) { prom = add_val; pr_minus = false; }
    22.     else              { prom = -add_val; pr_minus = true; }
    23.  
    24.     if( count_dig == 4) prom /= 10;
    25.  
    26.     for( int8_t i = count_dig-1; i >= 0; i--)
    27.     {
    28.       if ( prom == 0 && i < 4)
    29.       {
    30.         if ( pr_minus)
    31.         {
    32.           v = 10;
    33.           pr_minus = false;
    34.         }
    35.         else
    36.           v = 11;
    37.       }
    38.       else
    39.         v = prom % 10;
    40.       dig[i] = v;
    41.       prom /= 10;
    42.     }
    43.     add_val_pr = true;
    44.   }
    45. #endif  
     
    Последнее редактирование: 28 дек 2016
  9. voldemar2005

    voldemar2005 Авторитетный участник сообщества

    Сообщения:
    60
    Симпатии:
    53
    ну если нет датчика присвоить add_val_sec=0 и ничего не будет выводиться.
     
  10. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
    @voldemar2005 не, ну везде условия стоят, а здесь нет. Понятно что можно обнулить, но просто он не имеет смысл при отсутствии датчика и потому логично от него избавится при компиляции. Разве нет?
     
  11. Evgeniy163

    Evgeniy163 Читатель

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

    Вложения:

    • WiFi_Term.rar
      Размер файла:
      4 КБ
      Просмотров:
      38
    Последнее редактирование: 28 дек 2016
  12. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
    @Evgeniy163 а как Вы синхронизируете включение wifi в часах и в термометре? Или в часах он у Вас включен постоянно?
     
  13. Evgeniy163

    Evgeniy163 Читатель

    Сообщения:
    33
    Симпатии:
    7
    Если разрешен внешний датчик температуры (включается на вебморде), то wifi включен постоянно. В противном случае wifi работает как обычно.
     
  14. RedCat

    RedCat Новичок

    Сообщения:
    10
    Симпатии:
    0
    Не экологичненько однако, работать постоянно, да.
     
  15. Evgeniy163

    Evgeniy163 Читатель

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

    RedCat Новичок

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

    Ну и таки да - всех с наступающим!
    Всем - бобра!!! ;)
     
  17. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
    а где это есть у автора? Или Вы о себе?
     
  18. RedCat

    RedCat Новичок

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

    Evgeniy163 Читатель

    Сообщения:
    33
    Симпатии:
    7
    А как термометр узнает, что нужно передавать данные, он же в глубокой спячке и просыпается раз в несколько минут. Или же он держит постоянное соединение и отвечает на запрос часов? Т.е как правильно спросил @Сергей_Ф, как синхронизируете часы и термометр?
     
    Последнее редактирование: 31 дек 2016
  20. RedCat

    RedCat Новичок

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

Поделиться этой страницей