Components and supplies
Arduino Oplà IoT Kit
Apps and platforms
Arduino IoT Cloud
Project description
Code
lover.ino
arduino
It is the sketch that has to be uploaded on the Arduino .
1#include <Arduino_MKRIoTCarrier.h> 2#include <ArduinoIoTCloud.h> 3#include <Arduino_ConnectionHandler.h> 4#include <WiFiNINA.h> 5#include <Arduino_JSON.h> 6#include <math.h> 7MKRIoTCarrier carrier; 8 9//global variable declaration 10int displayScreen = 0; //change it from 0 to 5 to have different screen for message 11 12// strings that contain message 13String display_message_1; 14String display_message_2; 15String display_message_3; 16String display_message_4; 17String display_message_5; 18 19uint32_t colorGreen = carrier.leds.Color(255, 0, 0); 20uint32_t colorBlue = carrier.leds.Color( 0, 0, 255); 21uint32_t noColor = carrier.leds.Color( 0, 0, 0); 22 23//wifi setting you should use the secret tab in the cloud to use it or cancel and replace with a string 24char ssid[] = SECRET_SSID; // your network SSID (name) 25char pass[] = SECRET_PASS; // your network PASSWORD 26 27 28void onMessageChange(); 29 30String carrier_message; 31String message; 32float humidity; 33float pressure; 34float temperature; 35 36String bodyName; 37String planet; 38String explorerName; 39String explorerDate; 40double gravity; 41double density; 42 43char *planets[] = {"jupiter", "io", "europe", 44 "callisto", "mars", "mercury", 45 "venus", "terre", "uranus", "neptune", 46 "saturne", "phoebe", "ganymede", "titan", 47 "pluton", "triton", "titania", "charon", "ariel", 48 "tethys", "protee" 49 }; 50 51int status = WL_IDLE_STATUS; 52char server[] = "api.le-systeme-solaire.net"; 53 54WiFiConnectionHandler ArduinoIoTPreferredConnection(ssid, pass); 55 56WiFiClient client; 57 58 59/////////////setup function start//////////////// 60void setup() { 61 62 // Initialize serial and wait for port to open: 63 Serial.begin(9600); 64 // This delay gives the chance to wait for a Serial Monitor without blocking if none is found 65 delay(1500); 66 67 initProperties(); 68 69 // Connect to Arduino IoT Cloud 70 ArduinoCloud.begin(ArduinoIoTPreferredConnection); 71 //Get Cloud Info/errors , 0 (only errors) up to 4 72 setDebugMessageLevel(4); 73 ArduinoCloud.printDebugInfo(); 74 75 //Wait to get cloud connection to init the carrier 76 while (ArduinoCloud.connected() != 1) { 77 ArduinoCloud.update(); 78 delay(500); 79 } 80 81 82 // attempt to connect to Wifi network: 83 while (status != WL_CONNECTED) { 84 Serial.print("Attempting to connect to SSID: "); 85 Serial.println(ssid); 86 status = WiFi.begin(ssid, pass); 87 // wait 1 seconds for connection: 88 delay(1000); 89 } 90 91 Serial.println("Connected to wifi"); 92 delay(500); 93 CARRIER_CASE = true; // false if the carrier is not in the plastic case 94 carrier.begin(); 95 carrier.display.setRotation(0); 96 carrier.display.fillScreen(ST77XX_MAGENTA); 97 carrier.display.setCursor(30, 60); 98 carrier.display.setTextColor(ST77XX_WHITE); 99 carrier.display.setTextSize(2); 100 carrier.display.print("Searching"); 101 delay(500); 102 carrier.display.print("."); 103 delay(500); 104 carrier.display.print("."); 105 delay(500); 106 carrier.display.print("."); 107 delay(500); 108 carrier.display.print("."); 109 110 planetUpdate(); // the function does not stop until it found that json file 111 112 carrier.display.fillScreen(ST77XX_MAGENTA); 113 carrier.display.setCursor(30, 60); 114 carrier.display.setTextColor(ST77XX_WHITE); 115 carrier.display.setTextSize(2); 116 carrier.display.print("Update complete"); 117 carrier.display.setCursor(20, 90); 118 carrier.display.print("Data from: "); 119 carrier.display.setCursor(20, 130); 120 carrier.display.print(bodyName); 121} 122/////////////setup function end//////////////// 123 124 125 126/////////////loop function start//////////////// 127void loop() { 128 129 ArduinoCloud.update(); 130 carrier.Buttons.update(); 131 132 delay(100); 133 carrier.Buttons.update(); 134 temperature = carrier.Env.readTemperature(); 135 humidity = carrier.Env.readHumidity(); 136 pressure = carrier.Pressure.readPressure(); 137 138 139 if (carrier.Buttons.onTouchDown(TOUCH0)) { 140 displayScreen = truncf(temperature / 10); 141 carrier_message = "Readed my love"; 142 currentScreen(); 143 notification(); 144 145 } 146 147 148 149 if (carrier.Buttons.onTouchDown(TOUCH1)) { 150 carrier.display.fillScreen(ST77XX_RED); 151 carrier.display.setCursor(20, 60); 152 carrier.display.setTextColor(ST77XX_WHITE); 153 carrier.display.setTextSize(2); 154 carrier.display.print(bodyName); 155 carrier.display.setCursor(20, 90); 156 carrier.display.print("Is a moon of: "); 157 carrier.display.setCursor(20, 110); 158 carrier.display.println(planet); 159 delay(500); 160 } 161 162 if (carrier.Buttons.onTouchDown(TOUCH2)) { 163 carrier.display.fillScreen(ST77XX_GREEN); 164 carrier.display.setCursor(20, 60); 165 carrier.display.setTextColor(ST77XX_WHITE); 166 carrier.display.setTextSize(2); 167 carrier.display.print(bodyName); 168 carrier.display.setCursor(20, 90); 169 carrier.display.print("Discovered by: "); 170 carrier.display.setCursor(20, 110); 171 carrier.display.println(explorerName); 172 carrier.display.setCursor(20, 130); 173 carrier.display.print("Date: "); 174 carrier.display.print(explorerDate); 175 delay(500); 176 } 177 178 if (carrier.Buttons.onTouchDown(TOUCH3)) { 179 carrier.display.fillScreen(ST77XX_BLUE); 180 carrier.display.setCursor(20, 60); 181 carrier.display.setTextColor(ST77XX_WHITE); 182 carrier.display.setTextSize(2); 183 carrier.display.print(bodyName); 184 carrier.display.setCursor(20, 90); 185 carrier.display.print("Gravity is: "); 186 carrier.display.setCursor(20, 130); 187 carrier.display.print(gravity); 188 carrier.display.print(" m/s2"); 189 delay(500); 190 } 191 192 if (carrier.Buttons.onTouchDown(TOUCH4)) { 193 carrier.display.fillScreen(ST77XX_BLACK); 194 carrier.display.setCursor(20, 60); 195 carrier.display.setTextColor(ST77XX_WHITE); 196 carrier.display.setTextSize(2); 197 carrier.display.print(bodyName); 198 carrier.display.setCursor(20, 110); 199 carrier.display.print("Density is: "); 200 carrier.display.print(density); 201 carrier.display.print(" g/cm3"); 202 } 203 204}//end loop 205 206/////////////loop function end//////////////// 207 208 209////other function that the main code use///// 210void onMessageChange() { 211 notification(); 212 message_queue(); 213 currentScreen(); 214} 215 216//switch the message in a fifo logic on 5 position to have it saved (anyway you can't read it from the carrier, Ii left for future upgrade) 217void message_queue() { 218 display_message_5 = display_message_4; 219 display_message_4 = display_message_3; 220 display_message_3 = display_message_2; 221 display_message_2 = display_message_1; 222 display_message_1 = message; 223} 224 225// notification function, it makes some funny thing to make sure my girlfriend read the message 226void notification() { 227 for (int i = 0; i <= 2; i++) { 228 carrier.leds.fill(colorBlue, 0, 5); 229 carrier.leds.show(); 230 carrier.Buzzer.sound(200); 231 delay(500); 232 233 carrier.leds.fill(colorGreen, 0, 5); 234 carrier.leds.show(); 235 carrier.Buzzer.noSound(); 236 delay(500); 237 } 238 239 carrier.leds.fill(noColor, 0, 5); 240 carrier.leds.show(); 241} 242 243// it change the sreen color of the screen, now the color is in function of the temperature 244//but could be implemented changing the value of the displayScreen variable (for example from the cloud) 245void currentScreen() { 246 if (displayScreen == 0) { 247 carrier.display.fillScreen(ST77XX_BLUE); //red background 248 carrier.display.setTextColor(ST77XX_WHITE); //white text 249 carrier.display.setTextSize(3); //medium sized text 250 carrier.display.setCursor(100, 30); 251 carrier.display.print(1); 252 carrier.display.setTextSize(2); //medium sized text 253 carrier.display.setCursor(10, 90); 254 carrier.display.print(display_message_1); 255 } 256 257 else if (displayScreen == 1) { 258 carrier.display.fillScreen(ST77XX_RED); //red background 259 carrier.display.setTextColor(ST77XX_WHITE); //white text 260 carrier.display.setTextSize(3); //medium sized text 261 carrier.display.setCursor(100, 30); 262 carrier.display.print(2); 263 carrier.display.setTextSize(2); //medium sized text 264 carrier.display.setCursor(10, 90); 265 carrier.display.print(display_message_2); 266 } 267 268 else if (displayScreen == 2) { 269 carrier.display.fillScreen(ST77XX_BLACK); //red background 270 carrier.display.setTextColor(ST77XX_WHITE); //white text 271 carrier.display.setTextSize(3); //medium sized text 272 carrier.display.setCursor(100, 30); 273 carrier.display.print(3); 274 carrier.display.setTextSize(2); //medium sized text 275 carrier.display.setCursor(10, 90); 276 carrier.display.print(display_message_3); 277 } 278 279 else if (displayScreen == 3) { 280 carrier.display.fillScreen(ST77XX_GREEN); //red background 281 carrier.display.setTextColor(ST77XX_WHITE); //white text 282 carrier.display.setTextSize(3); //medium sized text 283 carrier.display.setCursor(100, 30); 284 carrier.display.print(4); 285 carrier.display.setTextSize(2); //medium sized text 286 carrier.display.setCursor(10, 90); 287 carrier.display.print(display_message_4); 288 } 289 290 else if (displayScreen == 4) { 291 carrier.display.fillScreen(ST77XX_ORANGE); //red background 292 carrier.display.setTextColor(ST77XX_WHITE); //white text 293 carrier.display.setTextSize(3); //medium sized text 294 carrier.display.setCursor(100, 30); 295 carrier.display.print(5); 296 carrier.display.setTextSize(2); //medium sized text 297 carrier.display.setCursor(10, 90); 298 carrier.display.print(display_message_5); 299 } 300 301 carrier.display.setTextSize(4); 302 carrier.display.setCursor(60, 30); //sets new position for printing (x and y) 303 carrier.display.print("<"); 304 carrier.display.setCursor(140, 30); //sets new position for printing (x and y) 305 carrier.display.print(">"); 306} 307 308 309// it update planet information, it use an external website to update 310void planetUpdate() { 311 312 int randomPlanet = random(0, 20); 313 314 Serial.println("\ 315Starting connection to server..."); 316 // if you get a connection, report back via serial: 317 if (client.connect(server, 80)) { 318 Serial.println("connected to server"); 319 // Make a HTTP request: 320 client.print("GET "); 321 client.print("/rest/bodies/"); 322 client.print(planets[randomPlanet]); 323 client.println(" HTTP/1.0"); 324 325 client.println("Host: t"); 326 client.println("Connection: close"); 327 client.println(); 328 } else { 329 Serial.println("unable to connect"); 330 } 331 delay(1000); 332 333 String line = ""; 334 while (client.connected()) { 335 line = client.readStringUntil('\n'); 336 Serial.println(line); 337 JSONVar myObject = JSON.parse(line); 338 339 bodyName = JSON.stringify(myObject["englishName"]); 340 planet = JSON.stringify(myObject["aroundPlanet"]["planet"]); 341 explorerName = JSON.stringify(myObject["discoveredBy"]); 342 explorerDate = JSON.stringify(myObject["discoveryDate"]); 343 gravity = myObject["gravity"]; 344 density = myObject["density"]; 345 346 delay(100); 347 348 if (line.startsWith("{")) { 349 break; 350 } 351 } 352} 353 354//function that is automatic generated from the cloud 355void initProperties() { 356 ArduinoCloud.addProperty(carrier_message, READWRITE, ON_CHANGE); 357 ArduinoCloud.addProperty(message, READWRITE, ON_CHANGE, onMessageChange); 358 ArduinoCloud.addProperty(humidity, READ, 1 * SECONDS, NULL); 359 ArduinoCloud.addProperty(pressure, READ, 1 * SECONDS, NULL); 360 ArduinoCloud.addProperty(temperature, READ, 1 * SECONDS, NULL); 361} 362
Comments
Only logged in users can leave comments
pasquale123456
0 Followers
•0 Projects
Table of contents
Intro
0
0