Arduino Oplà weather station (Cloud compatible)
Create an cloud compatible weather station with the Oplà IoT Kit and monitor your environment!
Components and supplies
1
Arduino MKR WiFi 1010
1
Arduino MKR IoT Carrier Rev2
1
Arduino Oplà IoT Kit
Apps and platforms
1
Arduino IDE
1
Arduino Cloud
Project description
Code
weather station code
cpp
This is the main code needed for this project.
1//Arduino Oplà weather station project by arduinonano 2 3 4//libraries 5#include "arduino_secrets.h" 6#include "thingProperties.h" 7#include <Arduino_MKRIoTCarrier.h> 8MKRIoTCarrier carrier; 9 10//colors for the leds 11uint32_t colorRED = carrier.leds.Color(255,0,0); 12uint32_t colorBLUE = carrier.leds.Color(0, 0, 255); 13uint32_t colorGREEN = carrier.leds.Color(0, 255, 0); 14uint32_t colorYELLOW = carrier.leds.Color(255, 185, 0); 15uint32_t colorWHITE = carrier.leds.Color(255, 255, 255); 16uint32_t colorPURPLE = carrier.leds.Color(205, 0, 255); 17 18int modeSelect = 0; 19int previousMode = 0; 20int refreshCount = 0; 21 22int moistPin; 23 24//setup 25void setup() { 26 modeSelect = 0; 27 28 Serial.begin(9600); 29 30 initProperties(); 31 32 ArduinoCloud.begin(ArduinoIoTPreferredConnection); 33 setDebugMessageLevel(2); 34 ArduinoCloud.printDebugInfo(); 35 36 while (ArduinoCloud.connected() != 1) { 37 ArduinoCloud.update(); 38 delay(500); 39 } 40 delay(500); 41 CARRIER_CASE = true; 42 carrier.begin(); 43 carrier.Light.begin(); 44 45 moistPin = carrier.getBoardRevision() == 1 ? A5 : A0; 46 47 //loading screen 48 carrier.display.setRotation(0); 49 carrier.display.fillScreen(ST77XX_BLACK); 50 carrier.display.setTextColor(ST77XX_WHITE); 51 carrier.display.setTextSize(3); 52 53 carrier.leds.fill(colorWHITE, 0, 5); 54 carrier.leds.show(); 55 56 carrier.display.setCursor(60, 80); 57 carrier.display.print("Weather"); 58 carrier.display.setCursor(60, 120); 59 carrier.display.print("Station"); 60 delay(2000); 61 carrier.display.fillScreen(ST77XX_BLACK); 62 carrier.display.setTextColor(ST77XX_WHITE); 63 carrier.display.setTextSize(2); 64 65 carrier.display.setCursor(70, 80); 66 carrier.display.print("Connected"); 67 carrier.display.setCursor(50, 110); 68 carrier.display.print("To IoT Cloud"); 69 delay(2000); 70 71 Serial.print("Setup finished"); 72} 73 74//loop 75void loop() { 76 ArduinoCloud.update(); 77 carrier.Buttons.update(); 78 79 while(!carrier.Light.colorAvailable()) { 80 delay(5); 81 } 82 int none; 83 carrier.Light.readColor(none, none, none, light); 84 85 //values from inbuild sensor 86 temperature = carrier.Env.readTemperature() - 9; 87 humidity = carrier.Env.readHumidity(); 88 pressure = carrier.Pressure.readPressure(); 89 90 //moisture from external moisture sensor 91 int raw_moisture = analogRead(moistPin); 92 93 moisture = map(raw_moisture, 0, 1023, 100, 0); 94 95 //button control 96 if(carrier.Button0.onTouchDown()) { 97 modeSelect = 0; 98 } 99 else if(carrier.Button1.onTouchDown()) { 100 modeSelect = 1; 101 } 102 else if(carrier.Button2.onTouchDown()) { 103 modeSelect = 2; 104 } 105 else if (carrier.Button3.onTouchDown()) { 106 modeSelect = 3; 107 } 108 else if (carrier.Button4.onTouchDown()) { 109 modeSelect = 4; 110 } 111 112 113 if(modeSelect != previousMode) { 114 updateDisplay(); 115 previousMode = modeSelect; 116 refreshCount = 0; 117 } 118 else if (refreshCount >= 50) { 119 updateDisplay(); 120 refreshCount = 0; 121 } 122 123 refreshCount++; 124 delay(200); 125} 126 127 128//switch between modes (update the screen depending on what mode is selected) 129void updateDisplay () { 130 if (modeSelect == 0) { 131 carrier.leds.fill(colorRED, 0, 5); 132 carrier.leds.show(); 133 134 carrier.display.fillScreen(carrier.display.color565(255, 20, 0)); 135 carrier.display.setTextColor(ST77XX_WHITE); 136 carrier.display.setTextSize(5); 137 138 carrier.display.setCursor(50, 80); 139 carrier.display.print(temperature); 140 carrier.display.setCursor(20, 140); 141 carrier.display.setTextSize(2); 142 carrier.display.print("Temperature in C"); 143 } 144 else if (modeSelect == 1) { 145 carrier.leds.fill(colorBLUE, 0, 5); 146 carrier.leds.show(); 147 148 carrier.display.fillScreen(carrier.display.color565(0, 110, 255)); 149 carrier.display.setTextColor(ST77XX_WHITE); 150 carrier.display.setTextSize(5); 151 152 carrier.display.setCursor(50, 80); 153 carrier.display.print(humidity); 154 carrier.display.setCursor(40, 140); 155 carrier.display.setTextSize(2); 156 carrier.display.print("Humidity in %"); 157 } 158 else if (modeSelect == 2) { 159 carrier.leds.fill(colorGREEN, 0, 5); 160 carrier.leds.show(); 161 162 carrier.display.fillScreen(carrier.display.color565(2, 184, 16)); 163 carrier.display.setTextColor(ST77XX_WHITE); 164 carrier.display.setTextSize(5); 165 166 carrier.display.setCursor(30, 80); 167 carrier.display.print(pressure); 168 carrier.display.setCursor(35, 140); 169 carrier.display.setTextSize(2); 170 carrier.display.print("Pressure in kPa"); 171 } 172 else if (modeSelect == 3) { 173 carrier.leds.fill(colorYELLOW, 0, 5); 174 carrier.leds.show(); 175 176 carrier.display.fillScreen(carrier.display.color565(255, 185, 0)); 177 carrier.display.setTextColor(ST77XX_WHITE); 178 carrier.display.setTextSize(5); 179 180 carrier.display.setCursor(90, 80); 181 carrier.display.print(light); 182 carrier.display.setCursor(85, 140); 183 carrier.display.setTextSize(2); 184 carrier.display.print("Light"); 185 } 186 else if (modeSelect == 4) { 187 carrier.leds.fill(colorPURPLE, 0, 5); 188 carrier.leds.show(); 189 190 carrier.display.fillScreen(carrier.display.color565(205, 0, 255)); 191 carrier.display.setTextColor(ST77XX_WHITE); 192 carrier.display.setTextSize(5); 193 194 carrier.display.setCursor(45, 80); 195 carrier.display.print(moisture); 196 carrier.display.setCursor(40, 140); 197 carrier.display.setTextSize(2); 198 carrier.display.print("Moisture in %"); 199 } 200}
Downloadable files
weather station sketch
Here's the sketch to download, if You want :D
weather_station_sketch.ino
Comments
Only logged in users can leave comments