SD-карта и модуль Lora arduino uno
Общие сведения. При работе над двумя модулями по отдельности они работали отлично.
Проблема: в прилагаемом коде мы пытались их интегрировать, но Лора не получала никаких данных, если мы не закомментировали части функции SDC. Есть ли решение?
Вот где возникает проблема:
Serial.print("Data received: ");
Serial.print(received);
if(received=="ANEMO"){
Сколько бы мы ни кормили его ИСТИННЫМИ данными от другой Лоры с этими кодами, он просто показывает пустое и ложное.
Пожалуйста, помогите этому бедному ягненку. Это для нашего школьного проекта. Надеюсь, вы сможете уделить мне немного своего времени. Заранее большое спасибо.
для контактов CS: Лора: контакт 10, SD: контакт 5
другие контакты SPI соответствуют стандартным контактам.
PS: в коде мы закомментировали некоторые строки в функции SDC, основываясь на наших наблюдениях:
myFile = SD.open("HG.txt", FILE_WRITE);
myFile.close();
Эти 2 строки заставляют нашу Лору не отображать данные, которые она получает в (переменной получения строки).
Спасибо, добрый сэр/мэм, еще раз надеюсь, что вы можете мне помочь.
Вот полный код:
#include <SPI.h>
#include <SD.h>
#include <RH_RF95.h>
#define RFM95_CS 10
#define RFM95_RST 9
#define RFM95_INT 2
#define RF95_FREQ 868.0
RH_RF95 rf95(RFM95_CS, RFM95_INT);
unsigned long millisecs;
int cnt;
float valu;
String jh;
int code=1;
String received;
File myFile;
void setup(){
Serial.begin(115200);
if (!SD.begin(5)) {
Serial.println("Card failed, or not present");
while (1);
}
else{
Serial.println("card initialized.");
}
delay(100);
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
while (!Serial);
Serial.println("Arduino LoRa RX Test!");
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
rf95.setTxPower(23, false);
}
void lorA(){
while(code==1){
if (rf95.waitAvailableTimeout(1000)){
Serial.println("dayun ");
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len)){
cnt++;
Serial.print("Data number: ");
Serial.println(cnt);
received=(char*)buf;
Serial.print("Data received: ");
Serial.print(received);
if(received=="ANEMO"){
uint8_t data[] = "And hello back to you";
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
Serial.println("Sent a reply");
code=0;
}
}
else{
Serial.println("Receive failed");
}
}
}
}
void SDC(){
while(code==0){
Serial.println("SDC");
// Файл dataFile = SD.open("HG.txt", FILE_WRITE);
// Строка dataString="Ганс";
// если (файл данных) {
// dataFile.println(dataString);
// файл данных.close();
// Serial.println("закрыто");
// Serial.println(dataString);
code=1;
// }
// еще {
// Serial.println("ошибка открытия datalog.txt");
// }
}
}
void loop(){
Serial.println("loop");
lorA();
Serial.println("mid");
SDC();
}
@Hans Gonzaga, 👍1
Обсуждение1 ответ
Всю вашу проблему можно решить с помощью простого трюка... Просто следуйте ему...
- Использовать библиотеку Sdfat вместо SD.
- просто следуйте таблице данных SPI.
следуйте приведенному ниже коду... он работает как с LORA, так и с SD
...
#include <SdFat.h>
#include <SPI.h>
#include <RHReliableDatagram.h>
#include <RH_RF95.h>
СДФат сд;
SD-файл мой файл;
# определить чипселект 4
# определить RFM95_CS 10 //
# определить RFM95_RST 9
# определить RFM95_INT 2
// Одиночный экземпляр радиодрайвера
RH_RF95 rf95(RFM95_CS,RFM95_INT);
//драйвер RH_RF95(5, 2); // Rocket Scream Mini Ultra Pro с RFM95W
// Класс для управления доставкой и получением сообщений с использованием объявленного выше драйвера
Менеджер RHReliableDatagram (rf95, 2);
недействительная установка () {
Серийный.начать(9600);
while (!Serial) {} // ждем Леонардо
delay(100);
// Инициализируем SdFat или выводим подробное сообщение об ошибке и останавливаемся
// Использовать половинную скорость, как в родной библиотеке.
// изменить на SPI_FULL_SPEED для большей производительности.
pinMode (RFM95_CS, ВЫХОД);
цифровая запись (RFM95_CS, ВЫСОКИЙ);
цифровая запись (4, НИЗКИЙ);
если (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
/*
/*
* //Открываем файл и пишем...
*
// открываем файл для записи в конце, как библиотека Native SD
if (!myFile.open("mrinmoy.txt", O_RDWR | O_CREAT | O_AT_END)) {
sd.errorHalt("Ошибка открытия test.txt для записи");
}
// если файл открылся нормально пишем в него:
Serial.print("Запись в test.txt...");
myFile.println("тестирование 1, 2, 3.");
// закрываем файл:
мойФайл.закрыть();
Serial.println("Готово.");
*/
/*
// открываем файл для чтения....
если (!myFile.open("mrinmoy.txt", O_READ))
{
sd.errorHalt("Ошибка открытия test.txt для чтения");
}
Serial.println("mrinmoy.txt:");
// читаем из файла, пока в нем больше ничего нет:
внутренние данные;
в то время как ((данные = myFile.read()) >= 0) Serial.write(data);
// закрываем файл:
мойФайл.закрыть();
*/
// ручной сброс
цифровая запись (RFM95_RST, НИЗКИЙ);
задержка (10);
цифровая запись (RFM95_RST, ВЫСОКИЙ);
задержка (10);
цифровая запись (RFM95_CS, НИЗКИЙ);
цифровая запись (4, ВЫСОКИЙ);
в то время как (!manager.init()) {
Serial.println("Ошибка инициализации радио LoRa");
пока (1);
}
Serial.println("Инициализация радио LoRa в порядке!");
// цифровая запись (RFM95_CS, LOW);
}
пустой цикл ()
{
uint8_t data[] = "Привет. Это узел 1.";
// unsigned char sd_data[50];
// Не помещайте это в стек:
// uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t buf[50];
// после настройки ничего не происходит
//LoRa.setPins(LoRa_CS, LoRa_RST, DI0);
цифровая запись (4, ВЫСОКИЙ); // удалить SPI SD-карты
цифровая запись (RFM95_CS, НИЗКИЙ); // ВЫБЕРИТЕ (низкий) LoRa SPI
SPI.начать();
// Отправляем сообщение manager_client
если (manager.sendtoWait((uint8_t*)данные,sizeof(данные),1))
{
Serial.print("успешно отправлено: ");
Серийный.println(1);
}
еще
{
Serial.println("Ошибка отправки");
}
// получатель ....
// Теперь ждем ответа от сервера
uint8_t len = размер (buf);
uint8_t из;
если (manager.recvfromAckTimeout(buf, &len, 2000, &from))
{
Serial.print("Получен ответ от: 0x");
Serial.print(от, HEX);
Серийный.print(": ");
Serial.println((char*)buf);
}
еще
{
}
// digitalWrite(4, LOW);
SPI.конец();
цифровая запись (4, НИЗКИЙ); // удалить SPI SD-карты
цифровая запись (RFM95_CS, ВЫСОКИЙ); // ВЫБЕРИТЕ (низкий) LoRa SPI
SPI.начать();
если (!myFile.open("mrinmoy.txt", O_READ))
{
sd.errorHalt("Ошибка открытия test.txt для чтения");
}
Serial.println("mrinmoy.txt:");
чар ч;
строка ул;
интервал я=0;
uint8_t sd_data[50];
в то время как (myFile.available()>0)
{
ch= мой файл.read();
стр+=ч;
}
Строка ул2=строка;
Серийный.println(строка2);
Serial.println(str2.length());
мойФайл.закрыть();
SPI.конец();
delay(500);
}
используйте этот прием... ваша система будет работать идеально...
- Как использовать get_properties для получения RSSI в RF24?
- Декодировать радиочастотные удаленные сигналы с помощью ESP32 или node MCU?
- Можно ли передавать радиосигнал дешевым передатчиком 433 МГц в виде строк и принимать его с помощью RTL-SDR?
- Зашифрованная радиосвязь Arduino
- Как исправить задержку курсора мыши на голосовой и двигательной головной мыши в беспроводных настройках?
- Что это за модуль NRF24L01?
- RF Keyfob простой код кнопки
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
что означает "ИСТИННЫЕ данные"? .... в вашем коде много операторов печати, но я не вижу упоминания о печатных данных в вашем сообщении., @jsotola
Сэр, извините. Позвольте мне уточнить, под TRUE я имел в виду условие «if(received==" ANEMO")». Если вы заметили в полном коде, если условие выполнено, код должен напечатать «Отправлен ответ», но в нашем случае этого не произошло, и мы подозреваем, что на это влияет код SD-карты. Мы пришли к этой идее, когда пытались закомментировать некоторую строку функции SDC (функции для SD-карты), в частности, «myFile = SD.open("HG.txt", FILE_WRITE)». После того, как мы прокомментировали это, Lora снова начала работать правильно, так что, когда она получает ANEMO в сериале, она отображает Sent., @Hans Gonzaga
большинство модулей SD нарушают работу шины SPI, и другие устройства SPI не работают с ними., @Juraj
Черт, сэр/мэм... Это будет огромной проблемой. Неужели нет обходных путей решения проблемы? В любом случае спасибо, сэр/мэм., @Hans Gonzaga