Ключ LoRa Radio не взаимодействует с Adafruit Feather M0 LoRa

c++ feather lora

Я использую Adafruit Feather M0 с радиоприемником LoRa RFM9x для отправки данных на Ronoth LoStik (модель США), который взаимодействует с программой на настольном компьютере. Feather M0 использует библиотеку RadioHead для RH_RF95 для передачи данных на ключ. Проблема в том, что, хотя мои настройки одинаковы для обоих устройств (режим LoRa, 915 МГц, скорость кодирования 4/5, коэффициент распространения 7, полоса пропускания 500 кГц), я не могу заставить ключ получать какие-либо данные. Я могу заставить оба устройства инициализироваться просто отлично (ключ, который я пробовал использовать в собственном коде с помощью jSerialComm, а также программа Microchip LoRa development suite), но они вообще не будут разговаривать друг с другом.

Вот мой код настройки для радиоприемника на стороне Feather M0:

RH_RF95 rf95(RFM95_CS, RFM95_INT);

Adafruit_BMP3XX bmp; // аппаратный датчик давления SPI

DFRobot_BMX160 bmx160; // Акселерометр I2C

TinyGPSPlus gps;

int16_t packetnum = 0;  // счетчик пакетов, мы увеличиваем на xmission

void setup() {
  Serial.begin(GPS_BAUD);

  while (!Serial) {
     // ждать
  }

// Serial.println("тест");

  rf_println("Arduino serial connected");

  // Настройка PIN-режима радио
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);

  delay(100); // Задержка сброса RFM95

  // ручной сброс
  digitalWrite(RFM95_RST, LOW);
  delay(10);
  digitalWrite(RFM95_RST, HIGH);
  delay(10);

  while (!rf95.init()) {
    rf_println("LoRa radio init failed");
    rf_println("Uncomment '#define SERIAL_DEBUG' in RH_RF95.cpp for detailed debug info");
// в то время как (1);
  }
  rf_println("LoRa radio init OK!");

  if (!rf95.setFrequency(RF95_FREQ)) {
    rf_println("setFrequency failed");
// в то время как (1);
  }

  rf95.setModemConfig(RH_RF95::Bw500Cr45Sf128);
  rf95.setTxPower(23, false);

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

void rf_print(char* message) {
  #ifdef SERIAL_DEBUG
  Serial.print(message);
  #endif
  
  // получить длину сообщения
  
  int n = 0;
  for (int i=0; i < 257; i++) { // максимальная длина сообщения = 256 + 1 байт
    n++;
    if (message[i] == 0) {
      break;
    }
  }
  
  rf95.send((uint8_t*) message, n);
}

void rf_print(double d, int n) {
  char buf[255];
  dtostrf(d, 3, n, buf);
  rf_print(buf);
}

void rf_println(double d, int n) {
  char buf[255];
  dtostrf(d, 3, n, buf);

  strcat(buf, "\n");
  
  rf_print(buf);
}

inline void rf_println(char* message) {
  rf_print(message);
  rf_print("\n");
}

inline void rf_println() {
  rf_print("\n");
}

Радиосообщения вообще не доходят до LoStik, даже в рекомендованном программном обеспечении Microchip. Что-то не так с моим установочным кодом? Есть ли какие-то особенности с устройствами, которые я не учел? Эта проблема действительно поставила меня в тупик, и мне нужно решить ее тем или иным способом, так как это касается проекта, который необходимо выполнить в течение следующих 3 недель, и это лишь одна из его частей.

РЕДАКТИРОВАТЬ: я знаю, что код на самом деле достигает метода rf95.send(), потому что мне специально пришлось отлаживать эту функцию, чтобы заставить ее работать. У RadioHead, похоже, возникла проблема с методом waitPacketSent(), который может привести к зависанию программы, если у нее не установлен тайм-аут, поэтому мне пришлось изменить эту строку в функции отправки. Так что по этой причине я не уверен на 100%, что библиотека RadioHead вообще работает должным образом с этим чипом. Версия библиотеки 1.67, на которую была дана ссылка на сайте Adafruit, была полностью заблокирована, она даже не могла вызвать конструктор RH_RF95, не вызывая зависания программы. Руководство выпущено в 2016 году, поэтому я не удивлюсь, если из-за этой проблемы произошли изменения в оборудовании или прошивке, а документы просто не обновлялись.

РЕДАКТИРОВАТЬ 2: я написал отдельный скетч и установил Feather M0 на постоянное recv в разных частотных диапазонах, и запустил TX-развертку на LoStik в программном обеспечении Microchip, чтобы он охватывал каждую частоту / полосу пропускания. Я вытащил M0 из своего макета, поэтому никакие другие устройства не были подключены. Ничего никогда не проходило. Я действительно застрял здесь.

, 👍0


1 ответ


0

Это лучше было бы использовать в качестве комментария, но ...

Просматривая список:

  • Что заставляет вас думать, что во всем виноват RFM9X?
  • Вы уверены, что у вас есть версия платы Adafruit M0 с частотой 900 МГц?
  • Вы пробовали отправлять сообщение с ключа и получать его на стороне Arduino?
  • Вы пробовали другой ключ (та же модель, просто другой модуль)? Если у вас более одного ключа, существует документация о том, как отправлять сообщения между ними. Вы пробовали это сделать?
,

Почему понижающий голос? Если это потому, что на вопрос нет прямого ответа, то это только потому, что есть 2 устройства, которые не работают вместе. Код, кажется, в порядке. но ключ исключается как "работающий". Если можно проверить, что хотя бы одно устройство принимает / отправляет правильно, тогда можно погрузиться глубже., @Nick S.

Еще несколько замечаний: вы отправляете сообщения только в функции настройки? Если это так, возможно, стоит попробовать поместить rf95.send() (НЕ rfprint()!) В суперцикл (после всего кода инициализации) и отправить известное сообщение (например, "Привет, мир!") с некоторой задержкой, скажем, на секунду. Удалите весь остальной код (просто создайте новую программу для проверки только функциональности радиомодуля) и отключите все другие периферийные устройства (особенно датчик давления на шине SPI - это может привести к проблемам с RFM95, как указано в библиотеке)., @Nick S.

Не уверен, почему вы были отклонены, но чтобы ответить на ваши вопросы: 1) Я действительно понятия не имею, какое устройство действительно неисправно, я просто пытался выяснить, были ли какие-либо причуды между ними, которые могли вызвать это. У меня есть еще одна (идентичная) плата M0 на пути к проверке этой теории. 2) Да, он имеет ту же маркировку, что и модель 900 МГц, указанная на сайте Adafruit 3) Да, он также не прошел. 4) У меня нет другого ключа, он стоит 60 долларов, так что было бы разумнее купить просто еще один Feather M0 и посмотреть, могут ли чипы разговаривать друг с другом, вместо того, чтобы покупать еще один ключ. Я посмотрю, сработает ли это решение., @Galen Nare

Отредактировано, чтобы ответить на ваш вопрос "rf95.отправить"., @Galen Nare

Кроме того, я пропустил это раньше, но ни одно из других моих устройств на моей плате не использует SPI. Мой BMP3xx работает в режиме I2C, потому что я вообще не смог заставить SPI взаимодействовать (даже программное обеспечение) с BMP. Может ли это означать поджаренную шину SPI на M0? Все остальное, кажется, работает совершенно нормально., @Galen Nare

@GalenNare Хм, да, это странно. Пока вы не получите вторую плату M0 (если бы вы могли заказать партию, это было бы идеально), трудно сказать. Еще несколько мыслей: 1) Пробовали ли вы какие-либо другие датчики SPI-bsa с платой M0? Тот факт, что SPI, аппаратный или программный, не работает с датчиком BM3XX, может быть более показательным для самого датчика. Я предполагаю, что вы скопировали пин инициализации из примера на веб-сайте Adafruit, верно? 2) Есть ли у вас какой-либо логический анализатор, который вы могли бы подключить к этим выводам и наблюдать за сигналами, которые микроконтроллер посылает на радио?, @Nick S.

@GalenNare Я также пытался загрузить программное обеспечение Microchip, просто чтобы посмотреть, что доступно, но по какой-то причине оно не запустилось на моем компьютере. Другая мысль заключается в том, что вы должны убедиться, что отправляете и получаете сообщения в пакетном режиме. LoStick обладает возможностями быть частью сети LoRaWAN, в то время как Adafruit M0 RFM9X, похоже, этого не делает., @Nick S.

Я получил новый модуль Feather M0 LoRa, я не могу получить никаких данных для отправки между ними или с помощью ключа. Я даже использовал пример кода и точную версию библиотеки RadioHead, которую использовал Adafruit, но ни с той, ни с другой стороны ничего не проходит. Я все больше убеждаюсь, что библиотека RadioHead просто не подходит для этого чипа, и я в затруднении, потому что, похоже, никаких альтернатив нет., @Galen Nare

Хм... Действительно странно. Один быстрый вопрос: вы прикрепили антенны к платам M0? Если да, то хорошо, возможно, вам придется взглянуть на техническое описание радиоприемника и копнуть глубже. Если нет - это может быть объяснением. По какой-то причине я предположил, что антенна встроена в микросхему или корпус, но это не так. Я также предполагаю, что вы имеете в виду код, доступный на этой странице для стороны TX / RX, верно? https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/using-the-rfm-9x-radio, @Nick S.

@GalenNare Есть какие-нибудь успехи?, @Nick S.

Я никогда не получал антенны в комплекте ни для одного чипа, но даже в этом случае я тестировал их, когда они находились буквально в нескольких дюймах друг от друга, так что это не должно было иметь значения. Возможно, скоро у меня появится возможность протестировать третий модуль Feather, но я не уверен., @Galen Nare

@GalenNare вы не получите антенны в комплекте - вам придется либо изготовить их самостоятельно, либо приобрести готовую. У Adafruit есть ссылка на это: https://learn.adafruit.com/adafruit-feather-m0-radio-with-lora-radio-module/antenna-options . Я настоятельно призываю вас включить антенны - в * крайне * маловероятном случае, если вам удастся передавать и принимать без антенн, я хотел бы знать, когда это произойдет. Я также хочу отметить, что, хотя я не думаю, что это произойдет для таких маломощных плат, как эти, при попытке передачи без подключенной антенны можно повредить передатчик., @Nick S.