Сделать сброс есп, послать ей данные на сом порт, просто удобней, например перенос по строкам, видны спец. символы.так а зачем доп прога была нужна?
Когда ардуино иде занято заливкой по ОТА, просмотр лога, через СОМ порт.
Сделать сброс есп, послать ей данные на сом порт, просто удобней, например перенос по строкам, видны спец. символы.так а зачем доп прога была нужна?
А что конкретно то добавить? я и так уже, вроде, удалил всё лишнее, оставил только еепром, и чтение датчика....Дальше все проще добавляете нужную строку, если надо добавляете вывод используемых переменных и смотрите работает ли.
#include <OneWire.h>
#include <Wire.h>
//датчик температуры пола DS18B20
#define DS D6 //объявляем пин датчика температуры пола DS18B20 как GPIO 12 (D6)
OneWire ds1(DS);
float tempPol = 99.0; // Текущие показания от датчика теплого пола ds18b20
// датчик влажн почвы
#define SENS_HUM A0 //объявляем пин датчика влажн почвы как GPIO 17 (A0)
#define But_Min D7 //Виртуальная кнопка колибровки Min значения влажности почвы
#define But_Max D8 //Виртуальная кнопка колибровки Max значения влажности почвы
// датчик влажн почвы
int32_t humIn; // Читаем показания датчика влажности почвы Аналоговый вход
int32_t humOut; // Оброботанные показания от датчика влажности почвы 0-100%
float MIN_SENS = 480; // Калибровка 0%
float MAX_SENS = 210; // Калибровка 100%
////////////////////////EEPROM//////////////////////////////////////////////////////////
#include <EEPROM.h>
//#include "EEPROMAnything.h"
void setupAddrEEPROM(){
EEPROM.begin(8);
//EEPROM_readAnything(0, MIN_SENS);
//EEPROM_readAnything(4, MAX_SENS);
EEPROM.get(0, MIN_SENS);
EEPROM.get(4, MAX_SENS);
EEPROM.end();
}
////////////////////////EEPROM-END//////////////////////////////////////////////////////
void sendSensor()
{
byte data1[2];
ds1.reset();
ds1.write(0xCC);
ds1.write(0x44);
// Читаем данные с ds18b20
ds1.reset();
ds1.write(0xCC);
ds1.write(0xBE);
data1[0] = ds1.read();
data1[1] = ds1.read();
tempPol = ((data1[1] << 8) | data1[0]) * 0.0625;
// Выводим показания в монитор порта
Serial.print("tempPol:");
Serial.println(tempPol);
// Читаем показания датчика влажности почвы
humIn = analogRead(SENS_HUM);
// Обрабатываем показания и представляем в виде от 0 до 100
humOut = map(humIn, int32_t(MIN_SENS), int32_t(MAX_SENS), 0, 100);
//humOut = map(humIn, 480, 210, 0, 100);
// Выводим показания в монитор порта
Serial.print("humIn:");
Serial.println(humIn);
Serial.print("MIN_SENS:");
Serial.println(MIN_SENS);
Serial.print("MAX_SENS:");
Serial.println(MAX_SENS);
Serial.print("humOut:");
Serial.println(humOut);
}
void setup()
{
// Debug console
Serial.begin(9600);
// Загружаем данные из EEPROM
setupAddrEEPROM();
delay(1000);
// Инициализация PIN-ов Arduino
pinMode(SENS_HUM, INPUT);
delay(50);
// Инициализация датчика OneWire для DS18B20
Wire.begin();
delay(50);
}
void loop()
{
if( digitalRead(But_Min) == HIGH )
{
EEPROM.begin(8);
//EEPROM_writeAnything(0, MIN_SENS);
EEPROM.put(0, MIN_SENS);
EEPROM.end();
delay(50);
}
if( digitalRead(But_Max) == HIGH )
{
EEPROM.begin(8);
//EEPROM_writeAnything(4, MAX_SENS);
EEPROM.put(4, MAX_SENS);
EEPROM.end();
delay(50);
}
sendSensor();
}
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <Wire.h>
// период чтения датчиков не менее 2сек(2000UL)
//#define READ_DATA 2000UL
//uint32_t ms; // Текущее время в милисекундах
//датчик температуры пола DS18B20
#define DS D6 //объявляем пин датчика температуры пола DS18B20 как GPIO 12 (D6)
OneWire ds1(DS);
float tempPol = 99.0; // Текущие показания от датчика теплого пола ds18b20
// датчик влажн почвы
#define SENS_HUM A0 //объявляем пин датчика влажн почвы как GPIO 17 (A0)
#define But_Min V9 //Виртуальная кнопка колибровки Min значения влажности почвы
#define But_Max V10 //Виртуальная кнопка колибровки Max значения влажности почвы
// датчик влажн почвы
int16_t humIn; // Читаем показания датчика влажности почвы Аналоговый вход
int16_t humOut; // Оброботанные показания от датчика влажности почвы 0-100%
float MIN_SENS = 480; // Калибровка 0%
float MAX_SENS = 210; // Калибровка 100%
BlynkTimer timer;
////////////////////////////CONNECT////////////////////////////////////////////////
#define USE_LOCAL_SERVER
#ifdef USE_LOCAL_SERVER
#define SERVER IPAddress(192, 168, 1, 17) // Свой IP пишите
#endif
/*
Wifi Credentials
*/
#define WIFI_SSID "***" //Имя точки доступа WIFI VVK AndroidAP
#define WIFI_PASS "***" //пароль точки доступа WIFI vtb24admin 1234567890
/*
Blynk Auth Code
*/
#define AUTH "***"
///////////////////////////////////////////////////////
// Функции для подключения к Blynk //
void ConnectBlynk()
{
//*******************************************************
// Запускаем WiFi
if (WiFi.status() != WL_CONNECTED)// Если нет WiFi, то коннектимся
{
BLYNK_LOG(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
int8_t count=0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
Serial.print(WiFi.status());
count++;
if (count >= 5){break;Serial.println("WiFi not connected");}
}
}
/* Дисконект - для справки
WiFi.disconnect(); // отключаемся от сети
Serial.println("Disconnect WiFi.");
*/
//*******************************************************
// Запускаем Blynk
if (WiFi.status() == WL_CONNECTED)// Если нет WiFi, то не коннектимся
{
// CONNECT TO BLYNK
#ifdef USE_LOCAL_SERVER // Если используются локальный сервер
Blynk.config(AUTH, SERVER, 8080);
Blynk.connect();
#else // Иначе конектимся постаринке к блинку
Blynk.config(AUTH);
Blynk.connect();
#endif
}
// До бесконечности будем оставаться в цикле while
// пока не установим связь с сервером
// while (Blynk.connect() == false) {}
}//ConnectBlynk()
// Реконектимся если обрыв связи
void reconnectBlynk() {
if (!Blynk.connected())
{
BLYNK_LOG("Disconnected now");
ConnectBlynk();
if (Blynk.connected())
{
BLYNK_LOG("Reconnected");
}
else
{
BLYNK_LOG("Not reconnected");
}
}
}
////////////////////////////CONNECT-END//////////////////////////////////////////////////
////////////////////////EEPROM//////////////////////////////////////////////////////////
#include <EEPROM.h>
//
void setupAddrEEPROM(){
EEPROM.begin(8);
EEPROM.put(0, MIN_SENS);
EEPROM.put(4, MAX_SENS);
EEPROM.get(0, MIN_SENS);
EEPROM.get(4, MAX_SENS);
EEPROM.end();
}
////////////////////////EEPROM-END//////////////////////////////////////////////////////
void sendSensor()
{
// static uint32_t msDHT = 0;
byte data1[2];
ds1.reset();
ds1.write(0xCC);
ds1.write(0x44);
// if (ms - msDHT >= READ_DATA)
// {
Blynk.virtualWrite(V5, tempPol);
Blynk.virtualWrite(V8, humOut);
//Blynk.virtualWrite(But_Min, HIGH);
//Blynk.virtualWrite(But_Max, HIGH);
// Читаем данные с ds18b20
ds1.reset();
ds1.write(0xCC);
ds1.write(0xBE);
data1[0] = ds1.read();
data1[1] = ds1.read();
tempPol = ((data1[1] << 8) | data1[0]) * 0.0625;
// Выводим показания в монитор порта
Serial.print("tempPol:");
Serial.println(tempPol);
// Читаем показания датчика влажности почвы
humIn = analogRead(SENS_HUM);
// Обрабатываем показания и представляем в виде от 0 до 100
humOut = map(humIn, int16_t(MIN_SENS), int16_t(MAX_SENS), 0, 100);
//humOut = map(humIn, 480, 210, 0, 100);
// Выводим показания в монитор порта
Serial.print("humIn:");
Serial.println(humIn);
Serial.print("MIN_SENS:");
Serial.println(MIN_SENS);
Serial.print("MAX_SENS:");
Serial.println(MAX_SENS);
Serial.print("humOut:");
Serial.println(humOut);
// msDHT = ms;
// }
}
void setup()
{
// Debug console
Serial.begin(9600);
// Загружаем данные из EEPROM
setupAddrEEPROM();
delay(2000);
// Инициализация PIN-ов Arduino
pinMode(SENS_HUM, INPUT);
delay(50);
// Вызываем функцию подключения к Blynk
reconnectBlynk();
// Задаем интервальные таймеры
timer.setInterval(30000, reconnectBlynk); // Проверяем есть ли связь с сервером
timer.setInterval(1500L, sendSensor);
// Инициализация датчика OneWire для DS18B20
Wire.begin();
delay(50);
}
void loop()
{
//ms = millis();
if( digitalRead(But_Min) == HIGH )
{
EEPROM.begin(8);
EEPROM.put(0, MIN_SENS);
EEPROM.end();
delay(50);
}
if( digitalRead(But_Max) == HIGH )
{
EEPROM.begin(8);
EEPROM.put(4, MAX_SENS);
EEPROM.end();
delay(50);
}
// sendSensor();
if (Blynk.connected()){ Blynk.run();}
timer.run();
}
Это хорошо, осталось дело за малым) и пнуть в нужную сторону)Дружище здесь не раздают рыбу, здесь раздают удочки
Я предлагал добавить вывод в серял значений переменных, то что записываете в епппром, для того, что бы проверить, работает ли сохранение в еппром.А что конкретно то добавить?
советую называть функцию со смыслом, какой тут сетуп адрес?добавил пару строк
EEPROM.put(0, MIN_SENS);
EEPROM.put(4, MAX_SENS);
В void setupAddrEEPROM(){
Я слабо что понимаю в программировании, объясните мне, для чего вы после записи, сразу читаете из нее, ведь, как известно, нужно время, для того, что бы запись завершилась и только тогда из нее можно читать.void setupAddrEEPROM(){ EEPROM.begin(8); EEPROM.put(0, MIN_SENS); EEPROM.put(4, MAX_SENS); EEPROM.get(0, MIN_SENS); EEPROM.get(4, MAX_SENS); EEPROM.end(); }
Тут надо видеть конкретно, где вы находитесь.Это хорошо, осталось дело за малым) и пнуть в нужную сторону)
Так выводится же... вот всегда было в коде...Я предлагал добавить вывод в серял значений переменных, то что записываете в епппром, для того, что бы проверить, работает ли сохранение в еппром.
Serial.print("MIN_SENS:");
Serial.println(MIN_SENS);
Serial.print("MAX_SENS:");
Serial.println(MAX_SENS);
Ну так я вчера добавил запись и заработало, до этого скетч не работал без предварительной записи....Я слабо что понимаю в программировании, объясните мне, для чего вы после записи, сразу читаете из нее, ведь, как известно, нужно время, для того, что бы запись завершилась и только тогда из нее можно читать.
На данный момент запарка в записи при нажатии кнопки...запись не происходит...Тут надо видеть конкретно, где вы находитесь.
как не нужен то? При обрыве питания у меня все значения полетят же...и потом заново калибровать придётся...или я не прав?предположу что EEPROM вообще не требуется.
Если Вы про настройки логина и пароля для wifi, то они записываются во флеш и при новом старте их не надо вводить снова.
Лыжи надо мазать сильнее.Так выводится же... вот всегда было в коде...
EEPROM.begin(8);
EEPROM.get(0, MIN_SENS);
EEPROM.get(4, MAX_SENS);
EEPROM.end();
Нормально работает сохранение параметров, если надо, проверяется на правильность считывания и нахождения в заданных пределах. И процедуры безопасности могут работать постоянно и проверять критически важные параметры работы.Всегда надо начинать как заново рожденное.
Все допустимые диапазоны изменения параметров известны изначально и записываются в виде констант в программу.Нормально работает сохранение параметров, если надо, проверяется на правильность считывания и нахождения в заданных пределах. И процедуры безопасности могут работать постоянно и проверять критически важные параметры работы.
В моём случае, какое было состояние датчика ДО выключения питания, такое оно и останется и значение не поменяется...(я про ёмкостной датчик влажности почвы)то, когда у вас отключится питание, состояние внешних устройств будет одно,
а когда питание включится то состояние будет другое.
Не всегда, диапазон выходных напряжений того же емкостного датчика зависит не только от уровня влажности, но и от земли в которую он вставлен. Сделать калибровку для новых условий вполне адекватное решение.Все допустимые диапазоны изменения параметров известны изначально и записываются в виде констант в программу.
Абсолютно верно.Не всегда, диапазон выходных напряжений того же емкостного датчика зависит не только от уровня влажности, но и от земли в которую он вставлен. Сделать калибровку для новых условий вполне адекватное решение.
При чем тут еепром, запись в него уже у вас работает.Но что-то меня утомило уже этот ЕЕПРОМ
Так по нажатию кнопки-то не работает...(При чем тут еепром, запись в него уже у вас работает.
не возражаю,Не всегда, диапазон выходных напряжений того же емкостного датчика зависит не только от уровня влажности, но и от земли в которую он вставлен. Сделать калибровку для новых условий вполне адекватное решение.
Как раз таки для калибровки и хочу записать. Чтоб эти значения были пороговыми для расчёта процента влажности.Как я понял чел хочет записать одно-два значения , не для калибровки, а непонятно зачем.