ESP, IoT [BigClock] Большие часы на WS2812, ESP8266, Народный мониторинг

Какой вариант датчика используется у вас? Интересно, использует ли кто BME280, как у меня?)

  • BMP280

    Голосов: 26 26.8%
  • BME280

    Голосов: 71 73.2%

  • Всего проголосовало
    97

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Удивительно, откуда такое появляется) Походу надо себе точку впаивать)
 

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
@Romshteks, аудио модуль нужен) уже как-то обсуждали)
Это понятно,что сама esp куковать не будет.)
Кукушку надо сделать опционально,кому нужна будет,тот заморочится с выводом звука.
Будет время посмотри мои наработки.
Пошаманил над интерлицом
Кукуха в портале кукует.)
Как бы теперь это всё с eeprom связать.
 

Вложения

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Логику понял. С еепром не сложно, по идее три переменных надо: статус, час старт, час стоп. Можешь аналогично закинуть в структуру, памяти много не займет)
 

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
Спасибо.Разобрался.Создал мем6 и там всё сохраняется.
ASM а можно ли добавить в режимы отображения дату?
 

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
ASM а можешь подробно прокомментировать каждую строчку этого кода,а то я что-то не догоняю.
 

Вложения

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Romshteks,
C++:
void DataToArray() {  // вывод влажности с датчика BME280 на экран

  bmp280.beginI2C(); // чтение датчика

  if (DOT_TEMP == 1) { // если выбран режим с точкой

    leds[NUM_LEDS] = 0x000000; // то выключить принудительно

  }

  hum = (bmp280.readFloatHumidity()) + o.cor_hum; // измерение значений, корректировка при надобности

  Serial.println(hum); // вывести в сериал результат

  Dots(!Dot); // выключить часовые точки принудительно

  if (c.hmd) { // если включен символ влажности

    Digit(digits[16], segment_4);  // символ % включен

    Digit(digits[15], segment_3);  // символ % включен

  } else { иначе выключен

    Digit(digits[12], segment_4);  // символ % выключен

    Digit(digits[12], segment_3);  // символ % выключен

  }

  int digit = hum % 10; // остаток от деления на 10, единичные числа

  Digit(digits[digit], segment_2);  // 2 сегмент

  digit = hum / 10; // деление на 10, числа десятки

  Digit(digits[digit], segment_1);  // 1 сегмент

};
 
  • Лойс +1
Реакции: Romshteks

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
95
19
Я экспериментировал и написал этот код
code + files + lib

файл: DFplayer_speak_v0.2.ino нужно поместить в папку "NEW_CLOCK_ESP_2_beta_2"

кстати, после прошивки нужно переподключить питание
UPD –
Заменил D3 на D0 и решил проблему с переподключением питания.
теперь модуль DFplayer инициализируется после прошивки
UPD 6 –
добавил будильник!, есть только один НО, если, скажем, в 10:59:59 будет запущен опрос датчиков, то, возможно, будильник не сработает, и с этим нужно что-то делать!
и много текста в порт для отладки!
добавлены, звуки! и переименован файл звуков и папок, для правильной работы
PS, исправить проблему с 24 часа поставил в case 0: вместо case 24:
UPD 6.1 –
сделал удобным включение выключение модуля DFPlayer

DFplayer_speak_v0.3.ino:
//////////// Функция DFPlayer_setup и DFPlayer_loop
  //  DFPlayer_setup();  //нужно поместить в setup
  //  DFPlayer_loop();   //нужно поместить в loop

/*
[LIST]
[*]автор Maxx1200
[*]Каждый час будет говорить время!
[*]есть только один НО, если, скажем, в 22:59:59 будет запущен опрос датчиков, то, возможно, звука "23 часа" не будет и с этим нужно что-то делать!
[/LIST]
*/

/***************************************************************************************************/
/*
   исходный код: https://github.com/enjoyneering/DFPlayer

   Возможности DFPlayer Mini:
    - 3,2В..5,0В, обычно 4,2В
    - microSD-карта до 32 ГБ (FAT16, FAT32)
    - USB-диск до 32 ГБ (FAT16, FAT32)
    - поддерживает частоту дискретизации mp3 8кГц, 11,025кГц, 12кГц, 16кГц, 22,05кГц, 24кГц, 32кГц, 44,1кГц, 48кГц
    - поддерживает до 100 папок, каждая папка может быть назначена на 001..255 песен
    - встроенный моноусилитель мощностью 3 Вт, NS8002 AB-класса с функцией ожидания
    - UART для связи, 9600 бит/с (четность: нет, биты данных: 8, стоповые биты: 1, управление потоком: нет)

    ПРИМЕЧАНИЕ:
    - добавьте резистор 1K последовательно с выводом DFPlayer TX

   Фреймворки и библиотеки:
   ESP8266 Core      -  https://github.com/esp8266/Arduino
   EspSoftwareSerial -  https://github.com/plerup/espsoftwareserial
*/
/***************************************************************************************************/

//Библиотеки
#include <SoftwareSerial.h>
#include <DFPlayer.h>

//Настройки можно поместить в - Constants.h
//В проекте контакты D4 D0 свободны можно их использовать проверено!
#define MP3_RX_PIN              2    //GPIO2/D4 к DFPlayer Mini TX
#define MP3_TX_PIN              16   //GPIO16/D0 к DFPlayer Mini RX
#define MP3_SERIAL_SPEED        9600  //DFPlayer Mini поддерживает только 9600 бод
#define MP3_SERIAL_BUFFER_SIZE  32    //размер последовательного буфера программного обеспечения в байтах, для отправки 8 байтов вам нужен 11-байтовый буфер (стартовый байт + 8 битов данных + байт четности + стоп-байт = 11 байтов)
#define MP3_SERIAL_TIMEOUT      350   //среднее время ожидания ответа DFPlayer для чипа GD3200B 350 мс..400 мс



SoftwareSerial mp3Serial;
DFPlayer       mp3;

  //Переменные
  int Hor, Min, Sec;
  //unsigned long timing2; // Переменная для хранения точки отсчета

/*********************здесь мы выбираем тип модуля*********************/
/*
    DFPlayer_setup()

    Main setup

    ПРИМЕЧАНИЕ:
    - тип модуля:
      - DFPLAYER_MINI:
        - DFPlayer Mini module
        - MP3-TF-16P module
        - FN-M16P module
        - YX5200 chip
        - YX5300 chip
        - JL AAxxxx chip
      - DFPLAYER_FN_X10P:
        - FN-M10P module
        - FN-S10P module
        - FN6100 chip
      - DFPLAYER_HW_247A:
        - HW-247A module
        - GD3200B chip
        - MH2024K-24SS
      - DFPLAYER_NO_CHECKSUM:
        - нет вычисления контрольной суммы (не рекомендуется для MCU без внешнего кварцевого генератора)
*/
/**************************************************************************/
  //  DFPlayer_setup(); //нужно поместить в setup
void DFPlayer_setup() {

  Serial.println("Инициализация DFPlayer... (может занять 3~5 секунд)"); //для отладки

  mp3Serial.begin(MP3_SERIAL_SPEED, SWSERIAL_8N1, MP3_RX_PIN, MP3_TX_PIN, false, MP3_SERIAL_BUFFER_SIZE, 0); //false=сигнал не инвертирован, 0=размер буфера ISR/RX (общий с последовательным буфером TX)

  mp3.begin(mp3Serial, MP3_SERIAL_TIMEOUT, DFPLAYER_HW_247A, false); //"DFPLAYER_HW_247A" см. ПРИМЕЧАНИЕ, false = нет обратной связи от модуля после команды

  mp3.stop();                             //если плеер работал во время перезагрузки ESP8266

  mp3.reset();                            //сбросить все настройки по умолчанию

  mp3.setSource(2);                       //1=USB-диск, 2=TF-карта, 3=Aux, 4=спящий режим, 5=NOR Flash

  mp3.setEQ(0);                           //0=Выкл., 1=Поп, 2=Рок, 3=Джаз, 4=Классика, 5=Бас
  mp3.setVolume(20);                      //0..30, модуль сохраняет громкость при сбое питания

  mp3.sleep();                            //переход в спящий режим, 24 мА

  mp3.wakeup(2);                          //выйти из спящего режима и инициализировать источник 1=USB-диск, 2=TF-карта, 3=Aux, 5=NOR Flash

  mp3Serial.enableRx(true);               //включить прерывания на выводе RX для лучшего обнаружения ответа, меньше накладных расходов, чем mp3Serial.listen()

  Serial.println(mp3.getStatus());        //0=стоп, 1=воспроизведение, 2=пауза, 3=спящий режим или режим ожидания, 4=ошибка связи, 5=неизвестное состояние
  Serial.println(mp3.getVolume());        //0..30
  Serial.println(mp3.getCommandStatus()); //1=модуль занят, 2=модуль в спящем режиме, 3=запрос получен не полностью, 4=не совпадает контрольная сумма
                                          //5=запрошенная папка/трек вне допустимого диапазона, 6=запрошенная папка/трек не найдена
                                          //7=реклама доступна во время воспроизведения трека, 8=SD-карта не найдена, 9=???, 10=спящий модуль
                                          //11=ОК команда принята, 12=ОК воспроизведение завершено, 13=ОК модуль готов после перезагрузки

  mp3Serial.enableRx(false);              //отключить прерывания на RX-контакте, меньше накладных расходов, чем mp3Serial.listen()

    //Чтобы при включении был звук как пример звук! 3 часы
     mp3.playMP3Folder(3); // проигрываем файл mp3/0003.mp3
     delay(2000); // задержка с секунд
     mp3.pause(); // пауза
}



  //  DFPlayer_loop(); //нужно поместить в loop
void DFPlayer_loop() {


  Hor = ntp.hour();
  Min = ntp.minute();
  Sec = ntp.second();

  if(Min == 0 && Sec == 0) {
    switch (Hor) { // Каждый час будет говорить время
     case 0:
     mp3.playMP3Folder(24); // проигрываем файл mp3/0024.mp3
     Serial.println ("track: 24"); //для отладки
     break;
     case 1:
     mp3.playMP3Folder(1); // проигрываем файл mp3/0001.mp3
     Serial.println ("track: 1"); //для отладки
     break;
     case 2:
     mp3.playMP3Folder(2); // проигрываем файл mp3/0002.mp3
     Serial.println ("track: 2"); //для отладки
     break;
     case 3:
     mp3.playMP3Folder(3); // проигрываем файл mp3/0003.mp3
     Serial.println ("track: 3"); //для отладки
     break;
     case 4:
     mp3.playMP3Folder(4); // проигрываем файл mp3/0004.mp3
     Serial.println ("track: 4"); //для отладки
     break;
     case 5:
     mp3.playMP3Folder(5); // проигрываем файл mp3/0005.mp3
     Serial.println ("track: 5"); //для отладки
     break;
     case 6:
     mp3.playMP3Folder(6); // проигрываем файл mp3/0006.mp3
     Serial.println ("track: 6"); //для отладки
     break;
     case 7:
     mp3.playMP3Folder(7); // проигрываем файл mp3/0007.mp3
     Serial.println ("track: 7"); //для отладки
     break;
     case 8:
     mp3.playMP3Folder(8); // проигрываем файл mp3/0008.mp3
     Serial.println ("track: 8"); //для отладки
     break;
     case 9:
     mp3.playMP3Folder(9); // проигрываем файл mp3/0009.mp3
     Serial.println ("track: 9"); //для отладки
     break;
     case 10:
     mp3.playMP3Folder(10); // проигрываем файл mp3/0010.mp3
     Serial.println ("track: 10"); //для отладки
     break;
     case 11:
     mp3.playMP3Folder(11); // проигрываем файл mp3/0011.mp3
     Serial.println ("track: 11"); //для отладки
     break;
     case 12:
     mp3.playMP3Folder(12); // проигрываем файл mp3/0012.mp3
     Serial.println ("track: 12"); //для отладки
     break;
     case 13:
     mp3.playMP3Folder(13); // проигрываем файл mp3/0013.mp3
     Serial.println ("track: 13"); //для отладки
     break;
     case 14:
     mp3.playMP3Folder(14); // проигрываем файл mp3/0014.mp3
     Serial.println ("track: 14"); //для отладки
     break;
     case 15:
     mp3.playMP3Folder(15); // проигрываем файл mp3/0015.mp3
     Serial.println ("track: 15"); //для отладки
     break;
     case 16:
     mp3.playMP3Folder(16); // проигрываем файл mp3/0016.mp3
     Serial.println ("track: 16"); //для отладки
     break;
     case 17:
     mp3.playMP3Folder(17); // проигрываем файл mp3/0017.mp3
     Serial.println ("track: 17"); //для отладки
     break;
     case 18:
     mp3.playMP3Folder(18); // проигрываем файл mp3/0018.mp3
     Serial.println ("track: 18"); //для отладки
     break;
     case 19:
     mp3.playMP3Folder(19); // проигрываем файл mp3/0019.mp3
     Serial.println ("track: 19"); //для отладки
     break;
     case 20:
     mp3.playMP3Folder(20); // проигрываем файл mp3/0020.mp3
     Serial.println ("track: 20"); //для отладки
     break;
     case 21:
     mp3.playMP3Folder(21); // проигрываем файл mp3/0021.mp3
     Serial.println ("track: 21"); //для отладки
     break;
     case 22:
     mp3.playMP3Folder(22); // проигрываем файл mp3/0022.mp3
     Serial.println ("track: 22"); //для отладки
     break;
     case 23:
     mp3.playMP3Folder(23); // проигрываем файл mp3/0023.mp3
     Serial.println ("track: 23"); //для отладки
     break;

    }


    delay(2000); // задержку лучше заменить на миллис
    mp3.pause(); // пауза
    //Serial.println ("track"); //для отладки


    /*аналог задержки
    if (millis() - timing2 > 3000){ // Вместо 3000 подставьте нужное вам значение паузы
     timing2 = millis();
     Serial.println ("3 seconds");
    }

     mp3.pause(); // пауза
    */

  }

}
DFplayer_speak_v0.6.1.ino:
//////////// Функция DFPlayer_setup и DFPlayer_loop
/*
  //Подключен ли модуль DFPlayer?, может быть привинчен к веб-интерфейсу!
  bool DFPlayer_check = 1; // 1 - есть модуль DFPlayer, 0 - нет

  // выполняется, если DFPlayer_check - 1
  if (DFPlayer_check) { DFPlayer_setup(); } //нужно поместить в setup 

  // выполняется, если DFPlayer_check - 1
  if (DFPlayer_check) { DFPlayer_loop(); } //нужно поместить в loop 
*/

/*
[*]автор Maxx1200
[*]Каждый час будет говорить время!
[*]есть только один НО, если, скажем, в 22:59:59 будет запущен опрос датчиков, то, возможно, звука "23 часа" не будет и с этим нужно что-то делать!
[*]добавил будильник!, есть только один НО, если, скажем, в 10:59:59 будет запущен опрос датчиков, то, возможно, будильник не сработает, и с этим нужно что-то делать!
[*]и много текста в порт для отладки!
*/

/***************************************************************************************************/
/*
   исходный код: https://github.com/enjoyneering/DFPlayer

   Возможности DFPlayer Mini:
    - 3,2В..5,0В, обычно 4,2В
    - microSD-карта до 32 ГБ (FAT16, FAT32)
    - USB-диск до 32 ГБ (FAT16, FAT32)
    - поддерживает частоту дискретизации mp3 8кГц, 11,025кГц, 12кГц, 16кГц, 22,05кГц, 24кГц, 32кГц, 44,1кГц, 48кГц
    - поддерживает до 100 папок, каждая папка может быть назначена на 001..255 песен
    - встроенный моноусилитель мощностью 3 Вт, NS8002 AB-класса с функцией ожидания
    - UART для связи, 9600 бит/с (четность: нет, биты данных: 8, стоповые биты: 1, управление потоком: нет)

    ПРИМЕЧАНИЕ:
    - добавьте резистор 1K последовательно с выводом DFPlayer TX

   Фреймворки и библиотеки:
   ESP8266 Core      -  https://github.com/esp8266/Arduino
   EspSoftwareSerial -  https://github.com/plerup/espsoftwareserial
*/
/***************************************************************************************************/

//Библиотеки
#include <SoftwareSerial.h>
#include <DFPlayer.h>

//Настройки можно поместить в - Constants.h
//В проекте контакты D4 D0 свободны можно их использовать проверено!
#define MP3_RX_PIN              2    //GPIO2/D4 к DFPlayer Mini TX
#define MP3_TX_PIN              16   //GPIO16/D0 к DFPlayer Mini RX
#define MP3_SERIAL_SPEED        9600  //DFPlayer Mini поддерживает только 9600 бод
#define MP3_SERIAL_BUFFER_SIZE  32    //размер последовательного буфера программного обеспечения в байтах, для отправки 8 байтов вам нужен 11-байтовый буфер (стартовый байт + 8 битов данных + байт четности + стоп-байт = 11 байтов)
#define MP3_SERIAL_TIMEOUT      350   //среднее время ожидания ответа DFPlayer для чипа GD3200B 350 мс..400 мс

// Установка будильника!
#define  alarm_clock_hours 23   //час   //без "0" 1 час
#define  alarm_clock_minutes 48 //минут //без "0" 9 минут

SoftwareSerial mp3Serial;
DFPlayer       mp3;

  //Переменные
  int Hor, Min, Sec;
  //unsigned long timing2; // Переменная для хранения точки отсчета

/*********************здесь мы выбираем тип модуля*********************/
/*
    DFPlayer_setup()

    Main setup

    ПРИМЕЧАНИЕ:
    - тип модуля:
      - DFPLAYER_MINI:
        - DFPlayer Mini module
        - MP3-TF-16P module
        - FN-M16P module
        - YX5200 chip
        - YX5300 chip
        - JL AAxxxx chip
      - DFPLAYER_FN_X10P:
        - FN-M10P module
        - FN-S10P module
        - FN6100 chip
      - DFPLAYER_HW_247A:
        - HW-247A module
        - GD3200B chip
        - MH2024K-24SS
      - DFPLAYER_NO_CHECKSUM:
        - нет вычисления контрольной суммы (не рекомендуется для MCU без внешнего кварцевого генератора)
*/
/**************************************************************************/
  //  DFPlayer_setup(); //нужно поместить в setup
void DFPlayer_setup() {

  Serial.println("Инициализация DFPlayer... (может занять 3~5 секунд)"); //для отладки

  mp3Serial.begin(MP3_SERIAL_SPEED, SWSERIAL_8N1, MP3_RX_PIN, MP3_TX_PIN, false, MP3_SERIAL_BUFFER_SIZE, 0); //false=сигнал не инвертирован, 0=размер буфера ISR/RX (общий с последовательным буфером TX)

  mp3.begin(mp3Serial, MP3_SERIAL_TIMEOUT, DFPLAYER_HW_247A, false); //"DFPLAYER_HW_247A" см. ПРИМЕЧАНИЕ, false = нет обратной связи от модуля после команды

  mp3.stop();                             //если плеер работал во время перезагрузки ESP8266

  mp3.reset();                            //сбросить все настройки по умолчанию

  mp3.setSource(2);                       //1=USB-диск, 2=TF-карта, 3=Aux, 4=спящий режим, 5=NOR Flash

  mp3.setEQ(0);                           //0=Выкл., 1=Поп, 2=Рок, 3=Джаз, 4=Классика, 5=Бас
  mp3.setVolume(20);                      //0..30, модуль сохраняет громкость при сбое питания

  mp3.sleep();                            //переход в спящий режим, 24 мА

  mp3.wakeup(2);                          //выйти из спящего режима и инициализировать источник 1=USB-диск, 2=TF-карта, 3=Aux, 5=NOR Flash

  mp3Serial.enableRx(true);               //включить прерывания на выводе RX для лучшего обнаружения ответа, меньше накладных расходов, чем mp3Serial.listen()

  Serial.print("getStatus: ");  //для отладки, Получить статус
  Serial.println(mp3.getStatus());        //0=стоп, 1=воспроизведение, 2=пауза, 3=спящий режим или режим ожидания, 4=ошибка связи, 5=неизвестное состояние
  Serial.print("getVolume: ");  //для отладки, Получить громкость
  Serial.println(mp3.getVolume());        //0..30
  Serial.print("getCommandStatus: ");  //для отладки, Получить статус команд
  Serial.println(mp3.getCommandStatus()); //1=модуль занят, 2=модуль в спящем режиме, 3=запрос получен не полностью, 4=не совпадает контрольная сумма
                                          //5=запрошенная папка/трек вне допустимого диапазона, 6=запрошенная папка/трек не найдена
                                          //7=реклама доступна во время воспроизведения трека, 8=SD-карта не найдена, 9=???, 10=спящий модуль
                                          //11=ОК команда принята, 12=ОК воспроизведение завершено, 13=ОК модуль готов после перезагрузки

  mp3Serial.enableRx(false);              //отключить прерывания на RX-контакте, меньше накладных расходов, чем mp3Serial.listen()

    //Чтобы при включении был звук как пример звук! 005.mp3
     mp3.playFolder(2, 5); //2=папка/5=дорожка, имя папки должно быть 01..99, а файлы в папке должны начинаться с 3 десятичных цифр с ведущими нулями // проигрываем файл 02/005.mp3
     Serial.println ("track_Folder2: 5"); //для отладки
     delay(2000); // задержку лучше заменить на миллис
       mp3.pause(); // пауза
     Serial.print("getStatus: ");  //для отладки, Получить статус
     Serial.println(mp3.getStatus());  //0=стоп, 1=воспроизведение, 2=пауза, 3=спящий режим или режим ожидания, 4=ошибка связи, 5=неизвестное состояние
}



  //  DFPlayer_loop(); //нужно поместить в loop
void DFPlayer_loop() {


  Hor = ntp.hour();
  Min = ntp.minute();
  Sec = ntp.second();

  if(Min == 0 && Sec == 0) {
    switch (Hor) { // Каждый час будет говорить время
     case 0:
     mp3.playMP3Folder(24); // проигрываем файл mp3/0024.mp3
     Serial.println ("track: 24"); //для отладки
     break;
     case 1:
     mp3.playMP3Folder(1); // проигрываем файл mp3/0001.mp3
     Serial.println ("track: 1"); //для отладки
     break;
     case 2:
     mp3.playMP3Folder(2); // проигрываем файл mp3/0002.mp3
     Serial.println ("track: 2"); //для отладки
     break;
     case 3:
     mp3.playMP3Folder(3); // проигрываем файл mp3/0003.mp3
     Serial.println ("track: 3"); //для отладки
     break;
     case 4:
     mp3.playMP3Folder(4); // проигрываем файл mp3/0004.mp3
     Serial.println ("track: 4"); //для отладки
     break;
     case 5:
     mp3.playMP3Folder(5); // проигрываем файл mp3/0005.mp3
     Serial.println ("track: 5"); //для отладки
     break;
     case 6:
     mp3.playMP3Folder(6); // проигрываем файл mp3/0006.mp3
     Serial.println ("track: 6"); //для отладки
     break;
     case 7:
     mp3.playMP3Folder(7); // проигрываем файл mp3/0007.mp3
     Serial.println ("track: 7"); //для отладки
     break;
     case 8:
     mp3.playMP3Folder(8); // проигрываем файл mp3/0008.mp3
     Serial.println ("track: 8"); //для отладки
     break;
     case 9:
     mp3.playMP3Folder(9); // проигрываем файл mp3/0009.mp3
     Serial.println ("track: 9"); //для отладки
     break;
     case 10:
     mp3.playMP3Folder(10); // проигрываем файл mp3/0010.mp3
     Serial.println ("track: 10"); //для отладки
     break;
     case 11:
     mp3.playMP3Folder(11); // проигрываем файл mp3/0011.mp3
     Serial.println ("track: 11"); //для отладки
     break;
     case 12:
     mp3.playMP3Folder(12); // проигрываем файл mp3/0012.mp3
     Serial.println ("track: 12"); //для отладки
     break;
     case 13:
     mp3.playMP3Folder(13); // проигрываем файл mp3/0013.mp3
     Serial.println ("track: 13"); //для отладки
     break;
     case 14:
     mp3.playMP3Folder(14); // проигрываем файл mp3/0014.mp3
     Serial.println ("track: 14"); //для отладки
     break;
     case 15:
     mp3.playMP3Folder(15); // проигрываем файл mp3/0015.mp3
     Serial.println ("track: 15"); //для отладки
     break;
     case 16:
     mp3.playMP3Folder(16); // проигрываем файл mp3/0016.mp3
     Serial.println ("track: 16"); //для отладки
     break;
     case 17:
     mp3.playMP3Folder(17); // проигрываем файл mp3/0017.mp3
     Serial.println ("track: 17"); //для отладки
     break;
     case 18:
     mp3.playMP3Folder(18); // проигрываем файл mp3/0018.mp3
     Serial.println ("track: 18"); //для отладки
     break;
     case 19:
     mp3.playMP3Folder(19); // проигрываем файл mp3/0019.mp3
     Serial.println ("track: 19"); //для отладки
     break;
     case 20:
     mp3.playMP3Folder(20); // проигрываем файл mp3/0020.mp3
     Serial.println ("track: 20"); //для отладки
     break;
     case 21:
     mp3.playMP3Folder(21); // проигрываем файл mp3/0021.mp3
     Serial.println ("track: 21"); //для отладки
     break;
     case 22:
     mp3.playMP3Folder(22); // проигрываем файл mp3/0022.mp3
     Serial.println ("track: 22"); //для отладки
     break;
     case 23:
     mp3.playMP3Folder(23); // проигрываем файл mp3/0023.mp3
     Serial.println ("track: 23"); //для отладки
     break;

    }


    delay(2000); // задержку лучше заменить на миллис
    mp3.pause(); // пауза 
    Serial.print("getStatus: ");  //для отладки, Получить статус
    Serial.println(mp3.getStatus());  //0=стоп, 1=воспроизведение, 2=пауза, 3=спящий режим или режим ожидания, 4=ошибка связи, 5=неизвестное состояние


    /*аналог задержки
    if (millis() - timing2 > 3000){ // Вместо 3000 подставьте нужное вам значение паузы
     timing2 = millis();
     Serial.println ("3 seconds");
    }

     mp3.pause(); // пауза
    */

  }


//Будильник, длительность воспроизведения звука составит 60 секунд
if(Hor == alarm_clock_hours && Min == alarm_clock_minutes) {
  mp3.playFolder(2, 2); //2=папка/2=дорожка, имя папки должно быть 01..99, а файлы в папке должны начинаться с 3 десятичных цифр с ведущими нулями // проигрываем файл 02/002.mp3
  Serial.println ("alarm_track_Folder2: 2"); //для отладки

  Serial.print("getCommandStatus: ");  //для отладки, Получить статус команд
  Serial.println(mp3.getCommandStatus()); //1=модуль занят, 2=модуль в спящем режиме, 3=запрос получен не полностью, 4=не совпадает контрольная сумма
                                          //5=запрошенная папка/трек вне допустимого диапазона, 6=запрошенная папка/трек не найдена
                                          //7=реклама доступна во время воспроизведения трека, 8=SD-карта не найдена, 9=???, 10=спящий модуль
                                          //11=ОК команда принята, 12=ОК воспроизведение завершено, 13=ОК модуль готов после перезагрузки

  delay(60000); // задержку лучше заменить на миллис
  mp3.pause(); // пауза
  Serial.print("getStatus: ");  //для отладки, Получить статус
  Serial.println(mp3.getStatus());  //0=стоп, 1=воспроизведение, 2=пауза, 3=спящий режим или режим ожидания, 4=ошибка связи, 5=неизвестное состояние
  }




}
 
Изменено:
  • Лойс +1
Реакции: Romshteks и ASM

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
ASM Спасибо разобрался.Кормим void Digit() тем что хотим получить.)
Дата:
  //  Для сериала
  String days;
  if (day < 10) days += '0';
  days += day;
  String months;
  if (month < 10) months += '0';
  months += month;
  String years;
  years = year / 10;
  Serial.println((String)days + "." + months + "." + years);
  // Serial.println(ntp.dateString());
  // Serial.println(year);

  //  Вывод даты на дисплей
  int digit_month = month % 10;
  Digit(digits[digit_month], segment_4);  // Выводим единицы месяца 4 сегмент
  digit_month = month / 10;
  Digit(digits[digit_month], segment_3);  // Выводим десятки месяца 3 сегмент
  int digit_day = day % 10;
  Digit(digits[digit_day], segment_2);  // Выводим единицы дней 2 сегмент
  digit_day = day / 10;
  Digit(digits[digit_day], segment_1);  // Выводим десятки дней 1 сегмент
Maxx1200 Спасибо, пригодится,сэкономил мне кучу времени.
Буду всё собирать в единое целое.)

Serial.println(year);
Ребят у всех выдаёт в порт "231" ?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
видно где-то не так считывается, гляну)
Библиотека походу так написана.

Вот такая штуковина у меня получилась.)
В порте работает всё чётко,а цифер пока нет.(
Проверьте кто с цифрами.)
 

Вложения

  • Лойс +1
Реакции: Maxx1200

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
Понял,)
В ночные часы кукушка выключена,вот и не заметил.)
Спасибо.
DFPlayer.ino::
        case 0:
          mp3.playMP3Folder(24);         // проигрываем файл mp3/0024.mp3
          Serial.println(" ♫ 0 часов");  //для отладки
          break;
Исправлено
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Изменено:

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
У меня есть звуковые файлы озвучки "Мужской", "Женский", "Куранты", "Каминные часы", если нужно могу сюда скинуть
 

Romshteks

✩✩✩✩✩✩✩
13 Май 2020
43
4
kym13
Конечно выкладывай,пригодится.
Можно будет в настройках сделать выбор кем озвучивать.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Подправил код.
Добавил дату 5 режимом.
Внес код для DFP, надо определиться что делать) а то тут два варианта @Maxx1200 и @Romshteks запутался))
 

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
95
19
@ASM, да

необходимо только внести такие изменения
NEW_CLOCK_ESP_2_beta_2_2:
  if (DFPlayer_check) { DFPlayer_setup(); } //В void setup()

  if (DFPlayer_check) { kuku_tick(); } //В void loop()
DFPlayer.ino изменений!
DFPlayer.ino:
//////////// Функция DFPlayer
/*
[*]автор Maxx1200
[*]Каждый час будет говорить время!
*/
//========ВЫБОР-ТИПА-МОДУЛЯ========
//#define DFPlayer_type DFPLAYER_MINI         // Раскоментируйте эту строчку, если такой, DFPlayer Mini module, MP3-TF-16P module, FN-M16P module, YX5200 chip, YX5300 chip, JL AAxxxx chip
//#define DFPlayer_type DFPLAYER_FN_X10P      // Раскоментируйте эту строчку, если такой, FN-M10P module, FN-S10P module, FN6100 chip
  #define DFPlayer_type DFPLAYER_HW_247A      // Закомментируйте эту строку,  если используеися плеер с чипом, отличным от, HW-247A module, GD3200B chip, MH2024K-24SS
//#define DFPlayer_type DFPLAYER_NO_CHECKSUM  // Раскоментируйте эту строчку, если такой, нет вычисления контрольной суммы (не рекомендуется)
//=================================
/***************************************************************************************************/
/*
   Возможности DFPlayer Mini:
    - 3,2В..5,0В, обычно 4,2В
    - microSD-карта до 32 ГБ (FAT16, FAT32)
    - USB-диск до 32 ГБ (FAT16, FAT32)
    - поддерживает частоту дискретизации mp3 8кГц, 11,025кГц, 12кГц, 16кГц, 22,05кГц, 24кГц, 32кГц, 44,1кГц, 48кГц
    - поддерживает до 100 папок, каждая папка может быть назначена на 001..255 песен
    - встроенный моноусилитель мощностью 3 Вт, NS8002 AB-класса с функцией ожидания
    - UART для связи, 9600 бит/с (четность: нет, биты данных: 8, стоповые биты: 1, управление потоком: нет)

    ПРИМЕЧАНИЕ:
    - добавьте резистор 1K последовательно с выводом DFPlayer TX

   Фреймворки и библиотеки:
   DFPlayer          -  https://github.com/enjoyneering/DFPlayer
   ESP8266 Core      -  https://github.com/esp8266/Arduino
   EspSoftwareSerial -  https://github.com/plerup/espsoftwareserial
*/
/***************************************************************************************************/
void DFPlayer_setup() {

  Serial.println("Инициализация DFPlayer... (может занять 3~5 секунд)");                                      //для отладки
  mp3Serial.begin(MP3_SERIAL_SPEED, SWSERIAL_8N1, MP3_RX_PIN, MP3_TX_PIN, false, MP3_SERIAL_BUFFER_SIZE, 0);  //false=сигнал не инвертирован, 0=размер буфера ISR/RX (общий с последовательным буфером TX)
  mp3.begin(mp3Serial, MP3_SERIAL_TIMEOUT, DFPlayer_type, false);                                          //"DFPLAYER_HW_247A" см. ПРИМЕЧАНИЕ, false = нет обратной связи от модуля после команды
  mp3.stop();                                                                                                 //если плеер работал во время перезагрузки ESP8266
  mp3.reset();                                                                                                //сбросить все настройки по умолчанию
  mp3.setSource(2);                                                                                           //1=USB-диск, 2=TF-карта, 3=Aux, 4=спящий режим, 5=NOR Flash
  mp3.setEQ(0);                                                                                               //0=Выкл., 1=Поп, 2=Рок, 3=Джаз, 4=Классика, 5=Бас
  mp3.setVolume(r.grom_mp3);                                                                                  //0..30, модуль сохраняет громкость при сбое питания

  Serial.print(" ♫ Громкость: ");   //для отладки, Получить громкость
  Serial.println(mp3.getVolume());  //0..30

  mp3Serial.enableRx(false);  //отключить прерывания на RX-контакте, меньше накладных расходов, чем mp3Serial.listen()

  mp3.playMP3Folder(26);
  Serial.println(" ♫ Приветствие");  // Музыкальное приветствие
}

void DFPlayer() {            // Функция срабатывающая раз в час
  if (r.status_kuku) {       // Если кукушка включена(проверка второй раз для корректной работы портала)
    if (r.kuku_mp3_check) {  // Если включено воспроизведение кукушки
      Serial.println(" ♫ Ку-Ку");
      mp3.playMP3Folder(25);  // проигрываем файл c кукушкой
    }
    if (r.kuku_mp3_check && r.vrem_mp3_check) delay(2500);
    if (r.vrem_mp3_check) {  // Если включено воспроизведение времени
      switch (hour) {        // Взависимости от часа будет говорить время
        case 0:
          mp3.playMP3Folder(24);         // проигрываем файл mp3/0024.mp3
          Serial.println(" ♫ 0 часов");  //для отладки
          break;
        case 1:
          mp3.playMP3Folder(1);        // проигрываем файл mp3/0001.mp3
          Serial.println(" ♫ 1 час");  //для отладки
          break;
        case 2:
          mp3.playMP3Folder(2);         // проигрываем файл mp3/0002.mp3
          Serial.println(" ♫ 2 часа");  //для отладки
          break;
        case 3:
          mp3.playMP3Folder(3);         // проигрываем файл mp3/0003.mp3
          Serial.println(" ♫ 3 часа");  //для отладки
          break;
        case 4:
          mp3.playMP3Folder(4);         // проигрываем файл mp3/0004.mp3
          Serial.println(" ♫ 4 часа");  //для отладки
          break;
        case 5:
          mp3.playMP3Folder(5);          // проигрываем файл mp3/0005.mp3
          Serial.println(" ♫ 5 часов");  //для отладки
          break;
        case 6:
          mp3.playMP3Folder(6);          // проигрываем файл mp3/0006.mp3
          Serial.println(" ♫ 6 часов");  //для отладки
          break;
        case 7:
          mp3.playMP3Folder(7);          // проигрываем файл mp3/0007.mp3
          Serial.println(" ♫ 7 часов");  //для отладки
          break;
        case 8:
          mp3.playMP3Folder(8);          // проигрываем файл mp3/0008.mp3
          Serial.println(" ♫ 8 часов");  //для отладки
          break;
        case 9:
          mp3.playMP3Folder(9);          // проигрываем файл mp3/0009.mp3
          Serial.println(" ♫ 9 часов");  //для отладки
          break;
        case 10:
          mp3.playMP3Folder(10);          // проигрываем файл mp3/0010.mp3
          Serial.println(" ♫ 10 часов");  //для отладки
          break;
        case 11:
          mp3.playMP3Folder(11);          // проигрываем файл mp3/0011.mp3
          Serial.println(" ♫ 11 часов");  //для отладки
          break;
        case 12:
          mp3.playMP3Folder(12);          // проигрываем файл mp3/0012.mp3
          Serial.println(" ♫ 12 часов");  //для отладки
          break;
        case 13:
          mp3.playMP3Folder(13);          // проигрываем файл mp3/0013.mp3
          Serial.println(" ♫ 13 часов");  //для отладки
          break;
        case 14:
          mp3.playMP3Folder(14);          // проигрываем файл mp3/0014.mp3
          Serial.println(" ♫ 14 часов");  //для отладки
          break;
        case 15:
          mp3.playMP3Folder(15);          // проигрываем файл mp3/0015.mp3
          Serial.println(" ♫ 15 часов");  //для отладки
          break;
        case 16:
          mp3.playMP3Folder(16);          // проигрываем файл mp3/0016.mp3
          Serial.println(" ♫ 16 часов");  //для отладки
          break;
        case 17:
          mp3.playMP3Folder(17);          // проигрываем файл mp3/0017.mp3
          Serial.println(" ♫ 17 часов");  //для отладки
          break;
        case 18:
          mp3.playMP3Folder(18);          // проигрываем файл mp3/0018.mp3
          Serial.println(" ♫ 18 часов");  //для отладки
          break;
        case 19:
          mp3.playMP3Folder(19);          // проигрываем файл mp3/0019.mp3
          Serial.println(" ♫ 19 часов");  //для отладки
          break;
        case 20:
          mp3.playMP3Folder(20);          // проигрываем файл mp3/0020.mp3
          Serial.println(" ♫ 20 часов");  //для отладки
          break;
        case 21:
          mp3.playMP3Folder(21);        // проигрываем файл mp3/0021.mp3
          Serial.println(" ♫ 21 час");  //для отладки
          break;
        case 22:
          mp3.playMP3Folder(22);         // проигрываем файл mp3/0022.mp3
          Serial.println(" ♫ 22 часа");  //для отладки
          break;
        case 23:
          mp3.playMP3Folder(23);         // проигрываем файл mp3/0023.mp3
          Serial.println(" ♫ 23 часа");  //для отладки
          break;
      }
    }
  }
}
 
Изменено:

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
95
19
@Maxx1200,
внес необходимые изменения

ps. схема подключения dfplayer к esp8266
Wemos+DFplayer.png
 
Изменено: