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

Матричные часы с музыкой и интернетом

Andy Korg

Moderator
Команда форума
Представляю вниманию уважаемой публики интернет-добавку в коктейль чипов под общим названием «матричные часы с музыкой». Пока эта добавка обеспечивает только получение времени с серверов точного времени. В дальнейшем планируется подцепить веб-сервер для управления часиками. Подробности на http://radiokot.ru/forum/viewtopic.php?p=2261975#p2261975
 

Andy Korg

Moderator
Команда форума
Недавно прикрутил к ним модуль esp-01 с прошивкой “свалки” от pvvx плюс кое-какие дописки.
В результате получились часы с контролем по WiFi :)
Теперь через web-морду часов можно:
- посмотреть время и дату :)
- установить время в часах по внешнему серверу времени;
- настроить кучу будильников;
- настроить отображение трех датчиков (пока только температуры);
- настроить различные звуки издаваемые часами.
Собственно часы помимо времени и будильников имеют интерфейсы: I2C, урезанный 1-wire и радиоинтерфейс на nRF24L01+. А так же они умеют воспроизводить wav-файлы с SD-карты.
Прошивка будет чуть попозже, а сейчас просто хвастаюсь и как бы отмечаю окончание промежуточного этапа. :)
 

Вложения

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

JustACat

Moderator
Команда форума
В динамике можно посмотреть
Очень хоцца поглядеть, но классически - на тюбике... Можете на тюбик закинуть? Пожаааалуйста!..
Видео в exe-шнике - не-не-не... Не то, чтобы не было к вам доверия, скорее его нет к тому, что этот exe породило...
PS1: Для записи раб. стола советую вот это: http://www.faststone.org/FSCaptureDetail.htm - пишет отличные (обычные человеческие) видео (и куча доп. функций сверху). Найти "в свободном" виде легко на рутрекере.
PS2: и там "1-wire", наверное?..

PS3: судя по скринам - веб-морде ваших часов позавидуют многие веб-морды китайских (и не очень) роутеров! :)
 
Последнее редактирование:

anakod

Moderator
Команда форума
Как у Вас реализовано воспроизведение звуков? Исходники прошивки не опубликуете?
 

JustACat

Moderator
Команда форума
anakod, емнип, в данном проекте все на АВР, а ESP именно в качестве связи + доп. функции.
А MP3 можно, например, вот так воспроизводить :-Р
 

Andy Korg

Moderator
Команда форума
там "1-wire", наверное
поправил.
Как у Вас реализовано воспроизведение звуков? Исходники прошивки не опубликуете?
Вкрадце - обычный ШИМ на двух таймерах - один скважиность регулирует, второй битрейт отсчитывает. Предыдущая версия прошивки на радиокоте по ссылке в первом посте. Прошивки опубликую чуть позже, еще одну базовую вещь не протестировал.
А MP3 можно, например
В моем проекте голый ИКМ, т.к. МК не достаточно мощный.
Видео сча забабахую.
 

anakod

Moderator
Команда форума
Да, мне кажется проект лучше целиком выкладывать чтобы если кто захочет повторить были доступны все материалы.
 

Victor

Administrator
Команда форума
Если вы не против
На этом форуме всегда будет приветствоваться open source и open hardware, так что очень буду рад, если выложите все для того, чтобы можно было повторить ваш проект.

Для удобства сделал отдельный раздел Готовые проекты. Может имеет смысл из раздела прошивок лишнее удалить, а в новый раздел выложить одним файлом с описанием. В описание можно вставить фото и схему, например.
 

nicelight

Member
Пробую залить на отладочную плату NodeMCU проект. Лью с помощью NodeMCUFirmware Updater все по readme добавляю все бинарники, указываю по каким адресам их лить, после прошивки на плате esp загорается синим светодиод и горит статично, пока питание не выключу. Точка доступа не создается. До этого лил другие проекты, все работало. что могу делать не так?
 

ivy

New member
Andy Korg, Поделитесь пожалуйста наводкой: На базе чего можно написать такой сервер? Не в ручную же HTML кропать... Сейчас много всяких движков. Что работает под NodeMCU?
Спасибо.
 

Andy Korg

Moderator
Команда форума
отладочную плату NodeMCU проект
Может проблема в железе? Прошивку заливал через UDK на платы esp-01. Штук десять наверно залил, все работало.
На базе чего можно написать такой сервер?
Сам сервер - это "свалка" pvvx. А она сильно не заморачивается и просто делает подстановку в файлах HTML, поэтому какие-либо технологии на стороне сервера, вроде PHP невозможны. Все более менее "интелектуальные" вещи нужно делать на стороне клиента, например с помощью JS
 

PycLan

New member
Добрый день!
Andy Korg, не подскажете где почитать или мож раcскажете (на примере вашего проекта), про взаимодействие ~name~ <>ESP <>UART?
Спросил у pvvx, как всегда, почему-то для меня, у него нет настроения помогать...
 

Andy Korg

Moderator
Команда форума
...мож раcскажете (на примере вашего проекта), про взаимодействие ~name~ <>ESP <>UART?
No problem.
Действовал так - нашел по имени переменных pvvx функции в которых используются соответствующие имена.
Например "cfg_" упоминчается в web_int_callbacks.c и web_int_vars.c.
Поковырял их и понял, что в web_int_vars.c записываются значения из файлов html в соответствующие переменные в прошивке. Т.е. в этом файле обрабатываются строки отправляемые браузером на сервер esp вида "post(get)&cfg_web_port=80"
Соответственно файл web_int_callbacks.c делает обратную операцию - преобразует выражения встреченные в файле html вида "~post(get)&cfg_web_port~" в обычную текстовую строку.
Теперь что касается uart. Допустим в файле html встречается строка вида
HTML:
<dev>скорость uart0 равна ~uart_0_baud~</dev>
Находим в web_int_callbacks.c обработку переменной "uart_":

Код:
        else if(!os_memcmp((void*)cstr, "uart_", 5)) { //<<<- вот она!
            cstr+=5;    //пропустить символы uart_(пять символов) в файле html
            int n = 0;
            if(cstr[1] != '_' || cstr[0]<'0' || cstr[0]>'1' ) { Стотрим что бы дальще было _0 или _1
                tcp_put('?');
                return;
            }
            if(cstr[0] != '0') n++; //тут я думаю понятно и так :)
            cstr += 2; //Опять пропускаем обработанные символы
            if(!os_memcmp((void*)cstr, "baud", 4)) { //вот и остаток имени переменной baund
                uint32 baud = UART_CLK_FREQ / (READ_PERI_REG(UART_CLKDIV(n)) & UART_CLKDIV_CNT); //Читаем из нужного регистра нужное значение
                tcp_puts("%u", baud); //Пишем полученное значение в выходной поток отдаваемый браузеру
            }
Аналогично и для команды "post&uart_0_baund=9600" или "get&uart_0_baund=9600"
Находим в web_int_vars.c обработку команды "uart_":

Код:
    else if(!os_memcmp((void*)cstr, "uart_", 5)) {<<<- вот она!
        cstr+=5;
        if(!os_memcmp((void*)cstr, "save", 4)) uart_save_fcfg(val);
        else if(!os_memcmp((void*)cstr, "read", 4)) uart_read_fcfg(val);
        else {
            int n = 0;
            if(cstr[1] != '_' || cstr[0]<'0' || cstr[0]>'1' ) { <<<- номер порта
#if DEBUGSOO > 5
                os_printf(" - none! ");
#endif
            }
            if(cstr[0] != '0') n++;
            cstr += 2;
            if(!os_memcmp((void*)cstr, "baud", 4)) { <<<- остаток команды
//                UartDev.baut_rate = val;
                uart_div_modify( <<<- собственно само исполнение команды
            n, //Номер порат
            UART_CLK_FREQ / val);  //Его требуема скорость
            }
Аналогично для всех остальных команд и переменных. Вот собственно и все.
 

PycLan

New member
Спасибо за ответ, буду пробовать.
По мере возникновения вопросов буду спрашивать, если не возражаете ;)
 

pvvx

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

Andy Korg

Moderator
Команда форума
Добавил получение и вывод на индикатор прогноза погоды с сайта openweathermap.org Теперь погода каждую минуту на холодильник выводится :) Подробнее в ресурсах.
 

Pilnikov

Active member
Здравствуйте уважаемые! Давненько почитываю эту и похожие темы про часики. Перепробовал собирать их кучу (ну болен я ими) . Крайний прожект - голова есп выдает по уарт текущее время, показания датчиков температуры влажности и давления (посредником между головой и датчиками выступил thingspeak) на мегу с подключенной к ней полноцветной led панелью 32x16. Отображение данных через бегущую строку (все на родном великом и могучем). Есть возможность подключить вместо меги просто lcd1602 (но тогда все будет латиницей). Если кому интересно - могу выложить весь проект (wifi датчик (esp, bmp 180/280, dht21, sht21) + esp голова + megaLEDpanel) + видяху на ютуб (научиться бы выкладывать), но взамен хочу попросить помощи у гуру веб морд - в прожекте есть будильничег, да и кой какие опции хоца прикрутить (скорость прокрутки, яркость, почасовой бибип). Так вот управлять ими с клавиатуры архаично, с ИК пульта геморно, а через BLYNK все жутко тормозит. Хотелось бы подсмотреть болваночку маленькой вебмордочки с парочкой полей прямого ввода(вывода), двумя-тремя выпадающими списками, и пятком чекбоксов. Был бы премного благодарен за наводочку. А то со всеми этими новомодными PHP, XML, HTML, JS у меня очень уж туговато.
 
Сверху Снизу