Jump to content
iT4iT.CLUB

Leaderboard


Popular Content

Showing content with the highest reputation since 12/21/2019 in all areas

  1. 3 points
    Доброе время суток. Вот небольшой спойлер, но работы ведутся совсем не такими темпами как мне бы хотелось, банально из-за нехватки времени в связи с переездом в другой город и со всеми вытекающими из этого событиями. Я постарался сделать снимок экрана так, чтобы, присмотревшись к косвенным признакам, была возможность понять, что уже реализовано и, что используется в коде. Последние изменения были сделаны еще в конце лета 2019. @kamikozz Рад, что Вы с таким азартом отнеслись к этому проекту. Но, к сожалению, Вы упустили главную мысль - проект модульный и wifi.h один из модулей с малым количеством зависимостей, а если быть точным, то от него не зависят другие модули вообще. Вы вправе вообще удалить его или полностью переписать согласно необходимой логике работы. Главная идея wifi.h, это балансировка между режимами AP и STA. Нормальным считается, что контроллер подключен к домашней беспроводной сети, если этот пункт не выполнен, то контроллер переходит в режим AP и периодически пытается найти домашнюю сеть. В этом режиме мы получаем возможность его перенастроить т.к контроллер мог потерять домашнюю сеть из-за того, что у неё изменился SSID или контроллер переехал на другое место жительства. В Вашем случае работа данного модуля немного противоречит тому, что Вы хотите получить т.к в случае отсутствия связи с домашней точкой доступа контроллер будет пытаться её найти, а это возможно только при переводе контроллера в режим STA для сканирования эфира. В Вашем случае в этом нет необходимости, и можно пользоваться штатными средствами восстановления связи, предоставляемыми на аппаратном уровне т.к для установки новой точки доступа в качестве домашней, достаточно подключиться к точке поднимаемой контроллером в режиме AP+STA, ведь она доступна всегда. Но у меня вопрос, зачем Вам режим AP+STA? Возможно лучше и надежнее подключить второй контроллер к общей с первым точке доступа и просто перекидываться через HTTP API запросами? Почему я это спрашиваю - дело в том, что я упоминал, в том числе и в первом посте, что мы ограничены количеством обрабатываемых контроллером запросов и при некоторой нагрузке все может поломаться. Кстати, именно по этой причине много кода WEB интерфейса размазано по малому количеству файлов, в Index.htm валяется и css и java, а в css сохранены некоторые картинки. Динамическая подгрузка компонентов. Все это позволяет уложиться в минимальное, как я это видел, количество tcp соединений с контроллером т.к браузер загружает все компоненты страницы параллельно, а текущий web сервер не способен обрабатывать более одного соединения за раз, да и у контроллера попросту нет на это ресурсов. Обязательно помните об этом. Но вернемся к wifi.h. Если Вам ближе режим AP+STA место центрального маршрутизатора для обоих контроллеров, то просто удалите wifi.h и в основном файле добавьте необходимый режим. Убедитесь, что имеете доступ со стороны AP и STA. После этого можете начинать прикручивать сохраненные в config значения параметров для поднятия точки с нужным именем и для подключения к домашней точке доступа. @Neon @den48rus давайте разбираться с NRF. Под рукой, в текущий момент, её нет, но мы попробуем и пробежимся по основным моментам. На сколько я понимаю, подключается она по SPI, а это значит, что потребуется много портов. Следовательно, Вам придется освободить все порты, используемые под управление нагрузкой, но скорее всего еще что-то. На фото ниже видны 5 основных портов для передачи данных и один для прерывания. В данном проекте придется использовать прерывания т.к NRF может получить данные в момент когда будет происходить другая длительная операция, например загрузка web интерфейса. В таком случае данные будут потеряны. Прерывание поможет получать данные в тот момент когда, они пришли и это будет незаметно для остальных процессов. Бегло, я нашел информацию, что прерывание генерирует низкий уровень сигнала на порту IRQ. Отследить его можно с помощью attachInterrupt. В функции, которая будет вызвана при прерывании реализуйте логику чтения данных, как это делается в обычном случае. А теперь самое интересное. Например, в библиотеки RF24.h, которую, как мне кажется, используют многие, возможно использовать свой тип данных для передачи. Таким образом Вы можете объявить свою структуру, в которой можно определить что угодно. Допустим не просто пустые и безликие данные, а тип сенсора, показания с нескольких датчиков и, например, напряжение питания удаленного устройства. struct { byte type; float temperature; float humidity; float voltage; } nrf_data; nrf_data remote_sensor; Теперь важный момент. Переменная, которую мы будем использовать для хранения данных (в примере remote_sensor), должна быть объявлена в глобальном пространстве имен чтобы избежать проблем в дальнейшем, конечно, если у Вас нет иного механизма передачи данных между модулями проекта. После того как данные будут переданы, они будут сохранены в оперативной памяти микроконтроллера. Теперь их необходимо связать с сенсором, а это уже совсем не сложно. sensors.add(new knob_t(0, 100, ".01", "Влажность", "%"), "Humidity", [&](){ return remote_sensor.humidity; } ); Конечно, могут быть ситуации, когда в момент чтения переменной будет произведена попытка её перезаписи, но и это можно решить. В общем, у Вас все должно получиться. Но если будут вопросы, то обязательно пишите, и я постараюсь найти NFR24 и подготовить полноценный код для решения этой задачи.
  2. 2 points
    Самое главное - прописать порт сервера вместо 1883.
  3. 2 points
    Добрый день! А сделать , как у меня с Вашей помощью получилось, через slave-ардуину по I2C чем плохо? порты дополнительные не нужны, прерывания не нужны, лишняя библиотека не нужна, NRFке никто не мешает принимать данные и они не теряются. Небольшая проблема в нехватке оперативки у ESP8266 при большом количестве датчиков, так эта же проблема проявится и при подключении по SPI. Стоимость ардуино pro mini в районе 100р, что не сильно повысит общую стоимость.
  4. 1 point
    стандартно используется 5 проводов, 3 SPI, CE и CSN , если передавать модулем не планируется, а работать только на прием, на CE можно просто подать высокий уровень, итого используется 4 вывода IRQ использовать не обязательно, за раз NRF принимает 32 байта и хранит их в буфере, есть ли в буфере данные проверяется флагом, который после прочтения буфера сбрасывается библиотеку использую RF24, вот так проверяется буфер if(radio.available()){ radio.read( &data, sizeof(data)); } чуть позже выложу простой рабочий скетч на esp, который просто принимает данные
  5. 1 point
    @post125 да, подключение через контроллер посредник будет самым выгодным. На сколько мне помнится, Вы уже скидывали в эту тему свои наработки. Вот бегло нашел первый пост https://it4it.club/topic/55-meteostanciya-na-esp8266-ot-it4itclub/?do=findComment&comment=1203, начиная с него можно почитать о Вашем опыте. Но хоть это больше про I2C, думаю заинтересованным будет интересно.
  6. 1 point

    Version 2.0

    1,946 downloads

    Хотите помочь проекту или спонсировать новый? Yandex.Money PayPal.me Тема проекта Arduino IDE + Project + Libraries + tools: https://yadi.sk/d/jseefFB50NMhAg
  7. 1 point
    Необходимо заменить саму микросхему памяти и в настройках среды разработки выставить размер flash и разметку. В Arduino IDE это делает в настройках выбора платы. Выгоднее всего покупать уже готовые модули с 4Мб памяти т.к по цене они точно такие же как и с 1 Мб. В теории можно поставить и 8Мб, но придется вносить изменения в конфигурационные файлы среды разработки. Я думаю, что львиную часть задач можно решить с 4Мб памяти. Конечно все это влияет на производительность, но еще больше на производительность влияет сам код и тут речь не только о пользовательских реализациях, но и коде самой Arduino платформы. Например, в 160МГц не будет никакого смысла если код изобилует вызовами delay, тоже самое относится к памяти, весь прирост скорости может упереться в режим dout, выставленный случайно место qio. В общем правильный ответ будет ДА, это может повысить производительность, НО только в купе с оптимизированным, хотя бы в приделах Arduino, кодом.
×
×
  • Create New...