Simple and easy weather station for indoor and outdoor
It's a simple weather station, that measures, internal and external temperature. It's made out of two components: indoor and outdoor.
Components and supplies
2
Arduino Nano
1
I2C OLED Display
1
Push Button normally open
2
Breadboard (generic)
1
433Mhz RXB6 receiver
1
433Mhz FS1000A transmitter
2
DHT22 Temperature Sensor
Project description
Code
Transmitter Arduino code
arduino
1 2#include <RCSwitch.h> 3 4RCSwitch mySwitch = RCSwitch(); 5#include <DHT_U.h> 6 7#define DHTPIN 3 8#define DHTTYPE DHT22 9DHT_Unified dht(DHTPIN, DHTTYPE); 10uint32_t delayMS; 11 12char temp[7]; 13char umid[7]; 14 15void setup() { 16 17 // Transmitter is connected to Arduino Pin #10 18 mySwitch.enableTransmit(10); 19 dht.begin(); 20 sensor_t sensor; 21 dht.temperature().getSensor(&sensor); 22 dht.humidity().getSensor(&sensor); 23 delayMS = sensor.min_delay / 1000; 24 25} 26 27void loop() { 28 delay(delayMS); 29 // Get temperature event and print its value. 30 sensors_event_t event; 31 dht.temperature().getEvent(&event); 32 if (isnan(event.temperature)) { 33 Serial.println(F("Error reading temperature!")); 34 } 35 else { 36 mySwitch.send(int(event.temperature*10),24); 37 } 38 delay(delayMS); 39 // Get humidity event and print its value. 40 dht.humidity().getEvent(&event); 41 if (isnan(event.relative_humidity)) { 42 Serial.println(F("Error reading humidity!")); 43 } 44 else { 45 mySwitch.send(int(event.relative_humidity*10),25); 46 } 47 48 delay(2000); 49} 50
Receiver Code
arduino
1#include <RCSwitch.h> 2#include <DHT_U.h> 3#include <U8glib.h> 4#include <OneButton.h> 5 6#define DHTPIN 3 7#define DHTTYPE DHT22 8 9RCSwitch mySwitch = RCSwitch(); 10 11U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); 12 13DHT_Unified dht(DHTPIN, DHTTYPE); 14uint32_t delayMS; 15 16OneButton button(A1, true); 17 18int tmp; 19int EstInt=0; // If 0 show internal while if 1 show external temperature 20char temp[7]; 21char umid[7]; 22char tempe[7]; 23char umide[7]; 24//float flt = 2.75; 25 26void setup() { 27 Serial.begin(9600); 28 mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 29 u8g.setColorIndex(1); 30 31// button.attachClick(click); 32 button.attachLongPressStop(longPressStop); 33 34 dht.begin(); 35 // Print temperature sensor details. 36 sensor_t sensor; 37 dht.temperature().getSensor(&sensor); 38 Serial.println(F("------------------------------------")); 39 Serial.println(F("Temperature Sensor")); 40 Serial.print (F("Sensor Type: ")); Serial.println(sensor.name); 41 Serial.print (F("Driver Ver: ")); Serial.println(sensor.version); 42 Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id); 43 Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("C")); 44 Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("C")); 45 Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("C")); 46 Serial.println(F("------------------------------------")); 47 // Print humidity sensor details. 48 dht.humidity().getSensor(&sensor); 49 Serial.println(F("Humidity Sensor")); 50 Serial.print (F("Sensor Type: ")); Serial.println(sensor.name); 51 Serial.print (F("Driver Ver: ")); Serial.println(sensor.version); 52 Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id); 53 Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%")); 54 Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%")); 55 Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%")); 56 Serial.println(F("------------------------------------")); 57 // Set delay between sensor readings based on sensor details. 58 delayMS = sensor.min_delay / 1000; 59} 60 61void loop() { 62 button.tick(); 63 if (mySwitch.available()) { 64 tmp = mySwitch.getReceivedValue(); 65 if (mySwitch.getReceivedBitlength() == 24) { 66 Serial.print("External Temperature: "); 67 dtostrf(float(tmp)/10, 2, 1, tempe); 68 Serial.print(tempe); 69 Serial.println("C"); 70 tempe[4]=byte(0xb0); 71 tempe[5]='C'; 72 tempe[6]='\\0'; 73 } 74 else { 75 Serial.print("External Humidity: "); 76 dtostrf(float(tmp)/10, 2, 1, umide); 77 Serial.print(umide); 78 Serial.println("%"); 79 umide[4]=' '; 80 umide[5]='%'; 81 umide[6]='\\0'; 82 } 83 mySwitch.resetAvailable(); 84 } 85 delay(delayMS); 86 // Get temperature event and print its value. 87 sensors_event_t event; 88 dht.temperature().getEvent(&event); 89 if (isnan(event.temperature)) { 90 Serial.println(F("Error reading temperature!")); 91 } 92 else { 93 Serial.print(F("Internal Temperature: ")); 94 Serial.print(event.temperature); 95 Serial.println(F("C")); 96 dtostrf(event.temperature, 2, 1, temp); 97 temp[4]=byte(0xb0); 98 temp[5]='C'; 99 temp[6]='\\0'; 100 } 101 // Get humidity event and print its value. 102 dht.humidity().getEvent(&event); 103 if (isnan(event.relative_humidity)) { 104 Serial.println(F("Error reading humidity!")); 105 } 106 else { 107 Serial.print(F("Internal Humidity: ")); 108 Serial.print(event.relative_humidity); 109 Serial.println(F("%")); 110 dtostrf(event.relative_humidity, 2, 1, umid); 111 umid[4]=' '; 112 umid[5]='%'; 113 umid[6]='\\0'; 114 } 115 if (EstInt==0) { 116 u8g.firstPage(); 117 do { 118 draw("In Temp:", 0, 14); 119 draw(temp, 70, 14); 120 draw("In Humi:", 0, 32); 121 draw(umid, 70, 32); 122 } while( u8g.nextPage() ); 123 } 124 else { 125 u8g.firstPage(); 126 do { 127 draw("Ex Temp:", 0, 14); 128 draw(tempe, 70, 14); 129 draw("Ex Humi:", 0, 32); 130 draw(umide, 70, 32); 131 } while( u8g.nextPage() ); 132 } 133} 134 135void longPressStop() { 136 Serial.println("Button click."); 137 u8g.firstPage(); 138 do { 139 draw("Please Wait...", 0, 23); 140 } while( u8g.nextPage() ); 141 142 if (EstInt == 0) 143 EstInt=1; 144 else 145 EstInt=0; 146} 147 148void draw(char* parola, int posx, int posy) { 149 // graphic commands to redraw the complete screen should be placed here 150 u8g.setFont(u8g_font_unifont); 151 //u8g.setFont(u8g_font_osb21); 152 u8g.drawStr( posx, posy, parola); 153} 154
Transmitter Arduino code
arduino
1 2#include <RCSwitch.h> 3 4RCSwitch mySwitch = RCSwitch(); 5#include 6 <DHT_U.h> 7 8#define DHTPIN 3 9#define DHTTYPE DHT22 10DHT_Unified dht(DHTPIN, 11 DHTTYPE); 12uint32_t delayMS; 13 14char temp[7]; 15char umid[7]; 16 17void 18 setup() { 19 20 // Transmitter is connected to Arduino Pin #10 21 mySwitch.enableTransmit(10); 22 23 dht.begin(); 24 sensor_t sensor; 25 dht.temperature().getSensor(&sensor); 26 27 dht.humidity().getSensor(&sensor); 28 delayMS = sensor.min_delay / 1000; 29 30 31} 32 33void loop() { 34 delay(delayMS); 35 // Get temperature event 36 and print its value. 37 sensors_event_t event; 38 dht.temperature().getEvent(&event); 39 40 if (isnan(event.temperature)) { 41 Serial.println(F("Error reading temperature!")); 42 43 } 44 else { 45 mySwitch.send(int(event.temperature*10),24); 46 } 47 delay(delayMS); 48 49 // Get humidity event and print its value. 50 dht.humidity().getEvent(&event); 51 52 if (isnan(event.relative_humidity)) { 53 Serial.println(F("Error reading 54 humidity!")); 55 } 56 else { 57 mySwitch.send(int(event.relative_humidity*10),25); 58 59 } 60 61 delay(2000); 62} 63
Downloadable files
Transmitter
External temperature transmitter
Transmitter

Receiver
Internal Temperature Receiver
Receiver

Receiver
Internal Temperature Receiver
Receiver

Transmitter
External temperature transmitter
Transmitter

Comments
Only logged in users can leave comments