#1 2016-09-11 09:51:24

Eugenius
Учасник
Зареєстрований: 2016-09-11
Повідомлень: 5

Esp8266+Sensors+Batery

Привет коллеги,
У меня NodeMCU V2 ESP8266 используется для опроса датчиков HTU21, BH1750, BMP085 раз в час и отправки данных GET запросом ко мне в базу данных в интернете.
Сейчас пытаюсь запитать модуль от 4-рех батареек ААА и столкнулся с тем что модуль не засыпает полностью, а продолжает давать питание на датчики.

Для глубокого сна использую команду ESP.deepSleep(3600000000, WAKE_RF_DEFAULT);
Пожалуйста, поделитесь опытом.
Спасибо.

На всякий случай покажу вам весь код скетча:

#include <ESP8266WiFi.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"
#include <BH1750.h> // Sensor Library
#include <Adafruit_BMP085.h>
 
 
// прописываем параметры нашего WiFi
const char* ssid     = "109";
const char* password = "***";
 
// прописываем домен на который шлем данные
const char* host = "***";
 
// указываем ID нашего устройства
const char* sensorid   = "2";
 
// Создаем экземпляр объекта
HTU21D myHumidity;          // HTU21
 
BH1750 lightMeter;          // lightMeter BH1750, Wide range and High resolution. ( 1 - 65535 lx )
 
Adafruit_BMP085 bmp;
 
void setup()
{
    Serial.begin(115200);
  delay(10);
 
  // We start by connecting to a WiFi network
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  // подключаемся к сети WiFi
  WiFi.begin(ssid, password);
 
  // если подключение не произошло - пробуем через 0,5 секунд
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
 
    // you're connected now, so print out the status:
  printWifiStatus();
 
  myHumidity.begin();
  lightMeter.begin();
  bmp.begin();
 
 
}
 
void loop()
{
  Serial.print("connecting to ");
  Serial.println(host);
 
  // Создаем интернет соединение с нашим сервером
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
 
  // Если соединения не происходит, начинаем заново
  if (!client.connect(host, httpPort))
  {
    Serial.println("connection failed");
    return;
  }
 
  // Опрашиваем датчик
  float humd = myHumidity.readHumidity();
  float temp = myHumidity.readTemperature();
  int lux = lightMeter.readLightLevel();
  float temp2 = bmp.readTemperature();
  float pressure = bmp.readPressure();
 
 
  // Создаем URI нашего запроса на сервере
  String url = "/sensordatas/adddata";
 
  url += "?sensorid=";
  url += sensorid;
  url += "&temp=";
  url += temp;
  url += "&hum=";
  url += humd;
  url += "&temp2=";
  url += temp2;
  url += "&pressure=";
  url += pressure;
  url += "&lux=";
  url += lux;
 
 
  Serial.print("Requesting URL: ");
  Serial.println(url);
 
  // Отправляем этот GET запрос на сервер
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
 
  // Фиксируем количество миллисекунд, прошедших с момента старта программы
  unsigned long timeout = millis();
  // Ждем пока количество байт, принятых клиентом от удаленного сервера, с которым установлено соединение не станет равным 0
  while (client.available() == 0)
  {
    // если ожидание длится дольше 5 секунд - начинаем сначала
    if (millis() - timeout > 5000)
    {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
 
  // Считываем все строки полученные в ответе с сервера и выводим их в Serial
  while(client.available())
  {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
  Serial.println();
  Serial.println("closing connection");
 
  // подключаемся к сети WiFi
  WiFi.disconnect();
 
  ESP.deepSleep(3600000000);
}
 
void printWifiStatus()
{
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
 
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
 
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Неактивний

#2 2016-09-11 09:57:21

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Esp8266+Sensors+Batery

Перемычка для режима deep sleep установлена (RST<-> GPIO16)?

Неактивний

#3 2016-09-11 10:06:30

Eugenius
Учасник
Зареєстрований: 2016-09-11
Повідомлень: 5

Re: Esp8266+Sensors+Batery

да, данные передаются раз в период, как и должно быть.
(RST <==> PIN0 (GPIO16))

Остання редакція Eugenius (2016-09-11 10:09:50)

Неактивний

#4 2016-09-11 11:20:50

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Esp8266+Sensors+Batery

Если честно то я не пойму сути, причем здесь модуль к питанию датчиков? У Вас все датчики I2C правильно? Все они имеют кроме шин SCL и SDA питание GND и VDD, вопрос причем здесь ESP8266? Как по Вашему он должен управлять питанием этих датчиков?

Неактивний

#5 2016-09-11 18:30:49

Eugenius
Учасник
Зареєстрований: 2016-09-11
Повідомлень: 5

Re: Esp8266+Sensors+Batery

Nefreemen пише:

Если честно то я не пойму сути, причем здесь модуль к питанию датчиков? У Вас все датчики I2C правильно? Все они имеют кроме шин SCL и SDA питание GND и VDD, вопрос причем здесь ESP8266? Как по Вашему он должен управлять питанием этих датчиков?

Ну питание датчиков идет через модуль.
Насколько я понимаю когда модуль "засыпает" и переходит в режим пониженного энергопотребления, то и датчики которые питаются через него тоже должны "засыпать"?
Возможно их (датчики) можно как-то отключать программно перед "засыпанием" модуля?
Спасибо.

Неактивний

#6 2016-09-11 19:43:45

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Esp8266+Sensors+Batery

Что значит идет через модуль? То что Вы берете питание с платы NodeMCU, совершенно не значит что ESP модуль управляет стабилизатором 3.3В припаянным на плате (как может он обрубить сук на котором сидит  big_smile, это так лирика ). А в общем режим deep sleep относится только к энергопотреблению самого модуля (маленькой платки) и не более, все остальное (как уменьшить потребление энергии датчиками) Ваша проблема. Поставьте К-моп полевик как ключ на какой то GPIO и управляйте питанием периферии на здоровье smile .

Неактивний

#7 2016-09-11 20:02:28

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Esp8266+Sensors+Batery

Да забыл. NodeMCU не совсем удачное решение уменьшения энергопотребления, поскольку есть еще один потребитель CH340, который Вы никак не "отключите" не перерезав дорожку. Используйте "голый" модуль ESP.

Неактивний

#8 2016-09-11 20:49:17

Eugenius
Учасник
Зареєстрований: 2016-09-11
Повідомлень: 5

Re: Esp8266+Sensors+Batery

Спасибо, вы прямо глаза открыли smile

Как вы поняли я не сильно в теме, мне нужен полевой транзистор?
я нашел такой:
http://arduino-ua.com/prod622-Silovoi_p … or_IRF540N

Если можно, киньте ссылку на то что мне нужно, пожалуйста smile

Неактивний

#9 2016-09-11 21:33:07

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Esp8266+Sensors+Batery

Ну IRF540 конечно можно, но на мой взгляд слишком "жирно", можно что то поскромнее подобрать, ток порядка 0.1А но главное минимальное сопротивление в открытом состоянии, к сожалению у меня нет особо времени лопатить справочники по полевикам.  Уйму схем найдете в гугле по словам управление реле полевиком , ключ на полевике и т.д.

Неактивний

#10 2016-09-12 09:30:54

Eugenius
Учасник
Зареєстрований: 2016-09-11
Повідомлень: 5

Re: Esp8266+Sensors+Batery

Спасибо, вы очень помогли.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму