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

Kitsum

Пользователи
  • Публикации

    424
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    234

Сообщения, опубликованные пользователем Kitsum


  1. @Forester @RusD был обновлен исходник и убраны проблемы с индикацией температуры и убрано определение адреса bme280 на шине i2c. Скачайте и проверьте ушли ли Ваши проблемы. Я постараюсь уделить им более серьезное внимание по завершению работ над большим обновлением для метеостанции.

    21 час назад, RusD сказал:

    P.S.2. Проявилась проблема. На ноутбуке веб интерфейс метеостанции открывается нормально, другие же устройства(компы, ноутбуки, смартфоны) не могут открыть, появляется ошибка соединения. Все устройства подключены к одной wi-fi сети, использую ip адрес метеостанции, выданный ей роутером(192.168.31.179).

    К сожалению данной информации, недостаточно.

    • Как организована Ваша сеть?
    • С проблемных устройств подключаетесь к web интерфейсу метеостанции по имени или по адресу?
    • Проходит ли ping по имени? А по адресу?
    10 минут назад, RusD сказал:

    А что касаемо отключения вывода датчика Освещения?

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

    <div class="sensor">
        <div class="title">Освещенность</div>
        <div class="unit">lx</div>
        <input class="knob light" data-width="200" data-displayPrevious=true data-fgColor="#FFF" data-skin="tron" data-thickness=".1" value="0" data-min="0" data-max="65000" readonly>
    </div>

    Удалить в функции chenge()

    animate(".light", obj.light);

     


  2. @RusD Доброе время суток. Чтобы быстро избавиться от данной проблемы, я бы рекомендовал уменьшить число отображаемых знаков после запятой. Внесите следующие изменения в файл index.htm

    Найдите описание элемента визуализации температуры

    <div class="sensor">
        <div class="title">Температура</div>
        <div class="unit">&deg;C</div>
        <input class="knob temperature" data-width="200" data-displayPrevious=true data-fgColor="#FFF" data-skin="tron" data-thickness=".1" value="0" data-min="-40" data-max="125" data-step=".01" readonly>
    </div>

    В описании элемента input измените значение data-step с ".01" на ".1"

    Для более корректного исправления необходимо внести изменения в библиотеку Knob и учесть дополнительный символ "-". Я займусь работой над визуализацией после окончания работы над обновлением кода микроконтроллера.

    • Thanks 1

  3. @pasha413 доброе время суток.

    В 09.01.2018 в 16:46, pasha413 сказал:

    - датчик освещенности показывает очень низкие показания (когда свечу фонариком с телефона - максимум 600lx выдает), сейчас лежит на столе свет включен (по моим прикидкам должно быть около 100lx).

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

    В 09.01.2018 в 16:46, pasha413 сказал:

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

    График составляется исходя из данных сохраненных в ОЗУ микроконтроллера. Всего 144 точки с интервалом в 10 минут. В данной (вскоре устаревшей) версии прошивки метеостанции значения первой точки снимаются практически сразу при пуске микроконтроллера. Если Вы не вносили каких-либо изменений в логику снятия и логирования показаний, то я предположу, что проблема действительно с питанием. Очень похоже, что контроллер только что запустился. Попробуйте запитать микроконтроллер не от компьютера, а от другого источника, например, внешнего аккумулятора. Другой вариант, оставить все как есть, но при этом подождать 20-30 минут и не давать компьютеру, от которого Вы питаете esp8266, засыпать и убедиться, что не происходит никакой магии с настройками схем управления электропитанием в операционной системе. Дважды перепроверьте, что Вы не затронули логику построения логов. А для эксперимента Вы можете добавить вывод в Serial монитор текущего значения таймера millis() и по его изменению узнать действительное время работы микроконтроллера т.к для переполнения его значения нужно более месяца времени. Но опять же, судя по Вашему графику и наличию данных с 15.20 и до 17, проблема точно с питанием.

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

    Ashampoo_Snap_2018.01.11_23h35m00s_001_Chrome Legacy Window.png

    В 09.01.2018 в 16:46, pasha413 сказал:

    и можно ли изменить бар индикации температуры если меньше 0 то синий, если выше то красный (либо краснеет с повышением температуры)

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


  4. @valdemar у меня отклик был порядка 3-4 секунд, но даже этого будет не достаточно если Вы хотите какого либо серьезного применения. Лучшим выбором будет отказаться от обработки запросов к базе данных на уровне микроконтроллера. Использовать http, а лучше https соединение для передачи ключа внешнему скрипту на сервере, где произойдет выборка и обработка данных из базы, а микроконтроллер в ответ получит статус запрашиваемого ключа. Или использовать socket-ы с предварительным шифрованием передаваемых данных, но проще и быстрее использовать https. Уверен, что таким образом можно добиться времени, с момента поднесения ключа до открытия замка, не более 2 секунд в локальной сети.

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

     


  5. @Slava Мое личное мнение, что Вам стоит пересмотреть запросы к базе и уже от этого отталкиваться при редактировании кода микроконтроллера. Уверен, что контроллеру достаточно понимать имеется ли в базе учетная запись, подходящая под критерии необходимые для доступа к устройству. А всю математику реализовать на стороне MySQL сервера. Таким образом контроллер просто передает идентификатор ключа, СУБД производит поиск учетной записи соответствующей этому ключу с дополнительным условием - остаток на счету должен превышать установленный минимум. Если запись найдена, то силами самой базы данных, производится обновление баланса пользователя, а контроллер лишь смотрит на количество соответствий. Соответствие найдено, включаем нагрузку, не найдено, значит не включаем. Вы можете на самом MySQL сервере реализовать функцию,  которой в качестве параметра, будет передаваться идентификатор ключа. Вся логика будет заложена именно в ней, а от возвращаемого ею результата будет зависеть управление нагрузкой.


  6. @Alex_DIY Спасибо за Ваши наблюдения. На днях обновлюсь до последнего релиза ESP и продолжу работу над проектом. К сожалению, пока не нашел официальный список изменений для 2.4.0 (максимум 2.3.0), но думаю, что разработчики вскоре восполнят этот пробел.

    @EndWar @Serg Мне пришел датчик качества воздуха CCS811. Обязательно поделюсь своими впечатлениями.

     


  7. @EndWar Так, сразу Вас остановлю, да бы Вы не тратили свое время зря. Двойные кавычки есть во всех "пакетах" и соответствуют стандарту json. Разница лишь в том, как разные обработчики предоставили вывод той или иной информации, но это как философский камень... Любые строковые параметры передаются только в двойных кавычках. Проблема явно была в другом. Я уверен, что она не связана с метеостанцией, но как здравомыслящий человек, я хочу разобраться в ситуации.

    12 минуты назад, Alex_DIY сказал:

    И кстати, я вот думал, думал, зачем метеостанции датчик освещенности?

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


  8. @EndWar Если Вы имели в виду пропадание показаний с индикаторов в web интерфейсе, то я смог воссоздать Вашу ситуацию только нарушив стандарт json, который используется в API проекта. Передав место числового значения строковое. Если это длилось длительное время, то Вы сможете увидеть отражение этого инцидента на графике самой метеостанции и на сторонних ресурсах, куда Вы можете отправлять данные. Проверьте это для меня если у Вас есть такая возможность.

    @Alex_DIY К моему сожалению, я не могу дать точной информации по использованной flash памяти, это станет известно ближе к завершению обновления. На данный момент, хоть и реализовано больше половины задуманного, но я думаю, что этого недостаточно для увеличения доступности проекта нашим менее опытным коллегам и друзьям. Тем более, учитывая тот факт, что моим познаниям в программировании стоит пожелать лучшего, всегда будет то, что стоит улучшить и доработать. Для себя я выбрал основным связку из BH1750 и BME280 и оценивать объем занимаемого места могу только с использованием соответствующих библиотек. Какой объем памяти Вы можете себе позволить за вычетом Ваших дополнений?


  9. Все доброго времени суток.

    В 21.12.2017 в 21:16, EndWar сказал:

    Чёт я не понял, у меня одного сегодня показания в веб по нулям стали.?!

    Ваша ошибка единична и вызвана внешними факторами. Если она повторится, и в web интерфейс начнет себя вести не адекватно, то перейдите в "Инструменты разработчика" и просмотрите список ошибок во вкладке "Console". В описании ошибки имеется отсылка на исполняемый файл и часть кода в котором она произошла. Это информация поможет разобраться на чьей стороне проблемы и, какие действия стоит предпринять с Вашей стороны.

    @EndWar @Alex_DIY Друзья, давайте перестанем заниматься спорами, это пустая трата времени.

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

    • Перебрать весь код, исправить много ошибок и разбить его на модули
    • Вынести из основного файла все лишнее, что мешает пользователям быстро внедрить свои наработки в проект
    • Упростить систему выбора датчиков. Избавиться от системы комментариев и перейти на понятные людям ON/OFF или что-то подобное.
    • Упростить, для пользователей, работу с файлом конфигурации и свести к минимуму доработки кода для добавления собственных параметров.
    • Уйти от зоопарка констант и кучи кода отслеживающих наступления того или иного события. Реализовать не сложный планировщик задач, по идеологии напоминающий cron в unix системах, способный обрабатывать любые пользовательские функции с указанным интервалом времени и корректно отлавливающим переполнение uint32_t (unsigned long).
    • Переработать web сервер для ускорения его работы с клиентами. Быстро передавать информацию и освобождать соединение. Уже имеется x10 кратный прирост скорости передачи, что в совокупности с системой кэширования дает возможность отказаться от дублирования ресурсов web сервера микроконтроллера на стороне. Лабораторные тесты, если их можно так назвать, с отключенной системой кэширования, показали загрузку всего Web интерфейса из spiflash менее чем за 3 секунды, а с eTag менее 1 секунды.
    • Модернизировать систему работы с сенсорами. Как минимум, перенести все вычисление в один объект т.к по сути, структура и класс, это одно и тоже. Так зачем, например, держать расчеты для графиков вне объекта самого сенсора...? (риторический вопрос)
    • Пересмотреть систему работы с внешними серверами - одно соединение на всех. Возможно добавить работу с thingspeak (под вопросом).
    • Добавить поддержку скрытых домашних беспроводных сетей.
    • ...

    Постараюсь не затрагивать web интерфейс, на тот случай, если вы вносили собственные доработки при условии эксплуатации базового API. 

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

    PS: я старался не упоминать об обновлении в постах, но раз уж Вы стремитесь куда-то направить свою энергию, то делайте это в благих целях. И я предлагаю Вам направить её для проработки Ваших идей и предложений. Возможно стоит что-то внедрить или доработать. Но не кидайте сырые идеи, обдумайте предложения, я буду Вам признателен. Спасибо!

    • Like 2

  10. @Alex_DIY @EndWar друзья, позвольте и мне внесу 5 копеек.

    В 13.12.2017 в 00:48, Alex_DIY сказал:

    Мне кажется здесь какое-то усложнение , поочередно устройства меняют свои роли

    Дело в том, что во время работы транспортного контроллера могут возникнуть сложности, приводящие к его позднему сну:

    • Ошибки подключения к беспроводной сети
    • Задержки при передачи данных на севрер
    • Изменение поведения из-за внешних факторов, например, калибровка счетчиков
    • Форс мажорные обстоятельства

    Все это приводит к работе в холостую контроллера счетчиков и повышению потребления. Может быть я не прав, все выяснится при опытной эксплуатации.

    3 часа назад, EndWar сказал:

    более 6 лет работает система 433 МГц, по открытому канал управляет светом, бытовыми приборами, передаёт данные и никто меня не взламывает

    Рад был бы согласиться, но к сожалению, не стандартный интерес к чему-либо растет прямо пропорционально с ростом популярности, а мы с Вами как раз попадаем в круг интересов систем умного дома. И тут даже не важно кто разрабатывает, мы или они, главное, что используются популярные компоненты с открытыми спецификациями. А с программной частью справятся - "Mach mit, Mach’s nach, Mach’s besser!".

    Так что в споре между нападающим и обороняющимся победителя не будет никогда, максимум сменят роли.

    И опять же сугубо мое мнение. Если мы имеем два транспортных устройства с одинаковым ценником, это NRF и ESP, но при этом для первого необходимо придумать свой проприетарный протокол с шифрованием, а второе из коробки поддерживает CCMP и поверх этого может общаться с использованием SSL, так почему бы не бросить те же силы, чтобы получить CCMP + SSL + проприетарный протокол? Мне кажется, что это вполне логично. А NRF будет хороша при работе с некритическими системами, на подобии метеостанции.

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

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

    Отличная идея. Очень будет кстати если начать разработку своего сервера умного дома...


  11. @wildray под младшим братом я подразумевал возраст :) С NRF поиграемся немного позже. Сейчас необходимо завершить другие идеи с счетчиками воды, MQTT сервером (mqtt.it4it.club) и исправить косяки в метеостанции. Также хочется попробовать ESP32, но это тоже будет позже. Возможно кто-то поделится своими наработками.

    IMG_0655.JPG


  12. @wildray доброе время суток.

    20 часов назад, wildray сказал:

    может на веб странице продублировать все 4 показания но по датчику инт, и кружочек например поменять на зеленый когда нагрузка включена?!?

    Вопрос дизайна, пожалуй, один из самых острых. Над этим стоит подумать, ведь у всех свое представление о нем, а угодить каждому невозможно. Но реализовать Ваше пожелание совсем не сложно. Имеется структура sensor описывающая переменные в которых хранятся данные с датчиков, в том числе и логи. Объявите новые переменные для внутреннего датчика BME280. Далее заполняйте их в функции readSensors, аналогично тому, как это делается с внешним датчиком. Для передачи этих данных в web сервер посмотрите на функцию web_api_sensors. В ней необходимо добавить ваши данные в json объект sensor. Этого будет достаточно, но если потребуется ведение лога, то потребуется провести аналогичные операции с функциями sensorLogWrite и web_api_sensors_log.

    20 часов назад, wildray сказал:

    мне понравилась идея, чтоб между сенсором внизу и сенсором вверху, не было проводов

    Скорее всего, в будущем, будет отдельный модуль подключаемый по I2C и позволяющий использовать различные автономные беспроводные датчики на базе NRF. Я думаю, что не стоит нагружать WiFi лишним трафиком т.к мы по прежнему имеем ограничение в количестве TCP соединений. Возможно стоит посмотреть в сторону младшего брата контроллера - ESP32.

    20 часов назад, wildray сказал:

    Развить и прикрутить еще в вебе часы, дату (NTP ж есть), почему бы это не показать

    По большому счету все устройства которыми мы пользуемся для подключения к метеостанции уже имеют на борту часы. А наличие NTP клиента подразумевает постоянное подключение к сети в которой имеется NTP сервер или выход в интернет. Хочу заметить, что это маловероятно при использовании метеостанции в гараже. Но если Вы заметили, то суточный график с датчиков выстраивается с отметками даты и времени, и при этом на ESP8266 нет часов. Тут как раз берется за основу время на устройстве с которого Вы просматриваете этот график, это легко проверить, просто переведя часы на этом устройстве. Даже в самой удаленной точке планеты, при условии доступа к GSM связи, Вы уже получаете точное время.

    20 часов назад, wildray сказал:

    "рассвет-закат" "фаза луны"

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

    В общем, везде есть нюансы, но сами по себе предложения интересны и их стоит рассмотреть.


  13. В файле ESP.cpp можно подсмотреть какие события перезапуска может различать ESP8266

    Скрытый текст
    
    String EspClass::getResetReason(void) {
        char buff[32];
        if (resetInfo.reason == REASON_DEFAULT_RST) { // normal startup by power on
          strcpy_P(buff, PSTR("Power on"));
        } else if (resetInfo.reason == REASON_WDT_RST) { // hardware watch dog reset
          strcpy_P(buff, PSTR("Hardware Watchdog"));
        } else if (resetInfo.reason == REASON_EXCEPTION_RST) { // exception reset, GPIO status won’t change
          strcpy_P(buff, PSTR("Exception"));
        } else if (resetInfo.reason == REASON_SOFT_WDT_RST) { // software watch dog reset, GPIO status won’t change
          strcpy_P(buff, PSTR("Software Watchdog"));
        } else if (resetInfo.reason == REASON_SOFT_RESTART) { // software restart ,system_restart , GPIO status won’t change
          strcpy_P(buff, PSTR("Software/System restart"));
        } else if (resetInfo.reason == REASON_DEEP_SLEEP_AWAKE) { // wake up from deep-sleep
          strcpy_P(buff, PSTR("Deep-Sleep Wake"));
        } else if (resetInfo.reason == REASON_EXT_SYS_RST) { // external system reset
          strcpy_P(buff, PSTR("External System"));
        } else {
          strcpy_P(buff, PSTR("Unknown"));
        }
        return String(buff);
    }

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

    11 час назад, Alex_DIY сказал:

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

    Я смотрю в сторону транзисторного управление портом CH_PD или VDDA с помощью КТ315 или S8050. После пробуждения ESP берет на себя обязанность по контролю этого порта. В свою очередь, контроллер счетчика, убедившись, что транспорт проснулся, снимает с себя обязанности по поддержанию его питания и начинает передачу показаний, а заодно спрашивает о статусе последней передачи данных на сервер. Теперь ESP принадлежит самому себе и после завершения поставленной перед ней задачи снимает питание с транзистора. Также надо подумать о возможности конфигурации всех этих ребят через Web - отдельный режим, вызываемый внешним раздражителем, скорее всего кнопкой. А вот если у ESP8266 уже имеется доступ к домашней сети, то можно производить конфигурацию через MQTT. Держать отдельный топик с логическим значением 0/1 и если появилась 1, то не записать данные счетчиков в соответствующие топики, а наоборот, прочитать их и вернуть логическое значение в 0, тем самым подтвердить чтение данных. Получается своего рода калибровка показаний. Может быть глупо, но это первое, что пришло мне в голову помимо Web интерфейса.

    12 часа назад, Alex_DIY сказал:

    а может даже NRF стоит рассмотреть

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


  14. @Alex_DIY думаю, что мы говорим об одном и том же, но немного по-разному.

    В программе мы может узнать причину пробуждения, если память не изменяет, то поведать об этом нам могут

    ESP.getResetReason();
    ESP.getResetInfo();

    Но, к сожалению, в случае внешнего прерывания это не поможет. Счетчики придется заводить также на RST, но не напрямую, а через обвязку в виде конденсатора или иным способом. Это нужно, чтобы порт подтягивался к земле кратковременно, в противном случае контроллер не запустится. Но этого по-прежнему будет не достаточно т.к нам требуется отличать какой из счетчиков нас побеспокоил. Видимо придется подтягивать RST дважды, при замыкании и размыкании сигнальной цепи счетчика. Тогда получится выделить по дополнительному порту, продублировать каждый из сигналов на них и таким образом ориентироваться в том, что происходит. Ну и сразу минусы:

    • Много обвязки
    • Просыпаться нужно в два раза чаще
    • Велика вероятность допустить ошибку в расчетах
    • Не нужные сложности

    Но из-за спортивного интереса продолжим. Требуется передача показаний между пробуждениями. Для этого у нас есть доступ к области памяти, в которой можно хранить данные между циклами перезапуска ESP.

    ESP.rtcUserMemoryWrite(offset, &data, sizeof(data))
    ESP.rtcUserMemoryRead(offset, &data, sizeof(data))

    Так мы может держать текущие показания под контролем, а в случае, если память пуста, диагностировать потерю питания и поднять тревогу, требуя пользователя произвести сверку значений. Также переносить эти значения в EEPROM при передачи данных на сервер умного дома, это каждые 10-100 литров по расходу.

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

    Батарею какой емкости Вы используете? Какова частота замены аккумулятора? Рассматривали ли Вы варианты зарядки аккумулятора от солнечной батареи или другого источника?


  15. @Alex_DIY Работа от собственного источника питания, это независимость системы, естественно при условии разумного аппетита. Внешнее питание может пропасть и могут появиться расхождения показаний между контроллером и счетчиком. Но я не вижу трудностей для поддержки работы как от аккумулятора, так и от внешнего источника.

    С глубоким сном и прерываниями для ESP8266 отдельная история. Программа однозначно будет крутиться в пределах функции Setup и передавать данные между пробуждениями придется через RTC. Также есть нюансы с потреблением при пробуждении. Вычитал, что от версии SDK зависит аппетит, а связано это с конфигурацией WiFi еще на самом старте микроконтроллера и до начала выполнения пользовательской программы. В общем тонкостей очень много, все нужно учесть.

    Я пока экспериментирую на Atmega328p. Пока в виде Arduino UNO но, когда будет до конца продумал алгоритм и готова сама программа, будет использован голый микроконтроллер с частотой 8мГц и тактированием от внутреннего кварца. Два порта настроены на вход, используют внутреннюю подтяжку к питанию и завязаны на внешнее прерывание, режим FALLING. Внешне порты подтянуты к земле через конденсаторы 0.1 мкф. Счетчики, естественно, коммутируют землю. Таким образом получается бороться с дребезгом. Возможно стоит коммутировать счетчики через дополнительный резистор на 1-2 кОм.

    По идеи суть работы довольно проста. Считаем импульсы, инкрементируем показания и засыпаем. При расходе каждых 10-и или 100-а литров воды, производим измерение заряда аккумулятора и будем транспортный контроллер - ESP8266 через CH_PD. Возможно стоит с начало будить, а потом измерять заряд. Передаем данные нашему транспорту и можно засыпать, но в таком случае, ESP должен самостоятельно позаботиться о контроле за CH_PD. Ну и последующая передача данных на сервер и отключение. Если во время связи появились проблемы, то запоминаем это и сообщим о них первому контроллеру в момент очередного пробуждения. Возможно ему будет полезно об этом знать...

    К программе для ESP тоже имеется ряд ограничений, но до этого еще далеко.

    23 часа назад, Alex_DIY сказал:

    Это уже модули умного дома, вероятно не имеющие к контроллерам отношения :-)

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


  16. @Alex_DIY Вот, что мне понравилось по теме дозиметра.

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

    post-2-0-65708300-1457468900.png

    2. Дозиметр ArDOs. В принципе, все готово, остается только выбросить все лишнее (подготовить к стационарной работе), а оставшееся подправить под себя.

    ARD_dos_105.JPG

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

     

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

     

    Что касаемо контроля расхода воды.

    Мои познания в микроконтроллерах, это чистой воды хобби, которое появилось совсем недавно. Опыта разработки коммерческих проектов не имею, поэтому отталкиваюсь от мысли - "что получится, то получится". А хочется, чтобы получилось следующее:

    • Учет расхода холодной и горячей воды
    • Возможность работать длительное время в автономном режиме от аккумулятора
    • Передача показаний по WiFi (MQTT, GET) или 433мГц (скорее всего отомрет)
    • Проработать варианты автоматической передачи показаний (средствами умного дома) в МУП РАЦ (расчетно-аналитический центр) или другую, актуальную на тот момент, организацию.

    Уже получается, довольно точно, вести учет показаний с двух счетчиков. Пока идет работа над автономным режимом. Хочется максимально уменьшить аппетит микроконтроллера и заставить его работать длительный срок от аккумулятора 18650.

     

    • Like 1

  17. @Alex_DIY доброе время суток.

    Идея не покинула, но пока есть только набросок на бумаге и небольшой навесной монтаж. Все очень жидко, но первоначальная идея воспользоваться диодным умножителем и поднять напряжение с 5V до 400V. Хочется использовать микроконтроллер для генерации импульсов и накачки. Склоняюсь к Atmega328p или ATtiny85 т.к они есть у меня в наличие. Второй вариант предпочтительнее т.к более компактный. Думаю, что до конца этого года проект, по большей части, останется на бумаге т.к в данный момент идет проработка проекта контроля показаний счетчиков воды оборудованных импульсным выходом с последующей передачей показаний на центральный сервер.

    • Like 1

  18. @Alex_DIY Возможно стоит попробовать другую библиотеку, например, https://github.com/adafruit/Adafruit_Si7021

    Может быть это глупое предложение, но все же интересно, ведь реализация математики в библиотеках различна. В LowPowerLab используется побитовый сдвиг, а в Adafruit деление. К сожалению, рабочего датчика SI7021 у меня нет, и посмотреть, что прилетает от него я не могу.

    LowPowerLab

    return ((125 * humraw) >> 16) - 6;

    Adafruit

    humidity *= 125;
    humidity /= 65536;
    humidity -= 6;
    
    return humidity;

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

    Порт ADC микроконтроллера оставил переведенным в режиме VDD3P3. Связь с делителем не разрывал, но кинул перемычку с A0 (ADC) на EN (CH_PD или Chip Enabled), в принципе можно на вход питания микроконтроллера VDD 3.3V. Программа без корректирующего коэффициента.

    IMG_0631.JPGIMG_0633.JPG

    Подключение

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

    IMG_0634.JPG

    Стоит подумать над этим с делать окончательные выводы по поводу ADC.

    • Like 1

  19. 19 часов назад, wildray сказал:

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

    Они различаются т.к скомпилированы под разные датчики. Тот, что я скинул Вам, предназначен именно для BH1750 и BME280, а тот, что на первой странице для датчиков из описания, это BH1750, SI7021 и BMP180.

    19 часов назад, wildray сказал:

    Можно ли в них при использовании каких-то библиотек так убить?

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

    19 часов назад, wildray сказал:

    Я, честно с всякими есп и т.п. никогда дел не имел, это как хобби, нигде не могу найти ответа - програмирование с иде и есплорера - это 2-ве разные вещи?

    В Вашем случае - провильно ли я делаю - прошиваю файл бин флешером в 0х0000.. потом открываю файл ино в иде проверяю и заливаю, третим этапом заливаю скеч дата аплоадером файлы?

    Есть много вариантов программ для прошивки микроконтроллера, но по сути, они все делают одно и тоже. Использование среды Arduino подразумевает заливку программы через Arduino IDE. Прикрепленный к проекту .bin файл обычно нужен для прошивки через web, но в статье, по разным причинам, встречаются пробелы. Данное упущение я исправлю в ближайшее время. Используйте Arduino IDE для компиляции и загрузки программы, а также для загрузки содержимого каталога data на Flash. Использование Arduino IDE выгодно тем, что она проверяет обновления библиотек в автоматическом режиме и уведомляет Вас о доступности новой версии.

    @Alex_DIY @EndWar @wildray Друзья, что касаемо напряжения, позволю себе немного пофилософствовать.

    Думаю, что стоит копать в сторону порта ADC/TOUT. К нему подключен делитель напряжения (отдельный блок ADC на схеме) на двух резисторах - 100k и 220k.

    NODEMCU_DEVKIT_SCH.png

    Изначально АЦП микроконтроллера настроен на чтение из TOUT (порт A0), а мы перенастраиваем его

    ADC_MODE(ADC_VCC);

    И получаем возможность пользоваться функцией

    ESP.getVcc()

    Теперь смотрим, что имеется в последнем техническом описании от разработчика на странице 5 и 17

    0a-esp8266ex_datasheet_en-09.png0a-esp8266ex_datasheet_en-21.png

    ADC может работать в одном из двух режимов VDD3P3 и TOUT, но они не совместимы между собой. А также, если я правильно понимаю запись в разделе 4.9 для VDD3P3 - "TOUT must be floating", требует от нас отсоединить порт ADC от делителя напряжения используемого в плате NodeMCU и ей подобных, скорее всего оставить его в воздухе.

    НЕ СПЕШИТЕ: Также интересно, что если посадить порт ADC на VCC (ESP8266) и попробовать снимать данные напрямую. Но предварительно надо все обдумать дабы не нанести вред контроллеру.

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


  20. 18 часов назад, Alex_DIY сказал:

    А одинаковый ли приоритет на машинное время имеют СУБД и python?

    md5_mysql_vs_python_r2.pngmd5_mysql_vs_python_r1.png

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

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

    Primary key у нас итак априори уникальный. Плюс ко всему primary key итак является индексируемым полем, то у меня сомнения в использовании отдельного индекса. Так как это потери времени на операциях вставки - обновления полей из-за перестроения таблицы индексов. Может ошибаюсь. 

    Именно первичный ключ и остался после исправления, unique был выкинут за ненадобностью. Безусловно SELECT будет выполняться быстрее всего. INSERT медленнее, но со временем таблица будут наполнена, а новые записи хоть и будут появляться, но довольно редко. А вот с UPDATE все сложнее, каким именно образом СУБД решит производить обновление сказать сложно, это очень тонкая грань и требует хороших знаний. Я предполагаю, что отметка об удалении и последующее добавлении записи происходить не будет, произойдет фактическое обновление т.к мы не затрагиваем индексируемые поля. А также поиск обновляемой записи будет происходить с использованием индекс. Но я не компетентен в таких тонкостях и строить дальнейших догадок не буду, но вопрос очень интересный и стимулирующий.

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

    Также,  учитывая малое количество записей индексирование вообще не даст заметных плюсов в выборке, а вот задержек в insert/update добавить может. Ошибаюсь?

    Если отказаться от индексов, то при поиске записи (SELECT/UPDATE) будет происходит сверка со всеми записями в таблице. Мне кажется, что это плохая идея.

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

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

    Соглашусь с данным высказыванием. Пожалуй, стоит уделить больше энергии и времени самому демону.


  21. @wildray Давайте разбираться.

    Я провел эксперимент со следующими датчиками.

    • Сборка 3 в 1 в лице BH1750, HTU21D и BMP180
    • Датчик 3 в 1 BME280

    Выглядит это следующим образом

    ДатчикиПодключение

    Из всего этого супового набора задействованы BH1750 + BME280. Чтобы задействовать именно эту сборку, необходимо только раскомментировать соответствующие им библиотеки, а все остальное закомментировать.

    Скрытый текст
    
    /*
       датчик освещенности
       BH1750 https://github.com/claws/BH1750
    */
    #include <BH1750.h>
    BH1750 BH1750;
    /*
       датчик влажности и температуры
       HDC1080 https://github.com/closedcube/ClosedCube_HDC1080_Arduino
       SI7021  https://github.com/LowPowerLab/SI7021
       HTU21D  https://github.com/sparkfun/SparkFun_HTU21D_Breakout_Arduino_Library
    */
    //#include "ClosedCube_HDC1080.h"
    //ClosedCube_HDC1080 HDC1080;
    
    //#include <SI7021.h>
    //SI7021 SI7021;
    
    //#include "SparkFunHTU21D.h"
    //HTU21D HTU21D;
    /*
       датчик атмосферного давления и температуры
       BMP085 https://github.com/adafruit/Adafruit-BMP085-Library
    */
    //#include <Adafruit_BMP085.h>
    //Adafruit_BMP085 BMP085;
    /*
       датчик атмосферного давления, температуры и влажности
       BME280 https://github.com/finitespace/BME280
    */
    #include <BME280I2C.h>
    BME280I2C BME;

     

    Больше никаких изменений вносить не нужно.

    Вот, что имеем в итоге на web сервере микроконтроллера и, что показывает сканер I2C шины

    esp8266_30.11.2017_test2.pngesp8266_30.11.2017_test1.png

    Прикрепляю скомпилированный файл (4mb Flash / 3mb SPIFFS) для Вашего тестирования: ESP8266_WS_iT4iT.CLUB.ino.nodemcu.zip

    16 часов назад, wildray сказал:

    И с вольтажем вопрос 2.78 - где подкалибровать?

    Ищите функцию web_api_system_info, Вас интересует следующая строка

    answer += "\"vcc\":\"" + String(ESP.getVcc() * 0.001) + " V\",";

    PS: все внимательно проверяйте.

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