FAQ ESP8266
Модератор: immortal
-
- Сообщения: 395
- Зарегистрирован: Вт май 31, 2016 6:56 pm
- Откуда: Россия Карелия Петрозаводск
- Благодарил (а): 95 раз
- Поблагодарили: 57 раз
Re: FAQ ESP8266
Энергосбережение в esp8266 изпользовали в своих проектах?
Интересна стратегия как уменьшать потребление, например если выключить wifi то тогда я не смогу управлять устройствами. Как быть?
Интересна стратегия как уменьшать потребление, например если выключить wifi то тогда я не смогу управлять устройствами. Как быть?
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: FAQ ESP8266
Никак. Если хотите девайсы с низким энергопотреблением - используйте платы ардуино, и, к примеру, передачу инфы по радиоканалу (nrf). Вайфай жрёт много, и должен быть постоянно подключён для быстроты реакции. С этим ничего не поделаешь.
Отправлено с моего Xperia XZ1 Compact через Tapatalk
Отправлено с моего Xperia XZ1 Compact через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- samolet
- Сообщения: 472
- Зарегистрирован: Чт июн 29, 2017 10:29 am
- Благодарил (а): 46 раз
- Поблагодарили: 45 раз
Re: FAQ ESP8266
Доброго всем времени суток, есть у меня интересная задумка по распределению по комнатам голосового ввода команд и соответственно вывода Алисы на колонки в ту комнату где была голосовая команда, может кто подскажет где ковырять мажорку? Железо имеется разное, от микрофонов до усилителей, есть модули WI-FI, и порты ввода вывода на 16 входов выходов. Имеются электронные ключи нч сигналов.
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: FAQ ESP8266
Ковыряйте команду say. Можете, к примеру, глянуть на SayReply, там есть пример ответа на терминалы, примерно так же придётся переписать say, только не с терминалами а с вашими релюшками уже.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- samolet
- Сообщения: 472
- Зарегистрирован: Чт июн 29, 2017 10:29 am
- Благодарил (а): 46 раз
- Поблагодарили: 45 раз
Re: FAQ ESP8266
как реализую(если) то отпишу что получилось, а пока впереди пайка мукрух управления потоками нч.
-
- Сообщения: 37
- Зарегистрирован: Вс фев 25, 2018 1:50 pm
- Благодарил (а): 5 раз
- Поблагодарили: 2 раза
Re: FAQ ESP8266
Здравствуйте форумчане, имею несколько esp8266 для управления светом по схеме esp8266-MQQT-major. Прошивку заливал через Ардуино IDE, в программировании не особо силен, поэтому использовал готовые примеры измененные под свои условия. Для физического переключения света используется кнопочный выключатель, в мажоре объекты реле. Но в процессе эксплуатации Мажор частенько теряет связь с ЕСП - такое ощущение, что контроллер просто подвисает, но сама прошивка ЕСП работает и нормально включает и выключает свет через физическую кнопку. Помогает перезагрузка ЕСП. ЕСП у меня nodemcu lua 8266, в качестве сервера Ноутбук с виндой, с раздачей Вай фай проблем нет, код прилагаю. Подскажите, как сделать так, чтобы контроллеры работали стабильно и в случае потери связи или подвисания самостоятельно смогли восстановить связь. Заранее благодарен за дельные советы.
Код: Выделить всё
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "Lavrova"; //Название WIFI
const char* password = "30041988l"; //пароль WIFI
const char* mqtt_server = "192.168.100.2"; //адрес брокера MQTT
const char* host = "esp8266-webupdate2";
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>";
#define ESPClient "ESP12345678" //имя MQTT клиента, должно быть уникальным
#define RELAY_5 14 //Выход на реле или светодиод
#define BUTTON_5 4 //Кнопка
#define relays_topic_5 "kuhnya/relay_5" //публикуемый топик
#define RELAY_6 16 //Выход на реле или светодиод
#define BUTTON_6 5 //Кнопка
#define relays_topic_6 "kuhnya/relay_6" //публикуемый топик
#define RELAY_7 12 //Выход на реле или светодиод
#define BUTTON_7 13 //Кнопка
#define relays_topic_7 "kuhnya/relay_7" //публикуемый топик
#define RELAY_8 2 //Выход на реле или светодиод
#define BUTTON_8 3 //Кнопка
#define relays_topic_8 "kuhnya/relay_8" //публикуемый топик
ESP8266WebServer server(80); //инициализация веб сервера на 80 порту
WiFiClient espClient; //инициализация WiFi клиента
PubSubClient client(espClient); //инициализация MQTT клиента
/* переменные времени*/
long last_mls = millis(); //функция времени для проверки подключения
long last_mls2 = millis(); //функция времени для отправки топиков
/*реле*/
boolean Status_5 = false; //объявляем статус реле в 0
boolean btnPress_5 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat_5 = false;
boolean Status_6 = false; //объявляем статус реле в 0
boolean btnPress_6 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat_6 = false;
boolean Status_7 = false; //объявляем статус реле в 0
boolean btnPress_7 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat_7 = false;
boolean Status_8 = false; //объявляем статус реле в 0
boolean btnPress_8 = false; //объявляем что кнопка не нажата 0
boolean lastbtnStat_8 = false;
int regim_5 = 0;
int regim_6 = 0;
int regim_7 = 0;
int regim_8 = 0;
/*разовый цикл*/
void setup() {
pinMode(RELAY_5, OUTPUT); //Выход на реле или светодиод
pinMode(BUTTON_5, INPUT); //Кнопка
digitalWrite(RELAY_5, Status_5); //устанавливаем на выходе статус реле
pinMode(RELAY_6, OUTPUT); //Выход на реле или светодиод
pinMode(BUTTON_6, INPUT); //Кнопка
digitalWrite(RELAY_6, Status_6); //устанавливаем на выходе статус реле
pinMode(RELAY_7, OUTPUT); //Выход на реле или светодиод
pinMode(BUTTON_7, INPUT); //Кнопка
digitalWrite(RELAY_7, Status_7); //устанавливаем на выходе статус реле
pinMode(RELAY_8, OUTPUT); //Выход на реле или светодиод
pinMode(BUTTON_8, INPUT); //Кнопка
digitalWrite(RELAY_8, Status_8); //устанавливаем на выходе статус реле
Serial.begin(115200); //инициализация монитора порта
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100); //ждем 100 милисекунд
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(5000); //ждем 5 секунд
Serial.println("WiFi");
client.connect(ESPClient); //конектимся с брокером как клиент
client.subscribe(relays_topic_5); //подписываемся на топик
client.subscribe(relays_topic_6); //подписываемся на топик
client.subscribe(relays_topic_7); //подписываемся на топик
client.subscribe(relays_topic_8); //подписываемся на топик
/*прошивка по воздуху*/
if (WiFi.waitForConnectResult() == WL_CONNECTED) {
MDNS.begin(host);
Serial.println("WiFi start");
server.on("/", HTTP_GET, []() {
server.sendHeader("Connection", "close");
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, "text/html", serverIndex);
});
server.on("/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
}, []() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
Serial.setDebugOutput(true);
WiFiUDP::stopAll();
Serial.printf("Update: %s\n", upload.filename.c_str());
uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
if (!Update.begin(maxSketchSpace)) { //start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
}
Serial.setDebugOutput(false);
}
yield();
});
server.begin();
MDNS.addService("http", "tcp", 80);
Serial.printf("Ready! Open http://%s.local in your browser\n", host);
} else {
Serial.println("WiFi Failed");
}
}
/*чтение топиков MQTT*/
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived ["); //
Serial.print(topic); //чисто для отладки и контроля приходящих топиков пишем в монитор порта че получили
Serial.print(" "); //
String strTopic = String(topic); //конвертируем в стринг полученый топик
String strPayload = String((char*)payload); //конвертируем в стринг полученные данные с топика
for (int i = 0; i < length; i++) { //конвертируем полученые значения топика в целые числа
Serial.print((char)payload[i]); //для отладки пишем в монитор порта полученные значения с топика
}
Serial.println();
if (strTopic == relays_topic_5) { //если получили с нужного топика
if ((char)payload[0] == '0') { //если полученное значение 0
Status_5 = false; //статус выключено
regim_5 = 0; //переключаем режим в выключено
}
else if ((char)payload[0] == '1') { //если получена 1
Status_5 = true; //статус включено
regim_5 = 1; //режим включено
}
}
if (strTopic == relays_topic_6) { //если получили с нужного топика
if ((char)payload[0] == '0') { //если полученное значение 0
Status_6 = false; //статус выключено
regim_6 = 0; //переключаем режим в выключено
}
else if ((char)payload[0] == '1') { //если получена 1
Status_6 = true; //статус включено
regim_6 = 1; //режим включено
}
}
if (strTopic == relays_topic_7) { //если получили с нужного топика
if ((char)payload[0] == '0') { //если полученное значение 0
Status_7 = false; //статус выключено
regim_7 = 0; //переключаем режим в выключено
}
else if ((char)payload[0] == '1') { //если получена 1
Status_7 = true; //статус включено
regim_7 = 1; //режим включено
}
}
if (strTopic == relays_topic_8) { //если получили с нужного топика
if ((char)payload[0] == '0') { //если полученное значение 0
Status_8 = false; //статус выключено
regim_8 = 0; //переключаем режим в выключено
}
else if ((char)payload[0] == '1') { //если получена 1
Status_8 = true; //статус включено
regim_8 = 1; //режим включено
}
}
}
/*кнопка 1*/
/*кнопка 4*/
void button5() {
btnPress_5 = digitalRead(BUTTON_5);
Status_5 = digitalRead(RELAY_5);
if (btnPress_5 == LOW && lastbtnStat_5 == false) {
delay(30);
regim_5++;
lastbtnStat_5 = true;
if (regim_5 > 1) {
regim_5 = 0;
}
}
if (btnPress_5 == HIGH && lastbtnStat_5 == true) {
lastbtnStat_5 = false;
client.publish(relays_topic_5, String(regim_5).c_str());
}
if (regim_5 == 0) {
Status_5 = false;
digitalWrite(RELAY_5, Status_5);
}
if (regim_5 == 1) {
Status_5 = true;
digitalWrite(RELAY_5, Status_5);
}
}
/*кнопка 5*/
void button6() {
btnPress_6 = digitalRead(BUTTON_6);
Status_6 = digitalRead(RELAY_6);
if (btnPress_6 == LOW && lastbtnStat_6 == false) {
delay(30);
regim_6++;
lastbtnStat_6 = true;
if (regim_6 > 1) {
regim_6 = 0;
}
}
if (btnPress_6 == HIGH && lastbtnStat_6 == true) {
lastbtnStat_6 = false;
client.publish(relays_topic_6, String(regim_6).c_str());
}
if (regim_6 == 0) {
Status_6 = false;
digitalWrite(RELAY_6, Status_6);
}
if (regim_6 == 1) {
Status_6 = true;
digitalWrite(RELAY_6, Status_6);
}
}
/*кнопка 5*/
void button7() {
btnPress_7 = digitalRead(BUTTON_7);
Status_7 = digitalRead(RELAY_7);
if (btnPress_7 == LOW && lastbtnStat_7 == false) {
delay(30);
regim_7++;
lastbtnStat_7 = true;
if (regim_7 > 1) {
regim_7 = 0;
}
}
if (btnPress_7 == HIGH && lastbtnStat_7 == true) {
lastbtnStat_7 = false;
client.publish(relays_topic_7, String(regim_7).c_str());
}
if (regim_7 == 0) {
Status_7 = false;
digitalWrite(RELAY_7, Status_7);
}
if (regim_7 == 1) {
Status_7 = true;
digitalWrite(RELAY_7, Status_7);
}
}
/*кнопка 5*/
void button8() {
btnPress_8 = digitalRead(BUTTON_8);
Status_8 = digitalRead(RELAY_8);
if (btnPress_8 == LOW && lastbtnStat_8 == false) {
delay(30);
regim_8++;
lastbtnStat_8 = true;
if (regim_8 > 1) {
regim_8 = 0;
}
}
if (btnPress_8 == HIGH && lastbtnStat_8 == true) {
lastbtnStat_8 = false;
client.publish(relays_topic_8, String(regim_8).c_str());
}
if (regim_8 == 0) {
Status_8 = false;
digitalWrite(RELAY_8, Status_8);
}
if (regim_8 == 1) {
Status_8 = true;
digitalWrite(RELAY_8, Status_8);
}
}
/*проверка подключений*/
void reconnect_server() {
if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
{
WiFi.begin(ssid, password); //подключаемся по имени сети и паролю
Serial.println("");
Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
} else { //если подключены
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //выводим в монитор порта текущий ip
}
if (!client.connected() && WiFi.status() == WL_CONNECTED) { //если к сети подключились но к MQTT нет
if (client.connect(ESPClient)) {
client.subscribe(relays_topic_5);
client.subscribe(relays_topic_6);//подписываемся на топик
client.subscribe(relays_topic_7);//подписываемся на топик
client.subscribe(relays_topic_8);//подписываемся на топик
Serial.println("Mosquitto connect..."); //выводим в монитор порта что пытаемся подключиться
} else //если не получилось
{
Serial.print("failed connect Mosquitto, rc=");
Serial.print(client.state());
Serial.println("");
}
}
}
/*основной цикл*/
void loop() {
client.loop();
button5();
button6();
button7();
button8();
if (millis() - last_mls > 15000) //проверка подключений раз в 15 сек
{
last_mls = millis();
reconnect_server();
}
server.handleClient();
delay(50); //защита от помех электросети, без нее свет живет своей жизнью
}
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: FAQ ESP8266
Ну во первых странно вы делаете)) и millis используете и delay...обычно либо то либо другое...
Во вторых - подробности то где? Подробностей хотим)) На чем МД? на чем москит? какая версия? Что в сериал порте пишет на момент отсутствия связи?
Во вторых - подробности то где? Подробностей хотим)) На чем МД? на чем москит? какая версия? Что в сериал порте пишет на момент отсутствия связи?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 37
- Зарегистрирован: Вс фев 25, 2018 1:50 pm
- Благодарил (а): 5 раз
- Поблагодарили: 2 раза
Re: FAQ ESP8266
Нууу.....миллис и делэй использует парень с ютуба) МД на Windows 7, москит запускается службой там же, в сериале я ничего не пишу, просто вижу, что МД ника не реагирует на отдельную плату. Плюс по сети нет связи с платой. Не могу к ней подключиться для загрузки БИН файлаnick7zmail писал(а): ↑Ср авг 01, 2018 4:00 pmНу во первых странно вы делаете)) и millis используете и delay...обычно либо то либо другое...
Во вторых - подробности то где? Подробностей хотим)) На чем МД? на чем москит? какая версия? Что в сериал порте пишет на момент отсутствия связи?
-
- Сообщения: 530
- Зарегистрирован: Чт авг 20, 2015 11:32 am
- Откуда: Ярославль
- Благодарил (а): 61 раз
- Поблагодарили: 75 раз
- Контактная информация:
Re: FAQ ESP8266
парень с ютуба)karapus писал(а): ↑Ср авг 01, 2018 4:24 pmНууу.....миллис и делэй использует парень с ютуба) МД на Windows 7, москит запускается службой там же, в сериале я ничего не пишу, просто вижу, что МД ника не реагирует на отдельную плату. Плюс по сети нет связи с платой. Не могу к ней подключиться для загрузки БИН файлаnick7zmail писал(а): ↑Ср авг 01, 2018 4:00 pmНу во первых странно вы делаете)) и millis используете и delay...обычно либо то либо другое...
Во вторых - подробности то где? Подробностей хотим)) На чем МД? на чем москит? какая версия? Что в сериал порте пишет на момент отсутствия связи?
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: FAQ ESP8266
Как это в порте ничего нет? У вас в каждой второй функции вывод в сериал.
Вопрос что именно пишет в момент отсутствия связи.
А, ну если парень с ютуба - то нет вопросов... =D
Код: Выделить всё
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //выводим в монитор порта текущий ip
А, ну если парень с ютуба - то нет вопросов... =D
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<