Ви не увійшли.
Сторінки 1
Привет коллеги,
У меня 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");
}
Неактивний
Если честно то я не пойму сути, причем здесь модуль к питанию датчиков? У Вас все датчики I2C правильно? Все они имеют кроме шин SCL и SDA питание GND и VDD, вопрос причем здесь ESP8266? Как по Вашему он должен управлять питанием этих датчиков?
Неактивний
Если честно то я не пойму сути, причем здесь модуль к питанию датчиков? У Вас все датчики I2C правильно? Все они имеют кроме шин SCL и SDA питание GND и VDD, вопрос причем здесь ESP8266? Как по Вашему он должен управлять питанием этих датчиков?
Ну питание датчиков идет через модуль.
Насколько я понимаю когда модуль "засыпает" и переходит в режим пониженного энергопотребления, то и датчики которые питаются через него тоже должны "засыпать"?
Возможно их (датчики) можно как-то отключать программно перед "засыпанием" модуля?
Спасибо.
Неактивний
Что значит идет через модуль? То что Вы берете питание с платы NodeMCU, совершенно не значит что ESP модуль управляет стабилизатором 3.3В припаянным на плате (как может он обрубить сук на котором сидит , это так лирика ). А в общем режим deep sleep относится только к энергопотреблению самого модуля (маленькой платки) и не более, все остальное (как уменьшить потребление энергии датчиками) Ваша проблема. Поставьте К-моп полевик как ключ на какой то GPIO и управляйте питанием периферии на здоровье .
Неактивний
Да забыл. NodeMCU не совсем удачное решение уменьшения энергопотребления, поскольку есть еще один потребитель CH340, который Вы никак не "отключите" не перерезав дорожку. Используйте "голый" модуль ESP.
Неактивний
Спасибо, вы прямо глаза открыли
Как вы поняли я не сильно в теме, мне нужен полевой транзистор?
я нашел такой:
http://arduino-ua.com/prod622-Silovoi_p … or_IRF540N
Если можно, киньте ссылку на то что мне нужно, пожалуйста
Неактивний
Ну IRF540 конечно можно, но на мой взгляд слишком "жирно", можно что то поскромнее подобрать, ток порядка 0.1А но главное минимальное сопротивление в открытом состоянии, к сожалению у меня нет особо времени лопатить справочники по полевикам. Уйму схем найдете в гугле по словам управление реле полевиком , ключ на полевике и т.д.
Неактивний
Сторінки 1