Skip to content

Commit 238b3eb

Browse files
committed
abandoned updates
1 parent 15ccee4 commit 238b3eb

File tree

10 files changed

+146
-64
lines changed

10 files changed

+146
-64
lines changed

README.md

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Часы на основе матрицы на адресных светодиодах.
1+
# Часы на основе матрицы на адресных светодиодах
22

33
Работает на платформах ESP8266 и ESP32 (ESP32, ESP32-s2, -s3, -c3).
44

@@ -13,7 +13,8 @@
1313

1414
В данный момент переношу некоторые наработки из своего проекта [маленьких настольных часов](https://github.com/SerhiiLe/Clock_Mini).
1515

16-
## Возможности часов:
16+
## Возможности часов
17+
1718
- Показывать время
1819
- Выбор цветового оформления часов.
1920
- Выбор из нескольких циферблатов.
@@ -31,9 +32,11 @@
3132
- Ограничение максимального потребления. Ночью потребление в автоматическом режиме снижается до 2,5Вт. Днём зависит от настроек и может достигать 70Вт. Ограничение по умолчанию - 12,5Вт.
3233
- Минимальное число параметров жестко прописано в коде, большая часть настроек изменяется через Web.
3334

34-
## Управление:
35+
## Управление
36+
3537
Управление часами только через Web, так как бессмысленно управлять кучей опций парой кнопок. Однако есть одна кнопка и датчик движения. Датчик движения
3638
используется для отключения будильника, что логично, раз кто-то ходит возле часов, значит он проснулся. А действия кнопки зависят от количества кликов:
39+
3740
- Показать дату в длинном формате, отключить будильник, отключить проверку матрицы.
3841
- Включить проверку матрицы.
3942
- Показать текущий IP, по которому можно подключится к часам.
@@ -42,7 +45,8 @@
4245

4346
Долгое нажатие - справка. Она контекстная, зависит от текущего режима.
4447

45-
## Особенности:
48+
## Особенности
49+
4650
Проект делался под конкретные часы в конкретном месте по этому нет разнообразия в выборе функций или аппаратных компонентов.
4751
При желании схему можно сократить только до одной матрицы, отключив DFPlayer и датчик питания в настройках, выставляя
4852
уровень яркости в настройках, и даже кнопка не сильно нужна, ведь будильник и так не будет работать. Получатся максимально скучные часы.
@@ -68,10 +72,12 @@ IP адрес только автоматический. Не вижу смыс
6872

6973
Кнопка TTP223B как оказалось любит жить собственной жизнью и очень зависит от перепадов питающего напряжения.
7074

71-
## Схема:
75+
## Схема
76+
7277
[![Схема тут.](https://github.com/SerhiiLe/clock-esp8266-ws2812b/blob/main/clock_diagram.png)](https://github.com/SerhiiLe/clock-esp8266-ws2812b/blob/main/clock_diagram.pdf)
7378

7479
Не вошло в схему:
80+
7581
- Керамический конденсатор на 47пФ на питании датчика движения. Я не уверен, что он там нужен, впаял, в надежде улучшить стабильность срабатывания. Разницы не почувствовал.
7682
- На задней стенке корпуса часов приклеил кусок фольги, напротив датчика движения. Срабатывание стало устойчивее, ложных срабатываний стало меньше.
7783
- Номинал резистора в паре с фоторезистором я изначально взял из схем других проектов и был не прав. Напряжение на ногу А0 должно поступать 0-3.3V, 1кОм это мало. Для моего фоторезистора оказалось оптимальным 2кОм - 2.2кОм, иначе значения получаются слишком заниженными. А если больше, то чувствительность слишком большая.
@@ -95,7 +101,8 @@ IP адрес только автоматический. Не вижу смыс
95101
[TP4056](https://ledplus.com.ua/ua/p1307577265-modul-zaryadki-tp4056.html),
96102
[остальное](https://www.k206.net/catalog/)
97103

98-
## Сборка:
104+
## Сборка
105+
99106
Проект собирается с помощью [PlatformIO](https://platformio.org/)
100107

101108
Для сборки проекта понадобится следующее:
@@ -126,20 +133,26 @@ WEB интерфейсе находятся в include/define_vars.h Реком
126133

127134
Настройка ножек для esp32 взята из расчёта, чтобы ножки соответствовали ножкам "WeMos D1 mini" (esp8266) и "WeMos D1 mini ESP32" [Распиновка esp32-d1-mini тут](https://templates.blakadder.com/wemos_D1_Mini_ESP32.html), отдельную схему не рисовал. Такой вариант позволяет пробовать оба микроконтроллера меняя их в панельке. В любом случае, всегда надо уточнять номера выводов на конкретной плате. А в случае полноценной ESP32 можно оптимизировать подключение ножек, например библиотека FastLED ругается, что матрица подключена не к аппаратному SPI. Но при использовании аппаратного SPI будет задействована только ножка MOSI, а MISO и SCK должны быть не подключенными, у esp8266 просто нет такой роскоши, а у ESP32 есть. Настройка ножек находится в include/defines.h
128135

129-
Сейчас профиль esp32 настроен на esp32 :) Чтобы собрать к примеру для esp32-c3 надо в секцию [env:esp32] добавить строчку:
130-
board_build.mcu = esp32c3
131-
PlatformIO само скачает нужные файлы платформы и обновит библиотеки. По аналогии можно указывать esp32s2, esp32s3. И не забыть поправить назначение выводов в include/defines.h
136+
Если использовать модуль ESP32c3, то у него второй полноценный UART, и на 3 ножки больше. Это позволит в будущем добавить аппаратный модуль часов и датчики температуры, влажности, давления. А так-же измерять напряжение на аккумуляторе. Я рекомендую для сборки использовать ESP32c3 Supermini.
137+
138+
Сейчас профиль esp32 настроен на esp32 :) Чтобы собрать к примеру для esp32-s2 надо в секцию [env:esp32] добавить строчку:
139+
board_build.mcu = esp32s2
140+
PlatformIO само скачает нужные файлы платформы и обновит библиотеки. По аналогии можно указывать esp32s3 или другие из серии esp32. И не забыть поправить назначение выводов в include/defines.h
132141

133142
Под платформу esp32 используется своя карта flash, она рассчитана на микроконтроллеры с 4 Мбайт. Сборка с ArduinoIDE в принципе возможна, если собрать все файлы в один каталог и переименовать main.cpp в clock-esp8266-ws2812b.ino Но не советую. PlatformIO само скачает все библиотеки и с формированием файловой системы проблем нет, а вот с ArduinoIDE это всё ручками.
134143

135-
## Внешние датчики:
144+
## Внешние датчики
145+
136146
Для удобства управления разными устройствами реализован свой простейший протокол. Всё работает по http. Поиск устройств по MDNS. Настройки в разделе "Охрана".
147+
137148
- http://hostname/registration?pin=SHARED_SECRET&name=DEVICE_NAME - регистрация внешнего датчика. Время жизни регистрации задаётся в настройках.
138149
- http://hostname/send?pin=SHARED_SECRET&msg=MESSAGE_TO_SEND - отправка произвольного сообщения в телеграмм.
139150
- http://hostname/api?pin=SHARED_SECRET&COMMAND=... - адрес на внешнем датчике, который должен принимать команды.
140151

141-
## Отправка текста та экран:
152+
## Отправка текста та экран
153+
142154
Можно отправить сообщение на экран обращением через Web (Дополнительно->Разовый текст) или из скрипта запросом в таком формате:
155+
143156
- http://hostname/show?msg=MESSAGE_TO_SEND - для разового показа сообщения.
144157
- http://hostname/show?msg=MESSAGE_TO_SEND&cnt=XX - для показа сообщений XX раз каждые 30 секунд.
145158
- http://hostname/show?msg=MESSAGE_TO_SEND&cnt=XX&int=YY - для показа сообщений XX раз c интервалом YY секунд.
@@ -151,7 +164,8 @@ PlatformIO само скачает нужные файлы платформы и
151164
Можно сокращать msg (text), cnt, int, due до m (t), c, i, d.
152165
Обязательным является только msg (text), остальные параметры получат значения по умолчанию: 2 повтора, через 30 секунд, цвет "радуга".
153166

154-
## Изменения:
167+
## Изменения
168+
155169
- Исправлены все найденные за пол года реальной эксплуатации и раздражающие меня проблемы. Кроме нестабильной работы платы dfPlayer и срабатываний на соседей RCWL-0516.
156170
- Добавлены возможность дополнительно увеличивать яркость матрицы по времени.
157171
- Настройки разбиты на две части, отдельно настройки часов, отдельно telegram, теперь они в разделе "охрана".
@@ -164,5 +178,6 @@ PlatformIO само скачает нужные файлы платформы и
164178
- Синхронизировал порядок и названия циферблатов с проектом мини-часики. Добавил выбор 12/24 часа.
165179
- альтернативный вариант цвета текста "радуга" и "разные".
166180
- адаптация под актуальную версию [fastbot](https://github.com/GyverLibs/FastBot)
181+
- мелкие изменения, адаптация под esp32c3.
167182

168183
# Слава Украине!

data/settings.html

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@
208208
</div>
209209
<div class="one bright0">
210210
<div><span id="brN">Яркость</span>: <span id="brV">0</span></div>
211-
<div><input type="range" min="1" max="255" step="1" value="30" class="long" name="bright0" id="brC" oninput="updateBr()"></div>
211+
<div><input type="range" min="1" max="255" step="1" value="30" class="long" name="bright0" id="brC" oninput="updateRange('br')"></div>
212212
</div>
213213
<div class="row bright1">
214214
<div>Усиление датчика освещённости в процентах (от 1 до 1000)</div>
@@ -234,11 +234,11 @@
234234
</div>
235235
<div class="row bright3">
236236
<div>Широта (LAT.itude)</div>
237-
<div><input name="latitude" type="text" value="0.0" class="m"></div>
237+
<div><input name="latitude" type="text" value="0.0" inputmode="decimal" pattern="[\-+]?[0-9]*[.,]?[0-9]+" class="m"></div>
238238
</div>
239239
<div class="row bright3">
240240
<div>Долгота (LON.gitude)</div>
241-
<div><input name="longitude" type="text" value="0.0" class="m"></div>
241+
<div><input name="longitude" type="text" value="0.0" inputmode="decimal" pattern="[\-+]?[0-9]*[.,]?[0-9]+" class="m"></div>
242242
</div>
243243
<div class="row br_time">
244244
<div>Время начала увеличения яркости</div>
@@ -264,17 +264,17 @@
264264
</div>
265265
</div>
266266
<div class="one">
267-
<div>Скорость движения бегущей строки</div>
268-
<div><input type="range" min="0" max="40" step="1" value="25" class="long" name="scroll_period"></div>
267+
<div>Скорость движения бегущей строки: <span id="spV">0</span></div>
268+
<div><input type="range" min="0" max="50" step="1" value="25" class="long" name="scroll_period" id="spC" oninput="updateRange('sp')"></div>
269269
</div>
270270
<div class="one i b center">Будильник</div>
271-
<div class="row">
272-
<div>Начальная громкость будильника (от 1 до 30)</div>
273-
<div><input name="volume_start" type="number" value="5"></div>
271+
<div class="one">
272+
<div>Начальная громкость будильника<br>от 1 до 30: <span id="vsV">0</span></div>
273+
<div><input type="range" min="1" max="30" step="1" value="5" class="long" name="volume_start" id="vsC" oninput="updateRange('vs')"></div>
274274
</div>
275-
<div class="row">
276-
<div>Максимальная громкость будильника (от 1 до 30 но не меньше начальной)</div>
277-
<div><input name="volume_finish" type="number" value="30"></div>
275+
<div class="one">
276+
<div>Максимальная громкость будильника<br>от 1 до 30 но не меньше начальной: <span id="vfV">0</span></div>
277+
<div><input type="range" min="1" max="30" step="1" value="25" class="long" name="volume_finish" id="vfC" oninput="updateRange('vf')"></div>
278278
</div>
279279
<div class="row">
280280
<div>Период увеличения громкости (от 1 до 30 сек.)</div>
@@ -347,8 +347,10 @@
347347
}
348348
show_color_block1();
349349
}
350-
function updateBr() {
351-
$g("brV").innerHTML = $g("brC").value;
350+
function updateRange(label) {
351+
var val = $g(label+"V");
352+
var cnt = $g(label+"C");
353+
if(val && cnt) val.innerHTML = cnt.value;
352354
}
353355
function show_bright_block() {
354356
switch(document.forms["settings"].elements["bright_mode"].value) {
@@ -397,7 +399,10 @@
397399
show_dots_block();
398400
show_bright_block();
399401
init_color_demo();
400-
updateBr();
402+
updateRange('br');
403+
updateRange('sp');
404+
updateRange('vs');
405+
updateRange('vf');
401406
show_bright_add_block();
402407
$g("shadow").style.display = "none";
403408
});

data/sysinfo.html

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
<div>WiFi RSSI</div>
5959
<div id="Rssi"></div>
6060
</div>
61+
<div class="row">
62+
<div>IP</div>
63+
<div id="IP"></div>
64+
</div>
6165
<div class="row">
6266
<div>Free Heap</div>
6367
<div><span id="FreeHeap"></span>&nbsp;bytes</div>
@@ -82,8 +86,11 @@
8286
<div>Platform Version</div>
8387
<div id="FullVersion"></div>
8488
</div>
89+
<div class="one i center">
90+
<label for="update">автоматически обновлять</label> <input type="checkbox" name="update" id="update" onchange="auto_update()">
91+
</div>
8592
</div>
86-
93+
8794
<button onclick="getInfo()">Обновить</button>
8895
</div>
8996
<div class="footer">
@@ -105,12 +112,23 @@
105112
}
106113
}
107114
}
115+
var fl_update = false;
108116
function getInfo(cbfunc=null) {
109117
ajaxRequest("sysinfo","GET",null, function(ajaxResp) {
110118
parseInfo(JSON.parse(ajaxResp.responseText));
111119
if(cbfunc !== null) cbfunc();
112120
}, dummy);
113121
}
122+
function new_info() {
123+
if( fl_update ) setTimeout(getInfo, 1000, new_info);
124+
}
125+
function auto_update() {
126+
if($g("update").checked) {
127+
fl_update = true;
128+
getInfo( new_info );
129+
} else
130+
fl_update = false;
131+
}
114132
function start() {
115133
if (typeof ajaxRequest !== "undefined") {
116134
getInfo( () => {

include/defines.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,21 @@
55

66
/*** описание констант, которые описывают конкретное "железо" ***/
77

8-
#if ESP32 == 1 // ESP32
8+
#if ESP32C3 == 1 // ESP32-c3
9+
#define PIN_LED 6 // LED матрица
10+
#define PIN_PHOTO_SENSOR A0 // фоторезистор
11+
#define PIN_BUTTON 1 // кнопка управления
12+
#define PIN_MOTION 10 // детектор движения
13+
#define PIN_5V 3 // детектор наличия питания (5 Вольт). Закомментировать, если не подключен
14+
#define PIN_RELAY 7 // реле выключатель питания матрицы
15+
#define RELAY_TYPE 1 // тип реле, срабатывает по: 0 - низкому, 1 - высокому уровню.
16+
#define LED_MOTION 5 // светодиод индикатор движения. Закомментировать для вывода на матрицу.
17+
#define SRX 20 // hardware serial RX DFPlayer. Закомментировать, если не подключен
18+
#define STX 21 // hardware serial TX DFPlayer
19+
// #define SDA 8 // I2C SDA
20+
// #define SCL 9 // I2C SCL
21+
// #define BAT 4 // напряжение аккумулятора
22+
#elif ESP32 == 1 // ESP32
923
#define PIN_LED 22 // LED матрица
1024
#define PIN_PHOTO_SENSOR 36 // фоторезистор
1125
#define PIN_BUTTON 19 // кнопка управления

platformio.ini

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ board_build.partitions = 400k_spiffs.csv
4040
;lib_deps = ${env.lib_deps}
4141
build_flags = -DESP32=1
4242

43+
[env:esp32c3]
44+
platform = espressif32
45+
board = esp32-c3-devkitm-1
46+
board_build.mcu = esp32c3
47+
monitor_filters = esp32_exception_decoder
48+
board_build.partitions = 400k_spiffs.csv
49+
;lib_deps = ${env.lib_deps}
50+
build_flags = -DESP32=1 -DESP32C3=1
51+
-D ARDUINO_USB_MODE=1
52+
-D ARDUINO_USB_CDC_ON_BOOT=1
53+
-D ARDUINO_ESP32C3_DEV=1
4354

4455
[platformio]
4556
description = Led WS2812B matrix clock

src/clock.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const char* clockTinyText(char *a, bool fl_12) {
4343
if(hour == 0) hour = 12;
4444
sprintf_P(a, PSTR("%02u%c%02u\x7f%s"), hour, c, t.tm_min, AmPm);
4545
} else
46-
sprintf_P(a, PSTR("%02u%c%02u%c%02u"), t.tm_hour, c, t.tm_min, c, t.tm_sec);
46+
sprintf_P(a, PSTR("%02u%c%02u:%02u"), t.tm_hour, c, t.tm_min, t.tm_sec);
4747
if(a[0] == '0') a[0] = ' ';
4848
}
4949
return a;

src/dfplayer.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@
1414
#include "defines.h"
1515
#include "dfplayer.h"
1616
#ifdef SRX
17-
#include <SoftwareSerial.h>
18-
#include <DFRobotDFPlayerMini.h>
19-
20-
EspSoftwareSerial::UART mp3Serial;
21-
DFRobotDFPlayerMini dfPlayer;
17+
#if ESP32C3 == 1
18+
#include <HardwareSerial.h>
19+
HardwareSerial mp3Serial(0);
20+
#else
21+
#include <SoftwareSerial.h>
22+
EspSoftwareSerial::UART mp3Serial;
23+
#endif
24+
#include <DFRobotDFPlayerMini.h>
25+
DFRobotDFPlayerMini dfPlayer;
2226
#endif
2327

2428
int mp3_all = 0;
@@ -62,7 +66,11 @@ void mp3_init() {
6266
mp3Serial.flush();
6367
dfPlayer.reset();
6468
} else {
65-
mp3Serial.begin(9600, SWSERIAL_8N1, SRX, STX, false);
69+
#if ESP32C3 == 1
70+
mp3Serial.begin(115200, SERIAL_8N1, SRX, STX);
71+
#else
72+
mp3Serial.begin(9600, SWSERIAL_8N1, SRX, STX, false);
73+
#endif
6674
dfPlayer.setTimeOut(1000);
6775
mp3_isReady = dfPlayer.begin(mp3Serial);
6876
if(mp3_isReady) {

0 commit comments

Comments
 (0)