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

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

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

  1. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    Добрый день!
    Представляю Вам свой вариант WiFi часов.

    IMG_3575_новый размер.JPG IMG_3576_новый размер.JPG 20160924114350_новый размер.jpg 20160924110359_новый размер.jpg

    Одни часы с использование матричных индикаторов, вторые с большими 1.8" семисегментными индикаторами. Блок индикации собран на MAX7219 или на HT16K33 (Красный 1.2 "4 Цифра 7 Семь Сегментный СВЕТОДИОДНЫЙ Дисплей Часы IIC время for_Arduino оон r3 купить на AliExpress). Управление производится при помощи одной кнопки которая активирует WiFi и дальнейшая настройка производится при помощи Web интерфейса.

    Видео работы Web интерфейса:


    В архиве находится схема управляющего блока, печатные платы, программа.
     

    Вложения:

    Последнее редактирование: 13 июн 2018
    buttopuo, Ennio, Solomsv и 10 другим нравится это.
  2. planar74

    planar74 Читатель

    Сообщения:
    44
    Симпатии:
    9
    Если не секрет, где панель брали? На Али у всех доставка в два раза дороже самой панели.
     
  3. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    Последнее редактирование: 13 апр 2016
    planar74 и NutsXXXL нравится это.
  4. planar74

    planar74 Читатель

    Сообщения:
    44
    Симпатии:
    9
  5. vad7

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

    Сообщения:
    398
    Симпатии:
    48
  6. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51

    Вложения:

    • 444.jpg
      444.jpg
      Размер файла:
      126,4 КБ
      Просмотров:
      749
    vad7 и NutsXXXL нравится это.
  7. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    Обновил прошивку, добавил поддержку перепрошивки во воздуху (OTA). Для того чтобы это работало необходимо:
    • установить Python Welcome to Python.org, обязательно версию 2.7, при установке включить галочку "Add python.exe to Path"
    • перезапустить часы
    • подключиться к WiFi
    • запустить Arduino IDE, если все сделали правильно, то должен появиться в портах наш сетевой порт:
      Безымянный6.jpg
    • затем нажимаем "Загрузка".
     
    Последнее редактирование: 12 май 2016
    romvya нравится это.
  8. romvya

    romvya Новичок

    Сообщения:
    5
    Симпатии:
    0
    Уважаемый @voldemar2005! Собрал ваши часы, Спасибо! то что надо, только один непонятный момент - при отображении времени матрицы перепутаны местами, т.е. (слева на право) четвертая матрица, там где секунды, отображается первой, третья - второй, вторая - третьей, первая, там где часы - последней. Неправильный именно только порядок матриц (при любой смене шрифта), нужно переставить матрицы местами так как описано выше и все будет нормально. Подскажите пожалуйста где подправить код. Матрицы брал такие -Бесплатная Доставка MAX7219 Матричный Модуль Для Arduino Микроконтроллер 4 В Один Дисплей с 5 P Линии купить на AliExpress
     
  9. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    @romvya Попробуйте а модуле max7219.ino изменить

    Код (Text):
    1. #ifdef MATRIX
    2. void max_set_row_full( int row, byte *value24, byte value8)
    3. {
    4.   if ( row < 0 || row > 7) return;
    5.   buf_command[0] = row + 1;
    6.   buf_command[1] = value8;
    7.   for ( int addr = 1; addr < MAX_USE; addr++)
    8.   {
    9.     buf_command[addr * 2] = row + 1;
    10.     buf_command[addr * 2 + 1] = value24[addr - 1];
    11.   }
    12.   max_spi_transfer();
    13. }
    14. #else
    15.  
    на for ( int addr = MAX_USE - 1; addr > 0; addr--)
     
    romvya нравится это.
  10. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    Обновил первый пост с прошивкой. Из изменений: авто перевод зимнее/летнее время, раз в сутки синхронизация с интернетом, изменение алгоритма автояркости. При обновлении прошивки настройки часов сбросятся на дефолтные.
     
  11. romvya

    romvya Новичок

    Сообщения:
    5
    Симпатии:
    0
    Спасибо за быстрый ответ, только сейчас добрался до устройства, сделал как вы сказали - результат тот же вот видео
     
  12. romvya

    romvya Новичок

    Сообщения:
    5
    Симпатии:
    0
    Прошивка что-то не компилируется - ругается на библиотеку time
    arduino 1.6.8 (раскрыть)

    Arduino: 1.6.8 (Windows 10), Плата:"Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

    libraries\Time\DateStrings.cpp.o: In function `dayStr(unsigned char)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/DateStrings.cpp:72: multiple definition of `monthStr(unsigned char)'

    sketch\libraries\Time\DateStrings.cpp.o:sketch\libraries\Time/DateStrings.cpp:72: first defined here

    libraries\Time\DateStrings.cpp.o: In function `monthShortStr(unsigned char)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/DateStrings.cpp:79: multiple definition of `monthShortStr(unsigned char)'

    sketch\libraries\Time\DateStrings.cpp.o:sketch\libraries\Time/DateStrings.cpp:79: first defined here

    libraries\Time\DateStrings.cpp.o: In function `dayStr(unsigned char)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/DateStrings.cpp:86: multiple definition of `dayStr(unsigned char)'

    sketch\libraries\Time\DateStrings.cpp.o:sketch\libraries\Time/DateStrings.cpp:86: first defined here

    libraries\Time\DateStrings.cpp.o: In function `dayShortStr(unsigned char)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/DateStrings.cpp:91: multiple definition of `dayShortStr(unsigned char)'

    sketch\libraries\Time\DateStrings.cpp.o:sketch\libraries\Time/DateStrings.cpp:91: first defined here

    libraries\Time\Time.cpp.o: In function `setTime(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:151: multiple definition of `breakTime(long, tmElements_t&)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:151: first defined here

    libraries\Time\Time.cpp.o: In function `refreshCache(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:42: multiple definition of `refreshCache(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:42: first defined here

    libraries\Time\Time.cpp.o: In function `hour(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:53: multiple definition of `hour(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:53: first defined here

    libraries\Time\Time.cpp.o: In function `isPM(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:84: multiple definition of `isPM(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:84: first defined here

    libraries\Time\Time.cpp.o: In function `isAM(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:76: multiple definition of `isAM(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:76: first defined here

    libraries\Time\Time.cpp.o: In function `hourFormat12(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:62: multiple definition of `hourFormat12(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:62: first defined here

    libraries\Time\Time.cpp.o: In function `minute(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:92: multiple definition of `minute(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:92: first defined here

    libraries\Time\Time.cpp.o: In function `second(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:101: multiple definition of `second(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:101: first defined here

    libraries\Time\Time.cpp.o: In function `day(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:110: multiple definition of `day(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:110: first defined here

    libraries\Time\Time.cpp.o: In function `weekday(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:119: multiple definition of `weekday(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:119: first defined here

    libraries\Time\Time.cpp.o: In function `month(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:128: multiple definition of `month(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:128: first defined here

    libraries\Time\Time.cpp.o: In function `year(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:137: multiple definition of `year(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:137: first defined here

    libraries\Time\Time.cpp.o: In function `makeTime(tmElements_t&)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:204: multiple definition of `makeTime(tmElements_t&)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:204: first defined here

    libraries\Time\Time.cpp.o: In function `setTime(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:274: multiple definition of `setTime(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:274: first defined here

    libraries\Time\Time.cpp.o:(.bss.getTimePtr+0x0): multiple definition of `getTimePtr'

    sketch\libraries\Time\Time.cpp.o:(.bss.getTimePtr+0x0): first defined here

    libraries\Time\Time.cpp.o: In function `now()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:250: multiple definition of `now()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:250: first defined here

    libraries\Time\Time.cpp.o: In function `hour()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:49: multiple definition of `hour()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:49: first defined here

    libraries\Time\Time.cpp.o: In function `hourFormat12()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:58: multiple definition of `hourFormat12()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:58: first defined here

    libraries\Time\Time.cpp.o: In function `isAM()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:72: multiple definition of `isAM()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:72: first defined here

    libraries\Time\Time.cpp.o: In function `isPM()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:80: multiple definition of `isPM()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:80: first defined here

    libraries\Time\Time.cpp.o: In function `minute()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:88: multiple definition of `minute()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:88: first defined here

    libraries\Time\Time.cpp.o: In function `second()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:97: multiple definition of `second()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:97: first defined here

    libraries\Time\Time.cpp.o: In function `day()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:106: multiple definition of `day()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:106: first defined here

    libraries\Time\Time.cpp.o: In function `weekday()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:115: multiple definition of `weekday()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:115: first defined here

    libraries\Time\Time.cpp.o: In function `month()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:124: multiple definition of `month()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:124: first defined here

    libraries\Time\Time.cpp.o: In function `year()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:133: multiple definition of `year()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:133: first defined here

    libraries\Time\Time.cpp.o: In function `setTime(int, int, int, int, int, int)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:286: multiple definition of `setTime(int, int, int, int, int, int)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:286: first defined here

    libraries\Time\Time.cpp.o: In function `adjustTime(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:303: multiple definition of `adjustTime(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:303: first defined here

    libraries\Time\Time.cpp.o: In function `timeStatus()':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:307: multiple definition of `timeStatus()'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:307: first defined here

    libraries\Time\Time.cpp.o: In function `setSyncProvider(long (*)())':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:312: multiple definition of `setSyncProvider(long (*)())'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:312: first defined here

    libraries\Time\Time.cpp.o: In function `setSyncInterval(long)':

    C:\Users\Roman\Documents\Arduino\libraries\Time/Time.cpp:319: multiple definition of `setSyncInterval(long)'

    sketch\libraries\Time\Time.cpp.o:sketch\libraries\Time/Time.cpp:319: first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Ошибка компиляции для платы Generic ESP8266 Module.

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"

     
  13. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    скорее всего из папки со скетчем надо убрать все лишнее папки ...

    Автор ограничил доступ к видео.

    ну а проверить я смогу только завтра, часы у меня на работе ...
     
  14. romvya

    romvya Новичок

    Сообщения:
    5
    Симпатии:
    0
    а если устройство будет отключено во время перевода на летнее время? и включится, например в мае?
    Я перевод делал так

    Код (Text):
    1. // летнее время--------------------------------------------------------------------------------------------------------------
    2.  
    3.   int M, OK ;
    4.   // Находим последнее воскресенье марта и последнее воскресенье октября
    5.   M = 31 - DayOfWeek(31, 3, tmYearToCalendar(tm.Year));
    6.   OK = 31 - DayOfWeek(31, 10, tmYearToCalendar(tm.Year));
    7.  
    8.  
    9.   // Учёт летнего времни (с последнего воскресенья марта до последнего воскресенья октября)
    10.   if  ((((tm.Month > 3) && (tm.Month < 10)) ||
    11.         ((tm.Month == 3) && (tm.Day > M))   ||
    12.         ((tm.Month == 3) && (tm.Day == M) && (tm.Hour >= 3))  ||
    13.         ((tm.Month == 10) && (tm.Day < OK)) ||
    14.         ((tm.Month == 10) && (tm.Day == OK) && (tm.Hour < 4))))
    15.    
    16.   timeZone = 3; // летнее время
    17.  
    18.   else {
    19.     timeZone = 2; // зимнее время
    20.   }
    21.   //Serial.println(timeZone);
    22.  
    23.  
    24.   if ((tm.Month == 10) && (tm.Day == OK) && ((tm.Hour > 4) || (tm.Hour < 3)) ||
    25.       ((tm.Month != 10) && (tm.Day != OK))
    26.      
    27.      )
    28.   { if (var22 == 0) {
    29.       var22 = 1; EEPROM.write(3, var22);
    30.       Serial.println("var22 EEPROM Write");
    31.     }
    32.     var22 = 1;  // разрешение для смены timeZone при переводе на час назад
    33.   }
    34.  
    35.   if ((zonestatus != timeZone) && var22 == 1)
    36.   {
    37.     EEPROM.write(2, timeZone);
    38.     Serial.println("timeZome EEPROM Write");
    39.     Udp.begin(localPort);
    40.     delay (2000);
    41.     setSyncProvider(getNtpTime);
    42.     if (timeStatus() != timeNotSet) //Если время получили успешно,
    43.     {
    44.       RTC.set(now()); // то записываем данные в RTC
    45.     }
    46.     else {
    47.       if (timeZone == 2) RTC.set(RTC.get() - 3600);
    48.       if (timeZone == 3) RTC.set(RTC.get() + 3600);
    49.     }
    50.     zonestatus = timeZone;
    51.     if (timeZone == 2) {
    52.       var22 = 0; EEPROM.write(3, var22);
    53.       Serial.println("var22=0 EEPROM Write");
    54.     }
    55.   }
    56.  
    57. }
    Код (Text):
    1. int DayOfWeek (int day, int month, int ye) // формула определения дня недели
    2. {
    3.   unsigned a = (14 - month) / 12;
    4.   unsigned y = ye - a;
    5.   unsigned m = month + 12 * a - 2;
    6.   return (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
    7. }
    8.  
     
  15. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    @romvya вот таким циклом у меня получилось поменять мои часы на ваши, значить и вас должно получится сделать наоборот ).
    Код (Text):
    1.   for ( int addr = 1, addr1 = MAX_USE - 1; addr < MAX_USE; addr++, addr1--)
    2.   {
    3.     buf_command[addr1 * 2] = row + 1;
    4.     buf_command[addr1 * 2 + 1] = value24[addr - 1];
    5.   }
    6.  
     
    romvya нравится это.
  16. romvya

    romvya Новичок

    Сообщения:
    5
    Симпатии:
    0
    Ура! Получилось! Спасибо большое. Извините за наглость еще бы пару будильников прикрутить с настройкой по дням недели и вебинтерфейсом.
     
  17. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    готово! добавил будильники.
    Макросом COUNT_ALARM_CLOCK задается количество. При срабатывании высокий уровень на GPIO13 длительностью 1 мин или отключается кратковременным нажатием на кнопку управления.
     
    andron220v и romvya нравится это.
  18. Сергей_Ф

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

    Сообщения:
    2.127
    Симпатии:
    226
    @voldemar2005 не возражаете, я ваш код немного переделаю под себя?
    Из того, что уже сделал: выбор типа матрицы (порядка элементов) при компиляции, отказ от rtc при желании, обновление через HTTP (ну не нравится мне ОТА), инвертирование (по желанию) сигнала с фотодатчика (плата Witty). С будильниками Вы меня опередили.
     
    Последнее редактирование: 15 июл 2016
  19. voldemar2005

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

    Сообщения:
    60
    Симпатии:
    51
    ищите в первом сообщении ...

    нет кончно
     
  20. Сергей_Ф

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

    Сообщения:
    2.127
    Симпатии:
    226
    @voldemar2005 вопрос: почему для синхронизации времени с интернетом Вы писали свой код, а не воспользовались библиотекой ntp.h?
     

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