Устранение неполадок связи UART между nano 33 ble sense r2 и Adafruit Feather 32u4 с радиомодулем LoRa
Я попытался подключить заземление к обеим платам и подключил 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!
Почему это происходит, и есть ли возможные пути решения этой проблемы?
@Y K, 👍0
1 ответ
Лучший ответ:
Как я вижу 32U4, я ожидаю, что серийный номер используется для собственного последовательного порта USB (CDC). Если вы хотите использовать usart на контактах 0 и 1, вместо этого вам придется использовать Serial1.
Nano 33 BLE такой же, у него есть собственный USB, и вы правильно используете Serial1 для доступа к последовательным контактам 0 и 1 (однако nRF52840 может использовать любые контакты).
- Предварительное формование импедансного согласования для контактов связи UART (TX и RX)
- Двоичный в десятичный с использованием побитовых операторов
- Возможно ли двунаправленное UART-соединение по одному проводу передачи данных?
- Связь Arduino с ROS через UART
- Последовательная связь между nodemcu и Arduino Uno
- Используйте Arduino в качестве передатчика и приемника UART
- Связь между двумя ESP32, USART против RS232 с MAX3232
- Проблема со связью с модулем GSM, который представляет собой Fona 3G от adafruit.