alexlaw
Member
Здравствуйте.
Сегодня сделал термометр на
esp8266-01 и термодатчика DS18B20.
Валялся старый аккумулятор от телефона - приспособил для питания.
Собственно вопрос.
У кого есть какой то опыт для питания ESP от батареи - поделитесь опытом.
Я думаю долго батарея не протянет.
Сегодня сделал термометр на
esp8266-01 и термодатчика DS18B20.
Валялся старый аккумулятор от телефона - приспособил для питания.
Собственно вопрос.
У кого есть какой то опыт для питания ESP от батареи - поделитесь опытом.
Я думаю долго батарея не протянет.
КЛИЕНТ
СЕРВЕР
Код:
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
String line;
const char* ssid = " ";
const char* password = " ";
const char* host = "192.168.4.1";
byte tries = 16;
void setup() {
line="";
lcd.begin(1,3); // sda, scl
lcd.backlight();
lcd.clear();
lcd.clear();
lcd.print ("1-TX-SDA");
lcd.setCursor(0, 1);
lcd.print ("3-RX-SCL");
delay(1000);
lcd.clear();
lcd.clear();
lcd.print ("Connecting to ");
lcd.setCursor(0, 1);
lcd.print (ssid);
delay(1000);
lcd.setCursor(0, 1);
lcd.print (" ");
WiFi.begin(ssid, password);
String s="";
while (--tries && WiFi.status() != WL_CONNECTED)
{
s=s+".";
lcd.print (s);
delay(1000);
}
if (WiFi.status() != WL_CONNECTED)
{
lcd.clear();
lcd.clear();
lcd.print ("ESP restart");
delay(2000);
ESP.restart();
}
else {
lcd.clear();
lcd.clear();
lcd.print ("WiFi connected");
lcd.setCursor(0, 1);
lcd.print ("IP: ");
lcd.print (WiFi.localIP());
delay(1000);
}
}
int value = 0;
void loop() {
delay(5000);
lcd.clear();
lcd.clear();
lcd.print ("connecting to ");
lcd.setCursor(0, 1);
lcd.print (host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host , httpPort)) {
lcd.clear();
lcd.clear();
lcd.print ("connect failed");
value = 0;
return;
}
if (value==5) {
value = 0;
String url = "/";
url += "sleep";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
client.stop();
lcd.clear();
lcd.clear();
lcd.print (line);
lcd.setCursor(0, 1);
lcd.print ("server sleep ");
// delay(60000);//1 min
delay(1000);
unsigned long time1 = millis();
unsigned long time2 = millis() - time1;
while (time2 < 301000){
//lcd.print (" ");
lcd.setCursor(13, 1);
lcd.print (" ");
lcd.setCursor(13, 1);
lcd.print (301-time2/1000);
time2 = millis() - time1;
delay(1000);
}
// return;
ESP.restart();
}
String url = "/";
url += "";
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
lcd.clear();
lcd.clear();
lcd.print ("Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
line = client.readStringUntil('\r');
lcd.clear();
lcd.clear();
lcd.print (line);
}
lcd.setCursor(0, 1);
lcd.print ("close connect");
value++;
}[/SPOILER]
Код:
void WIFIinit() {
// Отключаем WIFI
WiFi.disconnect();
// Меняем режим на режим точки доступа
WiFi.mode(WIFI_AP);
// Задаем настройки сети
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
// Включаем WIFI в режиме точки доступа с именем и паролем
// хронящихся в переменных _ssidAP _passwordAP
WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
//return true;
}
Код:
void HTTP_init(void) {
HTTP.onNotFound(handleNotFound); // Сообщение если нет страницы.
HTTP.on("/", handleRoot); // Главная страница
HTTP.on("/restart", handle_Restart); // Перезагрузка модуля по запросу
HTTP.on("/sleep", handle_Sleep);
// Запускаем HTTP сервер
HTTP.begin();
}
// Ответ если страница не найдена
void handleNotFound(){
String message = "File Not Found\n\n";
message += "URI: ";
message += HTTP.uri();
message += "\nMethod: ";
message += (HTTP.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += HTTP.args();
message += "\n";
for (uint8_t i=0; i<HTTP.args(); i++){
message += " " + HTTP.argName(i) + ": " + HTTP.arg(i) + "\n";
}
HTTP.send(404, "text/plain", message);
}
// Ответ при обращении к основной странице
void handleRoot() {
DS18B20.requestTemperatures(); // Запрос на считывание температуры
String message = "Temp = ";
message += DS18B20.getTempCByIndex(0);
message += " *C";
HTTP.send(200, "text/plain", message);
}
// Перезагрузка модуля по запросу вида http://192.168.1.121/restart?device=ok
void handle_Restart() {
String restart = HTTP.arg("device");
if (restart == "ok") ESP.restart();
HTTP.send(200, "text/plain", "OK");
}
void handle_Sleep() {
digitalWrite( setpin, 0 );
//1,000,000=1 second
ESP.deepSleep(300e6); //5 min
}
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
int setpin=0;
IPAddress apIP(192, 168, 4, 1);
// Web интерфейс для устройства
ESP8266WebServer HTTP(80);
// Определяем переменные wifi
String _ssid = ""; // Для хранения SSID
String _password = " "; // Для хранения пароля сети
String _ssidAP = " "; // SSID AP точки доступа
String _passwordAP = " "; // пароль точки доступа
#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена датчик
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
void setup() {
pinMode(setpin, OUTPUT);
Serial.begin(115200);
delay(10); // Пауза 10 мкс
DS18B20.begin(); // Инициализация DS18B20
Serial.println("");
Serial.println("Start 1-WIFI");
//Запускаем WIFI
WIFIinit();
//Настраиваем и запускаем HTTP интерфейс
Serial.println("Start 2-WebServer");
HTTP_init();
}
void loop() {
HTTP.handleClient();
delay(1);
}
Вложения
-
215.9 KB Просмотры: 80
-
375.1 KB Просмотры: 59
Последнее редактирование: