Pessoa, bom dia!

Recentemente adquiri um par de modulos NRF24L01+PA+LNA.

Inicialmente estou usando um Arduino Nano para transmitir e um UNO para receber e estão funcionando perfeitamente quando envio texto simples (teste).

Eu adicionei um DHT11 para coletar temperatura e humidade que pela serial também respondem perfeitamente.

O problema é que não estou conseguindo enviar a temperatura e humidade no lugar do texto, alguem tem alguma dica?

Codigo do transmissor:

#include  //INCLUSÃO DE BIBLIOTECA#include  //INCLUSÃO DE BIBLIOTECA
#include  //INCLUSÃO DE BIBLIOTECA
#include "DHT.h"
#define DHTPIN 3 // pino que estamos conectado
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
RF24 radio(9, 10); //CRIA UMA INSTÂNCIA UTILIZANDO OS PINOS (CE, CSN)
const byte address[6] = "00002"; //CRIA UM ENDEREÇO PARA ENVIO DOS DADOS (O TRANSMISSOR E O RECEPTOR DEVEM SER CONFIGURADOS COM O MESMO ENDEREÇO)

void setup() {
radio.begin(); //INICIALIZA A COMUNICAÇÃO SEM FIO
radio.openWritingPipe(address); //DEFINE O ENDEREÇO PARA ENVIO DE DADOS AO RECEPTOR
radio.setPALevel(RF24_PA_HIGH); //DEFINE O NÍVEL DO AMPLIFICADOR DE POTÊNCIA
radio.stopListening(); //DEFINE O MÓDULO COMO TRANSMISSOR (NÃO RECEBE DADOS)

Serial.begin(9600);
dht.begin();
}

void loop() {
// A leitura da temperatura e umidade pode levar 250ms!
// O atraso do sensor pode chegar a 2 segundos.
float h = dht.readHumidity();
float t = dht.readTemperature();
// testa se retorno é valido, caso contrário algo está errado.
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Umidade: ");
Serial.print(h);
Serial.print(" %t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
}

const char text[] = "Teste"; //VARIÁVEL RECEBE A MENSAGEM A SER TRANSMITIDA
radio.write(&text, sizeof(text)); //ENVIA AO RECEPTOR A MENSAGEM
delay(2000); //INTERVALO DE 2 SEGUNDOS
}

Codigo do Receptor:

#include  //INCLUSÃO DE BIBLIOTECA#include  //INCLUSÃO DE BIBLIOTECA
#include  //INCLUSÃO DE BIBLIOTECA

RF24 radio(9, 10); //CRIA UMA INSTÂNCIA UTILIZANDO OS PINOS (CE, CSN)

const byte address[6] = "00002"; //CRIA UM ENDEREÇO PARA ENVIO DOS DADOS (O TRANSMISSOR E O RECEPTOR DEVEM SER CONFIGURADOS COM O MESMO ENDEREÇO)

void setup() {
Serial.begin(9600); //INICIALIZA A SERIAL
radio.begin(); //INICIALIZA A COMUNICAÇÃO SEM FIO
radio.openReadingPipe(0, address); //DEFINE O ENDEREÇO PARA RECEBIMENTO DE DADOS VINDOS DO TRANSMISSOR
radio.setPALevel(RF24_PA_HIGH); //DEFINE O NÍVEL DO AMPLIFICADOR DE POTÊNCIA
radio.startListening(); //DEFINE O MÓDULO COMO RECEPTOR (NÃO ENVIA DADOS)
}

void loop() {
if (radio.available()) { //SE A COMUNICAÇÃO ESTIVER HABILITADA, FAZ
char text[32] = ""; //VARIÁVEL RESPONSÁVEL POR ARMAZENAR OS DADOS RECEBIDOS
radio.read(&text, sizeof(text)); //LÊ OS DADOS RECEBIDOS
Serial.println(text); //IMPRIME NA SERIAL OS DADOS RECEBIDOS
}
}

Exibições: 474

Responder esta

Respostas a este tópico

Olá, Michel.

   Em primeiro lugar, sugiro uma olhada no tópico Como postar, por minerin RV <-- LINK

   Não vi, no código do transmissor, onde você envia os valores de temperatura e umidade mas, imaginando que sejam da mesma forma que envia o texto "Teste", ainda assim fico com dúvidas, pois "Teste" é um texto e os valores de temperatura e umidade são dados do tipo float.

   Por acaso, você está recebendo sempre o mesmo valor de temperatura e humidade, como se estas grandezas nunca variassem? Por exemplo, você está variando a temperatura, mas o valor recebido é sempre o mesmo?

   Ou o que o receptor está recebendo para temperatura e umidade? Ou não está recebendo nada?

D.T. Ribeiro

Duas coisas a observar

1a.  não vejo a chamada das bibliotecas do radio

#include <SPI.h>
#include "RF24.h"

2a.   o Tipo do dado do endereçamento que serve como payload esta como const byte  ou seja, ele vai transitar valores apenas de 0 a 255 e seus fados são do tipo FLOAT o que da incompatibilidade.

    Para testes tente mudar de const byte para const uint64_t   e transforme os dados float em int  e refaça o envio.

Bom dia!

Consegui resolver alterando para String, segue o codigo.

// RECEPTOR#include /font>SPI.h> //INCLUSÃO DE BIBLIOTECA
#include /font>nRF24L01.h> //INCLUSÃO DE BIBLIOTECA
#include /font>RF24.h> //INCLUSÃO DE BIBLIOTECA
#include /font>ESP8266WiFi.h>
#include /font>PubSubClient.h>

const char* ssid = "-";
const char* password = "-";

///////////////// MQTT ///////////////////
const char* mqtt_broker = "192.168.15.92";
const char* topic = "home/caixa/temp";
const int mqtt_port = 1883;
const char* mqtt_username = "mosquito";
const char* mqtt_password = "mosquito";
const char* clientID = "client_caixa";
//////////////////////////////////////////
WiFiClient espClient;
PubSubClient client(espClient);
//////////////////////////////////////////
RF24 radio(2, 4); //CRIA UMA INSTÂNCIA UTILIZANDO OS PINOS (CE, CSN)
const byte address[6] = "00002"; //CRIA UM ENDEREÇO PARA ENVIO DOS DADOS (O TRANSMISSOR E O RECEPTOR DEVEM SER CONFIGURADOS COM O MESMO ENDEREÇO)
///////////////// PEGA O NUMERO DO TRANSMISSOR ///////////////////
int deviceID = 0;

String inTemp, inHum, outTemp, outHum;

void setup() {
Serial.begin(9600); //INICIALIZA A SERIAL
radio.begin(); //INICIALIZA A COMUNICAÇÃO SEM FIO
radio.openReadingPipe(0, address); //DEFINE O ENDEREÇO PARA RECEBIMENTO DE DADOS VINDOS DO TRANSMISSOR
radio.setPALevel(RF24_PA_HIGH); //DEFINE O NÍVEL DO AMPLIFICADOR DE POTÊNCIA
radio.startListening(); //DEFINE O MÓDULO COMO RECEPTOR (NÃO ENVIA DADOS)

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("Conectado a rede sem fio "); //ESCREVE O TEXTO NA SERIAL
Serial.println(ssid); //ESCREVE O NOME DA REDE NA SERIAL
Serial.println(WiFi.localIP()); //ESCREVE NA SERIAL O IP RECEBIDO DENTRO DA REDE

Serial.print("Versão: ");
Serial.println("GatewayESP8266_ok");

///////////////////////////////////////////////////////////////////////////////
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
//client.setCallback(callback);

while (!client.connected()) {
String client_id = "esp8266-client-";
client_id += String(WiFi.macAddress());

Serial.printf("The client %s connects to mosquitto mqtt broker\n", client_id.c_str());

if (client.connect(client_id.c_str())) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}

void loop() {
if (radio.available()) { //SE A COMUNICAÇÃO ESTIVER HABILITADA, FAZ
char text[32] = ""; //VARIÁVEL RESPONSÁVEL POR ARMAZENAR OS DADOS RECEBIDOS
radio.read(&text, sizeof(text)); //LÊ OS DADOS RECEBIDOS
outTemp = String(text[0]) + String(text[1]);
outHum = String(text[2]) + String(text[3]);
Serial.print("Temperatura: ");
Serial.println(outTemp);
Serial.print("Humidade: ");
Serial.println(outHum);

String temp = String(outTemp);
client.publish(topic, temp.c_str());
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço