Skip to content

Commit 1a67662

Browse files
committed
v50beta8
1 parent c916894 commit 1a67662

16 files changed

+6037
-0
lines changed
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
/*
2+
3+
*************************************
4+
***** SmartHome v5.0 beta 8 *****
5+
*************************************
6+
7+
Testato con:
8+
Arduino IDE : -> 1.8.9
9+
ESP8266 Core: ESP8266 Community versione -> 2.5.2
10+
Scheda : Generic ESP8266 Module, 115200, 80 MHz, 26 MHz, Flash Size (tabella sotto), Flash Mode (tabella sotto), 40MHz, nodemcu,
11+
Disabled, Nessuno, v2 Lower Memory, Flash, Disabled, 2, Only Sketch, nonos-sdk 2.2.1 (legacy), All SSL cipehers (most compatible)
12+
13+
Settaggi Flash Mode e Flash Size di Arduino IDE:
14+
Nodemcu -> Flash Mode:DIO Flash Size:4M
15+
ESP01 -> Flash Mode:DIO Flash Size:1M
16+
Electrodragon -> Flash Mode:DIO Flash Size:4M
17+
Hipposwitch -> Flash Mode:DIO Flash Size:4M
18+
GC -> Flash Mode:DIO Flash Size:2M
19+
SONOFFDUAL -> Flash Mode:QIO Flash Size:1M
20+
SONOFF 4CH PRO R2 -> Flash Mode:DOUT Flash Size:1M oppure Scheda: ESP8285
21+
Shelly1 -> Flash Mode:DIO Flash Size:2M
22+
Shelly2 -> Flash Mode:DIO Flash Size:2M
23+
BlitzWolf -> Flash Mode:DIO Flash Size:1M
24+
DE004 -> Flash Mode:DIO Flash Size:1M
25+
26+
Librerie core ESP8266:
27+
<ESP8266WiFi.h>
28+
<ESP8266WebServer.h>
29+
<EEPROM.h>
30+
<ArduinoOTA.h>
31+
<Ticker.h>
32+
<SPI.h>
33+
<time.h>
34+
<sys/time.h>
35+
<coredecls.h>
36+
37+
Librerie esterne:
38+
<PubSubClient.h> https://github.com/knolleary/pubsubclient
39+
<simpleDSTadjust.h> https://github.com/neptune2/simpleDSTadjust
40+
<TPush.h> https://github.com/TheTrigger/TPush
41+
"AsyncPing.h" https://github.com/akaJes/AsyncPing
42+
"MFRC522.h" https://github.com/miguelbalboa/rfid (Impulso NFC)
43+
"DHT.h" https://github.com/adafruit/DHT-sensor-library + https://github.com/adafruit/Adafruit_Sensor (Termostato)
44+
"SSD1306.h" https://github.com/ThingPulse/esp8266-oled-ssd1306 (Display - Termostato)
45+
<PZEM004T.h> https://github.com/olehs/PZEM004T (Power)
46+
"HLW8012.h" https://github.com/xoseperez/hlw8012 (Power)
47+
48+
GPIO CONSIGLIATI:
49+
Nodemcu ESP01 Elctrodragon Hipposwitch Shelly1 Shelly2 SONOFFDUAL SONOFF4CHPROR2
50+
OUT1 12 0 12 12 4 4 14 12
51+
OUT2 13 2 13 14 - 5 15 5
52+
OUT3 - - - - - - - 4
53+
OUT4 - - - - - - - 15
54+
IN1 4 1 4 ? 5 12 4 0
55+
IN2 5 3 5 ? - 14 5 9
56+
IN3 - - - - - - - 10
57+
IN4 - - - - - - - 14
58+
GPIO Status_LED 16 4 16 15 16 16 13 13
59+
Inv. Status_LED 1 1 0 0 1 1 1 1
60+
Inv. RELE 1 1 0 0 0 0 0 0
61+
PullUp ? PullUp PullUp PullUp PullUp
62+
63+
PullUp -> resistenza verso vcc, GPIO che chiude verso gnd
64+
PullDown -> resistenza verso gnd, GPIO che chiude verso vcc
65+
66+
Comandi MQTT verso il topic nodo Tapparella:
67+
su - alza la Tapparella
68+
giu - abbassa la Tapparella
69+
stop - ferma la Tapparella
70+
+XX - alza la Tapparella in percentuale del tempo Tapparella (XX=percentuale)
71+
-XX - abbassa la Tapparella in percentuale del tempo Tapparella (XX=percentuale)
72+
t=XX - tempo Tapparella (XX=tempo massimo di eccitazione rele)
73+
l=XX - lock (XX=0 -> funzionamento normale (unlock) - XX=1 modo lock(i comandi MQTT ricevuti vengono ignorati))
74+
%=XX - porta la Tapparella alla percentuale XX
75+
stato - restituisce lo stato del nodo e dei relativi rele
76+
77+
Comandi MQTT verso il topic nodo Interruttore:
78+
on - eccita il relè
79+
off - diseccita il relè
80+
toggle - inverte lo stato del rele
81+
stato - restituisce lo stato del nodo e dei relativi rele
82+
83+
Comandi MQTT verso il topic nodo Impulso:
84+
on - eccita il relè (per un tempo impostato nel firmware)
85+
stato - restituisce lo stato del nodo e dei relativi rele
86+
87+
Comandi MQTT verso il topic nodo Temporizzatore:
88+
on - eccita il relè (per un tempo impostabile a piacimento)
89+
t=XX - tempo eccitazione rele (XX=tempo dopo il quale il relè viene diseccitato)
90+
stato - restituisce lo stato del nodo e dei relativi rele
91+
92+
Comandi MQTT verso il topic nodo Termostato:
93+
read - restituisce la Termostato
94+
on - eccita il relè del termostato
95+
off - diseccita il relè del termostato
96+
auto - setta modalità automatica
97+
man - setta modalità manuale
98+
t=XX - Termostato termostato (XX=Termostato)
99+
stato - restituisce lo stato del nodo e dei relativi rele
100+
101+
Comandi MQTT verso il topic nodo Sensore:
102+
stato - restituisce lo stato del nodo
103+
104+
Comandi MQTT verso il topic nodo Power:
105+
stato - restituisce lo stato del nodo
106+
CXX - Calibra dispositivo (XX=Watt di calibrazione)
107+
108+
Comandi MQTT verso il topic ACK
109+
ack - interroga tutti i nodi presenti
110+
info - tutti i nodi restituiscono alcune info
111+
112+
Comandi MQTT verso qualsiasi nodo
113+
reset - resetta nodo + cancella EEPROM nodo
114+
reboot - riavvia il nodo
115+
*/
116+
117+
#include <ESP8266WiFi.h>
118+
#include <PubSubClient.h>
119+
#include <Ticker.h>
120+
#include <TPush.h>
121+
#include <EEPROM.h>
122+
123+
#include "SmartHome_config.h"
124+
125+
#define ACK_Topic "ack" // [Default "ack"] Topic di ACK (NON MODIFICARE!!!!!)
126+
#define MinFreeHeap 10000 // [Default 10000] valore minimo di Heap sotto al quale il dispositivo viene resettato
127+
#define TEMPO_CLICK_ON 150 // [Default 150] tempo click ON (msec.) almeno 10
128+
#define TEMPO_CLICK_OFF 100 // [Default 100] tempo click OFF (msec.) almeno 5
129+
//#define RESET_GIORNALIERO // [Default commentato] se abilitato esegue un reset una volta al giorno (dopo 24h dall'avvio)
130+
#define Tempo_Reboot 0 // [Default 0] tempo (sec.) trascorso il quale senza nessuna connessione il dispositivo viene resettato (0 = disattivato)
131+
132+
String Versione = "5.0beta8";
133+
uint8_t mac[6];
134+
int t = 0;
135+
unsigned long start_millis;
136+
137+
void setup() {
138+
#ifdef DEBUG
139+
Serial.begin(115200);
140+
// Serial.setDebugOutput(true);
141+
#endif
142+
#ifdef DEBUG1
143+
Serial1.begin(115200);
144+
// Serial1.setDebugOutput(true);
145+
#endif
146+
147+
Show_vesione();
148+
Check_flash_chip_configuration();
149+
Check_PubSubClient();
150+
setup_EEPROM();
151+
setup_Status_LED();
152+
153+
#if Tapparella_nodi>0
154+
setup_Tapparella();
155+
#endif
156+
#if Termostato_nodi>0
157+
setup_Termostato();
158+
#endif
159+
#if Interruttore_nodi>0
160+
setup_Interruttore();
161+
#endif
162+
#if Impulso_nodi>0
163+
setup_Impulso();
164+
#endif
165+
#if Temporizzatore_nodi>0
166+
setup_Temporizzatore();
167+
#endif
168+
#if Sensore_nodi>0
169+
setup_Sensore();
170+
#endif
171+
#if Display_nodi>0
172+
setup_Display();
173+
#endif
174+
#if Power_nodi>0
175+
setup_Power();
176+
#endif
177+
setup_reti();
178+
}
179+
180+
void loop() {
181+
loop_Status_LED();
182+
loop_check_low_memory();
183+
184+
#ifdef RESET_GIORNALIERO
185+
loop_reset_giornaliero();
186+
#endif
187+
#if Tapparella_nodi>0
188+
loop_Tapparella();
189+
#endif
190+
#if Termostato_nodi>0
191+
loop_Termostato();
192+
#endif
193+
#if Interruttore_nodi>0
194+
loop_Interruttore();
195+
#endif
196+
#if Impulso_nodi>0
197+
loop_Impulso();
198+
#endif
199+
#if Temporizzatore_nodi>0
200+
loop_Temporizzatore();
201+
#endif
202+
#if Sensore_nodi>0
203+
loop_Sensore();
204+
#endif
205+
#if Display_nodi>0
206+
loop_Display();
207+
#endif
208+
#if Power_nodi>0
209+
loop_Power();
210+
#endif
211+
212+
loop_reti();
213+
#ifdef WEB_SERVER
214+
loop_web();
215+
#endif
216+
#ifdef TELNET_DEBUG
217+
loop_telnet();
218+
#endif
219+
#ifdef ArduinoIDE_OTA
220+
loop_OTA();
221+
#endif
222+
}
223+
224+
#if (MQTT_MAX_PACKET_SIZE < 1024)
225+
#error In PubSubClient.h MQTT_MAX_PACKET_SIZE deve essere >= 1024
226+
#endif
227+
228+
#if (defined(PullUp) and defined(PullDown)) or (!defined(PullUp) and !defined(PullDown))
229+
#error In SmartHome_config.h definire correttamete PullUp o PullDown per i GPIO
230+
#endif
231+
232+
#if (defined(SONOFFDUAL) and defined(ESP01_SERIAL_RELE))
233+
#error In SmartHome_config.h definire solo un dispositivo con GPIO non standard (SONOFFDUAL o ESP01_SERIAL_RELE)
234+
#endif
235+
236+
#if (defined(SONOFFDUAL) or defined(ESP01_SERIAL_RELE))
237+
#undef DEBUG
238+
#endif
239+
240+
#if (Power_nodi>0 and Power1_device == 1 and (Power1_GPIO_RX == 3 or Power1_GPIO_TX == 1) and defined(DEBUG))
241+
#error PZEM-004 con RX=3 e TX=1 non può usare il serial DEBUG
242+
#endif
243+
244+
#if (Tapparella_nodi>5 or Interruttore_nodi>10 or Impulso_nodi>10 or Termostato_nodi>1 or Temporizzatore_nodi>10 or Sensore_nodi>10 or Display_nodi>1 or Power_nodi>1)
245+
#error Nodi definiti in numero errato
246+
#endif
247+
248+
#if Impulso_nodi<1
249+
#undef Impulso1_NFC
250+
#endif
2.49 MB
Binary file not shown.

0 commit comments

Comments
 (0)