Библиотека WirelessUART для 434MHz модулей HC-11/HC-12 или им подобных

Тема в разделе "Проводная и беспроводная связь", создана пользователем RogerRU, 16 авг 2016.

  1. RogerRU

    RogerRU Нерд

    Всем добрый день!
    Для своего проекта умного дома (умной дачи) долго подбирал модули для беспроводного обмена данными.
    Пробовал и ESP и nRF24L01+ , в итоге остановился на модулях HC-11/HC-12.
    Фактически это беспроводной Сериал. К плюсам этих модулей можно отнести:
    - Простота подключения - VCC, GND, RX, TX
    - неприхотливость к питанию - нет танцев с бубном как у nRF24L01+
    - дальнобойность, особенно у HC-12
    полный обзор и ТТХ этих девайсов можно глятуть ТУТ

    ИМХО минус только один это просто Сериал и ничего больше. Никаких ID и прочего.
    Если имеем две Ардуины то это более или менее терпимо, хотя и там не без проблем, а если сеть из нескольких?
    Можно использовать известную библиотеку EasyTransfer, но и там есть ограничения:
    - никаких ID
    - на можно привязать только ОДНУ структуру на один экземпляр
    короче для нормальной работы нескольких ардуин тоже не приемлемо.

    На итог:
    Я произвел глубокую модернизацию библиотеки EasyTransfer
    что теперь имеем:
    - Передача ID
    - Неограниченное количество структур на один экземпляр класса
    - Передача и прием структур (пакетов) конкретному/от конкретного девайса/списка девайсов
    - фильтрация структур (пакетов) на уровне библиотеки по ID
    - контрольные суммы (были и в EasyTransfer)

    Пока библиотека в режиме Beta, так что прошу сильно не ругать

    <<СКАЧАТЬ>>
     
    nednedned, b707, Snork13 и 4 другим нравится это.
  2. Snork13

    Snork13 Нуб

    Есть продвижения с библиотекой?
     
  3. RogerRU

    RogerRU Нерд

    Да какие продвижения, я исправил пару мелких багов, а в остальном имхо работает без нареканий. Правда вот исправленную версию не выкладывал т.к. не видел спроса на нее )))
     
  4. Snork13

    Snork13 Нуб

    Я хочу сделать несколько модулей gps+ ардуино и чтобы они передавали друг другу координаты по воздуху через эти модули) Спрос есть! Можно ссылку на новую версию?) Могу я связаться с Вами(тобой) по почте, уточнить несколько вопросов?
     
  5. RogerRU

    RogerRU Нерд

    не вопрос. Почту отправил в личку, пиши тестовое письмо, либу прикреплю аттачем
     
  6. Alex Gard

    Alex Gard Нуб

    Здравствуйте.
    У меня есть задача к master контроллеру, подключить несколько slave контроллеров.
    С Вашей библиотекой это возможно реализовать?
    Если да, то могли бы Вы поделится со мной, новой версией библиотеки?
    Заранее благодарен!
     
  7. drew

    drew Нуб

    Привет. Я не автор, но недавно с этой библиотекой разбирался. Если помощь еще нужна, пиши
     
  8. nednedned

    nednedned Нуб

    Вот это ты фраерок от души придумал! Я уж кумекал сам библиотеку накалякать, но так впадлу было. А тут ты нарисовался. Красиво, мля буду!
     
  9. b707

    b707 Гуру

    RogerRU, библиотека интересная, спасибо.
    Отметил в коде пару мелких багов - кое-где количество нодов и структур задано деффайнами, а где-то - прямо цифрами в коде, что может привести к проблемам.
    Я правильно понял, что следить за тем, что один и тот же structure_id в приемнике и передатчике соответсвует одинаковой структуре - обязанность программиста?
     
  10. RogerRU

    RogerRU Нерд

    Правильно. Я у себя для этих целей инклюдил один .h файл для всех устройств, которые задействованы в проекте. Для экономии памяти можно использовать #ifdef
     
  11. b707

    b707 Гуру

    Добрый вечер!
    Нашел в коде библиотеки две неприятные ошибки. Не знаю, возможно вы их давно поправили, но в той версии, что на Гитхабе -они до сих пор есть.

    1. в функции WirelessUART::setStructs
    Код (C++):
    void WirelessUART::setStructs(uint8_t* struc_adress, uint8_t stru_size, uint8_t s_id = 0) {
        if (s_id < 11) {
            str_addr[s_id] = struc_adress;
            str_sizes[s_id] = stru_size;
        }
    }
    во второй строке стоит s_id < 11. Вместо 11 здесь должна стоять 10, так как это максимальное количество структур. А еще правильнее вместо явно указанной цифры поставить макрос MAX_STRUCTS_COUNT

    второе похожее - в методе WirelessUART::isValidSender во второй строке стоит i < MAX_NODES_COUNT - 1; - что неверно, нужно заменить на i < MAX_NODES_COUNT ;, иначе последний индекс в таблице останентся не проверенным.

    Надеюсь, Вы не обидитесь на эти незначительные поправки.
     
    Последнее редактирование: 21 май 2018
  12. nednedned

    nednedned Нуб

    Доброго времени!
    А должна ли эта библиотека работать на ESP8266? Тестировал библиотеку при обмене между двумя ардуинками - всё просто замечательно. Переношу код с ардуины на ESP (нужно соеденить ESP и ардуино) и начинает работать очень странно. Пока потратил не очень много времени, но мне кажется что нормально передаются только очень маленькие структуры. Может кто сталкивался? Или статья какая в сети есть по женитьбе ESP и ардуинки через HC-12?
     
  13. RogerRU

    RogerRU Нерд

    Что значит странно?
    Я когда ее писал, то на ESP не тестировал, НО тут что еще надо учитывать - структура имеет размер и если размеры не совпадают, то пакет игнорируется. Почему может не совпадать? Потому, что у разных платформ типы данных могут иметь разный размер. Например тип int в AVR системах имеет размер 16 бит, а в ARM 32 бита т.е. Arduino UNO и DUE если в структуре есть тип int видеть друг друга не будут т.к. размер структур будет разным и библиотека проигнорит пакет. Что бы такого не было используйте uint8_t, uint16_t и т.д.
    Не знаю поможет или нет, но проверить надо.
     
  14. nednedned

    nednedned Нуб

    Видимо действительно в этом проблема т.к. структуры с типами данных boolean или byte передаются нормально, а вот int уже не уходит... Большое спасибо за подсказку!
     
    Последнее редактирование: 15 авг 2018 в 06:10
  15. b707

    b707 Гуру

    Раз уж автор здесь - добавлю еще одно небольшое замечание к тем, что писал выше. В процедуре sendData вызов метода setvars лучше заменить на "ручное" присвоение параметров address и size. так как setVars содержит вызов malloc(). который в sendData совершенно не нужен.
    В принципе, месячное реальное тестирование показало, что явного вреда от malloc нет - но я все-таки в своей копии библиотеки этот код переписал, так как потенциально многократное выделение и освобождение памяти может вести к фрагментации и глюкам.

    В целом хочу сказать спасибо автору - использую его библиотеку уже в двух проектах
     
  16. nednedned

    nednedned Нуб

    Пока не смог победить. uint8_t отрабатывает нормально, а вот uint16_t игнорируется. На ESP и ардуино sizeof(uint16_t)=2 но работать не хочет. Выпилил из библиотеки проверку размера структуры, обмен пошёл но прилетают некорректные данные. С ESP отправляю uint16_t a=2, b=10, на ардуино print(a)=512, print(b)=2560.
    При этом, на обоих контроллерах запись uint16_t a=2; print(a); возвращает 2..
     
  17. parovoZZ

    parovoZZ Гуру

    Ниче се вы ленивые. Уже для преобразования значений в полях структуры в последовательность нужна библиотека... Вы скоро сложить два байта без библиотеки не сможете...дела...
     
  18. b707

    b707 Гуру

    судя по всему, на ЕСП не везде заменили int на uint16_t - ищите, где пропустили
    На крайний случай можно на ЕСП отказаться в структурах от типа данных вовсе и все передавать как массив байт , а потом преобразовывать байты в нужные типы "вручную"
     
  19. parovoZZ

    parovoZZ Гуру

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

    b707 Гуру

    паровоз, не шуми, детей испугаешь