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

Kitsum

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

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

  • Посещение

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

    234

Все публикации пользователя Kitsum

  1. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Хочу оставить небольшую заметку по поводу гигрометра. По умолчанию использовался датчик SI7021, сам по себе датчик очень хороший, но мой имел физический дефект в виде деформированной полимерной пленки поверх датчика. Деформация была получена в ходе моей неосторожности. Сама пленка представляет собой белую "ткань" и легко может быть удалена с сенсора, но если это сделать, то показания влажности, естественно, будут искажены. Опытным путем было выявлено, что без пленки показания будут завышены примерно на 20%. Но самое печальное, что при высокой влажности гигрометр переставал отдавать адекватные данные, и доверять можно было только его показаниям температуры. Пытаться восстановить пленку я считаю бессмысленным, проще заказать новый датчик. Тем более, что производитель предупреждает о том, что пленка должна быть в чистоте, не говоря уже о том, что она должна быть без повреждений. Имейте это в виду, если столкнетесь с похожей проблемой. На данный момент решено было произвести замену на новый HDC1080, он имеет схожие характеристики, но нижний придел температуры, при которой рекомендовано эксплуатировать гигрометр, составляет всего -20 градусов Цельсия. А вот встроенный датчик температуры способен адекватно работать в пределах от -40 до 125 градусов Цельсия. Посмотрим, как он себя покажет, а осенью задумаемся о замене всего парка датчиков. Очень хорошо, что предусмотрел возможность отсоединять будку от базового блока, не пришлось разбирать всю конструкцию и свешиваться с ключами из окна. Также отмечу, что белый PLA-пластик за полгода эксплуатации в уличных условиях начал желтеть, но на "ходовых" характеристиках это не отразилось. Будка по-прежнему довольно крепкая и справляется со своей задачей - защита датчиков. Теперь о том, какие изменения необходимо произвести в программе, чтобы датчик прижился. Аналогичные процедуры необходимо проводить и для любых других датчиков. Избавляемся от старой библиотеки /* датчик температуры https://github.com/LowPowerLab/SI7021 */ #include <SI7021.h> SI7021 SI7021; и добавляем новую /* датчик влажности и температуры https://github.com/closedcube/ClosedCube_HDC1080_Arduino */ #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080 HDC1080; Поправим структуру, использующуюся для хранения статуса датчика и его показаний. Для хранения данных будем использовать тип Float /* структура и переменные для хранения показаний датчиков */ struct sensor { float data = 0; bool status = false; }; В функции Setup находим, где происходит инициализация старого датчика SI7021 Wire.beginTransmission(64); if (Wire.endTransmission() == 0) { temperature.status = humidity.status = SI7021.begin(pin_sda, pin_scl); } и меняем на инициализацию нового датчика HDC1080. Wire.beginTransmission(64); if (Wire.endTransmission() == 0) { HDC1080.begin(0x40); temperature.status = humidity.status = true; } Находим в функции readSensors две строки, отвечающие за получение показаний температуры и влажности с датчика SI7021 if (temperature.status) temperature.data = SI7021.getCelsiusHundredths(); if (humidity.status) humidity.data = SI7021.getHumidityPercent(); и меняем их на запросы тех же самых показаний, но с датчика HDC1080 if (temperature.status) temperature.data = HDC1080.readTemperature(); if (humidity.status) humidity.data = HDC1080.readHumidity(); Теперь остается дело за малым. Необходимо избавиться от всех преобразований, которые делались перед передачей показаний. Начнем с API, это функция web_api_sensors. Необходимо найти в ней формирование json объекта sensor["light"] = light.data; sensor["temperature"] = temperature.data * 0.01; sensor["humidity"] = humidity.data; sensor["pressure"] = pressure.data / 133.3; и привести к следующему виду т.к для хранения данных мы теперь используем тип Float sensor["light"] = light.data; sensor["temperature"] = temperature.data; sensor["humidity"] = humidity.data; sensor["pressure"] = pressure.data; Ну и финальная часть. Необходимо убрать те же самые корректировки, но используемые в функции loop при построении запроса к ресурсу "Народный мониторинг". query += "&L1=" + String(light.data); query += "&T1=" + String(temperature.data * 0.01); query += "&H1=" + String(humidity.data); query += "&P1=" + String(pressure.data / 133.3); меняем на query += "&L1=" + String(light.data); query += "&T1=" + String(temperature.data); query += "&H1=" + String(humidity.data); query += "&P1=" + String(pressure.data); На этом все преобразования закончены. Компилируем и заливаем прошивку в микроконтроллер. Аналогичным образом заменяются любые датчики или добавляются новые. Обращу только внимание на инициализацию датчиков. Она происходит по принципу - если на используемом адресе шины i2c что-то есть, то условно, датчик считается обнаруженным, происходит вызов соответствующей функции инициализации датчика и изменение его статуса на true. Чтобы определить фактическое наличие датчика, используется функция, которой в качестве параметра address необходимо передать адрес используемый устройством, но в десятичной системе счисления (DEC). Таким образом, гигрометр с адресом в шестнадцатеричной (HEX) системе счисления 0x40, в десятичной (DEC), будет иметь адрес 64. Wire.beginTransmission(address)
  2. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Cadil доброе время суток. Скорее всего, готовые библиотеки есть, лично я сталкивался с различными реализациями, но в виде модулей или набросков кода. Идеи у всех одинаковые и реализации в принципе тоже: Хранить информацию (в нашем случае настройки) в удобном виде во Flash памяти, обычно один файл с удобной разметкой (json и т.п) Ограничить доступ к этому файлу Дать каких либо конкретных ссылок я не могу, но могу Вам помочь разобраться конкретно с данным проектом, чтобы Вы могли добавить необходимый Вам функционал. Если Вы решите взять его за основу, то дайте знать, и я постараюсь составить подробное описание.
  3. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Securbond Вы можете использовать любые датчики, вообще абсолютно любую периферию. Данная прошивка просто дает, возможно не лучший, но удобный, на мой взгляд, способ работать с контроллером и получить двустороннюю связь. Все исходники опубликованы в открытом доступе, и Вы можете вносить любые изменения чтобы получить требуемый для вас функционал. По умолчанию реализована работа с тремя, одними из самых распространенных, датчиков. На их принципе Вы можете добавить свою периферию. Если Вам потребуется какая-либо помощь или подсказка в каком направлении двигаться, я постараюсь Вам помочь в приделах своих собственных знаний.
  4. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Securbond Воспользуйтесь этой ссылкой http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html#uploading-files-to-file-system На всякий случай я скину Вам тот плагин, который использую я. esp8266fs.7z
  5. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Securbond Не хотят заливаться через Arduino IDE? Какой объем Flash памяти у Вашего микроконтроллера? Перепроверьте все пункты в настройке среды для загрузки файлов через неё. В оставленном ранее комментарии имеется ссылка на инструкцию. Кстати, если открыт Serial монитор, то загрузка файлов не будет работать.
  6. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Securbond приветствую. Ваша проблема кроется в среде разработки. Ознакомьтесь со следующим комментарием Выполните все указанные там пункты и все должно заработать.
  7. @slava_573 На мой взгляд, часы в замке это излишне. Кроме того, что конструкция усложняется, мы получаем дополнительное слабое звено. Добавьте в таблицу два поля time_start и time_end с типом int, в них мы будет хранить часы (в формате 24) начала и конца рабочего времени. Желательно выставить этим полям значения по умолчанию, скажет 7 и 18 соответственно. Далее в программе микроконтроллера необходимо реализовать дополнительный запрос. const char QUERY_ST[] = "SELECT type FROM test.rc522 WHERE uid = %s and time_start <= (select HOUR(NOW())) and time_end > (select HOUR(NOW()));"; Теперь потребуется добавить выбор нужного запроса в зависимости от того, в каком режиме находится замок - дежурный или программирование. Находим sprintf(query, QUERY_S, toQuery); Меняем на sprintf(query, (mode? QUERY_S : QUERY_ST), toQuery); После этого необходимо убедиться в точности часов Вашего MySQL сервера. В целом этого будет достаточно для организации доступа по времени для каждого ключа. PS: на практике не проверял, но Вам должно хватить этой информации для дальнейшей реализации.
  8. @slava_573 доброе время суток. Да, работает. Вот та часть кода, из оригинальной программы которая отвечает за это if(typeKey == F("1") or typeKey == F("2")) { if(!mode) { Serial.println(F("access allow")); // Доступ разрешен if(modeLock) { openTimer = millis()/1000; digitalWrite(PIN_RELAY, LOW); } else digitalWrite(PIN_RELAY, !digitalRead(PIN_RELAY)); squeaker(2, 2200, 200, 200); } else { if(typeKey != F("1")) { Serial.println(F("error: key elrady exists in eeprom")); squeaker(2, 500, 300); } } } По поводу Ваших потребностей с доработкой замка. Думаю, что это возможно и сходу вижу два варианта Кардинально переработать SQL запрос и проводить все необходимые проверки на уровне сервера базы данных. Использовать между контроллером и сервером базы данных посредника, например, PHP скрипт, который будет проводить все необходимые проверки и принимать соответствующие решения. На контроллере останется только задача управления замком, а вся логика переляжет на плечи PHP и даст возможность модифицировать систему под будущие потребности.
  9. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar проверьте, что по факту передается при запросе показаний с датчиков. Откройте в браузере "Инструменты разработчика", вкладка Network и выберите запрос /api/sensors В его описании будет разбор json строки с показаниями. Скорее всего, в Вашем варианте метеостанции проблема кроется в типе передаваемых данных с датчика BME280. Это float, а в описании структуры для хранения этих самых показаний используется integer, т.к оригинальный вариант программы рассчитан на работу с датчиком BMP085 который передает данные только в целочисленном виде. /* структура и переменные для хранения показаний датчиков */ struct sensor { int data = 0; bool status = false; }; Измените int на float в описании структуры и проверьте результат.
  10. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar в файле index.htm необходимо поправить конфигурацию сенсоров. Ищите параметр data-step=".1" он отвечает за отображение десятых долей и т.д Измените его на ".01"
  11. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @EndWar Рад, что у Вас все получилось и заработало без каких-либо проблем. По поводу измерения напряжения питания. Используется встроенный АЦП переключенный на измерения напряжения питания средствами самого микроконтроллера. Не отрицаю, что он может нам приврать, есть множество причин, которые способствуют этому. Но, на мой взгляд, это самый простой способ и избавляет от колхоза с внешним делителем, что ухудшает повторяемость проекта. Хотя резистивный делитель тоже вещь не надежная. Думаю, что для точного измерения напряжения лучше использовать внешний АЦП.
  12. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Alex_DIY Давайте разбираться. Данной Вами информации недостаточно чтобы понять в какую сторону копать. Потребуется произвести ряд действий. Я использую Google Chrome и часть действий описывается именно под него. Для других браузеров нужно действовать аналогично. Необходимо открыть Наcтройки управления -> Дополнительные инструменты -> Инструменты разработчика (Ctrl + Shift + I) и произвести удаление какого-либо файла. Проверить состояние удаления (ответ микроконтроллера) Также в Serial мониторе можно увидеть запрос на удаление. Из-за особенностей работы контроллера с памятью стоит проверить следующее Возможность загрузки файлов через Web интерфейс (можно даже не нужные для работы) Обновить прошивку через Web интерфейс
  13. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @alexd6969 Вы проверили скомпилированную мною прошивку? Я думаю, что ошибки по всем адресам на i2c указывают на проблемы физического характера. Не качественный монтаж линии или устройств на ней Слишком длинная линия Наводки на лини Неисправность одного из устройств на линии Я сталкивался с таким один раз, при выходе из строя барометра BMP085, в причины выходя из строя я не углублялся т.к отсутствует какое либо специализированное оборудование вроде осциллографа, но думаю, что он начал шумел на шине. Уберите все с шины, в том числе и саму линию, посмотрите, что выдаст сканер. Проверьте монтаж линии и датчиков, убедитесь, что все в порядке и отсутствуют косяки. Попробуйте посадить на линию другое устройство, не важно какое, но оно должно быть одно. Убедитесь, что сканер видит его, это даст понимание, что линия исправна.
  14. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Alex_DIY Прошу прощения, в спешке вылетело из головы, что ESP использует flash под все свои внутренние нужды. В таком случае да, резать css или менять ESP.
  15. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Alex_DIY Попробуйте удалить все оригинальные .js и .css, оставьте только их архивные копии (.gz). Все распространенные браузеры поддерживают работу с жатыми данными. Возможно, этого хватит, чтобы вместить все на flash объемом 1мб. По поводу библиотеки для барометра. Используемая в проекте библиотека от Adafruit может снимать показания со встроенного датчика температуры. Достаточно внести следующие изменения. Инициализация датчиков Заменить на Найти функцию отвечающую за получение показаний с датчиков Заменить на И спасибо, что указали на недоработку с шаблоном имени точки доступа. В ближайшее время внесу изменения.
  16. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @alexd6969 очень настораживаем момент с компиляцией скетча, а точнее то, что Вам пришлось вносить изменения и комментировать часть кода. Такого быть не должно. Задумка всего проекта в том, чтобы просто залить программу со всеми сопутствующими файлами web сервера не внося никаких поправок в неё и все заработает. Я предлагаю следующее - убедиться в актуальности всего парка используемого программного обеспечения, а именно: последняя версия Arduino IDE (на момент публикации этого поста я проверил на 1.8.1 и 1.8.3) последняя версия ПО для поддержки ESP8266 (на момент публикации этого поста версия была 2.3.0) последние версии всех используемых библиотек, указанных в программе микроконтроллера (ссылки в описании самой программы) На всякий случай я опубликовываю собранную программу. Можете залить через web интерфейс и проверить как поведет себя метеостанция. ESP8266_WS_iT4iT.CLUB.bin.7z
  17. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @alexd6969 Приветствую. Попробуйте воспользоваться I2C сканером и убедитесь в наличие датчика на шине, адрес 0x40. Я перепроверил прошивку опубликованную здесь, все работает в штатном режиме.
  18. Kitsum

    Arduino ethernet shield rfid mysql

    @br0k3nilluzion A link to the description of this project is one post above your message.
  19. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Zaq24 боюсь, что полного ответа Вы не получите т.к тут обсуждаем только устройства на программной платформе Arduino. Сразу могу Вам предложить почитать об использовании датчика BH1750 под NodeMCU непосредственно на GitHub https://github.com/nodemcu/nodemcu-firmware/tree/master/lua_modules/bh1750 Возможно, будет достаточно внести следующие изменения в файл mynarod.lua bme280.init(3,4) BH1750.init(3,4) BH1750.read(OSS) function readData() P, T = bme280.baro() H, T = bme280.humi() L = BH1750.getlux() print("PRESSURE=".. P/1000*0.75) print("TEMPERATURE=".. T/100) print("HUMIDITY=".. H/1000) print("LIGHT=".. L/100) end function sendData() sock=net.createConnection(net.TCP, false) sock:connect(8283,'narodmon.ru') sock:on("connection",function(sock, payload) local DEVICE_MAC = "7F-FF-31-10-69-54" local SENSOR_MAC_1 = "TEMPERATURE" local SENSOR_MAC_2 = "PRESSURE" local SENSOR_MAC_3 = "HUMIDITY" local SENSOR_MAC_4 = "LIGHT" readData() sock:send("#"..DEVICE_MAC.."\n#"..SENSOR_MAC_1.."#"..(T/100).."\n#"..SENSOR_MAC_2.."#"..(P/1000*0.75).."\n#"..SENSOR_MAC_3.."#"..(H/1000).."\n#"..SENSOR_MAC_4.."#"..(L/100).."\n##") end) sock:on("receive", function(sock, answer) print('Narodmon answered '..answer) sock:close() end) end sendData() tmr.alarm(0, 360000, 1, function() sendData() end ) Будет ли это работать, под большим вопросом т.к я не разбирался в принципах работы ESP и Lua. Для 100% решения Вашей проблемы, обратитесь к разработчику, у которого Вы взяли данную программу.
  20. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Что имеется в виду под словом компоненты? Программная часть? Тут тоже все выложено, достаточно только залить в микроконтроллер и все заработает. Никаких настроек производить не требуется. Внести изменения в код под датчик BME280 тоже поможем. Или под компонентами Вы и имели в виду датчик BME280?
  21. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Доброе время суток @Zaq24 Почему бы Вам не взять за основу данную метеостанцию на Arduino? Зачем именно Lua?
  22. @Small_d Думаю это будет полезным. Описание класса SerialPort Метод SerialPort.Open (обратите внимание на раздел Исключения) Свойство SerialPort.IsOpen Свойство SerialPort.ReadTimeout Свойство SerialPort.WriteTimeout
  23. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @zenone Давайте разберемся в происходящем подробнее. Работа DNS сервера За конфигурацию DNS сервера в режиме AP и перехвата всех доменных имен отвечают следующие строки в функции modeAP dnsServer.setErrorReplyCode(DNSReplyCode::NoError); dnsServer.start(DNS_PORT, "*", apIP); Далее опираясь на консольный лог и отсыл к файлу ncsi.txt, я могу сделать вывод, что вы подключаетесь с устройства под управлением операционной системы семейства Windows. Последняя в свою очередь использует Network Connectivity Status Indicator для отображения состояния подключения к сети интернет и в дальнейшем этот статус можно получить через API операционной системы. Для пользователей статус отображается в виде иконки подключения в трее. У меня несколько сетевых интерфейсов - основной проводной с доступом в интернет (указан стрелкой на рисунке) и несколько второстепенных, в том числе и подключение к тестовой метеостанции по WiFi (подчеркнуто выше). У последней есть описание "Нет подключение к интернету". Чтобы проверить состояние, операционной системе необходимо выполнить две проверки, одна из которых, это доступность адреса http://www.msftncsi.com/ncsi.txt Подробнее об этом можно прочитать на Windows IT Center В следующем обновлении я изменю поведение DNS сервера, чтобы реакция была только на имя, используемое метеостанцией в режиме STA. Теперь, давайте рассмотрим, как править основной шаблон без закачки его на микроконтроллер В файле index.htm, в секции с java скриптом имеется переменная описывающая путь до корневого домена var domain = ""; Необходимо указать полный http адрес метеостанции var domain = "http://10.10.10.1/"; Теперь Вы можете править index.htm на компьютере и при этом иметь доступ к API микроконтроллера. Но есть одно но, доступ будет только к открытой части API т.к полный доступ подразумевает авторизацию с использованием cookies. Чтобы обойти эту проверку необходимо в программе микроконтроллера внести изменения в функцию authorized и привести её к следующему виду. bool authorized() { return true; // обязательно удалите эту строку после завершения отладки /* Тут весь остальной код данной функции */ } Надеюсь это поможет Вам и упросит процесс отладки.
  24. @maxim Для подключения по шине I2C необходимы дополнительные пины - прерывание (IRQ) и сброс (RESET), без них корректная работа невозможна. Возможно Вам будет интересен этот комментарий в теме PN532 Если Вы используете в качестве контроллера ESP8266, то возможно выгоднее будет использовать шину SPI т.к PN532 рассчитан на 3V логику этой шины, как и ESP и Вам не потребуется конвертер уровней, минимальные изменения в программе, да и сама шина быстрее, хотя тут это не имеет никакого значения.
  25. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @zenone В проекте все возможные обращения могут быть только через API, который описан и открыт или непосредственно к самим файлам на flash. Я уверен, что не совсем корректно поставлен вопрос, думаю, что он появился из логов в Serial при обращении к web серверу микроконтроллера. Если я прав, то дело тут в устройствах с которых идет подключение к точке доступа (esp8266), они пытаются узнать различную информацию о самой точке доступа, получить различные списки технического характера ну и все то, что захочет разработчик ПО используемого на клиенте. Это поведение я заметил почти у всех мобильных устройств как под Android так и под iOS. Думаю, что стоит почитать по поведению мобильных платформ при подключении к открытым хотспотам в аэропортах и других общественных местах. Также стоит отметить, что в режиме точки доступа происходит перехват всех доменных имен и подмена их реальных ip адресов на адрес самой метеостанции. Это приведет точно к такому же поведению, но это сделано для упрошенного попадания на интерфейс метеостанции по любому доменному имени. Если это лишнее, то можно легко это исправить и попадать только по имени используемому в режиме клиента. Вот пример того, как ведут себя iOS (10.10.10.100) и Android (10.10.10.101) сразу после подключения к метеостанции, работающей в режиме AP. Естественно, что операционные системы пытаются взаимодействовать со сторонними ресурсами, но увы, кроме esp их никто не ждет. Через некоторое время полетят запросы к сторонним ресурсам, и оживятся некоторые системные службы. PS: ну и естественно большой брат всегда с нами.
×
×
  • Создать...