Cześć.
Próbuję zastąpić centralkę Arduino mega z dodatkowym internet shield mniejszym rozwiązaniem na ESP32 wroom-32, ale niestety rozsypują mi się odebrane dane.
Opis funkcjonalności w skrócie:
Pomiar temperatury i wilgotności na Arduino pro mini 3.3V 8Mhz przekazuje po nrf24L01 dane do centralki na Arduino mega z podpiętym internet shield (wystawienie danych do Home Assistanta).
Przekazywane dane:
Problem:
Bazując na tym samym kodzie (oczywiście zmieniają się piny dla rnf24 w zależności od płytki):
Arduino pro mini -> Arduino Mega - dane odebrane poprawnie;
Arduino pro mini -> ESP32 wroom-32 - dane niepoprawne (poniżej screen);
ESP8266 -> ESP32 wroom-32 - dane odebrane poprawnie.
Załącznik (screen z monitora):
Opis załącznika:odbiornik na ESP32 wroom-32;
nadajnik ESP 8266 przykładowa linijka "unit 9: esp|1.00"
nadajnik Arduino pro mini przykładowa linijka "unit 1918959625: d|0.00".
Tak jakby typedef struct był różny dla Arduino i dla ESP :/
Poniżej testowy kod:
Nadajnik:
Odbiornik:
Pytanie: Co przeoczyłem i co poprawić żeby dane z Arduino pro mini do ESP32 były kompatybilne?
Dodam, że próbowałem różnych bibliotek nrf24 (instalowanej z bibliotek Arduino IDE i z github-ów) łącznie z software SPI; efekt wciąż ten sam.
Próbuję zastąpić centralkę Arduino mega z dodatkowym internet shield mniejszym rozwiązaniem na ESP32 wroom-32, ale niestety rozsypują mi się odebrane dane.
Opis funkcjonalności w skrócie:
Pomiar temperatury i wilgotności na Arduino pro mini 3.3V 8Mhz przekazuje po nrf24L01 dane do centralki na Arduino mega z podpiętym internet shield (wystawienie danych do Home Assistanta).
Przekazywane dane:
Kod:
typedef struct {
int unit_id; // Sensor unit ID UNIT_ID.
char parameter[4]; // Measurement parameter name.
float value; // Measurement value.
} myData;
Problem:
Bazując na tym samym kodzie (oczywiście zmieniają się piny dla rnf24 w zależności od płytki):
Arduino pro mini -> Arduino Mega - dane odebrane poprawnie;
Arduino pro mini -> ESP32 wroom-32 - dane niepoprawne (poniżej screen);
ESP8266 -> ESP32 wroom-32 - dane odebrane poprawnie.
Załącznik (screen z monitora):
Opis załącznika:odbiornik na ESP32 wroom-32;
nadajnik ESP 8266 przykładowa linijka "unit 9: esp|1.00"
nadajnik Arduino pro mini przykładowa linijka "unit 1918959625: d|0.00".
Tak jakby typedef struct był różny dla Arduino i dla ESP :/
Poniżej testowy kod:
Nadajnik:
Kod:
#include <RF24.h>
#include <SPI.h>
const int UNIT_ID = 9;
typedef struct {
int unit_id; // Sensor unit ID UNIT_ID.
char parameter[4]; // Measurement parameter name.
float value; // Measurement value.
} myData;
const uint64_t address_center = 0xF9A3F7BBE00L;
RF24 radio(2, 4); // ESP2866
//RF24 radio(9, 10); // Arduino pro mini 3.3V
int counter = 0;
void setup()
{
Serial.begin(115200);
// Radio initialize.
radio.begin();
radio.setPALevel(RF24_PA_HIGH); // RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX.
radio.setChannel(108); // Above most Wifi Channels.
radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
radio.openWritingPipe(address_center);
radio.stopListening();
// radio.printDetails();
}
void loop()
{
counter++;
postData("esp", counter);
delay(5000);
}
bool postData(char* parameter, float value)
{
// Prepare data to send.
myData post_data;
post_data.unit_id = UNIT_ID;
strncpy(post_data.parameter, parameter, sizeof(post_data.parameter));
post_data.value = value;
bool result = radio.write(&post_data, sizeof(myData));
if (result)
{
return true;
}
return false;
}
Odbiornik:
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/**
* Receiver nRF24L01 settings.
*/
RF24 radio(4, 5); // CE, CSN
const uint64_t address_getway = 0xF9A3F7BBE00L;
/**
* Data structure received from sensors.
*/
struct unitDataStructure {
int id;
char parameter[4];
float value;
};
/**
* --------------- ARDUINO BASIC FUNCTIONS ---------------
*/
void setup() {
Serial.begin(115200);
// Initialize RF24 Radio.
radio.begin();
// radio.setRetries(15, 10); // optionally, increase the delay between retries & # of retries
radio.setPALevel(RF24_PA_HIGH); // RF24_PA_MIN or RF24_PA_MAX
radio.setChannel(108); // Above most Wifi Channels
radio.setDataRate(RF24_250KBPS); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
// radio.setAutoAck(1);
radio.openReadingPipe(1, address_getway);
radio.startListening();
radio.printDetails();
}
void loop() {
// Declare clean received data variable from sensors.
unitDataStructure unitData;
// Receives radio data.
if ( radio.available() ) {
radio.read(&unitData, sizeof(unitDataStructure));
Serial.println("<- unit " + String(unitData.id) + ": " + String(unitData.parameter) + "|" + String(unitData.value));
}
}
Pytanie: Co przeoczyłem i co poprawić żeby dane z Arduino pro mini do ESP32 były kompatybilne?
Dodam, że próbowałem różnych bibliotek nrf24 (instalowanej z bibliotek Arduino IDE i z github-ów) łącznie z software SPI; efekt wciąż ten sam.