Páginas

Arduino Weather Station Bluetooth

Ícone do App:



 Vídeos do Aplicativo: Arduino Weather Station Bluetooth


Google Play: https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.Arduino_Weather_Station_Bluetooth


Youtube: https://www.youtube.com/watch?v=3Ic4tTJiVZU&t=1s


Veja neste blog:

Código para Arduino:
Bibliotecas:
Esquema de Ligações:
Lista de materiais com descritivo:
Montagem passo a passo:
Como funciona Arduino Weather Station Bluetooth:
Imagens e vídeos explicativos:

Arduino Weather Station Bluetooth and Clock.
Estação meteorológica de baixo custo com relógio de tempo real.


Imagens da estação meteorológica trabalhando com o Aplicativo.

Unidade Local:







Vídeos do Aplicativo: Arduino Weather Station Bluetooth


Google Play: https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.Arduino_Weather_Station_Bluetooth


Youtube: https://www.youtube.com/watch?v=3Ic4tTJiVZU&t=1s



Unidade local:

Baseado no Arduino nano, esta estação meteorológica monitora a temperatura e umidade através do sensor DHT11 ou DHT22;
Um RTC-DS1307 Relógio de Tempo Real fornece a data, hora e dias da semana;
Todos os dados são mostramos no Display Gráfico LCD Nokia5110 e enviados simultaneamente via bluetooth HC5 ou HC6 para o Aplicativo - Arduino Weather Station Bluetooth.



Unidade Remota(opcional):

Circuito baseado no Arduino nano com sensor DHT11 ou DHT22 monitora a temperatura e umidade e transmite os dados para a Unidade Local através do NRF24L01 - módulo transceptor de rádio frequência configurado para modo transmissor.



A Unidade Local recebe os dados da Unidade Remota e mostra no Display Nokia5110 e envia via bluetooth para o Aplicativo.
Na Unidade Local podemos então ler valores de temperatura e umidade interna e externa assim como  dados de calendário;

Todos os valores de temperatura e umidade Interna e Externa assim como dados de calendário são mostrados no Aplicativo.

Temos então uma mini estação meteorológica: Unidade Local e Unidade Remota que podemos consultar no App. ou diretamente no display Nokia5110( Unidade Local).

Unidade Local e Remota com o Aplicativo:



Diagrama de ligações, pinagens dos módulos:

//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE)  -> Arduino digital 7 (D7)
* Pin 3 (DC)  -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND)   -> GND1 or GND2 
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2 
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9  (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C)    ------------------------
*/
//---------------------------------------------------

Opções de Montagem:

1- Unidade Local sem a Unidade Remota(opcional).

Nesta montagem não usaremos o transceptor: NRF24L01(opcional).
Teremos então as leituras de temperatura e umidade(DHT22) local e relógio(DS1307) mostrados no Display  Nokia 5110 e enviados via Bluetooth(HC6) para o Aplicativo Arduino Weather Station Bluetooth.

Lista de Materiais para a Unidade Local:

Arduino nano: Microcontrolador x 1 peças.
Nokia5110: Display x 1 peça.
DHT22: Sensor de temperatura e umidade x 1 peças.
DS1307: Relógio de tempo real x 1 peça.
HC6: Módulo Bluetooth x 1 peças.




2- Unidade Local + Unidade Remota.

Unidade Local com o transceptor: NRF24L01.




Unidade Remota com o transceptor: NRF24L01.




Lista de Materiais para a Unidade Local + Unidade Remota:

Arduino nano: Microcontrolador x 2 peças.
Nokia5110: Display x 1 peça.
DHT22: Sensor de temperatura e umidade x 2 peças.
DS1307: Relógio de tempo real x 1 peça.
HC6: Módulo Bluetooth x 2 peças.
NRF24L01: Transceptor x 2 peças.

Diagrama de ligações, pinagens todos os módulos utilizados neste projeto:

//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE)  -> Arduino digital 7 (D7)
* Pin 3 (DC)  -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND)   -> GND1 or GND2 
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2 
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9  (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C)    ------------------------
*/
//---------------------------------------------------

Funções do Aplicativo:

- Botão MAC: abre a lista de aparelhos bluetooth com "MAC" ativos, escolher o bluetooth utilizado no projeto exemplo HC6.



- Botão "B" liga o bluetooth, quando ligado o botão fica na cor azul e o led do módulo bluetooth para de piscar e fica ligado, indicando que o bluetooth do smartphone e o módulo bluetooth HC6 estão conectados.

- Botão "nuvem azul", quando pressionado fica na cor verde e está pronto para receber todas as informações de temperatura e umidade local e remota assim como data e hora com o dia da semana.

Botão "sair vermelho", sai do aplicativo, encerra o App. e desconecta o módulo bluetooth HC6(led piscando).


Descrição e imagens dos materiais utilizados neste projeto:


Arduino nano.



Display Gráfico Nokia 5110.

display LCD Nokia 5110 que vamos utilizar no projeto é um display gráfico de 84×48 pixels, 1,6 polegadas e backlight (luz de fundo), com tensão de alimentação de 3,3V. Sua conexão com o Arduino utiliza 5 fios, e a configuração dos pinos de ligação é feita via software. Para o backlight (pino Light), a tensão máxima suportada é de 3.3V.




Para isso, o chip controlador PCD8544 da Philips. Esses módulos podem ser encontrados em duas versões, entretanto, a única diferença entre elas é que a versão de placa azul funciona em 5V enquanto que a versão de placa vermelha funciona em 3.3V(utilizado neste projeto).


Opção 1, Sensor de Temperatura e Umidade -DHT22.

DHT22: 

DHT22  é um sensor de temperatura e umidade sucessor do DHT11. Efetua medições de temperatura entre -40 e 125 ºC, e umidade entre 0 e 100%. Pode ser alimentado com tensões entre 3.3 e 5.5V e, como o DHT11, possui 4 pinos mas apenas 3 são utilizados: VCCData e GND.

O DHT22 (ou AM2302), é uma evolução do DHT11.

É um sensor com baixo consumo de corrente (2,5 mA durante medições, e 100-150µA em standby), e  que possui internamente um sensor de umidade capacitivo e um termistor, além de um conversor analógico/digital para comunicação com o microcontrolador.


O sensor DHT22 é semelhante ao DHT11 (embora um pouco maior). Ambos utilizam apenas 1 pino de dados para conexão ao microcontrolador,  mas internamente eles possuem diferenças significativas.

O DHT22, por exemplo, é mais lento do que o DHT11, porém ele é capaz de medir uma faixa mais ampla de temperatura e umidade.

O DHT22 é mais preciso oque nos permite utilizar uma casa decimal após a virgula, 

Exemplo:
Temp. 25,7°C    Umid. 63,7%

Veja a tabela abaixo:

Tabela comparativa DHT11 x DHT22



Opção2, Sensor de Temperatura e Umidade - DHT11.

O DHT11 é um sensor de temperatura e umidade que permite fazer leituras de temperaturas entre 0 a 50 Celsius e umidade entre 20 a 90%, muito usado para projetos com Arduino.

O elemento sensor de temperatura é um termistor do tipo NTC e o sensor de Umidade é do tipo HR202, o circuito interno faz a leitura dos sensores e se comunica a um microcontrolador através de um sinal serial de uma via.
Especificações:
- Faixa de medição de umidade: 20 a 90% UR
- Faixa de medição de temperatura: 0º a 50ºC
- Alimentação: 3-5VDC (5,5VDC máximo)
- Corrente: 200uA a 500mA, em stand by de 100uA a 150 uA
- Precisão de umidade de medição: ± 5,0% UR
- Precisão de medição de temperatura: ± 2.0 ºC
- Tempo de resposta: 2s
- Dimensões: 23 x 12 x 5mm (incluindo terminais)

O DHT11, devido sua precisão não fornece uma casa decimal após a virgula, então teremos como exemplo arredondamento para valores inteiros.

Exemplo:
Temp. 26,0°C    Umid. 64,0%








RTC - Relógio de Tempo Real - DS1307.

A sigla RTC significa Real Time Clock, ou seja, um Relógio de Tempo Real (RTC). Esse módulo tem 56 bytes de memória não-volátil disponível para uso, é capaz de armazenar e fornecer informações completas de data como dia da semana, dia do mês, mês, ano e além é claro, das funções de horas, minutos e segundos, nos formatos de 12 ou 24 horas. Meses com menos de 31 dias e anos bissextos são ajustados automaticamente.
Uma bateria de lítio garante que os dados sejam preservados mesmo sem alimentação externa, e é acionada automaticamente em caso de falta de energia no módulo.

CONECTANDO RTC DS1307 AO ARDUINO:

Olhando o módulo pela parte inferior, podemos ver na parte esquerda os pinos GND, Vcc, SDA e SCL, utilizados para cascatear dispositivos I2C; No lado direito, vamos utilizar apenas os pinos SCL, SDA, Vcc e GND para ligação ao Arduino.



Opções: Bluetooth HC5, HC6 ou JYMCU.

Em sua placa existe um regulador de tensão e você poderá alimentar com 3.3 a 5v, bem como um LED que indica se o módulo está pareado com outro dispositivo. Possui alcance de até 10m.

Especificações:
- Protocolo Bluetooth: v2.0+EDR
- Firmware: Linvor 1.8
- Frequência: 2,4GHz Banda ISM
- Modulação: GFSK
- Emissão de energia: <=4dBm, Classe 2
- Sensibilidade: <=84dBm com 0,1% BER
- Velocidade Assíncrono: 2,1Mbps(Max)/160Kbps
- Velocidade Síncrono: 1Mbps/1Mbps
- Segurança: Autentificação e Encriptação
- Perfil: Porta Serial Bluetooth
- Suporta modo Escravo (Slave) e Mestre (Master)
- CSR chip: Bluetooth v2.0
- Banda de Onda: 2,4Hhz-2,8Ghz, Banda ISM
- Tensão: 3,3v (2,7-4.2v)
- Corrente: Pareado 35mA; Conectado 8mA
- Temperatura: -40 ~ +105°C
- Alcance: 10m
- Baud Rate: 4800;9600;19200;38400;57600;115200;230400;460800;921600;1382400
- Dimensões: 26,9 x 13 x 2,2mm

Pareando:
Antes de comunicar com o seu módulo você precisará pareá-lo com o dispositivo que desejas conectar. Isto vai variar dependendo do Sistema Operacional que você estará usando mas em termos gerais:
1 - Habilite o Bluetooth do seu dispositivo.
2 - Procure por outros dispositivos Bluetooth.
3 - Procure por um dispositivo chamado 'linvor' e pareie com ele.
4 - O código é '1234'



Transceiver - NRF24L01.

Este módulo utiliza o chip NRF24L01 fabricado pela Nordic, trabalha na frequência de 2.4 GHz e possui uma antena embutida, o que faz desse um dos módulos mais compactos do mercado. Possui um conector de 8 pinos (figura abaixo) com os pinos muito próximos uns dos outros, o que limita o seu uso na protoboard. Nessa configuração, o ideal é a utilização de algum outro tipo de conector, como o jumper macho-fêmea, e ligá-lo diretamente aos pinos do Arduino ou protoboard.

Como o módulo utiliza a interface SPI do Arduino, temos que obrigatoriamente utilizar os pinos 11, 12, e 13 para os sinais MOSI, MISO e SCK, respectivamente. Os pinos CS e CE serão ligados aos pinos digitais do Arduino. Atenção para a tensão de alimentação : este módulo trabalha com alimentação de 3,3V Volts.







Protoboard.


Jumper Wire - Cabos para ligações.

Macho - Fêmea.
Macho - Macho.

Programa Arduino para Unidade Local:


Obs.: Ao escolher o sensor DHT11 ou DHT22 altere esta linha de comando, conforme figura abaixo:





/*
WEATHER STATION:
Arduino nano;
Nokia5110 Display;
RTC DS1307 Clock;
DHT11/DHT22 Sensor temperature humidity;
NRF24L01 Radio frequency;
HC-06 Bluetooth.
*/
//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE)  -> Arduino digital 7 (D7)
* Pin 3 (DC)  -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND)   -> GND1 or GND2 
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V 
* Pin (GND) -> Arduino GND1 or GND2 
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2 
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9  (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C)    ------------------------
*/
//---------------------------------------------------
#include <SoftwareSerial.h>
#define TxD A2//Bluetooth TX pin D2 Arduino-RX.
#define RxD A3//Bluetooth RX pin D3 Arduino-TX.
SoftwareSerial Blue(TxD,RxD);//Bluetooth -> Arduino pin A2-RX, pin A3-TX.
String readString;//Variável para escrita no Display
//---------------------------------------------------
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST)-Pinos Nokia 5110;
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);//Pinos Arduino;
#include "DHT.h"
#include "RF24.h"
#define DHTPIN 8  
#define DHTTYPE DHT11//DHT22 - You can choose the sensor DHT11 ou DHT22; 
DHT dht(DHTPIN, DHTTYPE);
//--------------------
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
//-------------------Choose your language---------------
char daysOfTheWeekNokia[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
//char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//--------------------
static unsigned const char PROGMEM picatura[] =
{ B0001000,
  B0001000,
  B0001000,
  B0010100,
  B0100010,
  B0100010,
  B0011100
};
//--------------------
RF24 myRadio (9, 10);
byte addresses[][6] = {"0"};
float remoteHumidity = 0.0;
float remoteTemperature = 0.0;
String dateString;
String hours;
int minuteNow=0;
int minutePrevious=0;

struct package
{
  float temperature ;
  float humidity ;
};

float previousIndoorHumidity = 0;
float previousIndoorTemperature = 10;

float previousRemoteHumidity = 0.1;
float previousRemoteTemperature = 0.1;

float indoorHumidity = 0;
float indoorTemperature = 0;

typedef struct package Package;
Package data;

void setup() {
  Blue.begin(9600);//Serial Bluetooth-Arduino(A2-RX,A3-TX).  
  Serial.begin(9600);
  Serial.println("DHTxx ON");
  dht.begin();
  display.begin();
   delay(1000);
  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(60);
  display.clearDisplay();
  delay(100);
//---------------------------
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("WEATHER STATIO");
  display.setCursor(0,8);
  display.println("Arduino nano");
  display.setCursor(0, 16);
  display.print("Nokia5110");
  display.setCursor(0, 24);
  display.print("RTC DS1307");  
  display.setCursor(0, 32);
  display.print("DHT11/DHT22");
  display.setCursor(0, 40);
  display.print("NRF24L01 HC-06");
  //display.setTextColor(WHITE, BLACK);
  display.display();
  delay (5000);
  display.clearDisplay(); 
  
  Wire.begin();
  
 Wire.beginTransmission(0x68);
 Wire.write(0x07); // move pointer to SQW address
 Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
 Wire.endTransmission();

 RTC.begin();
 //RTC.adjust(DateTime(__DATE__, __TIME__));
 //if you need set clock... just remove // from line above this
 if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  } 
  delay(2000);

  startWirelessCommunication();
}

void loop() {
DateTime now = RTC.now();
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  //-------------------------
  char comando = Blue.read();
  while (Blue.available()) {
  delay(3);
  char c =Blue.read();
  readString += c;//Leitura da strinh seial via Bluetooth. 
  }
  
   //-----------------
   Blue.println("a");   
   Blue.println(t,1);  
   Blue.println("b"); 
   Blue.println(h,1);
   //-----------------
   (remoteTemperature = (remoteTemperature-32)/1.8);//Fahrenheit=>Celsius;
   Blue.println("c"); 
   Blue.println(remoteTemperature,1);
   (remoteTemperature = (remoteTemperature*1.8)+32);//Celsius=>Fahrenheit;
   if(remoteTemperature<=0){
   Blue.println("c"); 
   Blue.println("00.0");   
   }
   //---------------------------
   Blue.println("d");   
   Blue.println(remoteHumidity,1);
   //---------------------------
    Blue.println("e");
    Blue.println(now.hour(), DEC);
    Blue.println("f");
    Blue.println(now.minute(), DEC);
    Blue.println("g");
    Blue.println(now.second(), DEC);
    //---------------------------
    Blue.println("h");   
    Blue.println(daysOfTheWeekNokia[now.dayOfTheWeek()]);
    Blue.println("i");   
    Blue.println(now.day(), DEC);
    Blue.println("j");   
    Blue.println(now.month(), DEC);
    Blue.println("k");
    Blue.println(now.year(), DEC);     
   //---------------------------
   delay(100);
  

  if (isnan(t) || isnan(h)) 
  {
    Serial.println("Failed to read from DHT");
  } 
  else
  {
    Serial.print("Umidade: ");
    Serial.print(h, 0);
    Serial.print(" %");
    Serial.println();
    Serial.print("Temperatura: ");
    Serial.print(t, 0);
    Serial.println(" C");
  }
  //---------------------------
  //delay(100);
  
   Serial.println("\n");
   //DateTime now = RTC.now();
   display.setTextSize(2);//Hour
   display.setTextColor(BLACK);
   display.setCursor(0, 0);//20, 0
   if ( now.hour() < 10)
   {
   display.print(" "); 
   display.print(now.hour(), DEC);
   }
   else
   {
    display.setCursor(0, 0);
    display.print(now.hour(), DEC);
   }
   //display.setTextSize(1);
   display.print(":");
   if ( now.minute() < 10)
   {
    display.setTextSize(2);
    display.print("0"); 
    display.print(now.minute(), DEC);
   }
   else
   {
   display.print(now.minute(), DEC);
   }
   display.setTextSize(1);
   display.print(":");
   if ( now.second() < 10)
   {
   //display.setTextSize(2);
   display.print("0"); 
   display.print(now.second(), DEC);
   }
   else
   {
   display.print(now.second(), DEC);
   }
   display.print(" "); 
   
   int zs = now.second()/10;
   int us = now.second() - zs*10;

   display.setTextSize(1);//Date
   display.setCursor(64, 17);

   display.print(daysOfTheWeekNokia[now.dayOfTheWeek()]);

   display.setTextSize(1);//Date
   display.setCursor(0, 17);//12,17

   
   if ( now.day() < 10)
   {
     display.print("0"); 
     display.print(now.day(), DEC);
   }
   else
   {
   display.print(now.day(), DEC);
   }
   display.print("/");
   if ( now.month() < 10)
   {
     display.print("0"); 
     display.print(now.month(), DEC);
   }
   else
   {
   display.print(now.month(), DEC);
   }
   display.print("/");
   display.print(now.year(), DEC);

    if (us < 5 )
   {
    
   //---------------------Indoor----------------------------
   display.setTextSize(0);//Date
   display.setCursor(25, 25); 
   display.print("Indoor"); 
   //---------------------Indoor Temperature-----------------
   display.setTextSize(2);
   display.setCursor(0,33);
   display.print(t, 0); 
   //---------------------Indoor Humidity----------------- 
   display.setCursor(25,33);
   display.setTextSize(2);
   display.print("C");

   display.setTextSize(2);
   display.setCursor(47,33);
   display.print(h, 0);

   display.setCursor(72,33);
   display.setTextSize(2);
   display.print("%");   
   display.display();
   }
else
   {
   //---------------------Remote----------------------------
   display.setTextSize(0);//Date
   display.setCursor(25, 25); 
   display.print("Remote");    
   //---------------------Remote Temperature-----------------
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(0,33);

  (remoteTemperature = (remoteTemperature-32)/1.8);//Fahrenheit=>Celsius;
  display.print(remoteTemperature, 0);

   //------------------------------- 
  // Blue.println("c"); 
  // Blue.print(remoteTemperature,1);
   //-------------------------------
  
  (remoteTemperature = (remoteTemperature*1.8)+32);//Celsius=>Fahrenheit;
  
  if(remoteTemperature<=0){
   display.print("00"); 
   display.print(remoteTemperature, 0);
   display.display();   
  }
   display.setCursor(25,33);
   display.setTextSize(2);
   display.print("C");
  
   //---------------------Remote Humidity-----------------
   display.setTextSize(2);
   display.setCursor(47,33);
   display.print(remoteHumidity, 0);

   //---------------------------
  // Blue.println("d");   
  // Blue.print(remoteHumidity,1);
   //---------------------------

   if(remoteHumidity<=0){
   //display.clearDisplay(); 
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(47,33);//0, 33
   display.print("00"); 
   display.display();
    }
   
   display.setCursor(72,33);
   display.setTextSize(2);
   display.print("%");
   display.display();
   }
   
   delay (100);//1000
   display.clearDisplay();  

   checkForWirelessData();
   
   printIndoorTemperature();
   printIndoorHumidity();

   printRemoteTemperature();
   printRemoteHumidity();
   
   }//loop------------------------------

  void startWirelessCommunication()
  {
  myRadio.begin(); 
  myRadio.setChannel(115); 
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate( RF24_250KBPS ) ; 
  myRadio.openReadingPipe(1, addresses[0]);
  myRadio.startListening();
  delay(100);
  }

void checkForWirelessData()
{
    if ( myRadio.available()) 
  {
    while (myRadio.available())
    {
      myRadio.read( &data, sizeof(data) );
      previousRemoteTemperature = remoteTemperature;
      previousRemoteHumidity = remoteHumidity;
      remoteTemperature = Celcius2Fahrenheit(data.temperature);
      remoteHumidity = data.humidity;
    }
   
  } 
}

void readSensor()
{
  previousIndoorTemperature = indoorTemperature;
  previousIndoorHumidity = indoorHumidity;
  
  indoorHumidity = dht.readHumidity();
  indoorTemperature = Celcius2Fahrenheit(dht.readTemperature());
}

void printIndoorTemperature()
{
  String temperature;
  if(indoorTemperature != previousIndoorTemperature)
  {

    if(indoorTemperature>=100)
    {
      temperature = String(indoorTemperature,0);
    }else
    {
      temperature = String(indoorTemperature,1);
    }

    previousIndoorTemperature = indoorTemperature;
  }
}


void printRemoteHumidity()
{
  String humidity;
  if(remoteHumidity != previousRemoteHumidity)
  {
    if(remoteHumidity == 0.0 && remoteTemperature == 0.0) //We just booted up
    {
      humidity = "---";
    }else
    {
          humidity = String(remoteHumidity,1);
    }
    
    previousRemoteHumidity = remoteHumidity;
  }
}

void printRemoteTemperature()
{
  String temperature;
  if(remoteTemperature != previousRemoteTemperature)
  {
    if(remoteHumidity == 0.0 && remoteTemperature == 0.0) //We just booted up
    {
      temperature = "---";
    }else if(remoteTemperature>=100)
    {
      temperature = String(remoteTemperature,0);
    }else
    {
        temperature = String(remoteTemperature,0);//,1
    }
    
    previousRemoteTemperature = remoteTemperature;
   
  }
   
}

void printIndoorHumidity()
{
   if(indoorHumidity != previousIndoorHumidity)
  {

    String humidity = String(indoorHumidity,1);

    previousIndoorHumidity = indoorHumidity; 
  }
}

float Celcius2Fahrenheit(float celsius)
{
  return 1.8 * celsius + 32;
}

//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
  return 1.8 * celsius + 32;
}

//Celsius to Kelvin conversion
double Kelvin(float celsius)
{
  return celsius + 273.15;
}

Programa Arduino para Unidade Remota:

Obs.: Ao escolher o sensor DHT11 ou DHT22 altere esta linha de comando, conforme figura abaixo:



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

#define DHTPIN 4  
#define DHTTYPE DHT22 

 //#include <Adafruit_Sensor.h>

RF24 myRadio (6, 7);
byte addresses[][6] = {"0"};
const int led_pin = 13;

struct package
{
  float temperature ;
  float humidity ;
};


typedef struct package Package;
Package data;

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
    Serial.begin(9600);
    pinMode(led_pin, OUTPUT);
    dht.begin();
    myRadio.begin();  
    myRadio.setChannel(115); 
    myRadio.setPALevel(RF24_PA_MAX);
    myRadio.setDataRate( RF24_250KBPS ) ;  
    myRadio.openWritingPipe( addresses[0]);
    delay(1000);
}



void loop()
{
  digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
  readSensor();
  Serial.println(data.humidity, 1);
  Serial.println(data.temperature, 1);
  myRadio.write(&data, sizeof(data)); 
  digitalWrite(led_pin, LOW);
  delay(1000);
}

void readSensor()
{
 data.humidity = dht.readHumidity();
 data.temperature = dht.readTemperature();
}


Bibliotecas utilizadas:


Obs.: Não se esqueça de colocar todas estas bibliotecas dentro da pasta Libraries do Arduino.
Não altere os nomes das bibliotecas, estas devem acompanhar com o mesmo nome que se encontra no código Arduino.
Encontre todas as bibliotecas em: https://github.com/adafruit/

Exemplo biblioteca -  DHT



As bibliotecas, devem acompanhar com o mesmo nome que se encontra no código Arduino, portanto quando fizer o download extrair utilizando o ZIP, se for necessário altere o nome da biblioteca mantendo mesmo nome que utilizamos no código Arduino.



Um comentário: