Comencé con la construcción de las sondas inalámbricas temp / hygro / otros valores. Utilizo 2 arduinos, ambos con transceptores inalámbricos nf24l01 +, la biblioteca utilizada es rf24.h ( https://github.com/maniacbug/RF24). Básicamente, la prueba de ping / pong funciona para mí, por lo que cada arduino se comunica correctamente a través de nrf24l01 +. Agregué el sensor de temperatura dht22 y solo para probar comencé con la estructura de envío:
typedef struct {int A; // solo contrarresta para ver si recibe nuevos datos flotante B; // temperatura} datos; carga útil de datos;
Lo envío desde Arduino1 así:
radio.write (&payload, sizeof (payload));
Otro Arduino2 recibe la carga útil:
radio.read (&payload, sizeof (carga útil));
Esto funciona perfectamente y puedo imprimir el valor del contador así como el valor de la temperatura en la pantalla OLED o Arduino2. El problema es cuando agrego float C a la estructura para enviar / recibir valores de higrómetro. Entonces Arduino2 no recibe / muestra ningún valor de higro válido, pero solo hay un valor de 0.00.
Creo que sé dónde está mi problema - nrf24.h tiene la posibilidad de establecer el tamaño de carga útil para nrf24l01 + - ambos Arduinos tienen que usar el mismo tamaño de carga útil (el valor predeterminado es 16, el mínimo es 8, el máximo es 32). Yo uso 8, ya que este parece ser el valor más confiable cuando se usan distancias más grandes entre Arduinos. Cuando intenté establecer el tamaño de carga útil en 32 en ambos Arduinos:
radio.setPayloadSize (32);
Entonces funciona y puedo recibir y mostrar los valores de contador, temperatura e higro. Así que parece que el nrf24l01 + envía una carga útil de 8 o 32 bytes y al enviar una estructura con INT, FLOAT, FLOAT: 8 bytes no son suficientes y se necesitan 32 bytes de carga útil. Pero cuando usaré muchos otros valores, también puedo alcanzar el límite de carga útil de 32 bytes.
No tengo muchas habilidades en programación en C y tampoco entiendo completamente cómo se transfieren los paquetes de datos entre los módulos nrf24l01 +; tal vez solo necesito adaptar mi código de envío / recepción para manejar el envío de estructuras más grandes. Quizás alguien pueda darme una pista.