Skip to content

Commit 4dacb0a

Browse files
authored
Add files via upload
1 parent 85c996c commit 4dacb0a

File tree

5 files changed

+175
-127
lines changed

5 files changed

+175
-127
lines changed

PCF857x.ino

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,7 @@ void setup_pcf () {
229229
pinMode(ESP32_INTERRUPTED_PIN3, INPUT_PULLUP);
230230
attachInterrupt(digitalPinToInterrupt(ESP32_INTERRUPTED_PIN3), keyChangedOnPCF3, FALLING);
231231

232-
// Устанавливаем pinMode расширителей
233-
/*
234-
for (uint8_t i = 0; i < 16; i++) {
235-
in1.pinMode(i, INPUT);
236-
in2.pinMode(i, INPUT);
237-
out1.pinMode(i, OUTPUT);
238-
out2.pinMode(i, OUTPUT);
239-
}
240-
*/
232+
241233
// выключаем свет
242234
out1.write16(0xFFFF);
243235
out2.write16(0xFFFF);
@@ -247,23 +239,7 @@ void setup_pcf () {
247239

248240
}
249241

250-
/*
251-
void loop_pcf () {
252-
253-
uint32_t now = millis();
254-
if (keyChanged1)
255-
{
256-
keyChanged1 = false;
257-
uint16_t x = in1.readButton16();
258-
Serial.print("READ But16:\t");
259-
Serial.print('\t');
260-
Serial.print(now);
261-
Serial.print('\t');
262-
Serial.println(x, BIN);
263-
}
264-
265-
}
266-
*/
242+
267243

268244

269245

buttons.ino

Lines changed: 133 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -15,105 +15,156 @@ unsigned long timing; // Переменная для хранения точки
1515
void IRAM_ATTR keyChangedOnPCF1() {
1616
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
1717
keyChanged1 = true;
18-
time_click1 = millis();
18+
time_click1 = millis();
1919
}
2020

2121
void IRAM_ATTR keyChangedOnPCF2() {
2222
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
2323
keyChanged2 = true;
24-
time_click2 = millis();
24+
time_click2 = millis();
2525
}
2626

2727
void IRAM_ATTR keyChangedOnPCF3() {
2828
// Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
2929
keyChanged3 = true;
30-
time_click3 = millis();
30+
time_click3 = millis();
3131
}
3232

3333

3434

3535

3636

3737
void loop_buttons() {
38-
39-
if (millis() - timing > 10){ // Проверяем кнопки каждые 10мс
40-
timing = millis();
41-
42-
//если нет подключенного расширителя, то флаг состояния может сбрасываться при перезагрузке
43-
// чтобы исключить лишние тики неподключенных расширителей с ложными событиями, проверяем подключение
44-
45-
//обработка выключателей
46-
if (((keyChanged1) || (millis() - time_click1 < 5000)) && (In1Con)){ //при изменении входов первого расширителя или в течение 5 секунд после
47-
uint16_t di = in1.readButton16(); // здесь состояния всех входов после изменения как 11100011110001, в прерывании эта функция вызывает перезагрузку
48-
//разбираем байты и тикаем виртуальные кнопки в цикле
49-
/*
50-
p0 = ((di & bit(0))>0)?HIGH:LOW;
51-
p1 = ((di & bit(1))>0)?HIGH:LOW;
52-
p2 = ((di & bit(2))>0)?HIGH:LOW;
53-
p3 = ((di & bit(3))>0)?HIGH:LOW;
54-
p4 = ((di & bit(4))>0)?HIGH:LOW;
55-
p5 = ((di & bit(5))>0)?HIGH:LOW;
56-
p6 = ((di & bit(6))>0)?HIGH:LOW;
57-
p7 = ((di & bit(7))>0)?HIGH:LOW;
58-
*/
59-
for (uint8_t i = 0; i < 16; i++) { // тикаем первые 16 виртуальных кнопок, т.е. buttons[0-15]
60-
buttons[i].tick(((di & bit(i)) > 0) ? LOW : HIGH); // кнопки подтянуты к питанию и прижимаем к GND в нажатии, поэтому HIGH = отпущена
6138

62-
// публикуем событие
63-
if (buttons[i].isHolded()) { Serial.print("holded "); Serial.println(i+1); publishSwitchJsonState(i, "holded");}
64-
65-
if (buttons[i].isPress()) {Serial.print("press "); Serial.println(i+1); publishSwitchJsonState(i, "press"); TargetRelay[i] = ! StatusRelay[i];}
66-
67-
if (buttons[i].hasClicks(1)) {Serial.print("click "); Serial.println(i+1); publishSwitchJsonState(i, "click");}
68-
if (buttons[i].hasClicks(2)) {Serial.print("2 click "); Serial.println(i+1); publishSwitchJsonState(i, "double");}
69-
70-
// if (buttons[i].hasClicks()) Serial.println(buttons[i].clicks);
71-
// if (buttons[i].isHold()) Serial.println("hold");
72-
73-
} //for
74-
75-
keyChanged1 = false; //сбрасываем флаг изменённых входов расширителя
76-
} //if
77-
78-
79-
if (((keyChanged2) || (millis() - time_click2 < 5000)) && (In2Con)) { //при изменении входов второго расширителя
80-
uint16_t di = in2.readButton16(); // здесь состояния всех входов после изменения как 11100011110001
81-
for (uint8_t i = 0; i < 16; i++) { // тикаем вторые 16 виртуальных кнопок, т.е. buttons[16-31]
82-
buttons[i + 16].tick(((di & bit(i)) > 0) ? LOW : HIGH);
83-
84-
// публикуем событие
85-
if (buttons[i+16].isHolded()) { Serial.print("holded "); Serial.println(i+17); publishSwitchJsonState(i+16, "holded");}
86-
87-
if (buttons[i+16].isPress()) {Serial.print("press "); Serial.println(i+17); publishSwitchJsonState(i+16, "press"); TargetRelay[i+16] = ! StatusRelay[i+16];}
88-
89-
if (buttons[i+16].hasClicks(1)) {Serial.print("click "); Serial.println(i+17); publishSwitchJsonState(i+16, "click");}
90-
if (buttons[i+16].hasClicks(2)) {Serial.print("2 click "); Serial.println(i+17); publishSwitchJsonState(i+16, "double");}
91-
92-
} //for
93-
94-
keyChanged2 = false; //сбрасываем флаг изменённых входов расширителя
95-
96-
} //if
97-
98-
if (((keyChanged3) || (millis() - time_click3 < 5000)) && (In3Con)) { //при изменении входов третьего расширителя
99-
uint16_t di = in3.readButton16(); // здесь состояния всех входов после изменения как 11100011110001
100-
for (uint8_t i = 0; i < 8; i++) { // тикаем последние 8 виртуальных кнопок, т.е. buttons[32-39]
101-
buttons[i + 32].tick(((di & bit(i)) > 0) ? LOW : HIGH);
102-
103-
// публикуем событие
104-
if (buttons[i+32].isHolded()) { Serial.print("holded "); Serial.println(i+33); publishSwitchJsonState(i+32, "holded");}
105-
106-
if (buttons[i+32].isPress()) {Serial.print("press "); Serial.println(i+33); publishSwitchJsonState(i+32, "press"); TargetRelay[i+32] = ! StatusRelay[i+32];}
107-
108-
if (buttons[i+32].hasClicks(1)) {Serial.print("click "); Serial.println(i+33); publishSwitchJsonState(i+32, "click");}
109-
if (buttons[i+32].hasClicks(2)) {Serial.print("2 click "); Serial.println(i+33); publishSwitchJsonState(i+32, "double");}
110-
111-
} //for
112-
113-
keyChanged3 = false; //сбрасываем флаг изменённых входов расширителя
114-
115-
} //if
116-
117-
}
39+
if (millis() - timing > 10) { // Проверяем кнопки каждые 10мс
40+
timing = millis();
41+
42+
//если нет подключенного расширителя, то флаг состояния может сбрасываться при перезагрузке
43+
// чтобы исключить лишние тики неподключенных расширителей с ложными событиями, проверяем подключение
44+
45+
//обработка выключателей
46+
if (((keyChanged1) || (millis() - time_click1 < 5000)) && (In1Con)) { //при изменении входов первого расширителя или в течение 5 секунд после
47+
uint16_t di = in1.readButton16(); // здесь состояния всех входов после изменения как 11100011110001, в прерывании эта функция вызывает перезагрузку
48+
//разбираем байты и тикаем виртуальные кнопки в цикле
49+
/*
50+
p0 = ((di & bit(0))>0)?HIGH:LOW;
51+
p1 = ((di & bit(1))>0)?HIGH:LOW;
52+
p2 = ((di & bit(2))>0)?HIGH:LOW;
53+
p3 = ((di & bit(3))>0)?HIGH:LOW;
54+
p4 = ((di & bit(4))>0)?HIGH:LOW;
55+
p5 = ((di & bit(5))>0)?HIGH:LOW;
56+
p6 = ((di & bit(6))>0)?HIGH:LOW;
57+
p7 = ((di & bit(7))>0)?HIGH:LOW;
58+
*/
59+
for (uint8_t i = 0; i < 16; i++) { // тикаем первые 16 виртуальных кнопок, т.е. buttons[0-15]
60+
buttons[i].tick(((di & bit(i)) > 0) ? LOW : HIGH); // кнопки подтянуты к питанию и прижимаем к GND в нажатии, поэтому HIGH = отпущена
61+
62+
// публикуем событие
63+
if (buttons[i].isHolded()) {
64+
Serial.print("holded ");
65+
Serial.println(i + 1);
66+
publishSwitchJsonState(i, "holded");
67+
}
68+
69+
if (buttons[i].isPress()) {
70+
Serial.print("press ");
71+
Serial.println(i + 1);
72+
publishSwitchJsonState(i, "press");
73+
TargetRelay[i] = ! StatusRelay[i];
74+
}
75+
76+
if (buttons[i].hasClicks(1)) {
77+
Serial.print("click ");
78+
Serial.println(i + 1);
79+
publishSwitchJsonState(i, "click");
80+
}
81+
if (buttons[i].hasClicks(2)) {
82+
Serial.print("2 click ");
83+
Serial.println(i + 1);
84+
publishSwitchJsonState(i, "double");
85+
}
86+
87+
// if (buttons[i].hasClicks()) Serial.println(buttons[i].clicks);
88+
// if (buttons[i].isHold()) Serial.println("hold");
89+
90+
} //for
91+
92+
keyChanged1 = false; //сбрасываем флаг изменённых входов расширителя
93+
} //if
94+
95+
96+
if (((keyChanged2) || (millis() - time_click2 < 5000)) && (In2Con)) { //при изменении входов второго расширителя
97+
uint16_t di = in2.readButton16(); // здесь состояния всех входов после изменения как 11100011110001
98+
for (uint8_t i = 0; i < 16; i++) { // тикаем вторые 16 виртуальных кнопок, т.е. buttons[16-31]
99+
buttons[i + 16].tick(((di & bit(i)) > 0) ? LOW : HIGH);
100+
101+
// публикуем событие
102+
if (buttons[i + 16].isHolded()) {
103+
Serial.print("holded ");
104+
Serial.println(i + 17);
105+
publishSwitchJsonState(i + 16, "holded");
106+
}
107+
108+
if (buttons[i + 16].isPress()) {
109+
Serial.print("press ");
110+
Serial.println(i + 17);
111+
publishSwitchJsonState(i + 16, "press");
112+
TargetRelay[i + 16] = ! StatusRelay[i + 16];
113+
}
114+
115+
if (buttons[i + 16].hasClicks(1)) {
116+
Serial.print("click ");
117+
Serial.println(i + 17);
118+
publishSwitchJsonState(i + 16, "click");
119+
}
120+
if (buttons[i + 16].hasClicks(2)) {
121+
Serial.print("2 click ");
122+
Serial.println(i + 17);
123+
publishSwitchJsonState(i + 16, "double");
124+
}
125+
126+
} //for
127+
128+
keyChanged2 = false; //сбрасываем флаг изменённых входов расширителя
129+
130+
} //if
131+
132+
if (((keyChanged3) || (millis() - time_click3 < 5000)) && (In3Con)) { //при изменении входов третьего расширителя
133+
uint16_t di = in3.readButton16(); // здесь состояния всех входов после изменения как 11100011110001
134+
for (uint8_t i = 0; i < 8; i++) { // тикаем последние 8 виртуальных кнопок, т.е. buttons[32-39]
135+
buttons[i + 32].tick(((di & bit(i)) > 0) ? LOW : HIGH);
136+
137+
// публикуем событие
138+
if (buttons[i + 32].isHolded()) {
139+
Serial.print("holded ");
140+
Serial.println(i + 33);
141+
publishSwitchJsonState(i + 32, "holded");
142+
}
143+
144+
if (buttons[i + 32].isPress()) {
145+
Serial.print("press ");
146+
Serial.println(i + 33);
147+
publishSwitchJsonState(i + 32, "press");
148+
TargetRelay[i + 32] = ! StatusRelay[i + 32];
149+
}
150+
151+
if (buttons[i + 32].hasClicks(1)) {
152+
Serial.print("click ");
153+
Serial.println(i + 33);
154+
publishSwitchJsonState(i + 32, "click");
155+
}
156+
if (buttons[i + 32].hasClicks(2)) {
157+
Serial.print("2 click ");
158+
Serial.println(i + 33);
159+
publishSwitchJsonState(i + 32, "double");
160+
}
161+
162+
} //for
163+
164+
keyChanged3 = false; //сбрасываем флаг изменённых входов расширителя
165+
166+
} //if
167+
168+
}
118169
} //loop
119170
#endif

esp32light2mqtt_eth.ino

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,15 @@
1111
LAN8720 можно сбросить в случае зависания, подтягивая линию nRST
1212
при этом Ethernet PHY меняется на 0 и ESP32 перестает видеть модуль сети
1313
14-
14+
Прошивка WT32-ETH01 через FTDI 232 UART
15+
WT32-ETH01 FTDI 232
16+
5V 5V
17+
GND GND
18+
Tx Rx
19+
Rx Tx
20+
En RTS
21+
GPIO0 DTR
22+
1523
Задачи:
1624
Ethetnet работает
1725
DHCP клиент работает
@@ -35,8 +43,8 @@
3543
3. Сделать отдельные топики для всех реле +
3644
4. Изменить состояния от контроллера на ON/OFF +
3745
5. Изменить команды для контроллера на ON/OFF +
38-
6. Сделать возможной работу контроллера при выключенном hassio
39-
7. Уходим от JSON схемы MQTT на схему по-умолчанию для выключателей
46+
6. Сделать возможной работу контроллера при выключенном hassio ? нужно потестировать ещё
47+
7. Уходим от JSON схемы MQTT на схему по-умолчанию для выключателей +
4048
4149
*/
4250

@@ -50,6 +58,8 @@
5058
#define relays
5159
#define lan
5260

61+
#define ota
62+
5363

5464
#ifdef lan
5565
#include <ETH.h>
@@ -128,7 +138,7 @@ void setup() {
128138

129139
#ifdef lan
130140
setup_eth ();
131-
// delay (500);
141+
delay (500); // иногда подвисает без этой задержки
132142
#endif
133143

134144

ethernet.ino

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020

2121
#include <ETH.h>
2222

23-
//для OTA
23+
#ifdef ota
2424
#include <AsyncTCP.h>
2525
#include <ESPAsyncWebServer.h>
2626
#include <AsyncElegantOTA.h>
27+
#endif
2728

2829
WiFiClient ethClient; //в библиотеке ETH.h он так называется!
2930

@@ -58,9 +59,10 @@ WiFiClient ethClient; //в библиотеке ETH.h он так называе
5859
static bool eth_connected = false;
5960
unsigned long timeElapsed;
6061

62+
#ifdef ota
6163
//для OTA
6264
AsyncWebServer serverHTTP(80);
63-
65+
#endif
6466

6567
void WiFiEvent(WiFiEvent_t event) {
6668
switch (event) {
@@ -84,6 +86,8 @@ void WiFiEvent(WiFiEvent_t event) {
8486
Serial.print(ETH.linkSpeed());
8587
Serial.println("Mbps");
8688
eth_connected = true;
89+
90+
#ifdef ota
8791
// webserver
8892
serverHTTP.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
8993
request->send(200, "text/plain", "Hi! I am ESP32. For OTA go to http://<IPAddress>/update in browser.");
@@ -92,6 +96,7 @@ void WiFiEvent(WiFiEvent_t event) {
9296
AsyncElegantOTA.begin(&serverHTTP); // Start ElegantOTA
9397
serverHTTP.begin();
9498
Serial.println("HTTP server started");
99+
#endif
95100

96101
break;
97102
case SYSTEM_EVENT_ETH_DISCONNECTED:

0 commit comments

Comments
 (0)