Перейти к публикации
iT4iT.CLUB

Рекомендованные сообщения

2 часа назад, zenone сказал:

Пробовал другой роутер, результат тот же

Ну тогда подозрение падает на ESP. Либо у вас качество сигнала по какой-то причине ухудшается (расстояние, помехи), либо какая-то аппаратная особенность конкретно этого ESP модуля. Попробовать другой модуль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@zenone вносились ли изменения в программу? Просматривали ли Вы график, показания не сбрасываются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вносил изменения только по части датчикаов - комментировал датчики температуры-влажности-давления от проекта и добавил поддержку BME-280 библиотекой от Адафрут, остальное от оригинала, единственное но -  эта ЕSP у меня участвовала в обкатке получения даты и времени с NTP сервера (с выдачей в УАРТ GPS строк) для синхронизации часов на основе этого проекта (если @Kitsum вы помните о чём я) но контроллер полностью перепрошит (папка дата тоже).

Оставлю на ночь посмотреть не сбрасываются ли показания, завтра отпишусь.

Изменено пользователем zenone

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Zenone, я так понял, что отправка идёт посредством Post-Get? 

А если настроить её через mqtt? 

Ну и если esp несколько раз удалось достучаться, то с моей точки зрения, этот выводит прошивку(если прошивка с тех пор не менялась)  из подозрения, впрочем как и сам модуль. 

Дурная идея :логин, почту, пароль на народном мониторе не меняли? Совпадает ли с тем, какой вбили в настройки esp? 

Изменено пользователем Alex_DIY

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, Forester сказал:

Ну тогда подозрение падает на ESP. Либо у вас качество сигнала по какой-то причине ухудшается (расстояние, помехи),

Уровень сигнала хороший - ESP_19E2D7

Скрытый текст

photo_2018-01-23_09-54-23.thumb.jpg.648a98a500c19a8ccec4becf72197d20.jpg

 

10 часов назад, Kitsum сказал:

Просматривали ли Вы график, показания не сбрасываются?

на протяжении 5ти часов (с 0:28 и до 5:40 перезагрузок не было)

Скрытый текст

photo_2018-01-23_09-54-28.thumb.jpg.86ceb28982c623031eca2b4df941aaf6.jpg

но данных на народе так и не появилось (идентификация по МАК и они совпадают) 

Скрытый текст

photo_2018-01-23_09-54-29.thumb.jpg.44d582a46b913b3ed0eac56113817f9d.jpg

Попробую выдавать в консоль то что отправляется на народный монитор, погляжу.

8 часов назад, Alex_DIY сказал:

А если настроить её через mqtt? 

Настроить не могу, не куда слать (((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 21.01.2018 в 23:08, Kitsum сказал:

У меня больше вопросов чем ответов. Давайте сделаем так... В данный момент у меня маршрутизатор фирмы MikroTik. Проброс портов настроил через NAT по правилу dstnat для tcp трафика на внешнем интерфейсе по измененному порту т.к 80 постоянно сканируется. Далее через netmap отправляю трафик на внутренний адрес микроконтроллера, но уже по 80 порту. Делал на скорую руку удаленно, но суть ясна по фото.

В том то и проблема, что настроено то по идее все верно, но ни в случае с переадресацией с 80 порта, ни с какого-либо другого от платы веб интерфейс получить не удается, на нее просто приходит запрос, она вроде как его видит и в мониторе прописывает страницу, которую должна отобразить, но при этом отображать не хочет.

Скрытый текст

image.png.d267cadbfa130bb2431cc1989b325c21.png

В 20.01.2018 в 18:14, ololonly сказал:

 

  Показать содержимое

image.png.e46b25ef2b291cd33de32ef028541025.pngimage.png.335e9eec40dfae2766d7a639831e2ac9.png

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@zenone тогда давайте посмотрим на ответ сервера.

Найдите строку инициализирующую отправку данных на сервер.

httpClient.GET();

замените её на

int status = httpClient.GET();
if (status > 0) Serial.printf("code: %d\nanswer: %s\n", status, httpClient.getString().c_str());
else Serial.println("No answer");

Оставьте открытым Serial монитор и посмотрите, дойдет ли запрос до сервера и как ответит сервер. К сожалению, нахожусь на работе и самостоятельно проверить работоспособность кода не могу, но думаю, что должно работать.

@ololonly попробуйте пробросить порт до другого узла сети. Для эксперимента, можно поднять Apache на компьютере и посмотреть, что будет на выходе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если коротко я разобрался...., причина крылась в имени отправляемом на народный мониторинг в GET сформированной строке, почему-то имя ESP8266 (iT4iT.CLUB) не воспринималось, но до этого я попробовал заменить доменное имя на IP адрес, как советовал участник форума @Forester но это не помогло, я восстановил всё как было только убрав вообще имя ESP8266 (iT4iT.CLUB) процесс пошёл, затем по совету @Kitsum вставил в код мониторинга ответ от сервера и убедился в правильности своих выводов - всё на скринах ниже (пробел и скобки были заменены нижним подчёркиванием).

Природа этого феномена мне не понятна.

Спасибо всем кто помогал, может это кому то пригодится.

Скрытый текст

IMG_20180123_201841.thumb.jpg.30e9e7dc16fd47d4130a20d87e7ba211.jpg

Скрытый текст

IMG_20180123_201846.thumb.jpg.e9723cebbfd6c5040a18f8b1496b7875.jpg

Скрытый текст

IMG_20180123_201850.thumb.jpg.14ed005c28e6f1287ca0efaa9c2fe406.jpg

 

Изменено пользователем zenone
  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 25.12.2017 в 02:36, EndWar сказал:

Ну что ж, по поводу статического буфера json, уверен некоторые особи тут (видимо из за малого количества памяти esp и я подозреваю ума) не способны представить себе даже существование такой проблемы, тем более уж возможности её решить, так как с убеждённостью дебила считают что все "непонятные глюки" компьютера решаются  "всего то. Перезагрузить комп и делов  то", так вот кто так не считает и имеет достаточное количество памяти, прошу под кат.

  Скрыть содержимое

После обновления кода метеостанции в августе, я слегка его подправил под собственные нужды и немного добавил функционал. Так как считаю, что не всегда удобно и оперативно только лишь для того, что-бы посмотреть температуру включать ноутбук, стационарный компьютер или возиться с браузером телефона, мной был добавлен OLED экран и энкодер для его включения/выключения и навигации по страницам, так как на 0.96 128x64 мной выводилось не только температура, давление, влажность (BME 280) и освещённость (BH1750) но и текущее время, прогноз погоды на ближайшие три дня и ещё несколько датчиков в квартире. Так же все показания этих дополнительных датчиков были добавлены на индикаторы в веб-интерфейсе метеостанции

5a3f39bc02f96_2017-12-2408-19-13-GoogleChrome.jpg.c04b80c0b9ebce3bd8dafae9b057384d.jpg 

Как я уже писал пользоваться мне удобнее Oled дисплеем 

20112017094.thumb.jpg.d48719a02a63d41c753574a57963e57d.jpg.c6f93c798a5507b35bafbc4861a907c7.jpg

  Показать содержимое

 

 

по этому не сразу заметил, что иногда (почему именно иногда поясню ниже) в веб-интерфейсе возникает вот такая ситуация

5a3fcfb6720ca_2017-12-2419-01-08-GoogleChrome.jpg.88ce2883705b7cbfdeb093e9fce9733f.jpg

а в "инструментах разработчика" браузера, вместо вот такой картинки

5a3fdf611f6e3_2017-12-2420-04-49-GoogleChrome(2).jpg.7c4097563cf7cba033903681b20fcd86.jpg

мы видим

5a3fe2cadf8d9_2017-12-2221-43-37-GoogleChrome(2).jpg.529bad364d3f7f40fc30891580c63c31.jpg

при этом весь остальной функционал метеостанции работает отлично... полная же строка передаваемая в "Ответ на запрос показаний датчиков" в первом случае выглядит вот так



{"light":13,"temperature":26.13,"humidity":50.15,"pressure":726.777,"vcc":3.238,"temperatureT6":"1","temperatureT0":"57.0","temperatureTV":"26.0","temperatureHV":"40.0","temperatureVV":"0"}

а во втором так



{"light":11254,"temperature":26.13,"humidity":50.14648,"pressure":726.45673,"vcc":3.238,"temperatureT6":"-2.1","temperatureT0":"57.0","temperatureTV":"26.0","temperatureHV":"40.0","temperatureVV":}

найдите пять отличий..?! )) Думаю раз вы тут, то все справились, конечно количеством передаваемых данных, а изменяется оно от степени освещённости, количества символов после запятой давления, влажности, температуры и знака температуры, но самое важное, что в первом случае строка собираемая библиотекой json в ответ на запрос показании датчиков, заканчивается корректно "temperatureVV":"0"} а во втором обрывается на "temperatureVV":}  и по этой причине, как я предполагаю, не может быть верно обработана.

То есть в стандартный StaticJsonBuffer<200> при неизменной прошивке строка данных может как помещаться так и нет, этим и объясняется появление и пропадание данного эффекта без видимых для пользователя причин ... Увеличиваем буфер JSON до StaticJsonBuffer<1000> и вуаля, ни каких ошибок в веб-интерфейсе больше не появляется...

Удачных всем экспериментов! 

 

Доброго дня @EndWar 

Не могли бы поделится исходниками

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, dimon721 сказал:

Здравствуйте @Kitsum , очень понравилась ваша метеостанция

Здравствуйте @Kitsum

Подскажите как реализовать в проекте датчик температуры DS18B20. Датчик температуры BME280 показывает отрицательную температуру до 40 градусов.

У нас температура опускается до 55 градусов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@dimon721 доброе время суток

Я бы предложил Вам воспользоваться данной библиотекой https://github.com/milesburton/Arduino-Temperature-Control-Library На основе стандартных примеров Вы можете добавить датчики DS18B20, по аналогии, как это было сделано с датчиками на i2c шине. Поддержка этих датчиков будет добавлена чуть позже. Уже есть идеи, как реализовать отображение и понятное (для человека) распознавание этих датчиков в web интерфейсе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

  Удалось мне реализовать свою идею, которую я описывал в этом посте  (про визуализацию скорости изменения давления). Так как программирование веб-интерфейса для меня даже не темный лес, а что-то типа области за горизонтом событий черной дыры, решил использовать для этого протокол MQTT и андроид-приложение с возможностью получения URL картинки и отображения этой самой картинки в интерфейсе. Код получился такой (программистам с расшатанными нервами смотреть не рекомендуется!):

Скрытый текст


/*
Добавленные переменные для расчета двухчасовой разности давления
*/
unsigned long timerPressureDinamic = 0;   // таймер для двухчасового сравнения показания давления
double oldPress = 0;                       // предыдущее значение давления
double deltaPress = 0;                     // разница в показаниях давления через два часа
bool firstMessurePressureOld = true;       // переменная-флаг для записи первого измерения давления при старте



/* 
Запоминаем первое измерение давления для дальнейшего по-двухчасового сравнения
*/
if (firstMessurePressureOld){
  oldPress = pressure.data;
  firstMessurePressureOld = false;
  }



/*  
Если прошло 2 часа, вычисляем дельту давления
*/
if (millis() - timerPressureDinamic > 7200000 or timerPressureDinamic > millis()) pressureDinamic();


    
/*
Отправка URL по MQTT в зависимости от дельты давления. Пришлось добавить лишний метод mqttPublishURL(), так как через существующий mqttPublish() не получилось отправить строковую URL. Понимаю, что, наверное, глупость. Поправьте сами для оптимизации.
*/
      
//если дельта в этом диапазоне, отправляем URL картинки "null" (атмосферное давление без значительных возмущений)
if((deltaPress >= 0)&(deltaPress < 0.75)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69feb/yxLX0-GRlJk.jpg");
      
//если дельта в этом диапазоне, отправляем URL картинки "up1"  (давление растет со скоростью 1 гПа/2ч.)
if((deltaPress >= 0.75)&(deltaPress < 1.5)) mqttPublishURL("deltapressure",    "https://pp.userapi.com/c840120/v840120983/69ff2/i6mLvwA8HRE.jpg"); 
      
//если дельта в этом диапазоне, отправляем URL картинки "up2"  (давление растет со скоростью 2 гПа/2ч.)
if((deltaPress >= 1.5)&(deltaPress < 2.25)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69ff9/gr2cpPuA6Kc.jpg"); 
      
//если дельта в этом диапазоне, отправляем URL картинки "up3"  (давление растет со скоростью 3 гПа/2ч.)
if((deltaPress >= 2.25)&(deltaPress < 3)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/6a000/HYXjKndhFEY.jpg"); 

//если дельта в этом диапазоне, отправляем URL картинки "up4"  (давление растет со скоростью 4 и более гПа/2ч.)
if(deltaPress >= 3) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/6a007/qKjGWt5er4M.jpg"); 

//если дельта в этом диапазоне, отправляем URL картинки "null" (атмосферное давление без значительных возмущений)
if((deltaPress <= 0)&(deltaPress > -0.75))  mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69feb/yxLX0-GRlJk.jpg"); 
      
//если дельта в этом диапазоне, отправляем URL картинки "down1"  (давление падает со скоростью 1 гПа/2ч.)
if((deltaPress <= -0.75)&(deltaPress > -1.5)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fcf/bp48SOXx_G8.jpg"); 
      
//если дельта в этом диапазоне, отправляем URL картинки "down2"  (давление падает со скоростью 2 гПа/2ч.)
if((deltaPress <= -1.5)&(deltaPress > -2.25)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fd6/jnoRojvlQ88.jpg"); 
      
//если дельта в этом диапазоне, отправляем URL картинки "down3"  (давление падает со скоростью 3 гПа/2ч.)
if((deltaPress <= -2.25)&(deltaPress > -3)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fdd/0qlgQqKPzto.jpg");
       
//если дельта в этом диапазоне, отправляем URL картинки "down4"  (давление падает со скоростью 4 и более гПа/2ч.)
if(deltaPress <= -3) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fe4/IhtWJ_sCgmw.jpg");



/*
Негуманный код для отправки URL по MQTT
*/
bool mqttPublishURL(String topic, String data) {
  if (config.mqtt_path.length()) topic = config.mqtt_path + "/" + topic;
  return mqtt.publish(topic.c_str(), String(data).c_str(), true);
}




/*
Вычисление разницы в давлении каждые два часа
*/

void pressureDinamic() {
  timerPressureDinamic = millis();
  deltaPress = pressure.data - oldPress;
  oldPress =  pressure.data;
}

    
    
 

 

Если кому-то интересно,  файлик ESP8266_WS_iT4iT.CLUB.ino со своими изменениями прикрепил. Понимаю, что грамотный человек реализует все гораздо правильней, взяв уже готовые данные из таблицы для графика. Но моих знаний для этого не хватает. Так что как-то так)) Для отображения показаний сваял в фотошопе на первое время вот такой манометр. В MQTT клиенте это пока выглядит так:

Screenshot_20180203-154417.png

ESP8266_WS_iT4iT.CLUB.zip

Изменено пользователем Forester
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброе время суток всем! У меня есть такой вопрос: моя "метеостанция" сохраняет показания датчиков на SD карточку. Можно ли периодически этот файл name.txt скидывать в облако, на яндекс диск, например?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@AlexDerBK думаю, что сходу эту задачу, силами микроконтроллера, не решить. Надо определиться с тем, как проходить авторизацию, удерживать сессию и передавать файл. Использовать OAuth или достаточно правильно сформировать заголовки в multipart/form-data?... А также подводные камни, например, устаревание сертификата при использовании https (не думаю, что Яндекс захочет общаться через http) соединения, а прописывать новый придется каждый раз самому и ручками. В итоге код передачи файла будет в десятки раз больше и сложнее чем код относящийся к метеостанции. Для каких целей это нужно? Обычно для сбора и анализа данных с iot устройств используют различные шлюзы вроде ThingSpeak или Народного мониторинга, а также MQTT брокеры.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Kitsum. Спасибо за ответ.  Есть ещё проблема. Связь с метеостанцией не держится больше суток. В другом проекте такая же ерунда.  Но там я смог перевести его на режим точки доступа и он работает. На этом же проекте, так как имя моего роутера содержит нижнее подчеркивание, пришлось прописать его в скетча. Сейчас все вернул обратно, но он упорно конктится к домашнему роутеру и периодически пропадает совсем. Неполучается график посмотреть за сутки :( И еще, если показания температуры после запятой имеют 0, то он пропадает и цифры пляшут. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@AlexDerBK доброе время суток

1 час назад, AlexDerBK сказал:

Связь с метеостанцией не держится больше суток. В другом проекте такая же ерунда.

Возможно дело не в программе. О каком втором проекте идет речь?

1 час назад, AlexDerBK сказал:

Но там я смог перевести его на режим точки доступа и он работает. На этом же проекте, так как имя моего роутера содержит нижнее подчеркивание, пришлось прописать его в скетча.

Спасибо за уточнение. Я пересмотрю поддержку спецсимволов при настройке домашней сети.

1 час назад, AlexDerBK сказал:

И еще, если показания температуры после запятой имеют 0, то он пропадает и цифры пляшут.

Не могли бы Вы сделать снимок экрана чтобы было более понятно, о чем идет речь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Конечно дело не в программе. Второй проект, тоже метеостанция, сборная солянка с записью на SD карту показаний и с выводом показаний датчиков на вебсервер.

Просто в режиме точки доступа, такой проблемы нет. А в Вашем проекте убрал уже все имена и пароли о своей локальной сети, а оно все равно к ней конектится????

2. Вот за это спасибо!

3. Попробую так объяснить. Если периодически меняются показания с 20.0 , 20.1, то показывает 20 или 20.1. А так как цифры центрируются на индикаторе, получается мельтешение. Возможно это я и наколбасил, когда хотел, чтобы была одна только цифра после запятой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно по подробнее про сторожевой таймер. Мне кажется,  в нем собака зарылась.  Как узнать, что он срабатывает. Светодиод как моргал, так и моргает, а связи нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 07.02.2018 в 15:42, AlexDerBK сказал:

убрал уже все имена и пароли о своей локальной сети, а оно все равно к ней конектится????

Дело в том, что контроллер способен хранить информацию о сети в отдельной области памяти и Вы даже можете залить пустой скетч и при этом будет происходить автоматическое подключение и переподключение к известной сети. За это отвечают следующие функции.

WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);

В зависимости от требуемого поведения, выставляются необходимые логические значения

В 07.02.2018 в 15:42, AlexDerBK сказал:

Если периодически меняются показания с 20.0 , 20.1, то показывает 20 или 20.1. А так как цифры центрируются на индикаторе, получается мельтешение.

По умолчанию опрос датчиков и обновление информации происходит с интервалом в 5 секунд, а, следовательно, и многократного переключения за одну анимацию быть не может. Исключением являются те случаи, когда разница показаний слишком велика и происходит 2-х секундная анимация в ходе которой идет перебор значения в промежутке между старыми и новыми показаниями. Такое возможно только в случае специального влияния на датчики, например, принудительный нагрев. Но и в таком случае центровка значений будет не тем, на что обратишь внимание в ходе всей анимации. Возможно описание в виде мельтешения здесь не уместно, и Вы имели в виду что-то другое. Я проверил у себя и переход через целое значение не вызывает какое-либо не стандартное поведение.

В 08.02.2018 в 05:25, AlexDerBK сказал:

Можно по подробнее про сторожевой таймер. Мне кажется,  в нем собака зарылась.  Как узнать, что он срабатывает. Светодиод как моргал, так и моргает, а связи нет.

Имеется встроенный сторожевой таймер, настроенный на 1.2 секунды (если память не подводит) и сбрасывающий контроллер в случае если не выполняются внутренние инструкции. На сколько мне известно, отключить его нельзя. Но и проблема явно не в нем. Второй - программный сторожевой таймер используется в самом скетче и, как показала практика, совершенно бесполезен и не приносит никакой пользы, как собственно и вреда. В новой версии программы он уже полностью искоренен из-за переосмысления причины зависания контроллера при перезагрузке (об этом писалось ранее, лечится перемычкой) и оптимизации кода проводившейся в предыдущий версиях и в основном связанных с работой web интерфейса, а также практически законченных в будущей версии.

Что касаемо постоянной индикации режима работы, то это говорит только о том, что контроллер не висит. Если контроллер перезагружается, то индикация будет сбоить: пропадать, сбиваться или светодиод будет гореть постоянно. В зависимости от состояния порта на момент сбоя и характер самого сбоя.

Я бы посоветовал запомнить MAC адрес esp8266 и при следующем сбое, зайти на маршрутизатор и посмотреть подключен ли контроллер, какой ему выдан IP адрес и попробовал бы как проходит PING до данного адреса, а также отвечает ли web сервер по имени и по IP адресу.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо! Пользуюсь программой Fing, так что нет сомнения что ESP нет в сети. Но про перемычку я что то упустил. Попробую, отпишусь. Сейчас пока переключился на первый вариант метеостанции. За этот проект отдельное спасибо. То что нужно. Хочу объеденить два проекта в один. Типа, гараж(DHT)+подвал(DHT)+датчик движения+может быть, датчик дыма или СО -> 433-> дом (ESP)+BME280+лог на SD и отправка СМС или на почту. Сейчас , пока, нужно убедиться в реальности задачи, а косметикой займусь на завершающем этапе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 09.02.2018 в 05:52, AlexDerBK сказал:

Спасибо! Пользуюсь программой Fing, так что нет сомнения что ESP нет в сети. Но про перемычку я что то упустил.

Может быть, не совсем в тему, но опишу забавный случай. У меня есть реле Sonoff Base, на котором я провожу периодически тестирование разных прошивок. Последний раз тестировал ESPEasy. И в процессе тестирования обнаружился аппаратный брак. Если плату вынести на холод (примерно -10 градусов), то через некоторое время она теряет wifi роутер и уходит в бесконечный реконнект. Заносишь в дом, нагревается, и уже минуты через две нормально коннектится к точке. Я предполагаю, что проблема в бракованном кварцевом резонаторе, у которого уплывает частота при охлаждении.Просто была уже подобная проблема с клоном Arduino UNO. Только там наоборот плата нормально работала только в холодильнике, а принагреве зависала)) Поменял резонтатор - отлично работает уже не один год. Вот такие поделки иногда приходят с али. Либо во втором случае присутствует какая-то микротрещина на плате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересное наблюдение. Так то обе ESPшки у меня на балконе лежат, а это и до -10 бывает. Хотя, та которую на точку доступа перевёл, уже две ночи пережила. А на ту, что со второго проекта метеостанции, поставил перемычку. С утра связь была, но все датчики по 0. В режим настройки войти была возможность, но график показать отказалась. Сказала, что соединение сильно занято. Сделал ресет через вебинтерфейс. Прошёл, но датчики также по нулям. Позже совсем соединение пропало. Пришлось питание передернуть.

Изменено пользователем AlexDerBK

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Kitsum, большое спасибо за метеостанцию, самая лучшая из всех, что я нашел.

Прошу помощи в доработке метеостанции:

1. Удалить датчик освещенности не только из текущих показаний но и из показаний графика за последние сутки.

2. Использовать ДВА датчика ВМЕ280 (просто их есть у меня) для метеостанции (улица/дом). В текущих показаниях  сделать 5 индикаторов (показания давления уличного датчика не нужно), на графике оставить показания давления/температуры/влажности уличного датчика.

Сделать самому не хватает знаний. Из текущих показаний датчик освещенности убрал, из графика не получилось. Пробую добавлять второй ВМЕ280 - компилятор выдает ошибки. Мои знания и умения в этих вопросах находятся на уровне Ctrl+C - Ctrl+V.

Ну и прошу прощения за наглость - 

3. Выдать на один из GPIO высокий уровень по понижению температуры домашнего датчика ниже определенного значения, на второй GPIO - высокий уровень по превышению определенного значения (вот бы еще это значение через web-интерфейс задавать!).

4. На третий GPIO высокий уровень по понижению влажности домашнего датчика ниже определенного значения, на четвертый - высокий уровень по превышению влажности (если не получится менять это значение через web-интерфейс, то просто можно знать где что заменить в скетче)

 

Изменено пользователем vavandemidov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, vavandemidov сказал:

Kitsum, большое спасибо за метеостанцию, самая лучшая из всех, что я нашел.

Прошу помощи в доработке метеостанции:

1. Удалить датчик освещенности не только из текущих показаний но и из показаний графика за последние сутки.

2. Использовать ДВА датчика ВМЕ280 (просто их есть у меня) для метеостанции (улица/дом). В текущих показаниях  сделать 5 индикаторов (показания давления уличного датчика не нужно), на графике оставить показания давления/температуры/влажности уличного датчика.

Сделать самому не хватает знаний. Из текущих показаний датчик освещенности убрал, из графика не получилось. Пробую добавлять второй ВМЕ280 - компилятор выдает ошибки. Мои знания и умения в этих вопросах находятся на уровне Ctrl+C - Ctrl+V.

Ну и прошу прощения за наглость - 

3. Выдать на один из GPIO высокий уровень по понижению температуры домашнего датчика ниже определенного значения (вот бы еще это значение через web-интерфейс задавать!).

4. На другой GPIO высокий уровень по понижению влажности домашнего датчика ниже определенного значения (если не получится менять это значение через web-интерфейс, то просто можно знать где что заменить в скетче)

 

Присоединяюсь к просьбе. И большое спасибо за проделанную работу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас

  • Похожие публикации

    • Автор: Kitsum
      Хотите помочь проекту или спонсировать новый?
      Yandex.Money PayPal.me Тема проекта
      Arduino IDE + Project + Libraries + tools: https://yadi.sk/d/jseefFB50NMhAg
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека CMD, реализует настройку микроконтроллера и управление вашей программой через терминал.
      Основная задача библиотеки, это прием пользовательских команд через UART интерфейс, их обработка и выполнение пользовательского кода, связанного с той или иной командой.
      Данная библиотека позволяет реализовать:
      Управление микроконтроллером Любую настройку, будь то WiFi, другие библиотеки или часть Вашей программы Вызывать Ваши задачи (функции) из терминала по команде и передавать им требуемые параметры Использовать контроллер в качестве шлюза между датчиками и программами на PC Внимание: любая команда, передаваемая в терминал обязана заканчиваться символом перевода строки "\n".
      Подключение библиотеки
      #include <cmd.h> Инициализация объекта, к которому мы будем обращаться для добавления команд. В качестве параметра объекту необходимо передать указатель на объект Serial или любой другой схожий по типу интерфейс.
      cmd command(&Serial); В функции Setup описываем какие команды требуется обрабатывать. Например, по команде "test" вызывать пользовательскую функцию с именем "myFunctionName". Имя пользовательской функции может быть абсолютно любым.
      void Setup() { Serial.begin(115200); command.add("test", myFunctionName); } Пользовательская функция будет вызываться каждый раз, когда по интерфейсу Serial поступит команда "test". Если команда будет передана с параметрами, то эти параметры будут переданы в качестве аргументов пользовательской функции.
      В функции loop должна находится команда вызова обработчика.
      void loop() { command.handleEvents(); } Пользовательская функция обязана соответствовать ряду требований:
      Не возвращать никакого результата (быть объявленной с типом void) Принимать в качестве первого аргумента переменную с типом byte в которой будет храниться число равное количеству переданных параметров Принимать в качестве второго параметра переменную с типом char** в которой будет храниться указатель на массив со всеми указателями (char*) на переданные параметры void myFunctionName(byte argc, char** argv) { /* ... */ } Функция всегда должна иметь такой вид, даже если не подразумевается, что ей будут передаваться какие-либо параметры.
      Чтобы перебрать все переданные параметры и вывести их в консоль, можно воспользоваться следующим примером
      void myFunctionName(byte argc, char** argv) { if (0 < argc) { for (uint8_t i = 0; i < argc; i++) { Serial.printf("%i. %s\n", i, argv[i]); } } } Пример вызова пользовательской функции без параметров и с ними
      # test No parameter was passed # test p1 p2 p3 p4 p5 0. p1 1. p2 2. p3 3. p4 4. p5 Помните, что параметры представлены в виде указателей и работать с ними нужно как с обычными переменными не получится т.к указатель содержит не значение переменной (переданный параметр), а указатель на ту область памяти микроконтроллера в которой это значение находится.
      Чтобы сравнить два значения, например, параметр под индексом 0 (идет первым в списке) с каким-либо значением в программе, воспользуйтесь функцией strcmp, которая возвращает целочисленное значение, указывающее на лексическое расхождение строк. Если строки равны, то возвращаемое значение равно 0.
      if (!strcmp(argv[0], "wifi")) { Serial.println(F("Первый аргумент WiFi")); } else { Serial.println(F("Первый аргумент НЕ WiFi!!!")); } Для копирования значения указателя в другую переменную с типом char можно воспользоваться функцией strcpy
      char myVar[20]; strcpy(myVar, argv[0]); if (myVar == "123456") { Serial.prinln(F("ok")); } Также можно обернуть указатель объектом String и получить весь функционал этого объекта, который будет содержать значение параметра
      String param1(argv[0]); // String param1 = argv[0]; Serial.printf("argv[0] length: %i\n", param1.length()); Serial.printf("argv[0] is integer?: %s\n", param1.toInt() ? "YES" : "NO"); if (param1 == "qwerty") { Serial.println(F("Hello QWERTY!")); } С библиотекой идут несколько примеров, в том числе и пример конфигурации WiFi в режиме STA.
      Автор Kitsum Добавлен 05.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека smartBlink, реализует умное управление штатным светодиодом, что позволяет добавить индикацию состояния вашей программы или микроконтроллера.
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
      Автор Kitsum Добавлен 10.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...