• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Режимы сна.

stasnam

New member
День добрый.
Озадачился режимами сна.
Нашел вот так такое
Arduino/libraries.md at master · esp8266/Arduino · GitHub

GRIO16 соединен с RST

Скетч
Код:
#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);
  Serial.println("\n-- START --");
}

void loop() {
  Serial.println(ESP.getResetReason());
  ESP.deepSleep(5000000, WAKE_RF_DEFAULT);
  Serial.println("-- after sleep --");
}
В итоге, каждые 5 секунд резет по "Deep-Sleep Wake"

Вопрос: как с этим бороться и где можно посмотреть примеры по режимам сна при программировании через Arduino IDE?
 

stasnam

New member
"Пошуршал по интернету". Действительно при deepSleep происходит резет.
Попутно нашел вариант, когда просто отключают WiFi. Пишут, что без WiFi потребление 15mA.
Сколько кушает при deepSleep?
 

dzanis

New member
Читал,что deepsleep кушает меньше миллиампера.А это несколько месяцев работы от двх последовательных АА батареек.Но у меня не получилось ,припаял 16 на reset и вместо сна получаю мусор в консоль и быстрое моргание синего светодиода.Что это может быть?
Код:
/*
Создал Zanis Dukalskis
01.05.2016
Скетч отправки данных на сайт мониторинг http://narodmon.ru
При помощи сенсора температуры и давления BMP180.
Из скетча регистрационные данные не требуется отправлять,т.к. после регистрации сервер определяет по IP.
Подробно о передаче данных http://narodmon.ru/#!proto
Необходимые библиотеки:
Adafruit_BMP085.h - https://github.com/adafruit/Adafruit-BMP085-Library
Wire.h  - http://www.pjrc.com/teensy/td_libs_OneWire.html
*/
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>

//WIFI точка к которой подключается ESP8266  вписать свою
const char* WIFI_SSID     = "****"; // your-ssid // название вашего беспроводного интернета
const char* WIFI_PASSWORD = "****"; // your-password // пароль

// *** Для narodmon.ru  сокета ***
const char* IP_ADDRESS = "narodmon.ru";
const int PORT = 8283;
// *******************************
// *** Данные, необходимые для передачи на narodmon.ru
const char* ID = "18-FE-34-A2-43-C1"; // your-mac // MAC - серийный номер ESP8266 (обязательно передавать)
//MAC можно узнать через WEB страницу рутера вашей WIFI сети или через Flasher NODEMCU https://github.com/nodemcu/nodemcu-flasher (в поле STA MAC)
const char* NAME = "ESP8266"; // Название устройства мониторинга (не обязательно передавать)
// *******************************
// *** Данные одного датчика ***
const char* mac1 = "T1"; // Уникальные серийные номер датчика подключенного к устройству (обязательно передавать)
// T - означает что температурный, 1 порядковый номер .Если датчиков несколько можно отсылать серийный номер в виде T1-XX-XX.. (где XX-XX.. серийный номер датчика)
const char*  name1 = "BMP180_Temperature"; // Название датчика (не обязательно передавать)
// *******************************
// *** Данные второго датчика ***
const char* mac2 = "P1"; // Уникальные серийные номер датчика подключенного к устройству (обязательно передавать)
// T - означает что температурный, 1 порядковый номер .Если датчиков несколько можно отсылать серийный номер в виде T1-XX-XX.. (где XX-XX.. серийный номер датчика)
const char*  name2 = "BMP180_Pressure"; // Название датчика (не обязательно передавать)
// *******************************
const int DELAY = 300000; // отправка данных через каждые 5 минут (1000 ms * 300sec = 300000ms = 5min)
// сервер блокирует данные чаше чем раз в 5-ть минут - TOO OFTEN

const int ONE_WIRE_BUS = 2;  //[DATA] контакт от датчика DS18B20 подключать на GPIO2


// инициализация
Adafruit_BMP085 bmp;

void wifiConnect() //подключение к WIFI
{
  Serial.print("Connecting to WIFI");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
}

void sending(float temp,int pressure)// отправка данных температуры
{
  WiFiClient client;
  while (!client.connect(IP_ADDRESS, PORT)) {   //подключаемся к сокету
    Serial.println("connection failed");
    wifiConnect();
  }
  client.print( // отправляем
    String("#") + ID + "#" + NAME + "\n" + //MAC и название устройства
    "#" + mac1 + "#" + temp + "#" + name1 + "\n" + //пишем в сокет сформированные данные для одного датчика
    "#" + mac2 + "#" + pressure + "#" + name2 + "\n" + //пишем в сокет сформированные данные для второго датчика
    "##" // конец передачи
  );
  Serial.print("Data send\n");
  delay(100);
  // читаем ответ,получаем OK если всё хорошо :)
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println();
  Serial.println("Connection closed");
}



void setup() {
  Serial.begin(9600);
  Wire.begin(0,2); //Wire.begin(sda,scl);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
  wifiConnect();

  // не работает
  //ESP.deepSleep(1000000 * 60 * 5);//глубокий сон 5 минут  (что-бы работало нужно закоротить GPIO16 на RESET)
}

void loop() {// получение показаний температуры в бесконечном цикле

  sending(bmp.readTemperature(),bmp.readPressure());
  delay(DELAY);

}
 
Последнее редактирование:

dsotm133

New member
Вручную только.Убрать строку ESP.deepSleep и перезалить скетч.
В первоначальном варианте был именно так. Без ESP.deepSleep.
Через какое-то время модуль самопроизвольно отключается от wifi и перестает мигать Блинком... Грешил сначала на питание. И кондер повесил на 3300мкф и керамику и резисторы на GPIO0, GPIO2, CH_PD, RESET на 10кОм. Стал рабтать чуть дольше. Потом снова вис.
Стал грешить на сон. Раз дело не в нем то буду дальше разбираться с питанием и подключением. Какова вероятность что это брак китайского модуля?
 

dzanis

New member
@dsotm133 Только если сравнить работу с другим модулем .У меня ESP 01 тоже бывало отключался от сети.Потом подключался самопроизвольно.От чего это зависело,незнаю.Код скетча выше.
 
Сверху Снизу