-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathesp32light2mqtt_eth.ino
179 lines (117 loc) · 4.85 KB
/
esp32light2mqtt_eth.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*
Разрабатывал для управления освещением через mqtt и выключатели
Железо:
Контроллер WT32-ETH01
расширители портов pcf8575
Выключатели подключены через оптопары
Софт:
IDE 1.8.13
ESP32 boards 1.0.6 (ESP-IDF v3.3.5)
LAN8720 можно сбросить в случае зависания, подтягивая линию nRST
при этом Ethernet PHY меняется на 0 и ESP32 перестает видеть модуль сети
Прошивка WT32-ETH01 через FTDI 232 UART
WT32-ETH01 FTDI 232
5V 5V
GND GND
Tx Rx
Rx Tx
En RTS
GPIO0 DTR
Задачи:
Ethetnet работает
DHCP клиент работает
MQTT клиент работает
Debounce выключатели работает
Клик, Дабл, Хоулд работает
Сохранение состояний реле работает
Схема обмена данными:
___________
MQTT -> | Нужные |
| Статусы |
| Реле | -> Сравниваем с текущими -> Digital Outputs
Digital INs -> |___________|
Что нужно переделать:
1. Добавить вебсервер с обновлением ota +
2. Перенести статусы расширителей портов в отдельный топик +
3. Сделать отдельные топики для всех реле +
4. Изменить состояния от контроллера на ON/OFF +
5. Изменить команды для контроллера на ON/OFF +
6. Сделать возможной работу контроллера при выключенном hassio ? нужно потестировать ещё
7. Уходим от JSON схемы MQTT на схему по-умолчанию для выключателей +
*/
#define pcf
#define mqtt
#define button
#define relays
#define lan
#define ota
#ifdef lan
#include <ETH.h>
#endif
#define RELAY_NUM 40
#ifdef relays
uint8_t TargetRelay[RELAY_NUM]; // массив требуемых состояний реле
uint8_t StatusRelay[RELAY_NUM]; // массив текущих состояний реле
const char* strRelay[] = { "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20",
"r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30",
"r31", "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", "r40"
}; //объявляем массив имён реле для использования в циклах заполнения json
// Serial.println(strRelay[0]); выведет Relay1
const char* strSwitch[] = { "sw1", "sw2", "sw3", "sw4", "sw5", "sw6", "sw7", "sw8", "sw9", "sw10",
"sw11", "sw12", "sw13", "sw14", "sw15", "sw16", "sw17", "sw18", "sw19", "sw20",
"sw21", "sw22", "sw23", "sw24", "sw25", "sw26", "sw27", "sw28", "sw29", "sw30",
"sw31", "sw32", "sw33", "sw34", "sw35", "sw36", "sw37", "sw38", "sw39", "sw40"
};
#endif
#ifdef pcf
// флаги изменения состояний входов для каждого расширителя, должны меняться в прерываниях, поэтому volatile
//#include "esp_attr.h"
//volatile bool keyChanged1 = false;
bool keyChanged1 = false;
bool keyChanged2 = false;
bool keyChanged3 = false;
unsigned long time_click1; // Переменная для хранения точки отсчета клика
unsigned long time_click2;
unsigned long time_click3;
#endif
bool In1Con = false ;
bool In2Con = false ;
bool In3Con = false ;
bool Out1Con = false ;
bool Out2Con = false ;
bool Out3Con = false ;
#include <ArduinoJson.h>
void setup() {
Serial.begin(115200);
#ifdef pcf
setup_pcf();
#endif
#ifdef relays
setup_relay();
#endif
#ifdef lan
setup_eth ();
delay (500); // иногда подвисает без этой задержки
#endif
#ifdef mqtt
setup_mqtt ();
// delay (500);
#endif
}// setup
void loop() {
/*
#ifdef pcf
loop_pcf ();
#endif
*/
#ifdef relays
loop_relay();
#endif
#ifdef button
loop_buttons();
#endif
#ifdef mqtt
loop_mqtt();
#endif
} // loop