• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь nrf24lo1 esp-01

xekz

New member
Добрый день. Делаю шлюз nrf24lo1 <-> esp-01.

nrf24lo1 подключена к arduino Nano стандартно. Esp подключается к Nano по Uart.

по Nrf данные отправляются используя вот такую структуру
Код:
typedef struct data {
  int sensor; // проверяемый сенсор
  int value; // значение сенсора
};
data t;
typedef struct ModuleInfo {
  data d[5]; // данные
  char Device[8]; // устройство
  int num_sensor; // количество датчиков на устройстве
};
и для того того чтобы не преобразовывать структуру во что либо другое (например Json , реализация сейчас работает) решил отправлять эту структуру по uart и на стороне esp уже производить разбор данных и отправку на сервер, но возникла проблема на стороне esp не происходит преобразования из uart в struct. если использовать вместо esp Nano то все работает. в чем может быть проблема?

код Nano
Код:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//#include <SoftEasyTransfer.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

typedef struct data {
  int sensor; // проверяемый сенсор
  int value; // значение сенсора
};
data t;
typedef struct ModuleInfo {
  data d[5]; // данные
  char Device[8]; // устройство
  int num_sensor; // количество датчиков на устройстве
};
ModuleInfo mi;

RF24 radio(9, 10); //номера каналов приема и передачи 3,4 pin nrf
const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0A1LL}; // адреса каналов приема и передачи
const uint64_t pipes_send2 = 0xF0F0F0F0A2LL; // адреса каналов приема и передачи

#define ONE_WIRE_BUS 6                             // Data wire is plugged into digital pin 3 on the Arduino

OneWire oneWire(ONE_WIRE_BUS);                     // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);               // Pass our oneWire reference to Dallas Temperature.

//SoftEasyTransfer ET;
// ---------------------------------------- setup ------------------------------------------------ //
void setup() {
  mySerial.begin(9600);
  //  ET.begin(details(mi), &mySerial);
  Wire.begin();
  Serial.begin(57600);
  Serial.println( "Start");
  radio.begin();
  radio.setChannel(120); // Номер канала от 0 до 127
  radio.setRetries(10, 15); // Кол-во попыток и время между попытками
  radio.setPALevel(RF24_PA_MAX); //выходная мощность
  radio.openWritingPipe(pipes[0]); // Открываем канал передачи
  radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
  radio.startListening(); // Начинаем слушать эфир
  radio.setPayloadSize(32);
  radio.powerUp();

}

// ---------------------------------------- loop ------------------------------------------------ //
void loop() {
  ModuleInfo uart;
  t.sensor = 22;
  t.value = 4443;
  uart.d[0] = t;
  uart.d[1] = t;
  uart.d[2] = t;
  radio.startListening();
  delay(50);
  strcpy(uart.Device, "Coridor");
  uart.num_sensor = 3;

  int len = sizeof(uart);
  char aux[len];
  memcpy(aux, &uart, len);
 
  mySerial.write((uint8_t *)&aux, len);
  Serial.write((uint8_t *)&aux, len);
  Serial.println();

  delay(5000);

  if (radio.available()) {
    while (radio.available()) {
      radio.read(&mi, sizeof (mi));
    }

    Serial.print("rf24 network available >> ");
    //ET.sendData();
    Serial.println(mi.Device);
    Serial.println();
 
  }
}
код ESP
Код:
typedef struct data {
  int sensor; // проверяемый сенсор
  int value; // значение сенсора
};
typedef struct ModuleInfo {
  data d[5]; // данные
  char Device[8]; // устройство
  int num_sensor; // количество датчиков на устройстве
};
ModuleInfo mi;

// ---------------------------------------- setup ------------------------------------------------ //
void setup() {
  Serial.begin(9600);
  Serial1.begin(57600);
  Serial.println( "Start");
  Serial1.println( "Start");
}
// ---------------------------------------- loop ------------------------------------------------ //
void loop() {
  String str = "";
  if (Serial.available() > 0) {
    str = Serial.readStringUntil('\n');
  } else {
    str = "";
  }

  if (str.length() > 3) {
    int i = str.length();
    Serial1.println(str);
    Serial1.println(i);
    char data[i];
    for (int j = 0; j < i; j++) {
      data[j] = (char) str[j];
    }
    memcpy(&mi, data, sizeof(data));
    Serial1.print( mi.Device);
    Serial1.println();
    for (int k = 0; k < mi.num_sensor; k++) {
      Serial1.println(mi.d[k].sensor);
    }
  }
}
П.С. Arduino IDE 1.6.8
 
Сверху Снизу