Components and supplies
MKR IoT Carrier
Relay (generic)
Arduino MKR IoT Carrier
Graphic OLED, 128 x 64 Pixels
Arduino MKR WiFi 1010
Arduino UNO Wifi Rev.2
Solderless Breadboard Half Size
LED (generic)
Resistor 220 ohm
18650 battery
Generic button
Jumper wires (generic)
Resistor 10k ohm
Apps and platforms
Arduino Web Editor
Blynk
Arduino IDE
Project description
Code
MKR IoT Carrier code
c_cpp
Upload this code to the MKR board attached to the carrier.
1#include <Arduino_MKRIoTCarrier.h> // include the IoT carrier library 2#include "Images.h" // Bitmap images file 3#include <SPI.h> // include needed libraries 4#include <WiFiNINA.h> 5#include <BlynkSimpleWiFiNINA.h> 6#include <utility/wifi_drv.h> // needed for RGB LED 7 8WidgetBridge bridge1(V0); // data transfer widget (bridge) 9BlynkTimer timer; // timer for sending data 10WidgetLCD lcd(V2); 11 12#define GREEN_LED_pin 25 // RGB LED pins (wifi_drv) 13#define BLUE_LED_pin 27 14#define RED_LED_pin 26 15 16char ssid[] = "Your SSID"; // SSID, password, and auth token 17char pass[] = "Your password"; 18char auth[] = "Your auth token (Blynk)"; 19 20const int brightness = 120; // brightness of the lights 21int batteryPercent; // battery percent 22int color; // color of battery, set to nothing to start 23int lastBatteryPercent = -1; // set it to -1 so that it thinks the battery has changed percent, and do the battery 24 25bool relayCanChange = true; // can the relay change? 26bool relayOn; // is the relay on? 27bool lastRead = relayOn; // last state of the relay 28bool ownLights = false; // are the lights on the carrier on? 29bool autoReconnect = true; // auto reconnections? 30 31MKRIoTCarrier carrier; // init the IoT carrier as "carrier" 32uint32_t white = carrier.leds.Color(brightness, brightness, brightness); // color white (R, G, B) not actually used currently (full brightness) 33#define BLYNK_PRINT Serial // Blynk debug output 34void setup() { 35// insert this line of code in here (setup()) to change the color 36// carrier.display.setTextColor(ST77XX_(your color)); 37// currently it is set to CYAN (ST77XX_CYAN) 38 carrier.display.setTextColor(ST77XX_CYAN); // Set text color 39 // set up RGB LED 40 WiFiDrv::pinMode(RED_LED_pin, OUTPUT); //RED 41 WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT); //GREEN 42 WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT); //BLUE 43 44 //turn off RGB led 45 WiFiDrv::digitalWrite(RED_LED_pin, LOW); 46 WiFiDrv::digitalWrite(GREEN_LED_pin, LOW); 47 WiFiDrv::digitalWrite(BLUE_LED_pin, LOW); 48 // start the carrier and check for errors 49 if (!carrier.begin()){ 50 while(1){ 51 // if there is an error, flash the RGB LED red 52 setLEDColor(255, 0, 0); 53 delay(1000); 54 setLEDColor(0, 0, 0); 55 delay(1000); 56 } 57 } 58 // set LED color to RED (connecting...) (setLEDColor(r, g, b) is a custom function at the bottom) 59 setLEDColor(255, 0, 0); 60 Serial.begin(9600); // Start Serial 61 Blynk.begin(auth, ssid, pass); // Start Blynk 62 carrier.display.fillScreen(ST77XX_BLACK); // clear display 63 carrier.display.setRotation(0); // set display settings 64 carrier.display.setTextSize(2); 65 // for some reason it cannot draw things until Blynk is connected 66// carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE); 67 while (!Blynk.connected()){ // wait for Blynk connections 68// carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE); 69 } 70 lcd.clear(); 71 carrier.display.fillScreen(ST77XX_BLACK); // clear display (fill with black. If you know another way, please tell) 72 carrier.display.setCursor(50, 50); 73 carrier.display.print("Connected!"); // print success message to display 74 setLEDColor(0, 255, 0); // set LED to green (connected) 75 delay(5000); // wait 5 seconds 76 carrier.display.fillScreen(ST77XX_BLACK); // clear display 77 timer.setInterval(250L, sendData); // set up timer (every 250 ms do sendData()) 78 doGUI(); // do the GUI for the project (displays "Light controlling") 79} 80 81void loop() { 82 Blynk.run(); // handle Blynk and timer 83 timer.run(); 84 doBetterBattery(); // output battery data at the top (optional) 85 if (Blynk.connected()){ // set the LED color based on Blynk connection 86 setLEDColor(0, 255, 0); // green 87 drawWiFi(); // draw the wifi 88 } 89 else{ // If not connected: 90 setLEDColor(255, 0, 0); // red 91 clearWiFi(); // clear the wifi 92 clearDisplay(); // clear display 93 carrier.display.setTextColor(ST77XX_RED); // set text color to red 94 textAt(5, 120, "WiFi Disconnected!"); // display "WiFi Disconnected!" 95 carrier.display.setTextColor(ST77XX_CYAN); // set text color back to cyan 96 if (autoReconnect){ // if auto reconnect is true 97 textAt(20, 150, "Reconnecting..."); 98 reconnect(); // reconnect 99 clearDisplay(); // clear display 100 textAt(20, 150, "Reconnected!"); 101 } 102 else{ 103 textAt(20, 150, "Waiting for manual reconnections..."); 104 // wait for a button press 105 while (isAnyButtonPressed()){ 106 107 } 108 textAt(40, 180, "Reconnecting..."); 109 reconnect(); // reconnect 110 clearDisplay(); // clear display 111 textAt(20, 150, "Reconnected!"); 112 } 113 delay(5000); // wait 5 seconds 114 clearDisplay(); // clear display 115 doGUI(); // do the GUI 116 lastBatteryPercent = -1; // do this so it thinks the battery percent has changed, and show the battery 117 doBetterBattery(); // do the better battery display 118 } 119 Blynk.virtualWrite(V3, rssiPercent()); // write the WiFi strength and battery percent to Blynk 120 Blynk.virtualWrite(V4, getBatteryPercent()); 121 carrier.Buttons.update(); // update buttons 122 if (carrier.Button4.getTouch()){ // if button 4 is pressed, toggle the lights on the carrier (built in flashlight) 123 ownLights = !ownLights; // toggle the flashlight 124 delay(100); 125 } 126 if (carrier.Button3.getTouch()){ // if button 3 is pressed, change if the lights can change 127 relayCanChange = !relayCanChange; 128 delay(90); 129 } 130 if (carrier.Button0.getTouch()){ // if the first button is pressed: 131 autoReconnect = !autoReconnect; // toggle auto reconnect 132 String tempText; 133 if (autoReconnect){ 134 tempText = " On"; 135 } 136 else{ 137 tempText = " Off"; 138 } 139 // display if auto reconnect is on or off 140 textAt(20, 175, "Auto reconnections: " + tempText); 141 delay(3000); 142 carrier.display.fillRect(0, 170, 240, 40, ST77XX_BLACK); 143 } 144 carrier.leds.clear(); // clear LEDS 145 if (ownLights){ // if the flashlight is on, set the LEDs on to the brightness R (0-255) G (0-255) B (0-255) 146 carrier.leds.fill(white, 0, 5); // fill the LEDs 147 } 148 carrier.leds.show(); // show the LEDs 149 carrier.display.fillRect(15, 60, 240, 20, ST77XX_BLACK); // clear this output: 150 if (relayCanChange){ 151 textAt(15, 60, "Lights can change"); 152 } 153 else{ 154 textAt(15, 60, "Lights cannot change"); 155 } 156 if (lastRead != relayOn){ // if the relay has changed 157 lcd.clear(); // clear the virtual lcd 158 if (relayOn){ // display light on/off 159 lcd.print(0, 0, "Light on"); 160 } 161 else{ 162 lcd.print(0, 0, "Light off"); 163 } 164 } 165 lastRead = relayOn; // set the last state of the relay to the current state 166 delay(50); // delay a bit so as not to overwhelm the MKR board and display 167} 168 169void sendData(){ // do this when the timer "ticks" (every 200 ms) 170 int proximity; // proximity variable 171 if (carrier.Light.proximityAvailable()){ // update proximity and buttons 172 proximity = carrier.Light.readProximity(); // get proximity 173 carrier.Buttons.update(); // update buttons 174 // if something is close or button 2 is pressed and the relay can change 175 if (((proximity < 150) or (carrier.Button2.getTouch())) and (relayCanChange == true)){ 176 relayOn = !relayOn; // toggle the relay 177 delay(90); // wait a small amount 178 } 179 } 180 if (relayOn){ // send data ON and draw sun 181 bridge1.virtualWrite(V5, 1); // write the data to other device through the bridge 182 drawSun(); // draw the sun 183 } 184 else{ // send data OFF (and maybe draw clouds, its a work in progress) 185 bridge1.virtualWrite(V5, 0); // write the data to other device through the bridge 186 clearSun(); // clear the sun 187 } 188} 189 190BLYNK_WRITE(V6){ // when receiving data on V6 191 int value = param.asInt(); // get the value 192 if (value == 1){ // if the value is 1 193 relayOn = !relayOn; // toggle the relay 194 } 195} 196 197BLYNK_CONNECTED() { // connected now, set the bridge auth token 198 bridge1.setAuthToken("Other auth token"); 199} 200void setLEDColor(uint8_t R, uint8_t G, uint8_t B){ // custom function to help manage RGB LED 201 //R, G, and B values should not exceed 255 or be lower than 0. 202 203 //set ESP32 wifi module RGB led color 204 WiFiDrv::analogWrite(RED_LED_pin, R); // Red 205 WiFiDrv::analogWrite(GREEN_LED_pin, G); // Green 206 WiFiDrv::analogWrite(BLUE_LED_pin, B); // Blue 207} 208int getBatteryPercent(){ // return the battery percent as int 209 int sensorValue = analogRead(ADC_BATTERY); // read battery pin 210 // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.7V): 211 // float voltage = sensorValue * (3.7 / 1023.0); 212 int percent = map(sensorValue, 0, 1023, 0, 100); // convert battery reading to percent reading 213 return percent; // return reading 214} 215void drawBatteryShell(){ // draw battery shell 216 carrier.display.drawRect(108, 5, 27, 13, ST77XX_WHITE); 217 carrier.display.fillRect(135, 9, 3, 5, ST77XX_WHITE); 218}/* 219void drawFirstBar(){ // draw first bar 220 carrier.display.fillRect(110, 7, 7, 9, ST77XX_WHITE); 221} 222void drawSecondBar(){ // draw second bar 223 carrier.display.fillRect(118, 7, 7, 9, ST77XX_WHITE); 224} 225void drawThirdBar(){ // draw third bar 226 carrier.display.fillRect(126, 7, 7, 9, ST77XX_WHITE); 227}*/ 228void drawBatteryShellRed(){ // draw the shell as red color (used when battery is low) 229 carrier.display.drawRect(108, 5, 27, 13, ST77XX_RED); 230 carrier.display.fillRect(135, 9, 3, 5, ST77XX_RED); 231} 232/* 233void doBattery(){ // do the battery and draw it 234 // this took a lot of fine-tuning 235 batteryPercent = getBatteryPercent(); // get battery percent with the function 236 drawBatteryShell(); // draw the shell 237 if (batteryPercent > 10){ // draw the bars (change these percent as you like) 238 drawFirstBar(); 239 } 240 if (batteryPercent > 40){ 241 drawSecondBar(); 242 } 243 if (batteryPercent > 80){ 244 drawThirdBar(); 245 } 246 textAt(110, 40, String(batteryPercent) + "%"); // display battery percent 247}*/ 248void textAt(int x, int y, String text){ // much easier function to use 249 carrier.display.setCursor(x, y); // set the cursor to (x, y) 250 carrier.display.print(text); // print the text 251} 252void clearDisplay(){ // fill screen with BLACK color 253 carrier.display.fillScreen(ST77XX_BLACK); 254} 255void drawSun(){ // draw the sun bitmap (to show light is on) 256 carrier.display.drawBitmap(100, 120, sun, 50, 50, ST77XX_YELLOW); 257} 258void doGUI(){ // output GUI 259 textAt(10, 100, "Light controlling"); 260} 261void clearGUI(){ // clear the GUI by drawing a filled black rectangle around it 262 carrier.display.fillRect(10, 100, 100, 20, ST77XX_BLACK); 263} 264void clearSun(){ // clear the sun the same way 265 carrier.display.fillRect(95, 115, 60, 60, ST77XX_BLACK); 266} 267void drawWiFi(){ // draw the WiFi bitmap and clear a dot that goes with it 268 carrier.display.drawBitmap(60, 5, wifi, 50, 30, ST77XX_WHITE); 269 carrier.display.fillRect(55, 25, 10, 10, ST77XX_BLACK); 270} 271void clearWiFi(){ // clear the WiFi bitmap 272 carrier.display.fillRect(58, 3, 55, 35, ST77XX_BLACK); 273} 274BLYNK_WRITE(V1){ // when receiving data on V1 275 int val = param.asInt(); // get the value 276 if (val == 1){ // if the value is 1, change the relay 277 relayOn = !relayOn; 278 delay(150); 279 } 280} 281void doBetterBattery(){ // draw a more modern battery 282 batteryPercent = getBatteryPercent(); // get the battery percent 283 if (batteryPercent != lastBatteryPercent){ // if the battery percent has changed 284 int length = map(batteryPercent, 0, 100, 1, 25); // map the battery percent to 25 pixels 285 carrier.display.fillRect(107, 4, 140, 60, ST77XX_BLACK); // clear the battery display 286 if (batteryPercent < 5){ // if the percent is < 5 287 color = ST77XX_RED; // color is red 288 drawBatteryShellRed(); // draw the shell red 289 } 290 else{ // else 291 color = ST77XX_WHITE; // color is white 292 drawBatteryShell(); // draw the shell as white 293 } 294 carrier.display.fillRect(110, 7, length, 9, color); // draw the bar as the color selected 295 textAt(110, 25, String(batteryPercent) + "%"); // display the battery percent 296 } 297 lastBatteryPercent = batteryPercent; // last battery percent is the current battery percent 298} 299int rssiPercent(){ // function to get RSSI as percent 300 return (map(WiFi.RSSI(), -100, 0, 0, 100)); // return the percent 301} 302/* 303 * Old, unused code: 304 * 305 if (carrier.Button0.getTouch()){ // if button 0 is pressed: 306 brightness -= 20; // lower brightness 307 if (brightness < 0){ 308 brightness = 0; 309 } 310 delay(90); 311 } 312 if (carrier.Button1.getTouch()){ // if button 1 is pressed, increase brightness 313 brightness += 20; 314 if (brightness > 255){ 315 brightness = 240; 316 } 317 delay(90); 318 } 319 */ 320void reconnect(){ // reconnect to Blynk 321 while (!Blynk.connected()){ // while not connected 322 Blynk.begin(auth, ssid, pass); // begin Blynk again 323 } 324} 325bool isAnyButtonPressed(){ // is any button pressed 326 carrier.Buttons.update(); // update buttons 327 // return if any button is pressed 328 return ((carrier.Button0.getTouch()) or (carrier.Button1.getTouch()) or (carrier.Button2.getTouch()) or (carrier.Button3.getTouch()) or (carrier.Button4.getTouch())); 329}
Arduino WiFi Rev2 code
c_cpp
Upload this code to the Arduino WiFi Rev2 with the relay pins to +5V, GND, and D2
1//#define BLYNK_PRINT Serial // debug output for Blynk 2 3#include <U8g2lib.h> 4#include <Wire.h> 5U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); 6 7#define GREEN_LED_pin 26 // pins for the RGB LED (built in to the Arduno) 8#define BLUE_LED_pin 27 9#define RED_LED_pin 25 10 11#include <Blynk.h> // necessary libraries 12#include <SPI.h> 13#include <WiFiNINA.h> 14#include <BlynkSimpleWiFiNINA.h> 15WidgetBridge bridge1(V0); // bridge widge for receiving data 16 17char auth[] = "Auth token"; // auth, ssid, and pass 18char ssid[] = "SSID"; 19char pass[] = "Password"; 20 21int receivedVal; // received data 22bool relayOn = false; // is the relay on? 23bool lastRelayState = false; // last relay state 24const int relayPin = 2; // relay pin 25const int buttonPin = 3; // button pin for manual control 26const int reconnectPin = 4; // button to reconnect 27bool canReconnect = true; // default to false, changeable by button press 28/* CONNECTIONS 29 RELAY ----- Arduino 30 + ----- 5V 31 - ----- GND 32 S ----- D2 33 34 RELAY ----- Light (can be LED, etc) 35 36 NC (normally closed) ----- Nothing 37 Middle pin ----- One pin of light 38 NO (normally open) ----- Power (wall, +5V, etc) 39 Normally open means that when the relay does not have power, the circuit is open, meaning the light is off. I decided to use this side because I wanted a saftey, like if my Arduino loses power, short circuits, or anything else bad, it would stop powering the relay, meaning the lights would go off. 40 41 LED connections (using LED as an example) 42 shorter end (GND) ----- 220 ohm resistor ----- GND 43 longer end (power) ----- +5V 44 Use 10 ohm resistor for 3.3V power 45*/ 46 47void setup() { 48 u8g2.begin(); 49 u8g2.setFont(u8g2_font_7x14B_tf); 50 u8g2.clearBuffer(); 51 u8g2.sendBuffer(); 52 // set up RGB LED (buitlin LED) 53 WiFiDrv::pinMode(RED_LED_pin, OUTPUT); //RED 54 WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT); //GREEN 55 WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT); //BLUE 56 57 //turn off RGB led 58 WiFiDrv::digitalWrite(RED_LED_pin, LOW); 59 WiFiDrv::digitalWrite(GREEN_LED_pin, LOW); 60 WiFiDrv::digitalWrite(BLUE_LED_pin, LOW); 61 62 pinMode(relayPin, OUTPUT); // set up relay 63 pinMode(buttonPin, INPUT); // set up both buttons 64 pinMode(reconnectPin, INPUT); 65 Serial.begin(9600); // begin Serial 66 setLEDColor(255, 0, 0); // set LED color to red 67 clear(); 68 textAt(25, 25, "Connecting"); 69 send(); 70 Blynk.begin(auth, ssid, pass); // begin Blynk 71 while (!Blynk.connected()); // wait for Blynk connections 72 setLEDColor(0, 255, 0); // set the LEDcolor to green (connected now!) 73 clear(); 74 textAt(25, 25, "Connected"); 75 send(); 76 delay(5000); 77 clear(); 78 send(); 79} 80bool lastState, currentState; 81void loop() { 82 Blynk.run(); // handle Blynk 83 currentState = Blynk.connected(); 84 if (currentState){ // set LED color based on WiFi connections 85 setLEDColor(0, 255, 0); // green (connected) 86 if (digitalRead(buttonPin) == HIGH){ 87 bridge1.virtualWrite(V6, 1); 88 delay(150); 89 } 90 } 91// Serial.println( 92 if (digitalRead(reconnectPin) == HIGH){ 93 canReconnect = !canReconnect; 94 clear(); 95 textAt(5, 30, "Auto reconnect:"); 96 if (canReconnect){ 97 textAt(5, 60, "Yes"); 98 } 99 else{ 100 textAt(5, 60, "No"); 101 } 102 send(); 103 delay(2000); 104 clear(); 105 send(); 106 } 107 if (!currentState){ 108 setLEDColor(255, 0, 0); 109 if (canReconnect){ 110 clear(); 111 textAt(5, 30, "Reconnecting..."); 112 send(); 113 while (!Blynk.connected()){ 114 Blynk.begin(auth, ssid, pass); 115 manualControl(); 116 } 117 clear(); 118 textAt(5, 30, "Reconnected!"); 119 send(); 120 setLEDColor(255, 0, 0); 121 currentState = true; 122 delay(5000); 123 clear(); 124 send(); 125 } 126 else{ 127 manualControl(); 128 delay(100); 129 } 130 } 131 Blynk.virtualWrite(V2, rssiPercent()); 132// Serial.println(rssiStrength); 133 if (relayOn != lastRelayState){ // if the last state is not the current state 134 clear(); 135 if (relayOn){ 136 textAt(5, 30, "Light: On"); 137 } 138 else{ 139 textAt(5, 30, "Light: Off"); 140 } 141 send(); 142 } 143 if ((!currentState) and (currentState != lastState)){ 144 setLEDColor(255, 0, 0); 145 clear(); 146 textAt(5, 30, "Disconnected"); 147 send(); 148 } 149/* if (!currentState){ // removed because of optional auto-reconnect 150 manualControl(); 151 delay(100); 152 }*/ 153 lastState = currentState; 154 lastRelayState = relayOn; 155} 156 157BLYNK_WRITE(V5){ // when receiving data on V5 (make sure this is the same on the sending side) 158 receivedVal = param.asInt(); // get the value 159 if (receivedVal == 1){ // if it is 1 160 relayOn = true; // turn it on 161 } 162 else{ // else 163 relayOn = false; // turn it off 164 } 165 if (relayOn){ // if it is true, turn the relay on 166 digitalWrite(relayPin, HIGH); 167 } 168 else{ // if it is false, turn the relay off 169 digitalWrite(relayPin, LOW); 170 } 171} 172 173void setLEDColor(uint8_t R, uint8_t G, uint8_t B){ 174 //R, G, and B values should not exceed 255 or be lower than 0. 175 176 //set ESP32 wifi module RGB led color 177 WiFiDrv::analogWrite(RED_LED_pin, R); //Red 178 WiFiDrv::analogWrite(GREEN_LED_pin, G); //Green 179 WiFiDrv::analogWrite(BLUE_LED_pin, B); //Blue 180} 181BLYNK_CONNECTED(){ // connected, now set the auth token of the other device 182 bridge1.setAuthToken("Other auth token"); 183} 184void manualControl(){ 185 if (digitalRead(buttonPin) == HIGH){ 186 relayOn = !relayOn; 187 delay(100); 188 } 189 digitalWrite(relayPin, relayOn); 190} 191void clear(){ 192 u8g2.clearBuffer(); 193} 194void send(){ 195 u8g2.sendBuffer(); 196} 197void textAt(int x, int y, String text){ 198 u8g2.setCursor(x, y); 199 u8g2.print(text); 200} 201int rssiPercent(){ 202 return map(WiFi.RSSI(), -100, 0, 0, 100); 203} 204/* 205 * This does not work: 206 * Modify if you want 207 * put after if (Blynk.connected()){ 208 * } 209 else{ 210 setLEDColor(255, 0, 0); 211 clear(); 212 textAt(5, 30, "Disconnected..."); 213 textAt(5, 60, "Reconnecting"); 214 send(); 215 bool result = Blynk.connect(); 216 delay(10000); 217 if (result){ 218 textAt( ... ); 219 } 220 } 221 */ 222 /* 223 else{ 224 setLEDColor(255, 0, 0); // red (disconnected) 225 clear(); 226 textAt(5, 30, "Disconnected"); 227 send(); 228 manualControl(); 229 delay(100); 230 }*/
Images.h
c_cpp
Add a new tab in the MKR carrier code and add this
1const unsigned char sun [] PROGMEM = { 2 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 3 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 4 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 5 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 6 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 7 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 8 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xc0, 0xff, 0xfe, 0x7f, 0xbf, 0xcf, 0xff, 0xc0, 9 0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xff, 0x1f, 0xbf, 0x3f, 0xff, 0xc0, 0xff, 0xff, 10 0x8f, 0xfe, 0x7f, 0xff, 0xc0, 0xff, 0xff, 0xce, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 11 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 0xf1, 0xff, 0xff, 12 0xc0, 0xff, 0xff, 0xe3, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xf0, 0xe7, 0xf9, 0xc3, 0xff, 0xc0, 0xff, 13 0xe0, 0x67, 0xf8, 0x81, 0xff, 0xc0, 0xff, 0xff, 0xe7, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 14 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 0xff, 15 0xff, 0xc0, 0xff, 0xff, 0xde, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x8f, 0xfe, 0x7f, 0xff, 0xc0, 16 0xff, 0xff, 0x9f, 0xff, 0x3f, 0xff, 0xc0, 0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xfe, 17 0x7f, 0xbf, 0xcf, 0xff, 0xc0, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 18 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 19 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 20 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 21 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 22 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 23 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0 24}; 25const unsigned char wifi [] PROGMEM = { 26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 28 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 29 0x00, 0x00, 0x03, 0xfe, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x00, 0x00, 30 0x0f, 0xc3, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0xfe, 0x1e, 0x00, 0x00, 0x00, 0x0e, 0x3f, 31 0xff, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xe0, 32 0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xf8, 0xe0, 0x00, 0x00, 33 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 34 0x1e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 35 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 36 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 37 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 39 0x00, 0x00 40}; 41// 'loading', 200x100px 42/* 43const unsigned char loading [] PROGMEM = { 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x28, 0x00, 98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 99 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x61, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x53, 101 0x6d, 0xb6, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x1a, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104 0xa2, 0xfa, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x9a, 0x6d, 0x14, 0x40, 0x00, 0x00, 106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107 0x00, 0x00, 0x9e, 0xfb, 0xed, 0x13, 0xda, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 118 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 119 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xdf, 0xf3, 121 0xfc, 0xff, 0x3f, 0xcf, 0xf3, 0xfe, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 122 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x7f, 0x9f, 0xf7, 0xfd, 0xff, 0x7f, 0xdf, 0xf7, 0xfc, 0xff, 123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 124 0xbf, 0xe7, 0xf9, 0xfe, 0x7f, 0x9f, 0xe7, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0xff, 0xbf, 0xe7, 126 0xf9, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127 0x1c, 0xff, 0x3f, 0xcf, 0xf3, 0xfc, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 128 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x7f, 0xdf, 0xf7, 0xfd, 0xff, 129 0x3f, 0xcf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 130 0x00, 0x00, 0x11, 0xfe, 0x7f, 0x9f, 0xe7, 0xf9, 0xfe, 0x7f, 0xdf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 131 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 132 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 200 0x00, 0x00, 0x00, 0x00 201};*/
Images.h
c_cpp
Add a new tab in the MKR carrier code and add this
1const unsigned char sun [] PROGMEM = { 2 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 3 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 4 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 5 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 6 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 7 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 8 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xc0, 0xff, 0xfe, 0x7f, 0xbf, 0xcf, 0xff, 0xc0, 9 0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xff, 0x1f, 0xbf, 0x3f, 0xff, 0xc0, 0xff, 0xff, 10 0x8f, 0xfe, 0x7f, 0xff, 0xc0, 0xff, 0xff, 0xce, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 11 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 0xf1, 0xff, 0xff, 12 0xc0, 0xff, 0xff, 0xe3, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xf0, 0xe7, 0xf9, 0xc3, 0xff, 0xc0, 0xff, 13 0xe0, 0x67, 0xf8, 0x81, 0xff, 0xc0, 0xff, 0xff, 0xe7, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 14 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 0xff, 15 0xff, 0xc0, 0xff, 0xff, 0xde, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x8f, 0xfe, 0x7f, 0xff, 0xc0, 16 0xff, 0xff, 0x9f, 0xff, 0x3f, 0xff, 0xc0, 0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xfe, 17 0x7f, 0xbf, 0xcf, 0xff, 0xc0, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 18 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 19 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 20 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 21 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 22 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 23 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0 24}; 25const unsigned char wifi [] PROGMEM = { 26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 28 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 29 0x00, 0x00, 0x03, 0xfe, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x00, 0x00, 30 0x0f, 0xc3, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0xfe, 0x1e, 0x00, 0x00, 0x00, 0x0e, 0x3f, 31 0xff, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xe0, 32 0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xf8, 0xe0, 0x00, 0x00, 33 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 34 0x1e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 35 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 36 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 37 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 39 0x00, 0x00 40}; 41// 'loading', 200x100px 42/* 43const unsigned char loading [] PROGMEM = { 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 87 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 96 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x28, 0x00, 98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 99 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x61, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x53, 101 0x6d, 0xb6, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x1a, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 104 0xa2, 0xfa, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x9a, 0x6d, 0x14, 0x40, 0x00, 0x00, 106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107 0x00, 0x00, 0x9e, 0xfb, 0xed, 0x13, 0xda, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 118 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 119 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xdf, 0xf3, 121 0xfc, 0xff, 0x3f, 0xcf, 0xf3, 0xfe, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 122 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x7f, 0x9f, 0xf7, 0xfd, 0xff, 0x7f, 0xdf, 0xf7, 0xfc, 0xff, 123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 124 0xbf, 0xe7, 0xf9, 0xfe, 0x7f, 0x9f, 0xe7, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 125 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0xff, 0xbf, 0xe7, 126 0xf9, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 127 0x1c, 0xff, 0x3f, 0xcf, 0xf3, 0xfc, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 128 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x7f, 0xdf, 0xf7, 0xfd, 0xff, 129 0x3f, 0xcf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 130 0x00, 0x00, 0x11, 0xfe, 0x7f, 0x9f, 0xe7, 0xf9, 0xfe, 0x7f, 0xdf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 131 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 132 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 200 0x00, 0x00, 0x00, 0x00 201};*/
Arduino WiFi Rev2 code
c_cpp
Upload this code to the Arduino WiFi Rev2 with the relay pins to +5V, GND, and D2
1//#define BLYNK_PRINT Serial // debug output for Blynk 2 3#include <U8g2lib.h> 4#include <Wire.h> 5U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); 6 7#define GREEN_LED_pin 26 // pins for the RGB LED (built in to the Arduno) 8#define BLUE_LED_pin 27 9#define RED_LED_pin 25 10 11#include <Blynk.h> // necessary libraries 12#include <SPI.h> 13#include <WiFiNINA.h> 14#include <BlynkSimpleWiFiNINA.h> 15WidgetBridge bridge1(V0); // bridge widge for receiving data 16 17char auth[] = "Auth token"; // auth, ssid, and pass 18char ssid[] = "SSID"; 19char pass[] = "Password"; 20 21int receivedVal; // received data 22bool relayOn = false; // is the relay on? 23bool lastRelayState = false; // last relay state 24const int relayPin = 2; // relay pin 25const int buttonPin = 3; // button pin for manual control 26const int reconnectPin = 4; // button to reconnect 27bool canReconnect = true; // default to false, changeable by button press 28/* CONNECTIONS 29 RELAY ----- Arduino 30 + ----- 5V 31 - ----- GND 32 S ----- D2 33 34 RELAY ----- Light (can be LED, etc) 35 36 NC (normally closed) ----- Nothing 37 Middle pin ----- One pin of light 38 NO (normally open) ----- Power (wall, +5V, etc) 39 Normally open means that when the relay does not have power, the circuit is open, meaning the light is off. I decided to use this side because I wanted a saftey, like if my Arduino loses power, short circuits, or anything else bad, it would stop powering the relay, meaning the lights would go off. 40 41 LED connections (using LED as an example) 42 shorter end (GND) ----- 220 ohm resistor ----- GND 43 longer end (power) ----- +5V 44 Use 10 ohm resistor for 3.3V power 45*/ 46 47void setup() { 48 u8g2.begin(); 49 u8g2.setFont(u8g2_font_7x14B_tf); 50 u8g2.clearBuffer(); 51 u8g2.sendBuffer(); 52 // set up RGB LED (buitlin LED) 53 WiFiDrv::pinMode(RED_LED_pin, OUTPUT); //RED 54 WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT); //GREEN 55 WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT); //BLUE 56 57 //turn off RGB led 58 WiFiDrv::digitalWrite(RED_LED_pin, LOW); 59 WiFiDrv::digitalWrite(GREEN_LED_pin, LOW); 60 WiFiDrv::digitalWrite(BLUE_LED_pin, LOW); 61 62 pinMode(relayPin, OUTPUT); // set up relay 63 pinMode(buttonPin, INPUT); // set up both buttons 64 pinMode(reconnectPin, INPUT); 65 Serial.begin(9600); // begin Serial 66 setLEDColor(255, 0, 0); // set LED color to red 67 clear(); 68 textAt(25, 25, "Connecting"); 69 send(); 70 Blynk.begin(auth, ssid, pass); // begin Blynk 71 while (!Blynk.connected()); // wait for Blynk connections 72 setLEDColor(0, 255, 0); // set the LEDcolor to green (connected now!) 73 clear(); 74 textAt(25, 25, "Connected"); 75 send(); 76 delay(5000); 77 clear(); 78 send(); 79} 80bool lastState, currentState; 81void loop() { 82 Blynk.run(); // handle Blynk 83 currentState = Blynk.connected(); 84 if (currentState){ // set LED color based on WiFi connections 85 setLEDColor(0, 255, 0); // green (connected) 86 if (digitalRead(buttonPin) == HIGH){ 87 bridge1.virtualWrite(V6, 1); 88 delay(150); 89 } 90 } 91// Serial.println( 92 if (digitalRead(reconnectPin) == HIGH){ 93 canReconnect = !canReconnect; 94 clear(); 95 textAt(5, 30, "Auto reconnect:"); 96 if (canReconnect){ 97 textAt(5, 60, "Yes"); 98 } 99 else{ 100 textAt(5, 60, "No"); 101 } 102 send(); 103 delay(2000); 104 clear(); 105 send(); 106 } 107 if (!currentState){ 108 setLEDColor(255, 0, 0); 109 if (canReconnect){ 110 clear(); 111 textAt(5, 30, "Reconnecting..."); 112 send(); 113 while (!Blynk.connected()){ 114 Blynk.begin(auth, ssid, pass); 115 manualControl(); 116 } 117 clear(); 118 textAt(5, 30, "Reconnected!"); 119 send(); 120 setLEDColor(255, 0, 0); 121 currentState = true; 122 delay(5000); 123 clear(); 124 send(); 125 } 126 else{ 127 manualControl(); 128 delay(100); 129 } 130 } 131 Blynk.virtualWrite(V2, rssiPercent()); 132// Serial.println(rssiStrength); 133 if (relayOn != lastRelayState){ // if the last state is not the current state 134 clear(); 135 if (relayOn){ 136 textAt(5, 30, "Light: On"); 137 } 138 else{ 139 textAt(5, 30, "Light: Off"); 140 } 141 send(); 142 } 143 if ((!currentState) and (currentState != lastState)){ 144 setLEDColor(255, 0, 0); 145 clear(); 146 textAt(5, 30, "Disconnected"); 147 send(); 148 } 149/* if (!currentState){ // removed because of optional auto-reconnect 150 manualControl(); 151 delay(100); 152 }*/ 153 lastState = currentState; 154 lastRelayState = relayOn; 155} 156 157BLYNK_WRITE(V5){ // when receiving data on V5 (make sure this is the same on the sending side) 158 receivedVal = param.asInt(); // get the value 159 if (receivedVal == 1){ // if it is 1 160 relayOn = true; // turn it on 161 } 162 else{ // else 163 relayOn = false; // turn it off 164 } 165 if (relayOn){ // if it is true, turn the relay on 166 digitalWrite(relayPin, HIGH); 167 } 168 else{ // if it is false, turn the relay off 169 digitalWrite(relayPin, LOW); 170 } 171} 172 173void setLEDColor(uint8_t R, uint8_t G, uint8_t B){ 174 //R, G, and B values should not exceed 255 or be lower than 0. 175 176 //set ESP32 wifi module RGB led color 177 WiFiDrv::analogWrite(RED_LED_pin, R); //Red 178 WiFiDrv::analogWrite(GREEN_LED_pin, G); //Green 179 WiFiDrv::analogWrite(BLUE_LED_pin, B); //Blue 180} 181BLYNK_CONNECTED(){ // connected, now set the auth token of the other device 182 bridge1.setAuthToken("Other auth token"); 183} 184void manualControl(){ 185 if (digitalRead(buttonPin) == HIGH){ 186 relayOn = !relayOn; 187 delay(100); 188 } 189 digitalWrite(relayPin, relayOn); 190} 191void clear(){ 192 u8g2.clearBuffer(); 193} 194void send(){ 195 u8g2.sendBuffer(); 196} 197void textAt(int x, int y, String text){ 198 u8g2.setCursor(x, y); 199 u8g2.print(text); 200} 201int rssiPercent(){ 202 return map(WiFi.RSSI(), -100, 0, 0, 100); 203} 204/* 205 * This does not work: 206 * Modify if you want 207 * put after if (Blynk.connected()){ 208 * } 209 else{ 210 setLEDColor(255, 0, 0); 211 clear(); 212 textAt(5, 30, "Disconnected..."); 213 textAt(5, 60, "Reconnecting"); 214 send(); 215 bool result = Blynk.connect(); 216 delay(10000); 217 if (result){ 218 textAt( ... ); 219 } 220 } 221 */ 222 /* 223 else{ 224 setLEDColor(255, 0, 0); // red (disconnected) 225 clear(); 226 textAt(5, 30, "Disconnected"); 227 send(); 228 manualControl(); 229 delay(100); 230 }*/
MKR IoT Carrier code
c_cpp
Upload this code to the MKR board attached to the carrier.
1#include <Arduino_MKRIoTCarrier.h> // include the IoT carrier library 2#include "Images.h" // Bitmap images file 3#include <SPI.h> // include needed libraries 4#include <WiFiNINA.h> 5#include <BlynkSimpleWiFiNINA.h> 6#include <utility/wifi_drv.h> // needed for RGB LED 7 8WidgetBridge bridge1(V0); // data transfer widget (bridge) 9BlynkTimer timer; // timer for sending data 10WidgetLCD lcd(V2); 11 12#define GREEN_LED_pin 25 // RGB LED pins (wifi_drv) 13#define BLUE_LED_pin 27 14#define RED_LED_pin 26 15 16char ssid[] = "Your SSID"; // SSID, password, and auth token 17char pass[] = "Your password"; 18char auth[] = "Your auth token (Blynk)"; 19 20const int brightness = 120; // brightness of the lights 21int batteryPercent; // battery percent 22int color; // color of battery, set to nothing to start 23int lastBatteryPercent = -1; // set it to -1 so that it thinks the battery has changed percent, and do the battery 24 25bool relayCanChange = true; // can the relay change? 26bool relayOn; // is the relay on? 27bool lastRead = relayOn; // last state of the relay 28bool ownLights = false; // are the lights on the carrier on? 29bool autoReconnect = true; // auto reconnections? 30 31MKRIoTCarrier carrier; // init the IoT carrier as "carrier" 32uint32_t white = carrier.leds.Color(brightness, brightness, brightness); // color white (R, G, B) not actually used currently (full brightness) 33#define BLYNK_PRINT Serial // Blynk debug output 34void setup() { 35// insert this line of code in here (setup()) to change the color 36// carrier.display.setTextColor(ST77XX_(your color)); 37// currently it is set to CYAN (ST77XX_CYAN) 38 carrier.display.setTextColor(ST77XX_CYAN); // Set text color 39 // set up RGB LED 40 WiFiDrv::pinMode(RED_LED_pin, OUTPUT); //RED 41 WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT); //GREEN 42 WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT); //BLUE 43 44 //turn off RGB led 45 WiFiDrv::digitalWrite(RED_LED_pin, LOW); 46 WiFiDrv::digitalWrite(GREEN_LED_pin, LOW); 47 WiFiDrv::digitalWrite(BLUE_LED_pin, LOW); 48 // start the carrier and check for errors 49 if (!carrier.begin()){ 50 while(1){ 51 // if there is an error, flash the RGB LED red 52 setLEDColor(255, 0, 0); 53 delay(1000); 54 setLEDColor(0, 0, 0); 55 delay(1000); 56 } 57 } 58 // set LED color to RED (connecting...) (setLEDColor(r, g, b) is a custom function at the bottom) 59 setLEDColor(255, 0, 0); 60 Serial.begin(9600); // Start Serial 61 Blynk.begin(auth, ssid, pass); // Start Blynk 62 carrier.display.fillScreen(ST77XX_BLACK); // clear display 63 carrier.display.setRotation(0); // set display settings 64 carrier.display.setTextSize(2); 65 // for some reason it cannot draw things until Blynk is connected 66// carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE); 67 while (!Blynk.connected()){ // wait for Blynk connections 68// carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE); 69 } 70 lcd.clear(); 71 carrier.display.fillScreen(ST77XX_BLACK); // clear display (fill with black. If you know another way, please tell) 72 carrier.display.setCursor(50, 50); 73 carrier.display.print("Connected!"); // print success message to display 74 setLEDColor(0, 255, 0); // set LED to green (connected) 75 delay(5000); // wait 5 seconds 76 carrier.display.fillScreen(ST77XX_BLACK); // clear display 77 timer.setInterval(250L, sendData); // set up timer (every 250 ms do sendData()) 78 doGUI(); // do the GUI for the project (displays "Light controlling") 79} 80 81void loop() { 82 Blynk.run(); // handle Blynk and timer 83 timer.run(); 84 doBetterBattery(); // output battery data at the top (optional) 85 if (Blynk.connected()){ // set the LED color based on Blynk connection 86 setLEDColor(0, 255, 0); // green 87 drawWiFi(); // draw the wifi 88 } 89 else{ // If not connected: 90 setLEDColor(255, 0, 0); // red 91 clearWiFi(); // clear the wifi 92 clearDisplay(); // clear display 93 carrier.display.setTextColor(ST77XX_RED); // set text color to red 94 textAt(5, 120, "WiFi Disconnected!"); // display "WiFi Disconnected!" 95 carrier.display.setTextColor(ST77XX_CYAN); // set text color back to cyan 96 if (autoReconnect){ // if auto reconnect is true 97 textAt(20, 150, "Reconnecting..."); 98 reconnect(); // reconnect 99 clearDisplay(); // clear display 100 textAt(20, 150, "Reconnected!"); 101 } 102 else{ 103 textAt(20, 150, "Waiting for manual reconnections..."); 104 // wait for a button press 105 while (isAnyButtonPressed()){ 106 107 } 108 textAt(40, 180, "Reconnecting..."); 109 reconnect(); // reconnect 110 clearDisplay(); // clear display 111 textAt(20, 150, "Reconnected!"); 112 } 113 delay(5000); // wait 5 seconds 114 clearDisplay(); // clear display 115 doGUI(); // do the GUI 116 lastBatteryPercent = -1; // do this so it thinks the battery percent has changed, and show the battery 117 doBetterBattery(); // do the better battery display 118 } 119 Blynk.virtualWrite(V3, rssiPercent()); // write the WiFi strength and battery percent to Blynk 120 Blynk.virtualWrite(V4, getBatteryPercent()); 121 carrier.Buttons.update(); // update buttons 122 if (carrier.Button4.getTouch()){ // if button 4 is pressed, toggle the lights on the carrier (built in flashlight) 123 ownLights = !ownLights; // toggle the flashlight 124 delay(100); 125 } 126 if (carrier.Button3.getTouch()){ // if button 3 is pressed, change if the lights can change 127 relayCanChange = !relayCanChange; 128 delay(90); 129 } 130 if (carrier.Button0.getTouch()){ // if the first button is pressed: 131 autoReconnect = !autoReconnect; // toggle auto reconnect 132 String tempText; 133 if (autoReconnect){ 134 tempText = " On"; 135 } 136 else{ 137 tempText = " Off"; 138 } 139 // display if auto reconnect is on or off 140 textAt(20, 175, "Auto reconnections: " + tempText); 141 delay(3000); 142 carrier.display.fillRect(0, 170, 240, 40, ST77XX_BLACK); 143 } 144 carrier.leds.clear(); // clear LEDS 145 if (ownLights){ // if the flashlight is on, set the LEDs on to the brightness R (0-255) G (0-255) B (0-255) 146 carrier.leds.fill(white, 0, 5); // fill the LEDs 147 } 148 carrier.leds.show(); // show the LEDs 149 carrier.display.fillRect(15, 60, 240, 20, ST77XX_BLACK); // clear this output: 150 if (relayCanChange){ 151 textAt(15, 60, "Lights can change"); 152 } 153 else{ 154 textAt(15, 60, "Lights cannot change"); 155 } 156 if (lastRead != relayOn){ // if the relay has changed 157 lcd.clear(); // clear the virtual lcd 158 if (relayOn){ // display light on/off 159 lcd.print(0, 0, "Light on"); 160 } 161 else{ 162 lcd.print(0, 0, "Light off"); 163 } 164 } 165 lastRead = relayOn; // set the last state of the relay to the current state 166 delay(50); // delay a bit so as not to overwhelm the MKR board and display 167} 168 169void sendData(){ // do this when the timer "ticks" (every 200 ms) 170 int proximity; // proximity variable 171 if (carrier.Light.proximityAvailable()){ // update proximity and buttons 172 proximity = carrier.Light.readProximity(); // get proximity 173 carrier.Buttons.update(); // update buttons 174 // if something is close or button 2 is pressed and the relay can change 175 if (((proximity < 150) or (carrier.Button2.getTouch())) and (relayCanChange == true)){ 176 relayOn = !relayOn; // toggle the relay 177 delay(90); // wait a small amount 178 } 179 } 180 if (relayOn){ // send data ON and draw sun 181 bridge1.virtualWrite(V5, 1); // write the data to other device through the bridge 182 drawSun(); // draw the sun 183 } 184 else{ // send data OFF (and maybe draw clouds, its a work in progress) 185 bridge1.virtualWrite(V5, 0); // write the data to other device through the bridge 186 clearSun(); // clear the sun 187 } 188} 189 190BLYNK_WRITE(V6){ // when receiving data on V6 191 int value = param.asInt(); // get the value 192 if (value == 1){ // if the value is 1 193 relayOn = !relayOn; // toggle the relay 194 } 195} 196 197BLYNK_CONNECTED() { // connected now, set the bridge auth token 198 bridge1.setAuthToken("Other auth token"); 199} 200void setLEDColor(uint8_t R, uint8_t G, uint8_t B){ // custom function to help manage RGB LED 201 //R, G, and B values should not exceed 255 or be lower than 0. 202 203 //set ESP32 wifi module RGB led color 204 WiFiDrv::analogWrite(RED_LED_pin, R); // Red 205 WiFiDrv::analogWrite(GREEN_LED_pin, G); // Green 206 WiFiDrv::analogWrite(BLUE_LED_pin, B); // Blue 207} 208int getBatteryPercent(){ // return the battery percent as int 209 int sensorValue = analogRead(ADC_BATTERY); // read battery pin 210 // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.7V): 211 // float voltage = sensorValue * (3.7 / 1023.0); 212 int percent = map(sensorValue, 0, 1023, 0, 100); // convert battery reading to percent reading 213 return percent; // return reading 214} 215void drawBatteryShell(){ // draw battery shell 216 carrier.display.drawRect(108, 5, 27, 13, ST77XX_WHITE); 217 carrier.display.fillRect(135, 9, 3, 5, ST77XX_WHITE); 218}/* 219void drawFirstBar(){ // draw first bar 220 carrier.display.fillRect(110, 7, 7, 9, ST77XX_WHITE); 221} 222void drawSecondBar(){ // draw second bar 223 carrier.display.fillRect(118, 7, 7, 9, ST77XX_WHITE); 224} 225void drawThirdBar(){ // draw third bar 226 carrier.display.fillRect(126, 7, 7, 9, ST77XX_WHITE); 227}*/ 228void drawBatteryShellRed(){ // draw the shell as red color (used when battery is low) 229 carrier.display.drawRect(108, 5, 27, 13, ST77XX_RED); 230 carrier.display.fillRect(135, 9, 3, 5, ST77XX_RED); 231} 232/* 233void doBattery(){ // do the battery and draw it 234 // this took a lot of fine-tuning 235 batteryPercent = getBatteryPercent(); // get battery percent with the function 236 drawBatteryShell(); // draw the shell 237 if (batteryPercent > 10){ // draw the bars (change these percent as you like) 238 drawFirstBar(); 239 } 240 if (batteryPercent > 40){ 241 drawSecondBar(); 242 } 243 if (batteryPercent > 80){ 244 drawThirdBar(); 245 } 246 textAt(110, 40, String(batteryPercent) + "%"); // display battery percent 247}*/ 248void textAt(int x, int y, String text){ // much easier function to use 249 carrier.display.setCursor(x, y); // set the cursor to (x, y) 250 carrier.display.print(text); // print the text 251} 252void clearDisplay(){ // fill screen with BLACK color 253 carrier.display.fillScreen(ST77XX_BLACK); 254} 255void drawSun(){ // draw the sun bitmap (to show light is on) 256 carrier.display.drawBitmap(100, 120, sun, 50, 50, ST77XX_YELLOW); 257} 258void doGUI(){ // output GUI 259 textAt(10, 100, "Light controlling"); 260} 261void clearGUI(){ // clear the GUI by drawing a filled black rectangle around it 262 carrier.display.fillRect(10, 100, 100, 20, ST77XX_BLACK); 263} 264void clearSun(){ // clear the sun the same way 265 carrier.display.fillRect(95, 115, 60, 60, ST77XX_BLACK); 266} 267void drawWiFi(){ // draw the WiFi bitmap and clear a dot that goes with it 268 carrier.display.drawBitmap(60, 5, wifi, 50, 30, ST77XX_WHITE); 269 carrier.display.fillRect(55, 25, 10, 10, ST77XX_BLACK); 270} 271void clearWiFi(){ // clear the WiFi bitmap 272 carrier.display.fillRect(58, 3, 55, 35, ST77XX_BLACK); 273} 274BLYNK_WRITE(V1){ // when receiving data on V1 275 int val = param.asInt(); // get the value 276 if (val == 1){ // if the value is 1, change the relay 277 relayOn = !relayOn; 278 delay(150); 279 } 280} 281void doBetterBattery(){ // draw a more modern battery 282 batteryPercent = getBatteryPercent(); // get the battery percent 283 if (batteryPercent != lastBatteryPercent){ // if the battery percent has changed 284 int length = map(batteryPercent, 0, 100, 1, 25); // map the battery percent to 25 pixels 285 carrier.display.fillRect(107, 4, 140, 60, ST77XX_BLACK); // clear the battery display 286 if (batteryPercent < 5){ // if the percent is < 5 287 color = ST77XX_RED; // color is red 288 drawBatteryShellRed(); // draw the shell red 289 } 290 else{ // else 291 color = ST77XX_WHITE; // color is white 292 drawBatteryShell(); // draw the shell as white 293 } 294 carrier.display.fillRect(110, 7, length, 9, color); // draw the bar as the color selected 295 textAt(110, 25, String(batteryPercent) + "%"); // display the battery percent 296 } 297 lastBatteryPercent = batteryPercent; // last battery percent is the current battery percent 298} 299int rssiPercent(){ // function to get RSSI as percent 300 return (map(WiFi.RSSI(), -100, 0, 0, 100)); // return the percent 301} 302/* 303 * Old, unused code: 304 * 305 if (carrier.Button0.getTouch()){ // if button 0 is pressed: 306 brightness -= 20; // lower brightness 307 if (brightness < 0){ 308 brightness = 0; 309 } 310 delay(90); 311 } 312 if (carrier.Button1.getTouch()){ // if button 1 is pressed, increase brightness 313 brightness += 20; 314 if (brightness > 255){ 315 brightness = 240; 316 } 317 delay(90); 318 } 319 */ 320void reconnect(){ // reconnect to Blynk 321 while (!Blynk.connected()){ // while not connected 322 Blynk.begin(auth, ssid, pass); // begin Blynk again 323 } 324} 325bool isAnyButtonPressed(){ // is any button pressed 326 carrier.Buttons.update(); // update buttons 327 // return if any button is pressed 328 return ((carrier.Button0.getTouch()) or (carrier.Button1.getTouch()) or (carrier.Button2.getTouch()) or (carrier.Button3.getTouch()) or (carrier.Button4.getTouch())); 329}
Downloadable files
Connections for the WiFi Rev2 board
Connections for the WiFi Rev2 board
Documentation
MKR IoT Carrier case
Ready-to-print files for the case of the IoT carrier.
MKR IoT Carrier case
Arduino WiFi Rev2 + 9V battery case
Ready-to-print file for a bottom for the WiFi Rev2 with a built-in 9V battery holder
Arduino WiFi Rev2 + 9V battery case
MKR IoT Carrier case
Ready-to-print files for the case of the IoT carrier.
MKR IoT Carrier case
Arduino WiFi Rev2 + 9V battery case
Ready-to-print file for a bottom for the WiFi Rev2 with a built-in 9V battery holder
Arduino WiFi Rev2 + 9V battery case
Comments
Only logged in users can leave comments
ratack0
0 Followers
•0 Projects
Table of contents
Intro
3
0