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

Странности модуля Hoperf HM-TRLR-S-868

Тема в разделе "LoRaWAN End-node и LoRa трансиверы", создана пользователем salara, 9 окт 2017.

  1. salara

    salara New Member

    Приехали ко мне два lora модуля HM-TRLR-S-868 (купил на Али).
    Сделал два тестовых устройства (esp32+lora) : одно "слушает"; другое отправляет сообщение, некоторое время "слушает" и переходит в спящий режим на неколько минут; и так по кругу (модули работают в режиме lora).
    Настройки у обеих радиомодулей одинаковые (канал, sf, полоса,......)
    Всё работает, второе устройство отправляет сообщение, первое устройство его принимает и возвращает второму "квитанцию", второе устройство получает эту "квитанцию" и "засыпает" на насколько минут.
    Вот какую странность заметил :
    меняю на модулях (AT+SYNW=...) слово синхронизации и его длинну (AT+SYNL=?), то есть на первом прописаваю одно слово, а на втором другое, со своими длинами. Судя по доке на модуль, при этом модули НЕ ДОЛЖНЫ "слышать" друг друга.
    Однако НИЧЕГО ПОДОБНОГО ! Они продолжают успешно передавать/принимать сообщения от друг друга . Запись в профайл, командой AT&W, новых значений слов синхронизации никак не помогла.
    Может у кого-то есть опыт по работе с этими модулями ? Поделитесь пожалуйста
     
    Последнее редактирование: 10 окт 2017
  2. hobo

    hobo Member

    Документация кривая. Длина, видимо, все-таки для преамбулы меняется. А фильтровать пакеты по sync word можно только в FSK-режиме.
     
  3. salara

    salara New Member

    В доке ничего не сказано что команда AT+SYNW актуальна только для режима FSK. А сказано там вот что "Module sync word can be set by 1-8 bytes.Module can’t communicate with different sync word." - это весь коментарий к команде AT+SYNW. Вообще, такое впечатление что доку на модуль писаль кто угодно, но только не инженер-разработчик. Я писал в компанию разработчиков изделия, задавал вопросы по модулю, например как установить усиление в 14dbm (команда AT+POWER=) - выходит никак! Мне ответили чтобы я установил 15dbm - такое сделать можно. А насчет назначения/применения пинов около MCU (GND, TEST, RESET, SCK, RXD, VCC) вообще заявил - "... we don't open these pin for application" - вот так, словом нечего вам лезть своими ручонками к этим пинам. Я то думал их нужно использовать при смене firmware у модуля (если будет необходимость).
    Общее впечатление от модуля такое - зря я с ним связался, надо было брать SX1276 или RFM95W с интерфейсом spi, там по крайней мере и SNR и RSSI можно получать на каждый пакет ( я так думаю...:) ).
     
  4. hobo

    hobo Member

    С RSSI там интересно, он в "попугаях" выдается, которые в dBm еще пересчитывать надо по формуле, вызывающей сомнения.

    А модуль Вы действительно этот зря взяли. Я документацию-то читал перед тем, как Вам отвечать. Писал ее, может, и разработчик, но люди явно не до конца понимают, что делают.
     
  5. hobo

    hobo Member

    А по поводу sync word - это Semtech накосячил. Объясняют, что просто не придумали более удачного названия, вот путаница и вышла.
     
  6. Здравствуйте! Для выполнения магистерской работы необходимо исследовать на практике возможности модуляции LoRa. Для этой цели мной были приобретены 2 приёмо-передатчика HM-TRLR-S, работающих на частоте 433 МГц. Никак не могу сконфигурировать данное устройство. Перевёл его в режим конфигурации, подключил к ПК, установил с ним связь через HyperTerminal, но никак не получается полностью послать команду на запрос параметров, чтоб хотя бы посмотреть, что там. Например при отправки команды AT+SPR=?<CR><LF> он отсылает только AT+SPR=. Естественно на выходе я получаю ERROR:0. Подозреваю, что дела в кодировке. Подскажите кто на чём конфигурирует данное чудо?
     
  7. salara

    salara New Member

    Я это делал с модулями HM-TRLR-S-868 на си, в качестве контроллера использовал ESP32 (https://github.com/salara1960/esp_lora) и второй вариант - TI CC3200 (https://github.com/salara1960/cc3200_lora) - это была так сказать первая, "клиентская", сторона.
    А в качестве второй, так сказать "серверной", стороны использовал ESP32-dev-kit + HM-TRLR-S-868 +.......
    Вот тут мои сырцы серверной стороны (конечно тоже написаны на си - https://github.com/salara1960/iot_mqtt_lora)
    Собственно АТ-команды описаны в файле https://github.com/salara1960/iot_mqtt_lora/blob/master/main/at_cmd.c
    Скажу сразу - оба варианта "клиента" и "сервер" - рабочие. И кстати, уровни у чипа HM-TRLR-S - 3.3v, так что их надо согласовывать с rs232-портом компьютера, использовать что-то вроде этого - http://roboshop.spb.ru/programmator/CP2102-micro-usb . Ну и напоследок напомню, что чип HM-TRLR-S имеет два альтернативных режима - управление и передача данных. Выполнение АТ-команд осуществляется только в режиме управления, ну надеюсь ты изучил "мурзилку" на чип. Вот собственно и всё что хотел сказать. Думаю в моих исходниках ты найдешь нужные тебе ответы.
     
  8. Большое человеческое спасибо! Уверен, в дальнейшей работе мне очень пригодится информация, которую я подчерпну из Ваших исходников. Насколько я понял код писался на C. К сожалению, мне будет сложно разобраться в нём, т.к. я его я знаю на уровне лабораторных работ на 1 курсе. Могу ли я к Вам обращаться за комментариями к нему по ходу моей работы?
    Насчёт моей проблемы. Мне удалось решить ошибку. Всё оказалось просто. В инструкции в разделе AT-команд был представлен такой формат команд:

    При установки параметра:
    Command format: AT+CmdType=Para1,Para2…<CR><LF>
    Successfuly command reply: OK <CR><LF>
    Command fail reply:ERROR:n<CR><LF>

    При чтении установленных параметров:
    Command format: AT+CmdType=?<CR><LF>
    Successfuly command reply: CmdType:para1,Para2…<CR><LF>
    Command fail reply:ERROR:m<CR><LF>

    В инструкции не уточнялось, что часть команды <CR><LF> - это служебные символы. CR — обозначает возврат каретки (англ. carriage return), LF — подача строки (от англ. line feed). И их надо подавать на вход приёмника после команды специальными кодами. Для <CR> - 13 (десятичная система счисления), а <LF> - 10 (десятичная система счисления). Я же по своей неопытности просто вводил команду AT+SPR=?<CR><LF> , переводя символы "<","C","R",">","<","L","F",">" в ASCII как набор букв и символов. И по этой причине модуль и выдавал мне ошибку. После того, как я это исправил, всё заработало и я получил ответ от устройства.
    прилагаю свой небольшой код(может кому-то тоже поможет разобраться)
    Код:
    import jssc.SerialPort;
    import jssc.SerialPortException;
    import jssc.SerialPortList;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            String[] portNames = SerialPortList.getPortNames();
            for (int i=0; i<portNames.length;i++){
                System.out.println(portNames[i]);
            }
            SerialPort serialPort = new SerialPort("COM4");
    
            try{
                serialPort.openPort();
                serialPort.setParams(SerialPort.BAUDRATE_9600,
                                     SerialPort.DATABITS_8,
                                     SerialPort.STOPBITS_1,
                                     SerialPort.PARITY_NONE);
               // Scanner sc = new Scanner(System.in);
                //String string = new String(sc.next());
                String string1 = new String("AT+SPR=?");
               // byte[] txBuff = string1.getBytes();
                byte[] txBuff = {65,84,43,83,80,82,61,63,13,10};
                //for(int i=0; i<txBuff.length;i++){
                  //  System.out.println(txBuff[i]);
                //}
                serialPort.writeBytes(txBuff);
                byte[] buff = serialPort.readBytes(8);
                serialPort.closePort();
                System.out.println("____________________________");
                //for (int i=0;i<8;i++){
                  //  System.out.println(buff[i]);
                //}
                System.out.print(new String(buff));
            }catch(SerialPortException ex){
    
            //}catch(UnsupportedEncodingException uee){
                //System.err.println(uee);
            }
    
        }
    }
    upload_2018-3-8_20-34-35.png
     
  9. salara

    salara New Member

    "Я же по своей неопытности просто вводил команду AT+SPR=?<CR><LF> , переводя символы "<","C","R",">","<","L","F",">" в ASCII как набор букв и символов" - :) повеселил...... <CR><LF> = это два байта 0x0D 0x0A
    Вам в институте читали системы счисления ? Если нет - тогда простительно. Ну а если серьёзно - мои исходники на си в твоём распоряжении, что-то будет неясно (нынче мало кто пишет на си для linux и embedded платформ) - спрашивай