Перед тем как сделать сохранения текущих показаний на STM8L
This commit is contained in:
173
src/main.cpp
173
src/main.cpp
@ -17,8 +17,6 @@
|
||||
#include <Arduino.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WebServer.h> // Include the WebServer library
|
||||
#include <DNSServer.h>
|
||||
@ -53,7 +51,7 @@ DNSServer dnsServer;
|
||||
|
||||
//Для входа и выхода из режима настройки WIFI
|
||||
#define CNF_TIME 300; //Сколько секунд даётся для настройки оборудования (600=5минут)
|
||||
int ticks = -1; //Переменная для отсчёта секунд, как дойдёт до нуля то засыпаем
|
||||
int g_ticks = CNF_TIME; //Переменная для отсчёта секунд, как дойдёт до нуля то засыпаем
|
||||
Ticker blinker; //Для подсчёта времени до входа в спящий режим (предполагаю просыпание по кнопке ресет)
|
||||
|
||||
String ssid="Node6";
|
||||
@ -83,6 +81,7 @@ int g_tmpr = -100; //Температура на микроконтроллер
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool configWebServer();
|
||||
void setLampLight(int mode);
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//Load settings from file system to local variables
|
||||
bool loadConfig()
|
||||
@ -133,15 +132,42 @@ bool saveConfigs()
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//=======================================================================
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//Запрос на получение данных с микроконтроллера
|
||||
//Для дебага написал тестовую программу клторая эиетирует STM8L по последовательному порту: O:\MyDocuments\projects\Workspace_C++Builder\NeptuneW01
|
||||
bool getMode(){
|
||||
Serial.println(addCRC("#0;")); //Запрашиваю для какого режима работы включили WIFI
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Запрашиваю данные с датчиков
|
||||
bool callSensorsData(){
|
||||
Serial.println(addCRC("#1;")); //Запрашиваем '1'=холодная
|
||||
Serial.println(addCRC("#2;")); //Запрашиваем '2'=горячая
|
||||
Serial.println(addCRC("#3;")); //Запрашиваем '3'=протечки
|
||||
Serial.println(addCRC("#4;")); //Запрашиваем '4'=вольт на аккумуляторе
|
||||
Serial.println(addCRC("#5;")); //Запрашиваем '5'=температура на процессоре
|
||||
//Уровень WIFI сигнала берём на ESP8266 а не с STM8L051
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Отправляю данные на STM8L для сохранения
|
||||
bool saveToProc(){
|
||||
//
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void handleNotFound() {
|
||||
server.send(404, "text/plain", "FileNotFound");
|
||||
}
|
||||
//=======================================================================
|
||||
//Отправляю показания датчиков при настройке нептуна
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//Отправляю показания датчиков для режима настройки
|
||||
void handleSensors() {
|
||||
|
||||
callSensorsData(); //Запрашиваю новые данные датчиков с микроконтроллера
|
||||
|
||||
String json;
|
||||
json.reserve(128);
|
||||
json.reserve(500); //У меня дома около 500 символов было необходимо
|
||||
|
||||
//Видимые сети
|
||||
json = "{\"networks\":[";
|
||||
@ -161,29 +187,36 @@ void handleSensors() {
|
||||
}
|
||||
json += "],";
|
||||
//Количество тиков до перехода в спящий режим
|
||||
json += "\"ticks\":";
|
||||
json += ticks;
|
||||
json += ",\"hot\":123";
|
||||
json += ",\"cold\":456";
|
||||
json += ",\"leak\":false";
|
||||
json += "\"ticks\":"+String(g_ticks);
|
||||
|
||||
if(g_cold<0) json += ",\"cold\":null"; else json += ",\"cold\":"+String(g_cold);
|
||||
if(g_hot<0) json += ",\"hot\":null"; else json += ",\"hot\":"+String(g_hot);
|
||||
if(g_leak==1) json += ",\"leak\":true"; else if(g_leak==0) json += ",\"leak\":false"; else json += ",\"leak\":null";
|
||||
if(g_volt<0) json += ",\"volt\":null"; else json += ",\"volt\":"+String(g_volt);
|
||||
if(g_tmpr<=-100) json += ",\"tmpr\":null"; else json += ",\"tmpr\":"+String(g_tmpr); // Температура
|
||||
|
||||
json += "}";
|
||||
server.send(200, "application/json", json);
|
||||
}
|
||||
//=======================================================================
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//Отправляем настройки сети (для режима настройки)
|
||||
void handleData(){
|
||||
String json;
|
||||
json.reserve(128);
|
||||
|
||||
json = "{";
|
||||
|
||||
json += "\"ssid\":\"ssid\"";
|
||||
json += ",\"pass\":\"pass\"";
|
||||
|
||||
json += ",\"mqtt\":\"mqtt\"";
|
||||
json += ",\"uuid\":\"uuid\"";
|
||||
json += ",\"topic\":\"topic\"";
|
||||
json += ",\"login\":\"login\"";
|
||||
json += ",\"password\":\"password\"";
|
||||
|
||||
json += "\"ssid\":\""+ssid+"\"";
|
||||
json += ",\"pass\":\""+pass+"\"";
|
||||
json += ",\"uuid\":\""+uuid+"\"";
|
||||
|
||||
json += ",\"mqtt_protocol\":\""+mqtt_protocol+"\"";
|
||||
json += ",\"mqtt_host\":\""+mqtt_host+"\"";
|
||||
json += ",\"mqtt_port\":\""+String(mqtt_port)+"\"";
|
||||
json += ",\"mqtt_fingerprint\":\""+mqtt_fingerprint+"\"";
|
||||
json += ",\"mqtt_topic\":\""+mqtt_topic+"\"";
|
||||
json += ",\"mqtt_user\":\""+mqtt_user+"\"";
|
||||
json += ",\"mqtt_pass\":\""+mqtt_pass+"\"";
|
||||
|
||||
json += "}";
|
||||
|
||||
@ -191,18 +224,38 @@ void handleData(){
|
||||
}
|
||||
//=======================================================================
|
||||
void handleSave(){
|
||||
|
||||
Serial.println("+++Save+++");
|
||||
|
||||
//Serial.println("+++Save+++");
|
||||
if(server.args()>0){
|
||||
for(int i=0;i<server.args();i++){
|
||||
Serial.println("Nane = "+server.argName(i));
|
||||
Serial.println(server.arg(i));
|
||||
//Serial.println("Nane = "+server.argName(i));
|
||||
//Serial.println(server.arg(i));
|
||||
|
||||
if(server.argName(i)=="ssid")
|
||||
ssid=server.arg(i);
|
||||
if(server.argName(i)=="pass")
|
||||
pass=server.arg(i);
|
||||
|
||||
if(server.argName(i)=="cold" && server.arg(i)!=""){
|
||||
g_cold=server.arg(i);
|
||||
}
|
||||
if(server.argName(i)=="hot" && server.arg(i)!=""){
|
||||
g_hot=server.arg(i);
|
||||
}
|
||||
|
||||
if(server.argName(i)=="mqtt_protocol")
|
||||
mqtt_protocol=server.arg(i);
|
||||
if(server.argName(i)=="mqtt_host")
|
||||
mqtt_host=server.arg(i);
|
||||
if(server.argName(i)=="mqtt_port")
|
||||
mqtt_port=server.arg(i).toInt();
|
||||
if(server.argName(i)=="mqtt_fingerprint")
|
||||
mqtt_fingerprint=server.arg(i);
|
||||
if(server.argName(i)=="mqtt_topic")
|
||||
mqtt_topic=server.arg(i);
|
||||
if(server.argName(i)=="mqtt_user")
|
||||
mqtt_user=server.arg(i);
|
||||
if(server.argName(i)=="mqtt_pass")
|
||||
mqtt_pass=server.arg(i);
|
||||
}
|
||||
}
|
||||
server.send(200, "text/html", "ok");
|
||||
@ -260,7 +313,7 @@ bool createAP(){
|
||||
}
|
||||
|
||||
Serial.print("Setting soft-AP ... ");
|
||||
boolean result = WiFi.softAP("Observer_V03");
|
||||
boolean result = WiFi.softAP("NeptuneW01");
|
||||
if(result == true)
|
||||
{
|
||||
Serial.println("Ready");
|
||||
@ -295,32 +348,18 @@ bool deleteAP(){
|
||||
//Функция для подсчёта времени до перехода в спящий режим
|
||||
void tick_1s()
|
||||
{
|
||||
ticks--;
|
||||
if(ticks==0){ //Переходим в спящий режим
|
||||
g_ticks--;
|
||||
if(g_ticks==0){ //Переходим в спящий режим
|
||||
Serial.print("Deep sleep!");
|
||||
Serial.print("#0;!*"); //Отсылаю команду на STM8 чтобы он на CHIP_PU подал низский сигнал для отключения питания
|
||||
Serial.print(addCRC("#d;!")); //Отсылаю команду на STM8 чтобы он на CHIP_PU подал низский сигнал для отключения питания
|
||||
}
|
||||
//Если в течении 2х минут не перешли в режим глубокого сна то переходим в обычный сон
|
||||
if(ticks==-600){
|
||||
if(g_ticks==-600){
|
||||
Serial.println("Sleep!");
|
||||
Serial.print("#0;!*"); //Повторно отсылаю команду на STM8 чтобы он на CHIP_PU подал низский сигнал для отключения питания
|
||||
Serial.print(addCRC("#d;!")); //Повторно отсылаю команду на STM8 чтобы он на CHIP_PU подал низский сигнал для отключения питания
|
||||
ESP.deepSleep(0);
|
||||
}
|
||||
}
|
||||
//=======================================================================
|
||||
//Запрос на получение данных с микроконтроллера
|
||||
//Для дебага написал тестовую программу клторая эиетирует STM8L по последовательному порту: O:\MyDocuments\projects\Workspace_C++Builder\NeptuneW01
|
||||
bool getMode(){
|
||||
|
||||
Serial.println("#0;"); //Запрашиваю для какого режима работы включили WIFI
|
||||
/*Serial.println("#1;"); //Запрашиваем '1'=холодная
|
||||
Serial.println("#2;"); //Запрашиваем '2'=горячая
|
||||
Serial.println("#3;"); //Запрашиваем '3'=протечки
|
||||
Serial.println("#4;"); //Запрашиваем '4'=вольт на аккумуляторе
|
||||
Serial.println("#5;"); //Запрашиваем '5'=температура на процессоре
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool configWebServer(){
|
||||
Serial.println("configWebServer()");
|
||||
@ -388,9 +427,9 @@ void setup()
|
||||
uuid=readUUID(); //Загружаю уникальный идентификатор клиента
|
||||
|
||||
loadConfig(); //Загружаю настройки в локальные переменные
|
||||
/*
|
||||
blinker.attach(1, tick_1s); //Инициализирую таймер для подсчёта секунд работы в режиме настройки
|
||||
*/
|
||||
|
||||
blinker.attach(1, tick_1s); //Инициализирую таймер для контроля времени работы ESP8266
|
||||
|
||||
connectToWIFIPoint(); //Пытаюсь подключиться к настроенной точке доступа
|
||||
/*
|
||||
connectToMQTT(); //Пытаюсь опубликовать топик
|
||||
@ -403,27 +442,6 @@ void setup()
|
||||
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
//Проверяю правильный ли CRC в строке
|
||||
bool checkCRC(String str){
|
||||
|
||||
String data=CutBeforeFirst(str,'!',false);
|
||||
String crcS=CutBeforeFirst(str,'*',true);
|
||||
|
||||
//Подсчитываю CRC и проверяю с тем что передалось
|
||||
unsigned char crcD=0;
|
||||
for(unsigned int i=0;i<data.length();i++){
|
||||
crcD+=data[i];
|
||||
}
|
||||
if(crcD==crcS.toInt()) //CRC is OK
|
||||
{
|
||||
return true;
|
||||
}else
|
||||
{
|
||||
Serial.println("Incom CRC = "+crcS+" calc CRC = "+String(crcD));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool first=true;
|
||||
//=======================================================================
|
||||
void loop(){
|
||||
@ -465,7 +483,7 @@ void loop(){
|
||||
|
||||
|
||||
|
||||
if(ticks>0){
|
||||
if(g_ticks>0){
|
||||
//В режиме конфигурации каждые 500 миллисекунд меняем цвет зелёного светодиода
|
||||
if(millis()-blinkMSec>500){
|
||||
blink=!blink;
|
||||
@ -525,7 +543,7 @@ void loop(){
|
||||
Serial.println("Config mode");
|
||||
if(disconnectFromWIFIPoint()){
|
||||
if(createAP()){
|
||||
ticks = CNF_TIME;
|
||||
g_ticks = CNF_TIME;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -572,16 +590,18 @@ void loop(){
|
||||
data+="\"cold\":"+String(g_cold)+","; // Горячая
|
||||
data+="\"hot\":"+String(g_hot)+","; // Холодная
|
||||
data+="\"leak\":"+String(g_leak)+","; // Протечки
|
||||
data+="\"volt\":"+String(g_volt); // Вольт на акумуляторе
|
||||
if(g_tmpr>-100)
|
||||
data+="\"volt\":"+String(g_volt/100.0f); // Вольт на акумуляторе
|
||||
if(g_tmpr>-100){
|
||||
data+=",\"tmpr\":"+String(g_tmpr); // Температура
|
||||
}
|
||||
data+=",\"rssi\":"+String(WiFi.RSSI()); //Уровень WIFI сигнала
|
||||
data+="}";
|
||||
mqttClient.publish(mqtt_topic.c_str(), data.c_str(), true); //Отправляю данные в топик (С флагом RETAIN чтобы слушатели которые подключились поздно получили тек. состояние)
|
||||
|
||||
Serial.println(data);
|
||||
|
||||
//Как отправили данные устанавливаю время ожидания входа в сон на 5 секунд чтобы ESP8266 заснул
|
||||
ticks=5;
|
||||
g_ticks=5;
|
||||
//Очищаю данные
|
||||
g_cold=-1;
|
||||
g_hot=-1;
|
||||
@ -589,5 +609,4 @@ void loop(){
|
||||
g_volt=-1;
|
||||
g_tmpr=-100;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user