First release RozESP

This commit is contained in:
2020-12-20 17:04:35 +03:00
parent 2ea3bd5321
commit 8bd7f648fa
2 changed files with 95 additions and 26 deletions

View File

@@ -10,8 +10,12 @@
[env:esp12e] [env:esp12e]
platform = espressif8266 platform = espressif8266
board = esp12e board = esp07
framework = arduino framework = arduino
board_build.ldscript = eagle.flash.1m.ld
upload_protocol = espota
upload_port = 192.168.1.137
lib_deps = lib_deps =
ottowinter/AsyncMqttClient-esphome @ ^0.8.4 ottowinter/AsyncMqttClient-esphome @ ^0.8.4
; sstaub/Ticker @ ^3.2.0 ; sstaub/Ticker @ ^3.2.0

View File

@@ -3,6 +3,7 @@
#include <Ticker.h> #include <Ticker.h>
#include <AsyncMqttClient.h> #include <AsyncMqttClient.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <Bounce2.h>
#define BUTT1 (0) #define BUTT1 (0)
#define BUTT2 (2) #define BUTT2 (2)
@@ -15,9 +16,13 @@
const char* ssid = "wf-home"; const char* ssid = "wf-home";
const char* password = "0ndthnrf"; const char* password = "0ndthnrf";
const char* mqtt_server = "192.168.1.250"; const char* mqtt_server = "192.168.1.250";
Bounce but1 = Bounce();
Bounce but2 = Bounce();
unsigned long cRun = millis(); unsigned long cRun = millis();
int nSec, nSampl; int nSec;
bool stat1, stat2; bool stat1, stat2, oldstat1, oldstat2;
AsyncMqttClient mqttClient; AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer; Ticker mqttReconnectTimer;
@@ -33,11 +38,12 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event);
void onMqttConnect(bool sessionPresent); void onMqttConnect(bool sessionPresent);
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason); void onMqttDisconnect(AsyncMqttClientDisconnectReason reason);
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total); void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total);
void pubBool(const char* topic, bool pl);
void setup(){ void setup(){
Serial.begin(9600); Serial.begin(9600);
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.hostname("Electro"); WiFi.hostname("Rozetka1");
Serial.begin(9600); Serial.begin(9600);
ArduinoOTA.onStart([]() { ArduinoOTA.onStart([]() {
@@ -68,43 +74,66 @@ void setup(){
mqttClient.onConnect(onMqttConnect); mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect); mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onMessage(onMqttMessage);
mqttClient.setServer(mqtt_server, 1883); mqttClient.setServer(mqtt_server, 1883);
mqttClient.setClientId("Electro"); mqttClient.setClientId("Rozetka1");
pinMode(LED_WF, OUTPUT); pinMode(LED_WF, OUTPUT);
pinMode(LED_MQ, OUTPUT); pinMode(LED_MQ, OUTPUT);
pinMode(LED_WRK, OUTPUT); pinMode(LED_WRK, OUTPUT);
//pinMode(5, INPUT_PULLUP); but1.attach(BUTT1, INPUT_PULLUP);
digitalWrite(LED_WF, LOW); but2.attach(BUTT2, INPUT_PULLUP);
digitalWrite(LED_MQ, LOW); pinMode(SOCK1, OUTPUT);
digitalWrite(LED_WRK, LOW); pinMode(SOCK2, OUTPUT);
digitalWrite(LED_WF, HIGH);
digitalWrite(LED_MQ, HIGH);
digitalWrite(LED_WRK, HIGH);
EEPROM.begin(4);
EEPROM.get(0, stat1);
oldstat1 = !stat1;
EEPROM.get(1, stat1);
oldstat2 = !stat2;
connectToWifi(); connectToWifi();
nSec = 0; nSec = 0;
nSampl = 0;
} }
void loop(){ void loop(){
static bool led_wrk = false; static unsigned long lwms = millis();
ArduinoOTA.handle(); ArduinoOTA.handle();
yield(); yield();
if(but1.fell()){
stat1 = !stat1;
}
if(but2.fell()){
stat2 = !stat2;
}
if(stat1 != oldstat1){
oldstat1 = stat1;
digitalWrite(SOCK1, stat1);
EEPROM.put(0, stat1);
EEPROM.commit();
pubBool("/home/roz1/on1", stat1);
}
if(stat2 != oldstat2){
oldstat2 = stat2;
digitalWrite(SOCK2, stat2);
EEPROM.put(1, stat2);
EEPROM.commit();
pubBool("/home/roz1/on2", stat2);
}
if(cRun + 999 < millis()){ if(cRun + 999 < millis()){
cRun = millis(); cRun = millis();
if(WiFi.isConnected()){
led_wrk = !led_wrk;
digitalWrite(LED_WRK, led_wrk);
nSampl++;
}
if(++nSec > 59){ if(++nSec > 59){
nSec = 0; nSec = 0;
if(nSampl > 0){ char v[15];
//Serial.println("Publish"); ultoa(millis(), v, 10);
char v[7]; mqttClient.publish("/home/roz1/millis", 1, false, v);
mqttClient.publish("/home/kor/curr", 1, false, v); digitalWrite(LED_WRK, LOW);
} lwms = millis();
nSampl = 0;
} }
} }
if(lwms + 300 < millis()) digitalWrite(LED_WRK, HIGH);
} }
void connectToWifi() { void connectToWifi() {
@@ -122,21 +151,27 @@ void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial.print("IP: "); Serial.print("IP: ");
Serial.println(WiFi.localIP()); Serial.println(WiFi.localIP());
connectToMqtt(); connectToMqtt();
digitalWrite(LED_WF, HIGH); digitalWrite(LED_WF, LOW);
} }
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) { void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial.println("Disconnected from Wi-Fi."); Serial.println("Disconnected from Wi-Fi.");
mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
wifiReconnectTimer.once(2, connectToWifi); wifiReconnectTimer.once(2, connectToWifi);
digitalWrite(LED_WF, LOW); digitalWrite(LED_WF, HIGH);
} }
void onMqttConnect(bool sessionPresent) { void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT."); Serial.println("Connected to MQTT.");
Serial.print("Session present: "); Serial.print("Session present: ");
Serial.println(sessionPresent); Serial.println(sessionPresent);
digitalWrite(LED_MQ, HIGH); mqttClient.publish("/home/roz1/on1", 1, false, stat1 == true ? "false" : "true");
mqttClient.publish("/home/roz1/on1_set", 1, false, stat1 == true ? "false" : "true");
mqttClient.publish("/home/roz1/on2", 1, false, stat2 == true ? "false" : "true");
mqttClient.publish("/home/roz1/on2_set", 1, false, stat2 == true ? "false" : "true");
mqttClient.subscribe("/home/roz1/on1_set", 1);
mqttClient.subscribe("/home/roz1/on2_set", 1);
digitalWrite(LED_MQ, LOW);
} }
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
@@ -145,6 +180,36 @@ void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
if (WiFi.isConnected()) { if (WiFi.isConnected()) {
mqttReconnectTimer.once(2, connectToMqtt); mqttReconnectTimer.once(2, connectToMqtt);
} }
digitalWrite(LED_MQ, LOW); digitalWrite(LED_MQ, HIGH);
} }
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total){
char pl[20];
strncpy(pl, payload, len);
pl[len] = 0;
Serial.println(topic);
Serial.println(pl);
if(strcmp(topic, "/home/roz1/on1_set") == 0){
if(strcmp(pl, "true") == 0){
stat1 = false;
}
else{
stat1 = true;
}
return;
}
if(strcmp(topic, "/home/roz1/on2_set") == 0){
if(strcmp(pl, "true") == 0){
stat2 = false;
}
else{
stat2 = true;
}
}
}
void pubBool(const char* topic, bool pl){
if(mqttClient.connected()){
mqttClient.publish(topic, 1, false, pl != true ? "true" : "false");
}
}