Устранение неполадок связи UART между nano 33 ble sense r2 и Adafruit Feather 32u4 с радиомодулем LoRa

communication uart feather arduino-nano-33-iot

Я попытался подключить заземление к обеим платам и подключил rx к tx и наоборот на обеих платах. Оба питаются от батареек, и я пытаюсь получить данные датчиков от нано и отправить их на перо через UART и на большое расстояние, используя возможности Lora в Feather.

Я загрузил эту программу в nano:

/*
В том числе библиотеки
*/
//Акселерометр{
#include "Arduino_BMI270_BMM150.h"
// Акселерометр}
//Температура и влажность{
#include <Arduino_HS300x.h>
//Температура и влажность}
//Давление{
  #include <Arduino_LPS22HB.h>
//Давление}

/*
Creating variables for sensors
*/
//Переменные ускорения{
float x, y, z;
//Переменные ускорения}
//Переменные температуры и влажности{
float temperature;
float humidity;
//Переменные температуры и влажности}
//Переменные давления{
float pressure;
//Переменные давления}

void setup() {

/*
Setting up sensors
*/
Serial1.begin(9600);
//Акселерометр{
  if (!IMU.begin()) {
    Serial1.println("Failed to initialize IMU!");
    int i = 0;
    Serial1.println("Trying again\n");
    while (!IMU.begin()){
      if(i>0){
        Serial1.print(" Failed\n");
      }
      Serial1.print("Try number ");
      Serial1.print(i);
      i++;
      delay(1000);
    }
    Serial1.print("Passed\nOn attempt number ");
    Serial1.print(i);
    Serial1.print("\n");
  }
// Акселерометр}
//Температура и влажность{
if (!HS300x.begin()) {
  Serial1.println("Failed to initialize humidity temperature sensor!");
  int i = 0;
    Serial1.println("Trying again\n");
    while (!HS300x.begin()){
      if(i>0){
        Serial1.print(" Failed\n");
      }
      Serial1.print("Try number ");
      Serial1.print(i);
      i++;
      delay(1000);
    }
    Serial1.print("Passed\nOn attempt number ");
    Serial1.print(i);
    Serial1.print("\n");
}
//Температура и влажность}
//Давление{
if (!BARO.begin()) {
  Serial1.println("Failed to initialize pressure sensor!");
    int i = 0;
    Serial1.println("Trying again\n");
    while (!BARO.begin()){
      if(i>0){
        Serial1.print(" Failed\n");
      }
      Serial1.print("Try number ");
      Serial1.print(i);
      i++;
      delay(1000);
    }
    Serial1.print("Passed\nOn attempt number ");
    Serial1.print(i);
    Serial1.print("\n");
}
//Давление}
}

void loop() {
  /*
  Read sensor data into the variables
  */
  //Ускорение чтения{
  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x, y, z);
  }
  //Ускорение чтения}
  //Чтение температуры и влажности{
  temperature = HS300x.readTemperature();
  humidity = HS300x.readHumidity();
  //Чтение температуры и влажности}
  // Чтение давления{
  pressure = BARO.readPressure();
  // Чтение давления}
  
  /*
  Print the sensor data to Serial1 (hopefully implement sending this data to the lora feather, which will radio it to a distant arduino)
  */
  Serial1.print("\nAcceleration (x, y, z): ");
  Serial1.print(x);
  Serial1.print(", ");
  Serial1.print(y);
  Serial1.print(", ");
  Serial1.print(z);
  Serial1.print("\nTemperature: ");
  Serial1.print(humidity);
  Serial1.print("\nHumidity: ");
  Serial1.print(humidity);
  Serial1.print("\nPressure: ");
  Serial1.print(pressure);
  delay(1000);

}

Я загрузил эту программу в передающее перо:

/* Программа для пера1, которая берет информацию от nano 33 ble sense rev2 и передает ее туда, где находится перо2.
** свяжется с программой наземной станции для отображения данных в удобном для пользователя виде и отобразит результаты
*/
#include <RH_RF95.h>

// настройки ЛоРа
#define RFM95_CS 8
#define RFM95_RST 4
#define RFM95_INT 7
#define RFM95_FREQ 915.0

RH_RF95 rf95(RFM95_CS, RFM95_INT);

void setup() {
  Serial.begin(9600);
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);
  delay(100);
  digitalWrite(RFM95_RST, LOW);
  delay(10);
  digitalWrite(RFM95_RST, HIGH);
  delay(10);
  if (!rf95.init()) {
    Serial.println("LoRa init failed. Check your connections.");
    while (1) ;
  }
  rf95.setFrequency(RFM95_FREQ);
  rf95.setTxPower(23, false);
  Serial.println("LoRa Transmitter Ready!");
}

void loop() {
  static uint16_t messageCount = 0;
  String input;
  while (Serial.available() > 0) {
    char c = Serial.read();
    input += c;
  }
  if (input.length() > 0) {
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    input.getBytes(buf, input.length() + 1);
    rf95.send(buf, input.length() + 1);
    rf95.waitPacketSent();
    Serial.println("Sent message #" + String(messageCount) + ": " + input);
    messageCount++;
  }
  delay(1000);
}

У меня есть эта программа на приеме:

/* Программа для пера2 для получения информации от пера1 ** и связи с программой наземной станции для отображения данных в удобном для пользователя виде и отображения Результаты
*/

#include <RH_RF95.h>

// настройки ЛоРа
#define RFM95_CS 8
#define RFM95_RST 4
#define RFM95_INT 7
#define RFM95_FREQ 915.0

RH_RF95 rf95(RFM95_CS, RFM95_INT);

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // Подождать, пока станет доступен последовательный порт
  /* The infinite while loop above not needed if you're not using rx/tx for sending 
  ** the recieved radio data to your program or are using some other method to 
  */
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);
  delay(100);
  digitalWrite(RFM95_RST, LOW);
  delay(10);
  digitalWrite(RFM95_RST, HIGH);
  delay(10);
  if (!rf95.init()) {
    Serial.println("LoRa init failed. Check your connections.");
    while (1) ;
  }
  rf95.setFrequency(RFM95_FREQ);
  rf95.setTxPower(23, false);
  Serial.println("LoRa Receiver Ready!");
}

void loop() {
  if (rf95.available()) {
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (rf95.recv(buf, &len)) {
      Serial.print("Received: ");
      Serial.println((char*)buf);
    } else {
      Serial.println("LoRa receive failed");
    }
  }
}

Мне уже удавалось установить связь UART между двумя Unos, но я не могу понять, почему в данном случае она не работает. Я могу подтвердить, что это не работает, потому что последовательный монитор для получающего пера (feather2) показывает только это:

17:52:39.840 -> LoRa Receiver Ready!

Почему это происходит, и есть ли возможные пути решения этой проблемы?

, 👍0


1 ответ


Лучший ответ:

0

Как я вижу 32U4, я ожидаю, что серийный номер используется для собственного последовательного порта USB (CDC). Если вы хотите использовать usart на контактах 0 и 1, вместо этого вам придется использовать Serial1.

Nano 33 BLE такой же, у него есть собственный USB, и вы правильно используете Serial1 для доступа к последовательным контактам 0 и 1 (однако nRF52840 может использовать любые контакты).

,