Добрый день. Делаю шлюз nrf24lo1 <-> esp-01.
nrf24lo1 подключена к arduino Nano стандартно. Esp подключается к Nano по Uart.
по Nrf данные отправляются используя вот такую структуру
и для того того чтобы не преобразовывать структуру во что либо другое (например Json , реализация сейчас работает) решил отправлять эту структуру по uart и на стороне esp уже производить разбор данных и отправку на сервер, но возникла проблема на стороне esp не происходит преобразования из uart в struct. если использовать вместо esp Nano то все работает. в чем может быть проблема?
код Nano
код ESP
П.С. Arduino IDE 1.6.8
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; // количество датчиков на устройстве
};
код 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();
}
}
Код:
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);
}
}
}