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

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

@Astron Эти ошибки явно связаны со средой.

15 часов назад, Astron сказал:

Строка String codeTranslate(int code) { return ESP8266WebServer::_responseCodeToString(code); } в файле webserver.h

Ошибка: '_responseCodeToString' is not a member of 'ESP8266WebServer'

Эта ошибка может появится только при использовании ESP8266 выше версии 2.5.0 т.к в библиотеки ES8266WebServer данный метод был переименован в responseCodeToString.

image.png image.png 

По этому, Вы скорее всего ошиблись в версиях или используете не оригинальный репозиторий.

Исправить это можно уйдя на более низкую версию или заменив строку

String codeTranslate(int code) { return ESP8266WebServer::_responseCodeToString(code); }

на эту

String codeTranslate(int code) { return ESP8266WebServer::responseCodeToString(code); }

Вот репозиторий который использую я http://arduino.esp8266.com/stable/package_esp8266com_index.json

15 часов назад, Astron сказал:

Далее, при попытке выполнить следующий шаг инструкции, залить папку data с помощью пункта меню ESP8266 Sketch Data Upload,  выдается ошибка SPIFFS Error: esptool not found!

Esptool, это утилита, идущая в комплекте со всеми исходниками необходимыми для разработки и загрузки скетчей в Arduino IDE. А Вы производили установку дополнения ESP8266FS. Следовательно, ошибка вызвана неработоспособностью самой среды Arduino IDE, возможно часть файлов было потеряно или их не было вовсе.

Попробуйте сделать Portable версию Aduino IDE чтобы не быть привязанным к файлам, раскиданным по системе. Для этого: 

  1. Скачайте последнюю ZIP версию Arduino IDE, на момент публикации данного поста, это 1.8.9 https://www.arduino.cc/download_handler.php?f=/arduino-1.8.9-windows.zip
  2. Распакуйте содержимое архива в любое удобное Вам место.
  3. Зайдите в корневой каталог всех извлеченных файлов (пусть он называется \arduino-1.8.9) и создайте там каталог с именем portable
  4. Файл плагина ESP8266FS разместить по такому адресу \arduino-1.8.9\portable\sketchbook\tools\ESP8266FS\tool\esp8266fs.jar
  5. Все необходимые библиотеки размещайте тут \arduino-1.8.9\portable\sketchbook\libraries
  6. А исходники проектов тут \arduino-1.8.9\portable\sketchbook
  7. Теперь запустите Arduino IDE и в настройках добавьте репозиторий ESP8266 http://arduino.esp8266.com/stable/package_esp8266com_index.json
  8. Добавьте в среду разработки поддержку ESP8266, как описывалось в инструкции или внесите изменения, о которых я говорил чуть выше чтобы все собиралось в версиях 2.5.1+

image.png

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


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

В общем, полное фиаско.

Пробовал создать портативную версию среды ардуино по предложенной Вами инструкции - ошибки компиляции сыпались просто дождём, подробности не сохранил, но там речь шла о неправильно подключенных или отсутствующих библиотеках. Подозрение пало на сам компьютер с заезженной "семёркой", которая заросла мусором, не обновляясь с 2013го года. Решил действовать радикально, взял другой комп с чистой "семёркой", на который никогда раньше не устанавливалась среда ардуино. Опять установил всё по инструкции, подключил библиотеки и обновил их до последних версий. Теперь компилятор ругается на любое упоминание jsonBuffer в коде, выдавая что дескать 'jsonBuffer' was not declared in this scope. Также ругается на строку DynamicJsonBuffer jsonBuffer; в файле config.h - DynamicJsonBuffer is a class from ArduinoJson 5. Please see arduinojson.org/upgrade to learn how to upgrade your program to ArduinoJson version 6. Но у меня установлена последняя версия библиотеки json 6.10.1, по идее это шестая и есть.

То ли я тупой, то ли... Похоже не судьба мне этот проект собрать :(

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


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

Доброе время суток @Astron

13 часов назад, Astron сказал:

подключил библиотеки и обновил их до последних версий

Тут Вы поспешили, смотрите в чем дело

13 часов назад, Astron сказал:

Также ругается на строку DynamicJsonBuffer jsonBuffer; в файле config.h - DynamicJsonBuffer is a class from ArduinoJson 5. Please see arduinojson.org/upgrade to learn how to upgrade your program to ArduinoJson version 6. Но у меня установлена последняя версия библиотеки json 6.10.1, по идее это шестая и есть.

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

Так что вы практически все сделали правильно.

На всякий случай, я сформировал архив с Portable Arduino IDE v1.8.9 для Windows с поддержкой ESP8266 и ESP32, а также установленными FS плагинами для загрузки файлов web сервера, базовым набором библиотек (не все нужно обновлять) и скетчем с проектом метеостанции. Я мог что-то упустить, но надеюсь у Вас все получится.

Скачать можно тут: https://yadi.sk/d/lXNS4_juPVPYwA

  • Like 2

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


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

Ура, получилось! Спасибо Вам огромное!

Как оказалось, причина была именно в моей невнимательности, в части установки правильной версии библиотеки json. Установил версию 5.13.2, и дело пошло. Ваш архив с готовой сборкой также очень пригодился, я распаковал его на компьютере с той самой заезженной "семёркой", и всё собралось) Может быть, стОит даже разместить ссылочку на него в первом посте темы для повторения проекта такими же "чайниками" как я.

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

Насчет предложений по добавлению функционала. В разделе управления GPIO есть некие зачатки автоматизации. Было бы неплохо их расширить. Добавить возможность выбора не только превышения но и снижения температуры относительно заданного порога (включаем не только "холодильник" но и "нагреватель"), сделать возможность выбирать гистерезис самостоятельно. Также было бы здорово добавить функционал для других датчиков: срабатывание по порогу освещенности и порогу уровня СО2. Тогда девайс станет еще и идеальным контроллером для теплицы или, как у меня, для выращивания растений на балконе, автоматически включая фитолампы и открывая заслонки для проветривания.

По повышению удобства использования, было бы неплохо сделать в коде или в веб-интерфейсе опцию, отключающую "красивости" на экране показа параметров, оставляя только однородный синенький фон, либо статичное изображение. Да, шикарно выглядит, согласен, но если смотреть на это дольше 10-15 секунд, голова кругом идти начинает :D .  И... спорное предложение, знаю, поскольку сама по себе идеология устройства другая. Но сделать бы возможность вывода данных с датчиков на экранчик. Вроде и смысла нет особо - достал мобильник да смотри в браузере. Но с другой стороны, подойдя к окну бросить мимолётный взгляд на экран, узнав сколько там чего за бортом, вообще не потребует никаких дополнительных действий. Сейчас же есть крошечные I2C OLED 0,96' дисплеи, подключить его в ту же шину и готово. Да, со временем они выгорают, но парень с ютуб-канала "Электроника в объективе" делал стресс-тест десятка таких дисплеев, и заметная деградация появилась только через год непрерывной работы. Учитывая цену таких дисплеев порядка 150-180 руб/шт, их можно просто каждый год выбрасывать и покупать новые) А уж если шевелить цифрами по дисплею а ля "хранитель экрана", ресурс работы возрастёт многократно.

ЗЫ. Всё вышеописанное отнюдь не призыв к действию "вынь да положь", и исключительно рассуждения вслух на тему "что бы из этого могло пригодиться некоему пользователю данного девайса". Если что-то из этого при вдумчивом размышлении окажется полезным и будет добавлено в новые версии прошивок, буду очень рад)

И еще раз огромное спасибо уважаемый @Kitsum за Вашу дотошность (если тут применимо это слово) в области помощи новичкам, без Ваших подсказок я бы не справился!

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


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

@Astron рад, что у Вас все получилось.

09.06.2019 в 16:42, Astron сказал:

В разделе управления GPIO есть некие зачатки автоматизации. Было бы неплохо их расширить.

Да, раздел управления GPIO делался по просьбе людей где-то в этой теме и работает при условии, что датчики с нужными внутренними идентификаторами будут описаны. Его можно расширять, в этом нет ничего сложного, но проблема в количестве свободных портов микроконтроллера, внешне кажется, что ног много, но по факту, большая часть задействована под внутренние нужды микроконтроллера. Эту проблему можно решить, используя i2c расширители портов, но как мне кажется, лучше перейти на ESP32, это будет дешевле и сам контроллер намного интереснее.

В текущем проекте много проблем как в логике и коде, так и в концепции в целом, все это делалось одновременно с изучением основ C++, JS и т.д. На данный момент много кода переписано под ESP32, а точнее написано с нуля, но с оглядкой на опыт использования ESP8266. Я постараюсь учесть пожелания всех, кто отписывался в теме, но точно могу сказать, что реализовываться они будут под ESP32. Под ESP8266 глобальных исправлений, скорее всего не будет, но раз интерес к уже опубликованному коду еще не угас, то я постараюсь снять ряд видеороликов в которых покажу как работают разные программные модули проекта и как вносить свои изменения чтобы людям было проще разбираться в моей писанине видя всю картину в целом и не испытывая при этом нравственных страданий. Ну и естественно, что тема поддержки новичков будет продолжать функционировать.

09.06.2019 в 16:42, Astron сказал:

По повышению удобства использования, было бы неплохо сделать в коде или в веб-интерфейсе опцию, отключающую "красивости" на экране показа параметров, оставляя только однородный синенький фон, либо статичное изображение

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

09.06.2019 в 16:42, Astron сказал:

Но сделать бы возможность вывода данных с датчиков на экранчик.

Кстати, в этом нет ничего сложного, все необходимое уже реализовано, и добавить данный функционал можно буквально за 15-20 минут. Самое сложное, это как оформить красиво картинку на дисплее. Постараюсь найти какой ни-ть i2c дисплей и показать как это сделать.

PS: спасибо за поддержку, это очень важно для меня!

 

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


Ссылка на сообщение
Поделиться на других сайтах
11.06.2019 в 14:37, Kitsum сказал:

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

Добрый день! А как в старом интерфейсе остановить летящие тучи или заменить на просто синий фон?

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


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

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

Ищите строку

setTimeout(loadSky, 2000);

Эта строка находится внутри функции sensorsStructure, которая в свою очередь отвечает за первоначальную отрисовку всех сенсоров.

Просто замените эту строку на это

$(".loading").fadeOut(2000);

Это уберет анимацию загрузки страницы.

После этих не хитрых операций Вы можете удалить фай cloud.css.gz и его распакованный вариант cloud.css (если он имеется) из флеш памяти микроконтроллера.

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


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

$(".loading").fadeOut(2000);

Спасибо, работает. А то не понимашь, то ли на облака смотреть, то ли на показания (облака , кстати, весьма симпатичные)

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


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

Добрый вечер. Прошил свою NodeMCU в точности как указанно в инструкции. Arduino IDE ошибок при прошивке не выдавал. Точка поднялась, но при попытке зайти в web интерфейс ошибка 404. Но если в строке написать "http://192.168.4.1/api/sensors"  то вижу следующие 

{"out_temperature":0.00,"out_humidity":0.00,"out_pressure":0.00,"out_light":0.00,"out_absoluteHumidity":0.00}

Куда копать? Пробовал с 4 разных устройств. 

 

PS

Arduino IDE v1.8.5 

ESP8266, версия 2.4.2

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


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

@Nickson2006 доброе время суток. Скорее всего Вы не залили файлы из каталога data во flash память. Просмотрите еще раз инструкцию, после прошивки скетча необходимо залить файлы с помощью дополнительного плагина для Arduino IDE.

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


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

Всем добрый вечер. @Kitsum спасибо большое за подробную инструкцию и скетч для метеостанции. Собрал 2. Одна на чипе CH340, другую на CP2102. Все работает прекрасно. Только для второй использовал настройку: "плата - Node MCU 0.9 ESP-12". Датчика BME280 у меня пока еще нет, но есть BMP280. От него работает только температура и давление. Хочу спросить, можно ли добавить расчет точки росы, индикацию изменения давления (типа " к дождю" и т.п.), добавить поддержу сервиса Blynk, добавить дисплей 2004. Вопрос не по программной части: как правильно расположить датчики в корпусе на улице? Сейчас ко мне едет из Китая такой корпус:

 2019-06-20_21-25-12.png.7c5c49d4579dcac94e897d3faa5fe6a9.png

 

планирую поставить BME280, BH1750 и CCS811. Как было бы правильно их с вашей точки зрения расположить.  У меня сейчас уже год работают 2 метеостанции, одна в России, другая в Болгарии. Обе были куплены через сайт народного мониторинга. Но работают они плохо. Обе с датчиками AM2302, BMP085 (по моему такой...). Одна станция через пару месяцев работы стала показывать 99% влажность. Другая 99% влажность показывает только ночью. Датчики стоят на северных сторонах домов в распредкоробках, с отверстиями для вентиляции. Есть интересный момент, они предают на сайт еще и напряжение на ESP и уровень сигнала Wi-Fi. Можно ли и в вашу метеостанцию добавить отображение этих данных. Спасибо. 

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

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


Ссылка на сообщение
Поделиться на других сайтах
20.06.2019 в 21:37, den48rus сказал:

на сайт еще и напряжение на ESP и уровень сигнала Wi-Fi. Можно ли и в вашу метеостанцию добавить отображение этих данных. Спасибо.  

Они там есть, только скрыты. Для того чтобы они были доступны через web-интерфейс необходимо раскомментировать в файле users_auto.h несколько строк.

На рисунке показано какие.

image.png.2d0f9f1bdfebe4ba465926f97a9e5f7e.png

После это в на странице появится image.png.6ce7cb5f62c397b7afb6d2b20c16e383.png

Жмём "полудомик" и получаем image.png.5dccd6c1f834e304e9edaf0ee889b990.png

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

image.png.bde7adb2c37c3022926878ec03dc7324.png

image.png.d4e000a55b9e3c1c8178e5f0b92d2e8e.png

Изменено пользователем Вадим Гречухин
  • Like 1
  • Thanks 1

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


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

Доброе время суток. Заранее спасибо, что помогаете друг другу!

20.06.2019 в 21:37, den48rus сказал:

Хочу спросить, можно ли добавить расчет точки росы, индикацию изменения давления (типа " к дождю" и т.п.), добавить поддержу сервиса Blynk, добавить дисплей 2004.

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

/* Функция расчета точки росы */
float dewPoint(float t, float h) {
  float a = 17.271;
  float b = 237.7;
  float temp = (a * t) / (b + t) + log(h * 0.01);
  return (b * temp) / (a - temp);
}

Теперь можно объявить новый сенсор, но для начала опишем настройки для визуализации.

knob_t *DP = new knob_t(-40, 125, ".1", "Точка росы", "°C");

Ну и сам сенсор, но помните, что он берет данные от других датчиков, которые должны быть объявлены. У меня они имеют идентификаторы out_temperature и out_humidity для температуры и влажности соответственно.

sensors.add(DP, device::out, "out_dewPoint", [&](){
  return dewPoint(
    sensors.get("out_temperature"),
    sensors.get("out_humidity")
  );
});

Вот в принципе и все не сложные операции.

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

Для LCD дисплея 20х4 Вам понадобится i2c конвертер, возможно он уже распаян на нем, в противном случае у Вас не хватит свободных портов для подключения. Далее все еще проще, скорее всего у Вас уже имеется библиотека для работы с ним, и наверное это она https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Подключаем библиотеку и объявляем дисплей (например в основном .ino файле), убедитесь, что i2c адрес для дисплея никем не занят.

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

Производим инициализацию дисплея, например, в конце функции setup.

lcd.begin();
lcd.backlight();

Теперь создадим в планировщике задачу которая будет обновлять данные на дисплее каждые 30 секунд, опишем её сразу после инициализации дисплея.

cron.add(cron::time_30s, [&](){
  lcd.clear();
  lcd.printf("Temperature %.1f C", sensors.get("out_temperature"));
});

Первой строкой мы очищаем дисплей, а второй выводим данные. Естественно, что Вы можете изменять позицию курсора.

Сразу отмечу, что я не проверял этот код, я просто опираюсь на описания библиотеки (LiquidCrystal_I2C.h) и её "родителя" (print.h) которые посмотрел на GitHub

  1. https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/LiquidCrystal_I2C.h
  2. https://github.com/esp8266/Arduino/blob/master/cores/esp8266/Print.h

Но общий смысл должен быть понятен.

Что касаемо Blink, то мне с ним не приходилось сталкиваться, дать какие-то рекомендации со своей стороны затрудняюсь, нужно изучать API сервиса. Но я рад, что есть люди @Вадим Гречухин которые это уже реализовали.

20.06.2019 в 21:37, den48rus сказал:

как правильно расположить датчики в корпусе на улице?

Перед установкой датчиков стоит обработать все открытые и подвергающиеся воздействия окружающей среды элементы диэлектрическим лаком. Сами сенсоры на время обработки лаком стоит закрыть чем ни будь чтобы не вывести их из строя. Обязательно убедитесь в их работоспособности после этих операций. Я старался размещать датчики сенсорами вниз, особенно фото датчики чтобы уменьшить количество оседаемой на них пыли, у меня её много т.к. проживаю чуть ли не в интимной близости от дороги. Ну а в будке, как мне кажется, лучше размещать их в средней части, на небольшом удалении друг от друга чтобы они не могли влиять на показания соседей. Все это мое субъективное мнение, основанное только на личном опыте. Далеко не факт, что он верный.

Из достоверных источников известно точно, что сама будка должна быть расположена в теневой зоне на высоте пары метров от земли и не иметь вблизи других строений. В моем случае нарушены все эти правила т.к будка закреплена на мачте параболической антенны далеко даже не на первом этаже многоэтажного дома на расстояние 20 сантиметров от стены этого дома да еще и на солнечной стороне. В общем все это влияет на показания, но самое критичное это солнечная сторона, старайтесь найти место в тени на весь световой день.

20.06.2019 в 21:37, den48rus сказал:

Одна станция через пару месяцев работы стала показывать 99% влажность. Другая 99% влажность показывает только ночью.

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

  • Thanks 1

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


Ссылка на сообщение
Поделиться на других сайтах
17.04.2019 в 16:38, Kitsum сказал:

Также можете отключать разные части кода

Добрый день! Совсем упёрся в нехватку оперативной памяти ESP8266 - вместе с температурой, влажностью и давлением от BME280 , напряжением ESP, размером занятой памяти и уровнем WiFi могу добавить только 29 параметров передаваемых от slave ардуин. С добавление 30-го параметра полностью отрубается web-интерфейс. Можно ли для экономии памяти в круговых диаграммах выводить только часть данных, а полностью все данные отправлять по MQTT? Может, еще что-то можно частично отключить, чтобы высвободить оперативную память? Заранее благодарен за ответ.

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


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

По поводу Blynk... Прикручивал сам, автор и так много сделал.. 

@Вадим Гречухин не могли бы вы поделить как это сделать?? Заранее спасибо.

Цитата

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

@Kitsum если вам не трудно, можно по подробнее: куда и как надо вставлять эти куски кода. Просто я не программист ни разу, трудновато мне это дается. Спасибо.

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


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

Добрый день! Дерзну ответить. У меня сделано так:

1. В файле с датчиками (по умолчанию "users_bme280_x2.h")

после строки "knob_t *H = new knob_t(   0,   100, ".01", "Влажность",   "%");"  вставляете:

knob_t *DP = new knob_t(-50, 100, ".01", "точка_росы", "°C");

(это будет круговая диаграмма с точкой росы)

2. перед строкой "void sensors_config() {" вставляете:

float dewPointFast(float celsius, float humidity)   
{
        float a = 17.271;
        float b = 237.7;
        float temp = (a * celsius) / (b + celsius) + log(humidity*0.01);
        float Td = (b * temp) / (a - temp);
        return Td;
}

(это функция расчета точки росы)

3. после строки " sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true);" вставляете :

sensors.add(DP, device::out, "dewpoint",  [&](){ return dewPointFast(out_temp(), out_hum()); }, true);

(это добавление програмного датчика точки росы для уличного датчика)

4. заливаете прошивку и точка росы должна появиться в веб-интерфейсе

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

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


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

Доброе время суток.

30.06.2019 в 14:18, post125 сказал:

Совсем упёрся в нехватку оперативной памяти ESP8266 - вместе с температурой, влажностью и давлением от BME280 , напряжением ESP, размером занятой памяти и уровнем WiFi могу добавить только 29 параметров передаваемых от slave ардуин. С добавление 30-го параметра полностью отрубается web-интерфейс.

Вы уверены, что это именно проблема с оперативной памятью? В консоль выводится какая-либо информация по ОЗУ? Если нет, то добавьте для теста, в Setup следующий код.

cron.add(cton::time_10s, [&](){
  Serial.printf("free ram: %u\r\n", ESP.getFreeHeap());
});

После этого запустить контроллер с прописанными 30-ю и более датчиками. Понаблюдайте за этим значением.

Уточните, что вы имеете в виду под "полностью отрубается web ...", при заходе на страницу вы получаете ошибку, что запрашиваемая страница не найдена или что-то появляется? 

Я предполагаю, что проблема не с ОЗУ, а с тем, что все данные с датчиков, в том числе их структура и логи, передаются через объекты String, а не потоковым выводом. Думаю, что просто данных слишком много и все не поместилось. А т.к. данные представлены в формате json, который имеет строгий синтаксис, то при разборе вылетает ошибка, в следствии чего не создаются сенсоры в web интерфейсе и т.д.

Если я прав, то стоит пересмотреть как способ формирование ответов сервера на API запросы, так и варианты хранения данных.

@den48rus Если Вам еще нужна помощь, то сообщите какие изменения Вы уже вносили, какие пользовательские файлы используете и какие датчики?

  • Thanks 1

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


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

В консоль выводится какая-либо информация по ОЗУ

Благодарю за ответ.

Включение консоли отгрызает еще порядка 2,5к ОЗУ. Загрузил, пишет:

free ram: 11496


при попытке открыть веб странцу пишет:

free ram: 10672
http: 10.185.19.74 /index.htm, 304
http: 10.185.19.74 /jquery.min.js.gz, 304
http: 10.185.19.74 /jquery.knob.min.js.gz, 304
http: 10.185.19.74 /md5.js.gz, 304
http: 10.185.19.74 /highcharts.js.gz, 304
http: 10.185.19.74 /favicon.ico, 304
free ram: 11496

веб страница, естественно не открывается, на синем фоне крутится стандартное колесо из белых точек.

34.jpg.1664cde88f50ca92f30cad0311597fc4.jpg

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

Все датчики со slave ардуин добавляются идентично:

sensors.add(S3_0, device::out, 0x01, "out_3_0", out_3_0, true);
sensors.add(S3_1, device::out, 0x01, "out_3_1", out_3_1, true);
sensors.add(S3_2, device::out, 0x01, "out_3_2", out_3_2, true);
sensors.add(S3_3, device::out, 0x01, "out_3_3", out_3_3, true);
sensors.add(S3_4, device::out, 0x01, "out_3_4", out_3_4, true);
sensors.add(S3_5, device::out, 0x01, "out_3_5", out_3_5, true);
sensors.add(S3_6, device::out, 0x01, "out_3_6", out_3_6, true);
и так далее

наверное, в моей ситуации 29 параметров со slave ардуин + 3 програмных + 3 с BME280 и без консоли - это предел для ESP8266.

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

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


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

Пробовал вставлять куски кода по совету @post125, всё прошивается, но показания и круглая диаграмма на странице не отображается. Я думаю, это из-за того, что у меня подключен только один датчик. BMP280, с него берется только температура и давление. Поэтому не отображается точка росы. Нужные датчики приедут со дня на день. Как вы думаете, нормально ли будет подключить все датчики витой парой, в смысле использовать одну пару для  питания всех датчиков, подключить их параллельно, а оставшиеся пары использовать для данных. Как раз 3 пары на 3 датчика. 

И еще мысли, идеи: можно подключить DS18B20 в герметичном корпусе и закопать его в землю на глубину 50 см( или больше, меньше...), тем самым измерять температура почвы, промерзание почвы, может будет полезно садоводам. Можно подключить UV датчик и поставить его на крышу, закрыв его светопрозрачным колпаком от обычного датчика движения. Тем самым получать показания уровня ультрафиолета... Как вы думаете?

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

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


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

нормально ли будет подключить все датчики витой парой

Подключить можно, но нет смысла, т.к. датчики по i2c не рекомендуется подключать проводом длиннее 1,5 метров- могут глючить. А вот DS18B20 аполне можно подключать длинными проводами. Народ в сети заявлял об удачном подключении витой парой до 100 метров. Не проверял, но надежнее использовать экранированный кабель.  УФ датчик еще не добавил себе, но буду делать вместе с датчиком освещенности температуры воздуха и грунта, влажности, пыли. У меня только все внешние данные передаются через NRF24 и орегоновские датчики ветра и осадков и температуры по своему протоколы на 433МГц.

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


Ссылка на сообщение
Поделиться на других сайтах
04.07.2019 в 13:57, Kitsum сказал:

Думаю, что просто данных слишком много и все не поместилось

Добрый день! Отключил логи датчиков в "sensors.add" и ESPшка вздохнула полной грудью (тем более когда много датчиков треки всё равно не строятся). Теперь при трёх параметрах от BME280 , трёх программных датчиках и 64 параметров от 4-х slave ардуин занято памяти 55952, свободно 25964. Теперь возможности прошивки соответствуют железу, которое собрал. Конечно, 70 диаграмм на одной странице - это каша. Можно ли как-то сделать не 2 закладки как сейчас "out" и "in" , а хотя бы 4-5. Заранее благодарен за ответ.

  • Like 1

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


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

@Kitsum Огромнейшее спасибо за проект!

Валялась у меня как раз голая ESP-12F, вчера обвязал ее резисторами и прошил, все прекрасно взлетело. Под рукой был BMP180 и судя по коду BME280 перекрывает кучу датчиков. Выключил - обновил по воздуху - показания стали сниматься BMP180. Потестирую пару дней и перекину в текущую метеостанцию, в которой трудится ESP-01. В общем еще раз огромное спасибо!

Вопрос, возможно уже поднимался в теме, но я ее всю еще не прочитал - почему бы исходники не двинуть в гитхаб? В теме 27 траниц, много всего полезного и дополнительного кода от других людей, думаю, есть тоже. Уверен, многие бы делали пул-реквесты с новыми фишками/датчиками, как например выше расчет точки росы или  blynk

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


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

Всем добрый день. На днях получил все необходимые датчики и корпус. Собрал всё. Проблем не возникло. Только на датчике CCS8111 контакт WAK надо подключить к GND на плате. После нескольких часов работы показания датчика улетели на максимум и так пробыли до рестарта ESP...

186551919_2019-07-0917-29-23..thumb.jpg.71056e46fa1d88f2734577745d6031a2.jpg

Как вы думаете, с чем может быть проблема?? И еще, как можно допилить код для взятия показания VOC???

Немного про корпус для датчиков из Китая, вот немного фоток: 

106313984_2019-07-0816-15-12.thumb.JPG.09cffdaa953fbe915bce61dc2720736d.JPG1345440512_2019-07-0816-16-04.thumb.JPG.3f807060eea8e438a0a96086b80588ea.JPG1670087863_2019-07-0816-14-29.thumb.JPG.ff84253050cec1d41039dafc0937fce3.JPG2115319365_2019-07-0816-13-30.thumb.JPG.5fe50c296057ee2d8dc1c4c7e09b7f22.JPG

Сам корпус серого цвета. посмотрим как поведет себя на улице

  • Like 2

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


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

на датчике CCS8111

а угарный газ где есть необходимость контроллировать? в котельной?

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


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

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

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



Войти сейчас

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

    • Автор: 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 пользователей

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

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