├── LICENSE ├── README.md ├── arduino-ide ├── filesystem-example │ └── filesystem-example.ino ├── thingspeak-data-logger │ ├── README.md │ └── thingspeak-data-logger.ino ├── thirsdee │ ├── font.h │ ├── icons.h │ ├── src │ │ ├── WiFi_Logo.gif │ │ ├── WiFi_Logo.svg │ │ ├── WiFi_Logo.xbm │ │ ├── plant0000.gif │ │ ├── plant0000.xbm │ │ ├── plant0125.gif │ │ ├── plant0125.xbm │ │ ├── plant0250.gif │ │ ├── plant0250.xbm │ │ ├── plant0375.gif │ │ ├── plant0375.xbm │ │ ├── plant0500.gif │ │ ├── plant0500.xbm │ │ ├── plant0625.gif │ │ ├── plant0625.xbm │ │ ├── plant0750.gif │ │ ├── plant0750.xbm │ │ ├── plant0875.gif │ │ ├── plant0875.xbm │ │ ├── plant1000.gif │ │ └── plant1000.xbm │ ├── ssd1306_i2c.cpp │ ├── ssd1306_i2c.h │ └── thirsdee.ino ├── weather-station-v2 │ ├── README.md │ ├── WeatherClient.cpp │ ├── WeatherClient.h │ ├── font.h │ ├── icons.h │ ├── src │ │ ├── WiFi_Logo.svg │ │ ├── WiFi_Logo.xbm │ │ ├── active.xbm │ │ ├── inactive.xbm │ │ ├── temp.xbm │ │ ├── temp2.xbm │ │ └── weather │ │ │ ├── clear_day.svg │ │ │ ├── clear_day.xbm │ │ │ ├── clear_night.svg │ │ │ ├── clear_night.xbm │ │ │ ├── cloudy.svg │ │ │ ├── cloudy.xbm │ │ │ ├── fog.svg │ │ │ ├── fog.xbm │ │ │ ├── icons.h │ │ │ ├── partly_cloudy_day.svg │ │ │ ├── partly_cloudy_day.xbm │ │ │ ├── partly_cloudy_night.svg │ │ │ ├── partly_cloudy_night.xbm │ │ │ ├── rain.svg │ │ │ ├── rain.xbm │ │ │ ├── sleet.svg │ │ │ ├── sleet.xbm │ │ │ ├── snow.svg │ │ │ ├── snow.xbm │ │ │ ├── sunset.svg │ │ │ ├── sunset.xbm │ │ │ ├── wind.svg │ │ │ └── wind.xbm │ ├── ssd1306_i2c.cpp │ ├── ssd1306_i2c.h │ ├── weather-station-v2.ino │ └── weather.php ├── wifi-car │ ├── README.md │ ├── smartcar.js │ └── wifi-car.ino ├── wifi-door-sensor │ └── wifi-door-sensor.ino └── wifi-scale │ ├── font.h │ ├── ssd1306_i2c.cpp │ ├── ssd1306_i2c.h │ └── wifi-scale.ino └── lua ├── LICENSE ├── simple-oled-example ├── clouds.png ├── clouds.xbm ├── displayXBM.lua ├── simple-oled-sketch.fzz └── simple-oled-sketch_bb.png └── weather-station ├── 01d.MONO ├── 02d.MONO ├── 03d.MONO ├── 04d.MONO ├── 09d.MONO ├── 10d.MONO ├── 11d.MONO ├── 13d.MONO ├── 50d.MONO ├── README.md ├── clouds.xbm ├── init.lua ├── simple-oled-sketch_bb.png ├── src ├── 01d.png ├── 02d.png ├── 03d.png ├── 04d.png ├── 09d.png ├── 10d.png ├── 11d.png ├── 13d.png ├── 50d.png ├── display.jpg ├── icons.psd └── simple-oled-sketch.fzz └── weatherStation.lua /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp8266-projects 2 | 3 | Collection of projects for the ESP8266. Have a look at the projects for more detailed instructions or go to http://blog.squix.ch 4 | 5 | ## ESP8266 Starter Kit 6 | 7 | If you are just starting with ESP8266 and need a nice kit to get started have a look at my starter kit. 8 | https://blog.squix.org/product/weatherstation-kit-w-white-oled 9 | By buying the kit from me you are supporting future development. Thank you! 10 | 11 | [![Squix ESP8266 WeatherStation Classic Kit](https://blog.squix.org/wp-content/uploads/2016/12/Components4-300x300.jpg)](https://blog.squix.org/product/weatherstation-kit-w-white-oled) 12 | -------------------------------------------------------------------------------- /arduino-ide/filesystem-example/filesystem-example.ino: -------------------------------------------------------------------------------- 1 | #include "FS.h" 2 | 3 | void setup() { 4 | Serial.begin(115200); 5 | 6 | // always use this to "mount" the filesystem 7 | bool result = SPIFFS.begin(); 8 | Serial.println("SPIFFS opened: " + result); 9 | 10 | // this opens the file "f.txt" in read-mode 11 | File f = SPIFFS.open("/f.txt", "r"); 12 | 13 | if (!f) { 14 | Serial.println("File doesn't exist yet. Creating it"); 15 | 16 | // open the file in write mode 17 | File f = SPIFFS.open("/f.txt", "w"); 18 | if (!f) { 19 | Serial.println("file creation failed"); 20 | } 21 | // now write two lines in key/value style with end-of-line characters 22 | f.println("ssid=abc"); 23 | f.println("password=123455secret"); 24 | } else { 25 | // we could open the file 26 | while(f.available()) { 27 | //Lets read line by line from the file 28 | String line = f.readStringUntil('\n'); 29 | Serial.println(line); 30 | } 31 | 32 | } 33 | file.close(); 34 | } 35 | 36 | void loop() { 37 | // nothing to do for now, this is just a simple test 38 | 39 | } 40 | -------------------------------------------------------------------------------- /arduino-ide/thingspeak-data-logger/README.md: -------------------------------------------------------------------------------- 1 | # Thingspeak Data Logger 2 | 3 | This code shows how to use the deepsleep function to save energy for phases where you don't need to be connected. The sketch sends temperature and humidity every 10 minutes to thingspeak and hibernates in between. An ESP8266 testboard has been already running for more than 2 months on 3 AA batteries alone. 4 | 5 | See 6 | * http://blog.squix.ch/2015/06/esp8266-wifi-data-logger-already.html 7 | * http://blog.squix.ch/2015/06/eps8266-long-term-data-logger-update-31.html 8 | * http://blog.squix.ch/2015/05/esp8266-long-term-data-logger-test-with.html 9 | -------------------------------------------------------------------------------- /arduino-ide/thingspeak-data-logger/thingspeak-data-logger.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * This sketch sends data via HTTP GET requests to thingspeak service every 10 minutes 3 | * You have to set your wifi credentials and your thingspeak key. 4 | */ 5 | 6 | #include 7 | extern "C" { 8 | #include "user_interface.h" 9 | } 10 | #include "DHT.h" 11 | 12 | #define DHTPIN 12 // what pin we're connected to 13 | 14 | // Uncomment whatever type you're using! 15 | #define DHTTYPE DHT11 // DHT 11 16 | //define DHTTYPE DHT22 // DHT 22 (AM2302) 17 | //#define DHTTYPE DHT21 // DHT 21 (AM2301) 18 | 19 | DHT dht(DHTPIN, DHTTYPE, 15); 20 | 21 | const char* ssid = "ssid"; 22 | const char* password = "yourpassword"; 23 | 24 | 25 | const char* host = "api.thingspeak.com"; 26 | const char* thingspeak_key = "yourthingspeakkey"; 27 | 28 | void turnOff(int pin) { 29 | pinMode(pin, OUTPUT); 30 | digitalWrite(pin, 1); 31 | } 32 | 33 | void setup() { 34 | Serial.begin(115200); 35 | 36 | // disable all output to save power 37 | turnOff(0); 38 | turnOff(2); 39 | turnOff(4); 40 | turnOff(5); 41 | turnOff(12); 42 | turnOff(13); 43 | turnOff(14); 44 | turnOff(15); 45 | 46 | dht.begin(); 47 | delay(10); 48 | 49 | 50 | // We start by connecting to a WiFi network 51 | 52 | Serial.println(); 53 | Serial.println(); 54 | Serial.print("Connecting to "); 55 | Serial.println(ssid); 56 | 57 | WiFi.begin(ssid, password); 58 | 59 | while (WiFi.status() != WL_CONNECTED) { 60 | delay(500); 61 | Serial.print("."); 62 | } 63 | 64 | Serial.println(""); 65 | Serial.println("WiFi connected"); 66 | Serial.println("IP address: "); 67 | Serial.println(WiFi.localIP()); 68 | } 69 | 70 | int value = 0; 71 | 72 | void loop() { 73 | delay(5000); 74 | ++value; 75 | 76 | Serial.print("connecting to "); 77 | Serial.println(host); 78 | 79 | // Use WiFiClient class to create TCP connections 80 | WiFiClient client; 81 | const int httpPort = 80; 82 | if (!client.connect(host, httpPort)) { 83 | Serial.println("connection failed"); 84 | return; 85 | } 86 | 87 | String temp = String(dht.readTemperature()); 88 | String humidity = String(dht.readHumidity()); 89 | String voltage = String(system_get_free_heap_size()); 90 | String url = "/update?key="; 91 | url += thingspeak_key; 92 | url += "&field1="; 93 | url += temp; 94 | url += "&field2="; 95 | url += humidity; 96 | url += "&field3="; 97 | url += voltage; 98 | 99 | Serial.print("Requesting URL: "); 100 | Serial.println(url); 101 | 102 | // This will send the request to the server 103 | client.print(String("GET ") + url + " HTTP/1.1\r\n" + 104 | "Host: " + host + "\r\n" + 105 | "Connection: close\r\n\r\n"); 106 | delay(10); 107 | 108 | // Read all the lines of the reply from server and print them to Serial 109 | while(client.available()){ 110 | String line = client.readStringUntil('\r'); 111 | Serial.print(line); 112 | } 113 | 114 | Serial.println(); 115 | Serial.println("closing connection. going to sleep..."); 116 | delay(1000); 117 | // go to deepsleep for 10 minutes 118 | system_deep_sleep_set_option(0); 119 | system_deep_sleep(10 * 60 * 1000000); 120 | } 121 | 122 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/font.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | const char myFont[][8] PROGMEM = { 27 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 28 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, 29 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, 30 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, 31 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, 32 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, 33 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, 34 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, 35 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, 36 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, 37 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, 38 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, 39 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, 40 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, 41 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, 42 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, 43 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, 44 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, 45 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, 46 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, 47 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, 48 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, 49 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, 50 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, 51 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, 52 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, 53 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, 54 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, 55 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, 56 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, 57 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, 58 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, 59 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, 60 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, 61 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, 62 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, 63 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, 64 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, 65 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, 66 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, 67 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, 68 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, 69 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, 70 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, 71 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, 72 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, 73 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, 74 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, 75 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, 76 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, 77 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, 78 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, 79 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, 80 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, 81 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, 82 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, 83 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, 84 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, 85 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, 86 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, 87 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, 88 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, 89 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, 90 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, 91 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, 92 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, 93 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, 94 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, 95 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, 96 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, 97 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, 98 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, 99 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, 100 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, 101 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, 102 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, 103 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, 104 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, 105 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, 106 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, 107 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, 108 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, 109 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, 110 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, 111 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, 112 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, 113 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, 114 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, 115 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, 116 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, 117 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, 118 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, 119 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, 120 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, 121 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, 122 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} 123 | }; 124 | 125 | #define active_width 8 126 | #define active_height 8 127 | const char active_bits[] PROGMEM = { 128 | 0x00, 0x18, 0x3c, 0x7e, 0x7e, 0x3c, 0x18, 0x00 }; 129 | 130 | #define inactive_width 8 131 | #define inactive_height 8 132 | const char inactive_bits[] PROGMEM = { 133 | 0x00, 0x18, 0x24, 0x42, 0x42, 0x24, 0x18, 0x00 }; 134 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/WiFi_Logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/WiFi_Logo.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/WiFi_Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 12 | 15 | 18 | 22 | 26 | 30 | 34 | 38 | 42 | 46 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/WiFi_Logo.xbm: -------------------------------------------------------------------------------- 1 | #define WiFi_Logo_width 60 2 | #define WiFi_Logo_height 36 3 | static char WiFi_Logo_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 5 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 7 | 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 8 | 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 9 | 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0x00, 10 | 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0x07, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 11 | 0x01, 0x00, 0x0E, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0C, 0x00, 12 | 0xC0, 0x73, 0xC6, 0x7C, 0x00, 0xE0, 0x18, 0x00, 0xE0, 0x21, 0x44, 0x78, 13 | 0xFC, 0xE7, 0x10, 0x00, 0xE0, 0x23, 0xC4, 0x3C, 0xFC, 0xE7, 0x10, 0x00, 14 | 0xE0, 0x23, 0xC4, 0x3C, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x03, 0x40, 0x38, 15 | 0x1C, 0xE0, 0x30, 0x00, 0xE0, 0x03, 0x60, 0x38, 0x3C, 0xE0, 0x30, 0x00, 16 | 0xE0, 0x07, 0x60, 0x38, 0xFC, 0xE7, 0x30, 0x00, 0xE0, 0x07, 0x60, 0x38, 17 | 0xFC, 0xE7, 0x30, 0x00, 0xE0, 0x87, 0x60, 0x38, 0x1C, 0xE0, 0x30, 0x00, 18 | 0xE0, 0x87, 0x70, 0x38, 0x1C, 0xE0, 0x30, 0x00, 0xE0, 0x8F, 0x71, 0x38, 19 | 0x1C, 0xE0, 0x10, 0x00, 0xC0, 0xCF, 0xF9, 0x3C, 0x00, 0x00, 0x18, 0x00, 20 | 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x18, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 21 | 0x00, 0x00, 0x0C, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x06, 0x00, 22 | 0x00, 0xFE, 0xFF, 0x07, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 23 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 24 | 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 25 | 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 27 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 | }; 29 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0000.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0000.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0000.xbm: -------------------------------------------------------------------------------- 1 | #define plant0000_width 60 2 | #define plant0000_height 60 3 | static char plant0000_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x18, 0x30, 0x00, 0x00, 0x03, 20 | 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 21 | 0x10, 0x00, 0x80, 0x01, 0x00, 0x0C, 0x00, 0x18, 0x10, 0x00, 0x80, 0x00, 22 | 0x00, 0x38, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x03, 0x20, 23 | 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x40, 0x20, 0x00, 0x20, 0x00, 24 | 0x00, 0x00, 0xF8, 0x41, 0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x43, 25 | 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x08, 0x00, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0x8C, 0x0D, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 27 | 0x07, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 29 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 31 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x20, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 33 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 35 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 37 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 39 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 41 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 43 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0125.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0125.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0125.xbm: -------------------------------------------------------------------------------- 1 | #define plant0125_width 60 2 | #define plant0125_height 60 3 | static char plant0125_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x18, 0x30, 0x00, 0x00, 0x03, 20 | 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 21 | 0x10, 0x00, 0x80, 0x01, 0x00, 0x0C, 0x00, 0x18, 0x10, 0x00, 0x80, 0x00, 22 | 0x00, 0x38, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x03, 0x20, 23 | 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x40, 0x20, 0x00, 0x20, 0x00, 24 | 0x00, 0x00, 0xF8, 0x41, 0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x43, 25 | 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x08, 0x00, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0x8C, 0x0D, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 27 | 0x07, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 29 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 31 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x20, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 33 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 35 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 37 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 39 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0250.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0250.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0250.xbm: -------------------------------------------------------------------------------- 1 | #define plant0250_width 60 2 | #define plant0250_height 60 3 | static char plant0250_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x18, 0x30, 0x00, 0x00, 0x03, 20 | 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 21 | 0x10, 0x00, 0x80, 0x01, 0x00, 0x0C, 0x00, 0x18, 0x10, 0x00, 0x80, 0x00, 22 | 0x00, 0x38, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x03, 0x20, 23 | 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x40, 0x20, 0x00, 0x20, 0x00, 24 | 0x00, 0x00, 0xF8, 0x41, 0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x43, 25 | 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x08, 0x00, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0x8C, 0x0D, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 27 | 0x07, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 29 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 31 | 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x20, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 33 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0375.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0375.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0375.xbm: -------------------------------------------------------------------------------- 1 | #define plant0375_width 60 2 | #define plant0375_height 60 3 | static char plant0375_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x18, 0x30, 0x00, 0x00, 0x03, 20 | 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 21 | 0x10, 0x00, 0x80, 0x01, 0x00, 0x0C, 0x00, 0x18, 0x10, 0x00, 0x80, 0x00, 22 | 0x00, 0x38, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x03, 0x20, 23 | 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x40, 0x20, 0x00, 0x20, 0x00, 24 | 0x00, 0x00, 0xF8, 0x41, 0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x43, 25 | 0x18, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x08, 0x00, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0x8C, 0x0D, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 27 | 0x07, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 29 | 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0500.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0500.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0500.xbm: -------------------------------------------------------------------------------- 1 | #define plant0500_width 60 2 | #define plant0500_height 60 3 | static char plant0500_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x18, 0x30, 0x00, 0x00, 0x03, 20 | 0x00, 0x03, 0x00, 0x08, 0x10, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 21 | 0x10, 0x00, 0x80, 0x01, 0x00, 0x0C, 0x00, 0x18, 0x10, 0x00, 0x80, 0x00, 22 | 0x00, 0x38, 0x00, 0x30, 0x10, 0x00, 0xC0, 0x00, 0x00, 0xE0, 0x03, 0x20, 23 | 0x30, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x40, 0x20, 0x00, 0x20, 0x00, 24 | 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7F, 25 | 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 29 | 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0625.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0625.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0625.xbm: -------------------------------------------------------------------------------- 1 | #define plant0625_width 60 2 | #define plant0625_height 60 3 | static char plant0625_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0x18, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x04, 0x18, 0x00, 0x00, 0x10, 15 | 0x00, 0x0E, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 16 | 0x30, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x10, 17 | 0x40, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 18 | 0x40, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 19 | 0x20, 0x00, 0x00, 0x02, 0x80, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x03, 20 | 0x00, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x0F, 21 | 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFC, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x00, 22 | 0x00, 0xF8, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 23 | 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0x3F, 0x00, 24 | 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7F, 25 | 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 29 | 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0750.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0750.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0750.xbm: -------------------------------------------------------------------------------- 1 | #define plant0750_width 60 2 | #define plant0750_height 60 3 | static char plant0750_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xE0, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 11 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x0F, 12 | 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0x08, 0x04, 0x00, 0x00, 0x08, 13 | 0x00, 0x80, 0x07, 0x08, 0x08, 0x00, 0x00, 0x10, 0x00, 0x60, 0x00, 0x08, 14 | 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0x1F, 15 | 0x00, 0xFE, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x07, 16 | 0xF0, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 17 | 0xC0, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xFF, 0x03, 18 | 0xC0, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0x1F, 19 | 0xE0, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x03, 20 | 0x00, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x0F, 21 | 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFC, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x00, 22 | 0x00, 0xF8, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 23 | 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0x3F, 0x00, 24 | 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7F, 25 | 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 29 | 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0875.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant0875.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant0875.xbm: -------------------------------------------------------------------------------- 1 | #define plant0875_width 60 2 | #define plant0875_height 60 3 | static char plant0875_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x03, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 11 | 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0x0F, 12 | 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0x0F, 13 | 0x00, 0x80, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x0F, 14 | 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0x1F, 15 | 0x00, 0xFE, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x07, 16 | 0xF0, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 17 | 0xC0, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xFF, 0x03, 18 | 0xC0, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0x1F, 19 | 0xE0, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x03, 20 | 0x00, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x0F, 21 | 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFC, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x00, 22 | 0x00, 0xF8, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 23 | 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0x3F, 0x00, 24 | 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7F, 25 | 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 29 | 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant1000.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/arduino-ide/thirsdee/src/plant1000.gif -------------------------------------------------------------------------------- /arduino-ide/thirsdee/src/plant1000.xbm: -------------------------------------------------------------------------------- 1 | #define plant1000_width 60 2 | #define plant1000_height 60 3 | static char plant1000_bits[] = { 4 | 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 10 | 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 11 | 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x80, 0x0F, 12 | 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0x0F, 13 | 0x00, 0x80, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x0F, 14 | 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0x1F, 15 | 0x00, 0xFE, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x07, 16 | 0xF0, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 17 | 0xC0, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x1F, 0xC0, 0xFF, 0xFF, 0x03, 18 | 0xC0, 0xFF, 0xFF, 0x1F, 0xE0, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0x1F, 19 | 0xE0, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x03, 20 | 0x00, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x0F, 21 | 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xFC, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x00, 22 | 0x00, 0xF8, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 23 | 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0x3F, 0x00, 24 | 0x00, 0x00, 0xF8, 0x7F, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7F, 25 | 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0xFF, 0x07, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0xFD, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 29 | 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 31 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 33 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 35 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 37 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 39 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 41 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 43 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 44 | }; 45 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/ssd1306_i2c.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | 25 | Credits for parts of this code go to Mike Rankin. Thank you so much for sharing! 26 | */ 27 | 28 | #include 29 | 30 | #define BLACK 0 31 | #define WHITE 1 32 | #define INVERSE 2 33 | 34 | 35 | class SSD1306 { 36 | 37 | private: 38 | int myI2cAddress; 39 | int mySda; 40 | int mySdc; 41 | uint8_t buffer[128 * 64 / 8]; 42 | bool myIsFontScaling2x2 = false; 43 | int myFrameState = 0; 44 | int myFrameTick = 0; 45 | int myCurrentFrame = 0; 46 | int myFrameCount = 0; 47 | int myFrameWaitTicks = 100; 48 | int myFrameTransitionTicks = 25; 49 | int myColor = WHITE; 50 | void (**myFrameCallbacks)(int x, int y); 51 | 52 | 53 | public: 54 | // Empty constructor 55 | SSD1306(int i2cAddress, int sda, int sdc); 56 | void init(); 57 | void resetDisplay(void); 58 | void reconnect(void); 59 | void displayOn(void); 60 | void displayOff(void); 61 | void clear(void); 62 | void display(void); 63 | void setPixel(int x, int y); 64 | void setChar(int x, int y, unsigned char data); 65 | void drawString(int x, int y, String text); 66 | void setFontScale2x2(bool isFontScaling2x2); 67 | void drawBitmap(int x, int y, int width, int height, const char *bitmap); 68 | void drawXbm(int x, int y, int width, int height, const char *xbm); 69 | void sendCommand(unsigned char com); 70 | void sendInitCommands(void); 71 | void setColor(int color); 72 | void drawRect(int x, int y, int width, int height); 73 | void fillRect(int x, int y, int width, int height); 74 | 75 | void setContrast(char contrast); 76 | void flipScreenVertically(); 77 | 78 | 79 | void setFrameCallbacks(int frameCount, void (*frameCallbacks[])(int x, int y)); 80 | void nextFrameTick(void); 81 | void drawIndicators(int frameCount, int activeFrame); 82 | void setFrameWaitTicks(int frameWaitTicks); 83 | void setFrameTransitionTicks(int frameTransitionTicks); 84 | int getFrameState(); 85 | 86 | const int FRAME_STATE_FIX = 0; 87 | const int FRAME_STATE_TRANSITION = 1; 88 | 89 | }; 90 | -------------------------------------------------------------------------------- /arduino-ide/thirsdee/thirsdee.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "HX711.h" 6 | #include "ssd1306_i2c.h" 7 | #include "icons.h" 8 | #include "font.h" 9 | 10 | 11 | SSD1306 display(0x3c, 2, 0); 12 | int counter = 0; 13 | 14 | // your network SSID (name) 15 | char ssid[] = ""; 16 | // your network password 17 | char pass[] = ""; 18 | 19 | char thingspeakKey[] = ""; 20 | 21 | const char* host = "api.thingspeak.com"; 22 | 23 | const char *xbm [] = {plant0000_bits, plant0125_bits, plant0250_bits, plant0375_bits, plant0500_bits, plant0625_bits, plant0750_bits, plant0875_bits, plant1000_bits}; 24 | 25 | // NodeMCU pins 26 | HX711 scale(12, 14); // parameter "gain" is ommited; the default value 128 is used by the library 27 | 28 | // this array keeps function pointers to all frames 29 | // frames are the single views that slide from right to left 30 | void (*frameCallbacks[2])(int x, int y) = {drawFrame1, drawFrame2}; 31 | 32 | // how many frames are there? 33 | int frameCount = 3; 34 | 35 | // on frame is currently displayed 36 | int currentFrame = 0; 37 | 38 | float emptyWeight = 550.f; 39 | float fullWeight = 1000.f; 40 | float waterMax = fullWeight - emptyWeight; 41 | float currentWeight = 0; 42 | 43 | Ticker ticker; 44 | bool isReadyForThingspeakUpdate = true; 45 | 46 | void setup() { 47 | Serial.begin(115200); 48 | Serial.println("Starting up..."); 49 | // The HX711 functions do not yield. Watchdog would reset 50 | ESP.wdtDisable(); 51 | 52 | scale.set_scale(2158.45f); 53 | scale.tare(); 54 | currentWeight = scale.get_units(1); 55 | 56 | display.init(); 57 | // set the drawing functions 58 | display.setFrameCallbacks(2, frameCallbacks); 59 | // how many ticks does a slide of frame take? 60 | display.setFrameTransitionTicks(10); 61 | display.setFrameWaitTicks(200); 62 | display.clear(); 63 | display.display(); 64 | 65 | WiFi.begin(ssid, pass); 66 | 67 | int counter = 0; 68 | while (WiFi.status() != WL_CONNECTED) { 69 | delay(500); 70 | Serial.print("."); 71 | display.clear(); 72 | display.drawXbm(34,10, 60, 36, WiFi_Logo_bits); 73 | drawSpinner(3, counter % 3); 74 | display.display(); 75 | counter++; 76 | } 77 | Serial.println(""); 78 | 79 | // update the weather information every 10 mintues only 80 | // forecast.io only allows 1000 calls per day 81 | ticker.attach(60, setReadyForThingspeakUpdate); 82 | 83 | } 84 | 85 | void setReadyForThingspeakUpdate() { 86 | isReadyForThingspeakUpdate = true; 87 | } 88 | 89 | void loop() { 90 | // only update measuement, when frames not in transition 91 | if (display.getFrameState() == display.FRAME_STATE_FIX && counter % 10 == 0) { 92 | currentWeight = scale.get_units(5); 93 | } 94 | if (display.getFrameState() == display.FRAME_STATE_FIX && isReadyForThingspeakUpdate && currentWeight > 200) { 95 | isReadyForThingspeakUpdate = false; 96 | updateThingspeak(); 97 | } 98 | 99 | display.clear(); 100 | display.nextFrameTick(); 101 | display.display(); 102 | counter++; 103 | 104 | } 105 | 106 | void drawFrame1(int x, int y) { 107 | 108 | float currentWater = max(0, currentWeight - emptyWeight); 109 | float currentLevel = currentWater / waterMax; 110 | 111 | int icon = min(8, currentLevel * 8); 112 | Serial.println(String(currentWeight) + "\t" + String(currentWater) + "\t"+ String(currentLevel) + "\t" + String(icon)); 113 | 114 | 115 | display.drawXbm(0 + x, 0 + y, 60, 60, xbm[icon]); 116 | display.setFontScale2x2(false); 117 | display.drawString(64 + x, 0 + y, "Water:"); 118 | display.setFontScale2x2(true); 119 | display.drawString(64 + x, 10 + y, String(int(currentLevel * 100)) + "%"); 120 | display.drawString(64 + x, 30 + y, String(int(currentWater)) + "g"); 121 | 122 | } 123 | 124 | void drawFrame2(int x, int y) { 125 | float currentWater = max(0, currentWeight - emptyWeight); 126 | float currentLevel = currentWater / waterMax; 127 | 128 | int icon = min(8, currentLevel * 8); 129 | Serial.println(String(counter) + ".\t" + String(currentWeight) + "\t" + String(currentWater) + "\t"+ String(currentLevel) + "\t" + String(icon)); 130 | 131 | display.setFontScale2x2(true); 132 | display.drawString(0 + x, 0 + y, String(currentLevel * 100) + "%"); 133 | display.drawString(0 + x, 20 + y, String(currentWater) + "ml"); 134 | display.drawString(0 + x, 40 + y, String(currentWeight) + "g"); 135 | 136 | } 137 | 138 | void drawSpinner(int count, int active) { 139 | for (int i = 0; i < count; i++) { 140 | const char *xbm; 141 | if (active == i) { 142 | xbm = active_bits; 143 | } else { 144 | xbm = inactive_bits; 145 | } 146 | display.drawXbm(64 - (12 * count / 2) + 12 * i,56, 8, 8, xbm); 147 | } 148 | } 149 | 150 | void updateThingspeak() { 151 | Serial.println("Updating thingspeak..."); 152 | WiFiClient client; 153 | const int httpPort = 80; 154 | if (!client.connect(host, httpPort)) { 155 | Serial.println("connection failed"); 156 | return; 157 | } 158 | 159 | float currentWater = max(0, currentWeight - emptyWeight); 160 | float currentLevel = currentWater / waterMax; 161 | 162 | String url = "/update?key="; 163 | url += thingspeakKey; 164 | url += "&field1="; 165 | url += String(currentWeight); 166 | url += "&field2="; 167 | url += String(currentWater); 168 | url += "&field3="; 169 | url += String(currentLevel * 100); 170 | 171 | // This will send the request to the server 172 | String request = String("GET ") + url + " HTTP/1.1\r\n" + 173 | "Host: " + host + "\r\n" + 174 | "Connection: close\r\n\r\n"; 175 | Serial.println(request); 176 | client.print(request); 177 | delay(1000); 178 | 179 | // Read all the lines of the reply from server and print them to Serial 180 | while(client.available()){ 181 | String line = client.readStringUntil('\r'); 182 | Serial.print(line); 183 | } 184 | 185 | } 186 | 187 | 188 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/README.md: -------------------------------------------------------------------------------- 1 | # esp8266-Weather Station V2 2 | 3 | This is a total make over of the earlier weather station. Instead of building my code 4 | on the NodeMCU lua firmware I decided to switch to the Arduino IDE based development setup. 5 | The reason for this was the constant problems with heap memory running out and other instabilities. 6 | When I finally found code that demonstrated the use of my beloved SSD1306 based OLED 128x64 displays 7 | the final piece was in place. 8 | 9 | I tried to separate the building blocks of the code into different classes, so they can be reused 10 | easiley for other purposes. There is a class for the SSD1306 display and one for talking to the weather API 11 | of forecast.io. 12 | 13 | ## SSD1306 14 | 15 | This class interfaces with the display over the I2C bus. Please be aware that I set the bus speed relatively 16 | high, in order to have faster refreshes of the display. It can happen that for some reason this value is 17 | too high for your setup. Then you'd have to experiment with different values. This class is based on code from @mikerankin. Thank you a lot, Mike for deciphering the datasheets! 18 | 19 | ## WeatherClient 20 | 21 | I'm using the forecast.io API to retrieve localized weather information. The API returns huge JSON objects 22 | which I thought would be hard to handle on the ESP8266. For this reason I wrote a little php script which 23 | selects interesting information and transforms it into key=value pairs, separated by a new-line charachter. 24 | This can be handled very memory efficiently on the ESP8266. This step costed some self-convincing, since 25 | I'm usually a big fan of well structured data. But you have to think differently on embedded platforms 26 | 27 | If you find any bugs or code with room for improvement please let me know. C/C++ is not my mother tongue... 28 | The best way to tell me about improvments are pull requests (which is a github feature...). 29 | 30 | The weather icons are from http://www.alessioatzeni.com/meteocons/ 31 | Alessio is accepting donations for his work 32 | 33 | See a video here: http://blog.squix.ch/2015/06/esp8266-weather-station-v2-code.html 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/WeatherClient.cpp: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | #include "WeatherClient.h" 27 | #include 28 | 29 | void WeatherClient::updateWeatherData(String apiKey, double lat, double lon) { 30 | WiFiClient client; 31 | const int httpPort = 80; 32 | if (!client.connect("217.26.50.8", httpPort)) { 33 | Serial.println("connection failed"); 34 | return; 35 | } 36 | 37 | // We now create a URI for the request 38 | String url = "/rest/weather?apiKey=" + apiKey + "&lat=" + String(lat) + "&lon=" + String(lon) + "&units=" + myUnits; 39 | 40 | Serial.print("Requesting URL: "); 41 | Serial.println(url); 42 | 43 | // This will send the request to the server 44 | client.print(String("GET ") + url + " HTTP/1.1\r\n" + 45 | "Host: www.squix.org\r\n" + 46 | "Connection: close\r\n\r\n"); 47 | while(!client.available()) { 48 | 49 | delay(200); 50 | } 51 | 52 | // Read all the lines of the reply from server and print them to Serial 53 | while(client.available()){ 54 | String line = client.readStringUntil('\n'); 55 | //Serial.println(line); 56 | String key = getKey(line); 57 | if (key.length() > 0) { 58 | String value = getValue(line); 59 | if (key=="CURRENT_TEMP") { 60 | currentTemp = value.toInt(); 61 | } else if(key =="CURRENT_HUMIDITY") { 62 | currentHumidity = value.toInt(); 63 | } else if (key =="CURRENT_ICON") { 64 | currentIcon = value; 65 | } else if (key =="CURRENT_SUMMARY") { 66 | currentSummary = value; 67 | } else if (key =="MAX_TEMP_TODAY") { 68 | maxTempToday = value.toInt(); 69 | } else if (key =="MIN_TEMP_TODAY") { 70 | minTempToday = value.toInt(); 71 | } else if (key =="ICON_TODAY") { 72 | iconToday = value; 73 | } else if (key =="SUMMARY_TODAY") { 74 | summaryToday = value; 75 | } else if (key =="MAX_TEMP_TOMORROW") { 76 | maxTempTomorrow = value.toInt(); 77 | } else if (key =="ICON_TOMORROW") { 78 | iconTomorrow = value; 79 | } else if (key =="MIN_TEMP_TOMORROW") { 80 | minTempTomorrow = value.toInt(); 81 | } else if (key =="SUMMARY_TODAY") { 82 | summaryTomorrow = value; 83 | } 84 | 85 | } 86 | 87 | } 88 | 89 | 90 | Serial.println(); 91 | Serial.println("closing connection"); 92 | } 93 | 94 | void WeatherClient::setUnits(String units) { 95 | myUnits = units; 96 | } 97 | 98 | String WeatherClient::getKey(String line) { 99 | int separatorPosition = line.indexOf("="); 100 | if (separatorPosition == -1) { 101 | return ""; 102 | } 103 | return line.substring(0, separatorPosition); 104 | } 105 | 106 | String WeatherClient::getValue(String line) { 107 | int separatorPosition = line.indexOf("="); 108 | if (separatorPosition == -1) { 109 | return ""; 110 | } 111 | return line.substring(separatorPosition + 1); 112 | } 113 | 114 | 115 | int WeatherClient::getCurrentTemp(void) { 116 | return currentTemp; 117 | } 118 | int WeatherClient::getCurrentHumidity(void) { 119 | return currentHumidity; 120 | } 121 | String WeatherClient::getCurrentIcon(void) { 122 | return currentIcon; 123 | } 124 | String WeatherClient::getCurrentSummary(void) { 125 | return currentSummary; 126 | } 127 | String WeatherClient::getIconToday(void) { 128 | return iconToday; 129 | } 130 | int WeatherClient::getMaxTempToday(void) { 131 | return maxTempToday; 132 | } 133 | int WeatherClient::getMinTempToday(void) { 134 | return minTempToday; 135 | } 136 | String WeatherClient::getSummaryToday(void) { 137 | return summaryToday; 138 | } 139 | int WeatherClient::getMaxTempTomorrow(void) { 140 | return maxTempTomorrow; 141 | } 142 | int WeatherClient::getMinTempTomorrow(void) { 143 | return minTempTomorrow; 144 | } 145 | String WeatherClient::getIconTomorrow(void) { 146 | return iconTomorrow; 147 | } 148 | String WeatherClient::getSummaryTomorrow(void) { 149 | return summaryTomorrow; 150 | } 151 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/WeatherClient.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | #include 27 | 28 | class WeatherClient { 29 | private: 30 | int currentTemp; 31 | int currentHumidity; 32 | String currentIcon; 33 | String currentSummary; 34 | String iconToday; 35 | int maxTempToday; 36 | int minTempToday; 37 | String summaryToday; 38 | int maxTempTomorrow; 39 | int minTempTomorrow; 40 | String iconTomorrow; 41 | String summaryTomorrow; 42 | String apiKey; 43 | String myUnits = "auto"; 44 | String myLanguage; 45 | 46 | String getValue(String line); 47 | String getKey(String line); 48 | 49 | public: 50 | void updateWeatherData(String apiKey, double lat, double lon); 51 | void setUnits(String units); 52 | int getCurrentTemp(void); 53 | int getCurrentHumidity(void); 54 | String getCurrentIcon(void); 55 | String getCurrentSummary(void); 56 | String getIconToday(void); 57 | int getMaxTempToday(void); 58 | int getMinTempToday(void); 59 | String getSummaryToday(void); 60 | int getMaxTempTomorrow(void); 61 | int getMinTempTomorrow(void); 62 | String getIconTomorrow(void); 63 | String getSummaryTomorrow(void); 64 | 65 | 66 | }; 67 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/font.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | const char myFont[][8] PROGMEM = { 27 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 28 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, 29 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, 30 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, 31 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, 32 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, 33 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, 34 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, 35 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, 36 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, 37 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, 38 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, 39 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, 40 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, 41 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, 42 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, 43 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, 44 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, 45 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, 46 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, 47 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, 48 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, 49 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, 50 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, 51 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, 52 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, 53 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, 54 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, 55 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, 56 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, 57 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, 58 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, 59 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, 60 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, 61 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, 62 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, 63 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, 64 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, 65 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, 66 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, 67 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, 68 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, 69 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, 70 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, 71 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, 72 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, 73 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, 74 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, 75 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, 76 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, 77 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, 78 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, 79 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, 80 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, 81 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, 82 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, 83 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, 84 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, 85 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, 86 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, 87 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, 88 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, 89 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, 90 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, 91 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, 92 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, 93 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, 94 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, 95 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, 96 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, 97 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, 98 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, 99 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, 100 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, 101 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, 102 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, 103 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, 104 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, 105 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, 106 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, 107 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, 108 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, 109 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, 110 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, 111 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, 112 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, 113 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, 114 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, 115 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, 116 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, 117 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, 118 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, 119 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, 120 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, 121 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, 122 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} 123 | }; 124 | 125 | #define active_width 8 126 | #define active_height 8 127 | const char active_bits[] PROGMEM = { 128 | 0x00, 0x18, 0x3c, 0x7e, 0x7e, 0x3c, 0x18, 0x00 }; 129 | 130 | #define inactive_width 8 131 | #define inactive_height 8 132 | const char inactive_bits[] PROGMEM = { 133 | 0x00, 0x18, 0x24, 0x42, 0x42, 0x24, 0x18, 0x00 }; 134 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/WiFi_Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 12 | 15 | 18 | 22 | 26 | 30 | 34 | 38 | 42 | 46 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/WiFi_Logo.xbm: -------------------------------------------------------------------------------- 1 | #define WiFi_Logo_width 60 2 | #define WiFi_Logo_height 36 3 | static char WiFi_Logo_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 7 | 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 9 | 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 10 | 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0x83, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 11 | 0x01, 0x00, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0C, 0x00, 12 | 0xC0, 0xFF, 0xFF, 0x7C, 0x00, 0x60, 0x0C, 0x00, 0xC0, 0x31, 0x46, 0x7C, 13 | 0xFC, 0x77, 0x08, 0x00, 0xE0, 0x23, 0xC6, 0x3C, 0xFC, 0x67, 0x18, 0x00, 14 | 0xE0, 0x23, 0xE4, 0x3F, 0x1C, 0x00, 0x18, 0x00, 0xE0, 0x23, 0x60, 0x3C, 15 | 0x1C, 0x70, 0x18, 0x00, 0xE0, 0x03, 0x60, 0x3C, 0x1C, 0x70, 0x18, 0x00, 16 | 0xE0, 0x07, 0x60, 0x3C, 0xFC, 0x73, 0x18, 0x00, 0xE0, 0x87, 0x70, 0x3C, 17 | 0xFC, 0x73, 0x18, 0x00, 0xE0, 0x87, 0x70, 0x3C, 0x1C, 0x70, 0x18, 0x00, 18 | 0xE0, 0x87, 0x70, 0x3C, 0x1C, 0x70, 0x18, 0x00, 0xE0, 0x8F, 0x71, 0x3C, 19 | 0x1C, 0x70, 0x18, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x08, 0x00, 20 | 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x0C, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 21 | 0x00, 0x00, 0x06, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x07, 0x00, 22 | 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 23 | 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 24 | 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 25 | 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 | }; 29 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/active.xbm: -------------------------------------------------------------------------------- 1 | #define active_width 8 2 | #define active_height 8 3 | static unsigned char active_bits[] = { 4 | 0x00, 0x18, 0x3c, 0x7e, 0x7e, 0x3c, 0x18, 0x00 }; 5 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/inactive.xbm: -------------------------------------------------------------------------------- 1 | #define inactive_width 8 2 | #define inactive_height 8 3 | static unsigned char inactive_bits[] = { 4 | 0x00, 0x18, 0x24, 0x42, 0x42, 0x24, 0x18, 0x00 }; 5 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/temp.xbm: -------------------------------------------------------------------------------- 1 | #define temp_width 60 2 | #define temp_height 60 3 | static unsigned char temp_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 12 | 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 13 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 15 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 16 | 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 17 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 19 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf9, 0x01, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x08, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 21 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x08, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 23 | 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 24 | 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 25 | 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf9, 0x01, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 27 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf9, 0x01, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x68, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 29 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x68, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 31 | 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 33 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 35 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 37 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x05, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0xfa, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 39 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 43 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 44 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/temp2.xbm: -------------------------------------------------------------------------------- 1 | #define temp2_width 60 2 | #define temp2_height 60 3 | static unsigned char temp2_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 13 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x9e, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 15 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 16 | 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 17 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 19 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 21 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 23 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x06, 0x00, 0x00, 0x00, 24 | 0x00, 0x00, 0x00, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 25 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x06, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 27 | 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x0e, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x67, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf3, 29 | 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xfb, 0x1d, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x80, 0xf9, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf9, 31 | 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xfb, 0x1d, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x80, 0xf3, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 33 | 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x0f, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0xfe, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 35 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 39 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 43 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 44 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/clear_day.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/clear_day.xbm: -------------------------------------------------------------------------------- 1 | #define clear_day_width 50 2 | #define clear_day_height 50 3 | static char clear_day_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x18, 10 | 0x00, 0x03, 0x60, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x00, 11 | 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x78, 12 | 0x00, 0x00, 0x00, 0xF0, 0xC0, 0x0F, 0x38, 0x00, 0x00, 0x00, 0x60, 0xF0, 13 | 0x7F, 0x18, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x7E, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0x00, 15 | 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x80, 16 | 0x07, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC0, 17 | 0x03, 0x00, 0x0F, 0x00, 0x00, 0xC0, 0xC3, 0x01, 0x00, 0x0E, 0x0F, 0x00, 18 | 0xE0, 0xC7, 0x01, 0x00, 0x8E, 0x1F, 0x00, 0xE0, 0xC7, 0x01, 0x00, 0x8E, 19 | 0x1F, 0x00, 0xC0, 0xC3, 0x01, 0x00, 0x0E, 0x0F, 0x00, 0x00, 0xC0, 0x03, 20 | 0x00, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 21 | 0x80, 0x07, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x80, 0x07, 0x00, 22 | 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xF8, 23 | 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 24 | 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0x1F, 0x38, 0x00, 0x00, 25 | 0x00, 0xF8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 26 | 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x18, 0x00, 27 | 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/clear_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 51 | 52 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/clear_night.xbm: -------------------------------------------------------------------------------- 1 | #define clear_night_width 50 2 | #define clear_night_height 50 3 | static char clear_night_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 12 | 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 14 | 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7B, 0x00, 0x00, 0x00, 15 | 0x00, 0x00, 0xC0, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x71, 0x00, 16 | 0x00, 0x00, 0x00, 0x00, 0xE0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 17 | 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0xE0, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x03, 0x00, 19 | 0x00, 0x00, 0x00, 0xE0, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 20 | 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xFE, 0x1F, 0x00, 0x00, 0x00, 21 | 0xC0, 0x01, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x03, 0xC0, 0x0F, 0x00, 22 | 0x00, 0x00, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 23 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 24 | 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 25 | 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 | 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, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/cloudy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 53 | 54 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/cloudy.xbm: -------------------------------------------------------------------------------- 1 | #define cloudy_width 50 2 | #define cloudy_height 50 3 | static char cloudy_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 11 | 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x80, 0x0F, 0xC0, 0x0F, 12 | 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x01, 13 | 0x00, 0x3E, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xE0, 14 | 0x7F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xF0, 0x7F, 15 | 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x00, 0x00, 16 | 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 17 | 0x00, 0x00, 0x00, 0xC0, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 18 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 19 | 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 20 | 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0F, 21 | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xC0, 22 | 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3C, 0x00, 0x00, 0x00, 23 | 0x00, 0xF0, 0x00, 0x7C, 0x80, 0x00, 0x00, 0x0C, 0xF8, 0x00, 0xF8, 0xFF, 24 | 0x01, 0x00, 0xFE, 0x7F, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xFF, 0x3F, 0x00, 25 | 0xC0, 0xFF, 0x0F, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xE7, 26 | 0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 27 | 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/fog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/fog.xbm: -------------------------------------------------------------------------------- 1 | #define fog_width 50 2 | #define fog_height 50 3 | static char fog_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 12 | 0x01, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 13 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 15 | 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 16 | 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 19 | 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 20 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 23 | 0xFF, 0x01, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 24 | 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 | 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, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/partly_cloudy_day.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/partly_cloudy_day.xbm: -------------------------------------------------------------------------------- 1 | #define partly_cloudy_day_width 50 2 | #define partly_cloudy_day_height 50 3 | static char partly_cloudy_day_bits[] = { 4 | 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x07, 0x00, 8 | 0x00, 0xC0, 0x03, 0x00, 0x80, 0x07, 0x00, 0x00, 0xC0, 0x07, 0x00, 0xC0, 9 | 0x03, 0x00, 0x00, 0x80, 0x07, 0x3C, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x03, 10 | 0xFF, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 11 | 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x1F, 0x00, 12 | 0x00, 0x00, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 13 | 0x3C, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 14 | 0x1C, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x70, 0x00, 0x00, 15 | 0x00, 0x3F, 0x1E, 0xF0, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0x1E, 0xFC, 0xFF, 16 | 0xFC, 0x01, 0x00, 0x3F, 0x1E, 0xFF, 0xFF, 0xFB, 0x00, 0x00, 0x00, 0x9C, 17 | 0x3F, 0xF0, 0x07, 0x00, 0x00, 0x00, 0xDC, 0x07, 0x80, 0x0F, 0x00, 0x00, 18 | 0x00, 0xFC, 0x03, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFC, 19 | 0x03, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 20 | 0x00, 0xF8, 0x3F, 0x00, 0xF8, 0x21, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x7C, 21 | 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0xE0, 22 | 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0x00, 0x00, 23 | 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x07, 0x00, 24 | 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 25 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 26 | 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x0E, 0x00, 0x00, 27 | 0x00, 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3E, 28 | 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xF8, 29 | 0x00, 0xF8, 0xE1, 0x01, 0x00, 0x1E, 0x7E, 0x00, 0xF0, 0xFF, 0x03, 0x00, 30 | 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xBF, 31 | 0x3F, 0xF0, 0xF7, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 32 | 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/partly_cloudy_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 60 | 61 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/partly_cloudy_night.xbm: -------------------------------------------------------------------------------- 1 | #define partly_cloudy_night_width 50 2 | #define partly_cloudy_night_height 50 3 | static char partly_cloudy_night_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0xE7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE7, 0x01, 0x00, 0x00, 11 | 0x00, 0x00, 0x80, 0xC3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC3, 0x03, 12 | 0x00, 0x00, 0x00, 0x00, 0x80, 0xC3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 13 | 0x83, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 14 | 0x00, 0x80, 0x03, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xFE, 0x7F, 15 | 0x00, 0x00, 0x00, 0xF0, 0x3F, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 16 | 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x3F, 0x00, 0x00, 0x80, 17 | 0x3F, 0xE0, 0x07, 0x3E, 0x00, 0x00, 0xC0, 0x07, 0x80, 0x0F, 0x1F, 0x00, 18 | 0x00, 0xE0, 0x03, 0x00, 0xDF, 0x0F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFC, 19 | 0x07, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 20 | 0x00, 0xF8, 0x3F, 0x00, 0xF8, 0x21, 0x00, 0x00, 0x10, 0x7E, 0x00, 0x7C, 21 | 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0xE0, 22 | 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0x00, 0x00, 23 | 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x07, 0x00, 24 | 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 25 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 26 | 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x0E, 0x00, 0x00, 27 | 0x00, 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3E, 28 | 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xF8, 29 | 0x00, 0xF8, 0xE1, 0x01, 0x00, 0x1E, 0x7E, 0x00, 0xF0, 0xFF, 0x03, 0x00, 30 | 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xBF, 31 | 0x3F, 0xF0, 0xF7, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 32 | 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/rain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/rain.xbm: -------------------------------------------------------------------------------- 1 | #define rain_width 50 2 | #define rain_height 50 3 | static char rain_bits[] = { 4 | 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0x3F, 6 | 0xF0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xC0, 0x0F, 0x00, 0x00, 0x00, 7 | 0xE0, 0x03, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x03, 8 | 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 9 | 0xF8, 0x3F, 0x00, 0xF8, 0x3B, 0x00, 0x00, 0x70, 0x7F, 0x00, 0x7C, 0x00, 10 | 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 11 | 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 12 | 0xC0, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x07, 0x00, 0x00, 13 | 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 14 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 15 | 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 16 | 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1E, 0x00, 17 | 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 18 | 0xF8, 0xC0, 0x00, 0x00, 0x0C, 0x7C, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0xFE, 19 | 0x3F, 0x00, 0xE0, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 20 | 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 21 | 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 23 | 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 24 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x7C, 0x00, 27 | 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x02, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 29 | 0x00, 0x00, 0x00, 0x80, 0x07, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x80, 0x07, 30 | 0xFC, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 31 | 0xC0, 0x0F, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/sleet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/sleet.xbm: -------------------------------------------------------------------------------- 1 | #define sleet_width 50 2 | #define sleet_height 50 3 | static char sleet_bits[] = { 4 | 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0x3F, 6 | 0xF0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x80, 0x0F, 0x00, 0x00, 0x00, 7 | 0xE0, 0x03, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x03, 8 | 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 9 | 0xF8, 0x3F, 0x00, 0xF8, 0x3B, 0x00, 0x00, 0x70, 0x7F, 0x00, 0x7C, 0x00, 10 | 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 11 | 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 12 | 0xC0, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x07, 0x00, 0x00, 13 | 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 14 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 15 | 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 16 | 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1E, 0x00, 17 | 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 18 | 0xF8, 0xC0, 0x00, 0x00, 0x0C, 0x7C, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0xFE, 19 | 0x3F, 0x00, 0xE0, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 20 | 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 21 | 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 22 | 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x80, 0x0F, 0x00, 0x00, 23 | 0xC0, 0x07, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0xC0, 0x1F, 24 | 0x00, 0x03, 0xE0, 0x0F, 0x00, 0xC0, 0x0F, 0x80, 0x07, 0xC0, 0x0F, 0x00, 25 | 0x80, 0x0F, 0xC0, 0x0F, 0xC0, 0x07, 0x00, 0x00, 0x02, 0xC0, 0x0F, 0x00, 26 | 0x01, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 27 | 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 30 | 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xE0, 31 | 0x07, 0x80, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0x00, 32 | 0x00, 0xE0, 0x03, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x0E, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/snow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/snow.xbm: -------------------------------------------------------------------------------- 1 | #define snow_width 50 2 | #define snow_height 50 3 | static char snow_bits[] = { 4 | 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0x3F, 6 | 0xF0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xC0, 0x0F, 0x00, 0x00, 0x00, 7 | 0xE0, 0x03, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x03, 8 | 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 9 | 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x70, 0x7F, 0x00, 0x7C, 0x00, 10 | 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 11 | 0x1E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0x00, 0x00, 0x00, 12 | 0xC0, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x07, 0x00, 0x00, 13 | 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 14 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 15 | 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0F, 0x00, 0x00, 0x00, 16 | 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1E, 0x00, 17 | 0x00, 0x00, 0x00, 0xE0, 0x01, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 18 | 0xF8, 0xC0, 0x00, 0x00, 0x0C, 0x7C, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0xFE, 19 | 0x3F, 0x00, 0xE0, 0xFF, 0x07, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 20 | 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 21 | 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 22 | 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 23 | 0x00, 0x00, 0x00, 0xF0, 0x0B, 0x00, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x1F, 24 | 0x80, 0x07, 0x00, 0x03, 0x00, 0x70, 0x0E, 0x80, 0x07, 0x00, 0x37, 0x00, 25 | 0xF8, 0x07, 0x8C, 0xC7, 0x00, 0x3F, 0x00, 0xF8, 0x07, 0xFE, 0xFF, 0xE1, 26 | 0x1F, 0x00, 0xC0, 0x0F, 0xFE, 0xFF, 0xC1, 0x39, 0x00, 0xC0, 0x00, 0xFC, 27 | 0xFF, 0x80, 0x7B, 0x00, 0x00, 0x00, 0xF0, 0x3C, 0x80, 0x7F, 0x00, 0x00, 28 | 0x00, 0x70, 0x38, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x7C, 0x80, 0x0C, 29 | 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFE, 0xFF, 30 | 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 31 | 0x8C, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/sunset.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/sunset.xbm: -------------------------------------------------------------------------------- 1 | #define sunset_width 50 2 | #define sunset_height 50 3 | static char sunset_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 12 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 13 | 0x03, 0xE0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 14 | 0x78, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 15 | 0x00, 0x00, 0x60, 0xE0, 0x1F, 0x38, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 17 | 0x3E, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x03, 0x00, 0x00, 18 | 0x00, 0x80, 0x07, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x80, 0x07, 19 | 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x03, 20 | 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 23 | 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 24 | 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 27 | 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/wind.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/src/weather/wind.xbm: -------------------------------------------------------------------------------- 1 | #define wind_width 50 2 | #define wind_height 50 3 | static char wind_bits[] = { 4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 12 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 13 | 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 14 | 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 15 | 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 16 | 0x80, 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 17 | 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 19 | 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 20 | 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 23 | 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 24 | 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 25 | 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 27 | 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, }; 34 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/ssd1306_i2c.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | 25 | Credits for parts of this code go to Mike Rankin. Thank you so much for sharing! 26 | */ 27 | 28 | #include 29 | 30 | #define BLACK 0 31 | #define WHITE 1 32 | #define INVERSE 2 33 | 34 | 35 | class SSD1306 { 36 | 37 | private: 38 | int myI2cAddress; 39 | int mySda; 40 | int mySdc; 41 | uint8_t buffer[128 * 64 / 8]; 42 | bool myIsFontScaling2x2 = false; 43 | int myFrameState = 0; 44 | int myFrameTick = 0; 45 | int myCurrentFrame = 0; 46 | int myFrameCount = 0; 47 | int myFrameWaitTicks = 100; 48 | int myFrameTransitionTicks = 25; 49 | int myColor = WHITE; 50 | void (**myFrameCallbacks)(int x, int y); 51 | 52 | 53 | public: 54 | // Empty constructor 55 | SSD1306(int i2cAddress, int sda, int sdc); 56 | void init(); 57 | void resetDisplay(void); 58 | void reconnect(void); 59 | void displayOn(void); 60 | void displayOff(void); 61 | void clear(void); 62 | void display(void); 63 | void setPixel(int x, int y); 64 | void setChar(int x, int y, unsigned char data); 65 | void drawString(int x, int y, String text); 66 | void setFontScale2x2(bool isFontScaling2x2); 67 | void drawBitmap(int x, int y, int width, int height, const char *bitmap); 68 | void drawXbm(int x, int y, int width, int height, const char *xbm); 69 | void sendCommand(unsigned char com); 70 | void sendInitCommands(void); 71 | void setColor(int color); 72 | void drawRect(int x, int y, int width, int height); 73 | void fillRect(int x, int y, int width, int height); 74 | 75 | void setContrast(char contrast); 76 | void flipScreenVertically(); 77 | 78 | 79 | void setFrameCallbacks(int frameCount, void (*frameCallbacks[])(int x, int y)); 80 | void nextFrameTick(void); 81 | void drawIndicators(int frameCount, int activeFrame); 82 | void setFrameWaitTicks(int frameWaitTicks); 83 | void setFrameTransitionTicks(int frameTransitionTicks); 84 | int getFrameState(); 85 | 86 | const int FRAME_STATE_FIX = 0; 87 | const int FRAME_STATE_TRANSITION = 1; 88 | 89 | }; 90 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/weather-station-v2.ino: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | #include 27 | #include 28 | #include "ssd1306_i2c.h" 29 | #include "icons.h" 30 | 31 | 32 | #include 33 | #include "WeatherClient.h" 34 | 35 | // Initialize the oled display for address 0x3c 36 | // sda-pin=14 and sdc-pin=12 37 | SSD1306 display(0x3c, 14, 12); 38 | WeatherClient weather; 39 | Ticker ticker; 40 | 41 | // this array keeps function pointers to all frames 42 | // frames are the single views that slide from right to left 43 | void (*frameCallbacks[3])(int x, int y) = {drawFrame1, drawFrame2, drawFrame3}; 44 | 45 | // how many frames are there? 46 | int frameCount = 3; 47 | // on frame is currently displayed 48 | int currentFrame = 0; 49 | 50 | // your network SSID (name) 51 | char ssid[] = ""; 52 | // your network password 53 | char pass[] = ""; 54 | 55 | // Go to forecast.io and register for an API KEY 56 | String forecastApiKey = ""; 57 | 58 | // Coordinates of the place you want 59 | // weather information for 60 | double latitude = 47.3; 61 | double longitude = 8.5; 62 | 63 | // flag changed in the ticker function every 10 minutes 64 | bool readyForWeatherUpdate = true; 65 | 66 | void setup() { 67 | // initialize dispaly 68 | display.init(); 69 | // set the drawing functions 70 | display.setFrameCallbacks(3, frameCallbacks); 71 | // how many ticks does a slide of frame take? 72 | display.setFrameTransitionTicks(10); 73 | 74 | display.clear(); 75 | display.display(); 76 | 77 | Serial.begin(115200); 78 | Serial.println(); 79 | Serial.println(); 80 | 81 | // We start by connecting to a WiFi network 82 | Serial.print("Connecting to "); 83 | Serial.println(ssid); 84 | WiFi.begin(ssid, pass); 85 | 86 | int counter = 0; 87 | while (WiFi.status() != WL_CONNECTED) { 88 | delay(500); 89 | Serial.print("."); 90 | display.clear(); 91 | display.drawXbm(34,10, 60, 36, WiFi_Logo_bits); 92 | display.setColor(INVERSE); 93 | display.fillRect(10, 10, 108, 44); 94 | display.setColor(WHITE); 95 | drawSpinner(3, counter % 3); 96 | display.display(); 97 | counter++; 98 | } 99 | Serial.println(""); 100 | 101 | Serial.println("WiFi connected"); 102 | Serial.println("IP address: "); 103 | Serial.println(WiFi.localIP()); 104 | 105 | // update the weather information every 10 mintues only 106 | // forecast.io only allows 1000 calls per day 107 | ticker.attach(60 * 10, setReadyForWeatherUpdate); 108 | } 109 | 110 | void loop() { 111 | if (readyForWeatherUpdate && display.getFrameState() == display.FRAME_STATE_FIX) { 112 | readyForWeatherUpdate = false; 113 | weather.updateWeatherData(forecastApiKey, latitude, longitude); 114 | } 115 | display.clear(); 116 | display.nextFrameTick(); 117 | display.display(); 118 | } 119 | 120 | void setReadyForWeatherUpdate() { 121 | readyForWeatherUpdate = true; 122 | } 123 | 124 | void drawFrame1(int x, int y) { 125 | display.setFontScale2x2(false); 126 | display.drawString(65 + x, 8 + y, "Now"); 127 | display.drawXbm(x+7,y+7, 50, 50, getIconFromString(weather.getCurrentIcon())); 128 | display.setFontScale2x2(true); 129 | display.drawString(64+ x, 20 + y, String(weather.getCurrentTemp()) + "C"); 130 | } 131 | 132 | const char* getIconFromString(String icon) { 133 | //"clear-day, clear-night, rain, snow, sleet, wind, fog, cloudy, partly-cloudy-day, or partly-cloudy-night" 134 | if (icon == "clear-day") { 135 | return clear_day_bits; 136 | } else if (icon == "clear-night") { 137 | return clear_night_bits; 138 | } else if (icon == "rain") { 139 | return rain_bits; 140 | } else if (icon == "snow") { 141 | return snow_bits; 142 | } else if (icon == "sleet") { 143 | return sleet_bits; 144 | } else if (icon == "wind") { 145 | return wind_bits; 146 | } else if (icon == "fog") { 147 | return fog_bits; 148 | } else if (icon == "cloudy") { 149 | return cloudy_bits; 150 | } else if (icon == "partly-cloudy-day") { 151 | return partly_cloudy_day_bits; 152 | } else if (icon == "partly-cloudy-night") { 153 | return partly_cloudy_night_bits; 154 | } 155 | return cloudy_bits; 156 | } 157 | 158 | void drawFrame2(int x, int y) { 159 | display.setFontScale2x2(false); 160 | display.drawString(65 + x, 0 + y, "Today"); 161 | display.drawXbm(x,y, 60, 60, xbmtemp); 162 | display.setFontScale2x2(true); 163 | display.drawString(64 + x, 14 + y, String(weather.getCurrentTemp()) + "C"); 164 | display.setFontScale2x2(false); 165 | display.drawString(66 + x, 40 + y, String(weather.getMinTempToday()) + "C/" + String(weather.getMaxTempToday()) + "C"); 166 | 167 | } 168 | 169 | void drawFrame3(int x, int y) { 170 | display.drawXbm(x+7,y+7, 50, 50, getIconFromString(weather.getIconTomorrow())); 171 | display.setFontScale2x2(false); 172 | display.drawString(65 + x, 7 + y, "Tomorrow"); 173 | display.setFontScale2x2(true); 174 | display.drawString(64+ x, 20 + y, String(weather.getMaxTempTomorrow()) + "C"); 175 | } 176 | 177 | void drawSpinner(int count, int active) { 178 | for (int i = 0; i < count; i++) { 179 | const char *xbm; 180 | if (active == i) { 181 | xbm = active_bits; 182 | } else { 183 | xbm = inactive_bits; 184 | } 185 | display.drawXbm(64 - (12 * count / 2) + 12 * i,56, 8, 8, xbm); 186 | } 187 | } 188 | 189 | -------------------------------------------------------------------------------- /arduino-ide/weather-station-v2/weather.php: -------------------------------------------------------------------------------- 1 | getCurrentConditions($latParam, $lonParam); 21 | echo "CURRENT_TEMP=".round($condition->getTemperature())."\n"; 22 | echo "CURRENT_HUMIDITY=".($condition->getHumidity()*100)."\n"; 23 | echo "CURRENT_ICON=".($condition->getIcon())."\n"; 24 | echo "CURRENT_SUMMARY=".$condition->getSummary()."\n"; 25 | 26 | $conditions_week = $forecast->getForecastWeek($latParam, $lonParam); 27 | echo "MAX_TEMP_TODAY=".round($conditions_week[0]->getMaxTemperature()) . "\n"; 28 | echo "MIN_TEMP_TODAY=".round($conditions_week[0]->getMinTemperature()) . "\n"; 29 | echo "ICON_TODAY=".$conditions_week[0]->getIcon()."\n"; 30 | echo "SUMMARY_TODAY=".$conditions_week[0]->getSummary()."\n"; 31 | echo "MAX_TEMP_TOMORROW=" . round($conditions_week[1]->getMaxTemperature()) . "\n"; 32 | echo "ICON_TOMORROW=".$conditions_week[1]->getIcon()."\n"; 33 | echo "MIN_TEMP_TOMORROW=".round($conditions_week[1]->getMinTemperature()) . "\n"; 34 | echo "SUMMARY_TODAY=".$conditions_week[1]->getSummary()."\n"; 35 | ?> 36 | -------------------------------------------------------------------------------- /arduino-ide/wifi-car/README.md: -------------------------------------------------------------------------------- 1 | # WiFi Car 2 | 3 | This sketch uses the NodeMCU V1.0 motorshield to control a smart car. You can use the inclination of your smart device to steer the two engines forwards, backwards or in any desired direction. 4 | 5 | See more here: http://blog.squix.ch/2015/09/esp8266-nodemcu-motor-shield-review.html 6 | 7 | ## Setup Instructions 8 | 9 | To make this work you'll have to adapt ssid and password according to your access point in the ino file. Then you'll have to find out the IP of your NodeMCU and open http:// in your smartphone browser. This will load the index.html from the sketch which in turns loads the smartcar.js from my server. If you want to change the javascript you'll have to host the javascript file on your own server 10 | -------------------------------------------------------------------------------- /arduino-ide/wifi-car/smartcar.js: -------------------------------------------------------------------------------- 1 | var lastMove = 0; 2 | function move(left, right) { 3 | var now = Date.now(); 4 | if (lastMove + 200 < now) { 5 | lastMove = now; 6 | var request = new XMLHttpRequest(); 7 | request.open('GET', '/engines/' + Math.round(left) + "," + Math.round(right), true); 8 | request.send(null); 9 | } 10 | } 11 | document.onkeydown = function detectKey(event) { 12 | var e = event.keyCode; 13 | if (e==87){ move(600, 600);} 14 | if (e==83){ move(600, -600);} 15 | if (e==65){ move(-600, 600);} 16 | if (e==68){ move(-600, -600);} 17 | } 18 | if (window.DeviceMotionEvent) { 19 | window.addEventListener('devicemotion', deviceMotionHandler, false); 20 | } else { 21 | document.getElementById("dmEvent").innerHTML = "Accelerometer not supported." 22 | } 23 | function deviceMotionHandler(eventData) { 24 | acceleration = eventData.accelerationIncludingGravity; 25 | var left = 0; 26 | var right = 0; 27 | if (Math.abs(acceleration.y) > 1) { 28 | var speed = acceleration.y * 123; 29 | left = Math.min(1023, speed + acceleration.x * 100); 30 | right = Math.min(1023, speed - acceleration.x * 100); 31 | } else if (Math.abs(acceleration.x) > 1) { 32 | var speed = Math.min(1023, Math.abs(acceleration.x) * 123); 33 | if (acceleration.x > 0) { 34 | left = speed; 35 | right = -speed; 36 | } else { 37 | left = -speed; 38 | right = speed; 39 | } 40 | } 41 | if (Math.abs(left) > 100 || Math.abs(right) > 100) { 42 | move(left, right); 43 | } 44 | var direction = "stop"; 45 | direction = "[" + Math.round(acceleration.x) + "," + Math.round(acceleration.y) + "," + Math.round(acceleration.z) + "]
" + Math.round(left) + ", " + Math.round(right); 46 | document.getElementById("vector").innerHTML =direction; 47 | } 48 | -------------------------------------------------------------------------------- /arduino-ide/wifi-car/wifi-car.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * This sketch lets you control an NodeMCU motorshield with attached engines 3 | * from a (smart phone) browser by using the orientation of the device. 4 | */ 5 | 6 | #include 7 | 8 | const char* ssid = "ssid"; 9 | const char* password = "password"; 10 | 11 | // Create an instance of the server 12 | // specify the port to listen on as an argument 13 | WiFiServer server(80); 14 | 15 | void setup() { 16 | Serial.begin(115200); 17 | delay(10); 18 | 19 | // prepare GPIO2 20 | pinMode(2, OUTPUT); 21 | digitalWrite(2, 0); 22 | 23 | // Connect to WiFi network 24 | Serial.println(); 25 | Serial.println(); 26 | Serial.print("Connecting to "); 27 | Serial.println(ssid); 28 | 29 | WiFi.begin(ssid, password); 30 | 31 | while (WiFi.status() != WL_CONNECTED) { 32 | delay(500); 33 | Serial.print("."); 34 | } 35 | Serial.println(""); 36 | Serial.println("WiFi connected"); 37 | 38 | // Start the server 39 | server.begin(); 40 | Serial.println("Server started"); 41 | 42 | // Print the IP address 43 | Serial.println(WiFi.localIP()); 44 | 45 | pinMode(5, OUTPUT); 46 | pinMode(4, OUTPUT); 47 | pinMode(0, OUTPUT); 48 | pinMode(2, OUTPUT); 49 | 50 | digitalWrite(5, 0); 51 | digitalWrite(4, 0); 52 | 53 | digitalWrite(0, 1); 54 | digitalWrite(2, 1); 55 | } 56 | 57 | void loop() { 58 | // Check if a client has connected 59 | WiFiClient client = server.available(); 60 | if (!client) { 61 | analogWrite(5, 0); 62 | analogWrite(4, 0); 63 | digitalWrite(0, 1); 64 | digitalWrite(2, 1); 65 | return; 66 | } 67 | 68 | // Wait until the client sends some data 69 | Serial.println("new client"); 70 | while(!client.available()){ 71 | delay(1); 72 | } 73 | 74 | // Read the first line of the request 75 | String req = client.readStringUntil('\r'); 76 | Serial.println(req); 77 | client.flush(); 78 | 79 | // Match the request 80 | int motorASpeed = 1023; 81 | int motorBSpeed = 1023; 82 | int motorAForward = 1; 83 | int motorBForward = 1; 84 | if (req.indexOf("/engines/") != -1) { 85 | String parameters = req.substring(13); 86 | int separatorPos = parameters.indexOf(","); 87 | int httpPos = parameters.indexOf(" HTTP"); 88 | String leftText = parameters.substring(0,separatorPos); 89 | String rightText = parameters.substring(separatorPos + 1, httpPos); 90 | 91 | Serial.println("[" + leftText +"][" + rightText + "]"); 92 | int left = leftText.toInt(); 93 | int right = rightText.toInt(); 94 | if (left < 0) { 95 | motorAForward = 0; 96 | } else { 97 | motorAForward = 1; 98 | } 99 | if (right < 0) { 100 | motorBForward = 0; 101 | } else { 102 | motorBForward = 1; 103 | } 104 | analogWrite(5, abs(left)); 105 | analogWrite(4, abs(right)); 106 | digitalWrite(0, motorAForward); 107 | digitalWrite(2, motorBForward); 108 | } else if (req.indexOf("/index.html") != - 1 || req.indexOf("/") != - 1) { 109 | client.print("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n"); 110 | client.print(""); 111 | client.print(""); 112 | client.print(""); 113 | client.print("forward
"); 114 | client.print("backwards
"); 115 | client.print("left
"); 116 | client.print("right
"); 117 | client.print("
"); 118 | client.print("
"); 119 | client.print(""); 120 | analogWrite(5, 0); 121 | analogWrite(4, 0); 122 | digitalWrite(0, 1); 123 | digitalWrite(2, 1); 124 | return; 125 | } 126 | 127 | 128 | client.flush(); 129 | 130 | // Prepare the response 131 | String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n\r\nGPIO is now "; 132 | s += "\n"; 133 | 134 | // Send the response to the client 135 | client.print(s); 136 | delay(1); 137 | Serial.println("Client disonnected"); 138 | delay(200); 139 | // The client will actually be disconnected 140 | // when the function returns and 'client' object is detroyed 141 | } 142 | 143 | -------------------------------------------------------------------------------- /arduino-ide/wifi-door-sensor/wifi-door-sensor.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * This sketch sends data via HTTP GET requests to thingspeak service every 5 minutes 3 | * You have to set your wifi credentials and your thingspeak key. 4 | */ 5 | 6 | #include 7 | 8 | 9 | const char* ssid = "SSID"; 10 | const char* password = "PASSWORD"; 11 | 12 | 13 | const char* host = "api.thingspeak.com"; 14 | const char* thingspeak_key = "XXX"; 15 | 16 | #define MINUTES_SLEEPING 5 17 | 18 | #define DOOR_PIN 5 // NODEMCU: D1 19 | 20 | int retryCounter = 0; 21 | 22 | void setup() { 23 | Serial.begin(115200); 24 | pinMode(DOOR_PIN, OUTPUT); 25 | 26 | Serial.println(); 27 | Serial.println(); 28 | Serial.print("Connecting to "); 29 | Serial.println(ssid); 30 | 31 | WiFi.begin(ssid, password); 32 | 33 | while (WiFi.status() != WL_CONNECTED) { 34 | delay(500); 35 | Serial.print("."); 36 | retryCounter++; 37 | } 38 | 39 | Serial.println(""); 40 | Serial.println("WiFi connected"); 41 | Serial.println("IP address: "); 42 | Serial.println(WiFi.localIP()); 43 | } 44 | 45 | 46 | void loop() { 47 | 48 | Serial.print("connecting to "); 49 | Serial.println(host); 50 | 51 | // Use WiFiClient class to create TCP connections 52 | WiFiClient client; 53 | const int httpPort = 80; 54 | if (!client.connect(host, httpPort)) { 55 | Serial.println("connection failed"); 56 | return; 57 | } 58 | 59 | String url = "/update?key="; 60 | url += thingspeak_key; 61 | url += "&field1="; 62 | url += String(digitalRead(DOOR_PIN)); 63 | url += "&field2="; 64 | url += retryCounter; 65 | 66 | Serial.print("Requesting URL: "); 67 | Serial.println(url); 68 | 69 | // This will send the request to the server 70 | client.print(String("GET ") + url + " HTTP/1.1\r\n" + 71 | "Host: " + host + "\r\n" + 72 | "Connection: close\r\n\r\n"); 73 | delay(10); 74 | 75 | // Read all the lines of the reply from server and print them to Serial 76 | while(client.available()){ 77 | String line = client.readStringUntil('\r'); 78 | Serial.print(line); 79 | } 80 | 81 | Serial.println(); 82 | Serial.println("closing connection. going to sleep..."); 83 | ESP.deepSleep(1000 * 1000 * 60 * MINUTES_SLEEPING, WAKE_NO_RFCAL); 84 | } 85 | 86 | -------------------------------------------------------------------------------- /arduino-ide/wifi-scale/font.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | */ 25 | 26 | const char myFont[][8] PROGMEM = { 27 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 28 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, 29 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, 30 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, 31 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, 32 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, 33 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, 34 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, 35 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, 36 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, 37 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, 38 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, 39 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, 40 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, 41 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, 42 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, 43 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, 44 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, 45 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, 46 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, 47 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, 48 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, 49 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, 50 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, 51 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, 52 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, 53 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, 54 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, 55 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, 56 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, 57 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, 58 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, 59 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, 60 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, 61 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, 62 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, 63 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, 64 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, 65 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, 66 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, 67 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, 68 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, 69 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, 70 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, 71 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, 72 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, 73 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, 74 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, 75 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, 76 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, 77 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, 78 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, 79 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, 80 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, 81 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, 82 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, 83 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, 84 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, 85 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, 86 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, 87 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, 88 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, 89 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, 90 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, 91 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, 92 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, 93 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, 94 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, 95 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, 96 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, 97 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, 98 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, 99 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, 100 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, 101 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, 102 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, 103 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, 104 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, 105 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, 106 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, 107 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, 108 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, 109 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, 110 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, 111 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, 112 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, 113 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, 114 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, 115 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, 116 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, 117 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, 118 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, 119 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, 120 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, 121 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, 122 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} 123 | }; 124 | 125 | #define active_width 8 126 | #define active_height 8 127 | const char active_bits[] PROGMEM = { 128 | 0x00, 0x18, 0x3c, 0x7e, 0x7e, 0x3c, 0x18, 0x00 }; 129 | 130 | #define inactive_width 8 131 | #define inactive_height 8 132 | const char inactive_bits[] PROGMEM = { 133 | 0x00, 0x18, 0x24, 0x42, 0x42, 0x24, 0x18, 0x00 }; 134 | -------------------------------------------------------------------------------- /arduino-ide/wifi-scale/ssd1306_i2c.h: -------------------------------------------------------------------------------- 1 | /**The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | See more at http://blog.squix.ch 24 | 25 | Credits for parts of this code go to Mike Rankin. Thank you so much for sharing! 26 | */ 27 | 28 | #include 29 | 30 | #define BLACK 0 31 | #define WHITE 1 32 | #define INVERSE 2 33 | 34 | 35 | class SSD1306 { 36 | 37 | private: 38 | int myI2cAddress; 39 | int mySda; 40 | int mySdc; 41 | uint8_t buffer[128 * 64 / 8]; 42 | bool myIsFontScaling2x2 = false; 43 | int myFrameState = 0; 44 | int myFrameTick = 0; 45 | int myCurrentFrame = 0; 46 | int myFrameCount = 0; 47 | int myFrameWaitTicks = 100; 48 | int myFrameTransitionTicks = 25; 49 | int myColor = WHITE; 50 | void (**myFrameCallbacks)(int x, int y); 51 | 52 | 53 | public: 54 | // Empty constructor 55 | SSD1306(int i2cAddress, int sda, int sdc); 56 | void init(); 57 | void resetDisplay(void); 58 | void reconnect(void); 59 | void displayOn(void); 60 | void displayOff(void); 61 | void clear(void); 62 | void display(void); 63 | void setPixel(int x, int y); 64 | void setChar(int x, int y, unsigned char data); 65 | void drawString(int x, int y, String text); 66 | void setFontScale2x2(bool isFontScaling2x2); 67 | void drawBitmap(int x, int y, int width, int height, const char *bitmap); 68 | void drawXbm(int x, int y, int width, int height, const char *xbm); 69 | void sendCommand(unsigned char com); 70 | void sendInitCommands(void); 71 | void setColor(int color); 72 | void drawRect(int x, int y, int width, int height); 73 | void fillRect(int x, int y, int width, int height); 74 | 75 | void setContrast(char contrast); 76 | void flipScreenVertically(); 77 | 78 | 79 | void setFrameCallbacks(int frameCount, void (*frameCallbacks[])(int x, int y)); 80 | void nextFrameTick(void); 81 | void drawIndicators(int frameCount, int activeFrame); 82 | void setFrameWaitTicks(int frameWaitTicks); 83 | void setFrameTransitionTicks(int frameTransitionTicks); 84 | int getFrameState(); 85 | 86 | const int FRAME_STATE_FIX = 0; 87 | const int FRAME_STATE_TRANSITION = 1; 88 | 89 | }; 90 | -------------------------------------------------------------------------------- /arduino-ide/wifi-scale/wifi-scale.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include "HX711.h" 3 | #include "ssd1306_i2c.h" 4 | 5 | // HX711.DOUT - pin #A1 6 | // HX711.PD_SCK - pin #A0 7 | 8 | HX711 scale(12, 14); // parameter "gain" is ommited; the default value 128 is used by the library 9 | SSD1306 display(0x3c, 2, 0); 10 | 11 | void setup() { 12 | ESP.wdtDisable(); 13 | 14 | Serial.begin(115200); 15 | Serial.println("HX711 Demo"); 16 | 17 | display.init(); 18 | display.clear(); 19 | display.display(); 20 | 21 | Serial.println("Before setting up the scale:"); 22 | Serial.print("read: \t\t"); 23 | Serial.println(scale.read()); // print a raw reading from the ADC 24 | 25 | Serial.print("read average: \t\t"); 26 | Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC 27 | 28 | Serial.print("get value: \t\t"); 29 | Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet) 30 | 31 | Serial.print("get units: \t\t"); 32 | Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided 33 | // by the SCALE parameter (not set yet) 34 | 35 | scale.set_scale(2158.45f); // this value is obtained by calibrating the scale with known weights; see the README for details 36 | //scale.set_scale(); 37 | scale.tare(); // reset the scale to 0 38 | 39 | Serial.println("After setting up the scale:"); 40 | 41 | Serial.print("read: \t\t"); 42 | Serial.println(scale.read()); // print a raw reading from the ADC 43 | 44 | Serial.print("read average: \t\t"); 45 | Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC 46 | 47 | Serial.print("get value: \t\t"); 48 | Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare() 49 | 50 | Serial.print("get units: \t\t"); 51 | Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight, divided 52 | // by the SCALE parameter set with set_scale 53 | 54 | Serial.println("Readings:"); 55 | } 56 | 57 | void loop() { 58 | //Serial.print("one reading:\t"); 59 | Serial.println(scale.get_units(), 1); 60 | display.clear(); 61 | display.setFontScale2x2(true); 62 | display.drawString(10,10, String(scale.get_units(), 1) + "g"); 63 | display.display(); 64 | 65 | //Serial.print("\t| average:\t"); 66 | //Serial.println(scale.get_units(10), 1); 67 | 68 | //scale.power_down(); // put the ADC in sleep mode 69 | delay(100); 70 | //scale.power_up(); 71 | } 72 | -------------------------------------------------------------------------------- /lua/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 by Daniel Eichhorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lua/simple-oled-example/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/simple-oled-example/clouds.png -------------------------------------------------------------------------------- /lua/simple-oled-example/clouds.xbm: -------------------------------------------------------------------------------- 1 | #define clouds_width 60 2 | #define clouds_height 60 3 | static unsigned short clouds_bits[] = { 4 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 5 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 6 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 7 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf000, 0x000f, 0x0000, 8 | 0x0000, 0xfe00, 0x007f, 0x0000, 0x0000, 0xff80, 0x01ff, 0x0000, 0x0000, 9 | 0xffc0, 0x07ff, 0x0000, 0x0000, 0xffe0, 0x0fff, 0x0000, 0x0000, 0x1ff0, 10 | 0x1ff8, 0x0000, 0x0000, 0x07f8, 0x3fc0, 0x0000, 0x0000, 0x01fc, 0x7f00, 11 | 0x0000, 0x0000, 0x00fe, 0x7e00, 0x0000, 0x0000, 0x007e, 0xfc00, 0x0000, 12 | 0xe000, 0x003f, 0xf800, 0x0001, 0xfc00, 0x001f, 0xf800, 0x0001, 0xff00, 13 | 0x001f, 0xf000, 0x0001, 0xff80, 0x000f, 0xf000, 0x0003, 0xffc0, 0x000f, 14 | 0xe000, 0x0003, 0x3fe0, 0x000c, 0xe000, 0x0003, 0x07f0, 0x0000, 0xe000, 15 | 0x000f, 0x03f0, 0x0000, 0xe000, 0x001f, 0x01f8, 0x0000, 0xe000, 0x003f, 16 | 0x00f8, 0x0000, 0xe000, 0x007f, 0x00fc, 0x0000, 0xa000, 0x00ff, 0x007c, 17 | 0x0000, 0x0000, 0x01fc, 0x007c, 0x0000, 0x0000, 0x01f8, 0x007c, 0x0000, 18 | 0x0000, 0x01f0, 0x007c, 0x0000, 0x0000, 0x03f0, 0x007c, 0x0000, 0x0000, 19 | 0x03e0, 0x007c, 0x0000, 0x0000, 0x03e0, 0x00fc, 0x0000, 0x0000, 0x03e0, 20 | 0x00f8, 0x0000, 0x0000, 0x03e0, 0x01f8, 0x0000, 0x0000, 0x03f0, 0x03f8, 21 | 0x0000, 0x0000, 0x01f0, 0x07f0, 0x01c0, 0x0703, 0x01f8, 0x1fe0, 0x81c0, 22 | 0x0703, 0x00fe, 0xffc0, 0xc0e3, 0xe383, 0x00ff, 0xff80, 0xc0f1, 0xe3c1, 23 | 0x007f, 0xff00, 0xe0f0, 0xe3c1, 0x003f, 0xfe00, 0xe0f8, 0xe1e1, 0x000f, 24 | 0x7000, 0xf078, 0xf1f0, 0x0003, 0x0000, 0xf87c, 0x01f0, 0x0000, 0x0000, 25 | 0xf87e, 0x00f8, 0x0000, 0x0000, 0x7c3e, 0x00f8, 0x0000, 0x0000, 0x7e3e, 26 | 0x00f8, 0x0000, 0x0000, 0x3e1c, 0x0070, 0x0000, 0x0000, 0x3e00, 0x0000, 27 | 0x0000, 0x0000, 0x3e00, 0x0000, 0x0000, 0x0000, 0x0c00, 0x0000, 0x0000, 28 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 29 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 30 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; 31 | -------------------------------------------------------------------------------- /lua/simple-oled-example/displayXBM.lua: -------------------------------------------------------------------------------- 1 | 2 | -- setup I2c and connect display 3 | function init_i2c_display() 4 | -- SDA and SCL can be assigned freely to available GPIOs 5 | sda = 5 -- GPIO14 6 | scl = 6 -- GPIO12 7 | sla = 0x3c 8 | i2c.setup(0, sda, scl, i2c.SLOW) 9 | disp = u8g.ssd1306_128x64_i2c(sla) 10 | end 11 | 12 | function xbm_picture() 13 | disp:setFont(u8g.font_6x10) 14 | disp:drawStr( 0, 62, "Rainy 8C") 15 | disp:drawXBM( 0, -5, 60, 60, xbm_data ) 16 | end 17 | 18 | function bitmap_test(delay) 19 | file.open("clouds.xbm", "r") 20 | xbm_data = file.read() 21 | file.close() 22 | 23 | disp:firstPage() 24 | repeat 25 | xbm_picture() 26 | until disp:nextPage() == false 27 | 28 | tmr.wdclr() 29 | end 30 | 31 | init_i2c_display() 32 | bitmap_test() -------------------------------------------------------------------------------- /lua/simple-oled-example/simple-oled-sketch.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/simple-oled-example/simple-oled-sketch.fzz -------------------------------------------------------------------------------- /lua/simple-oled-example/simple-oled-sketch_bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/simple-oled-example/simple-oled-sketch_bb.png -------------------------------------------------------------------------------- /lua/weather-station/01d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/01d.MONO -------------------------------------------------------------------------------- /lua/weather-station/02d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/02d.MONO -------------------------------------------------------------------------------- /lua/weather-station/03d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/03d.MONO -------------------------------------------------------------------------------- /lua/weather-station/04d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/04d.MONO -------------------------------------------------------------------------------- /lua/weather-station/09d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/09d.MONO -------------------------------------------------------------------------------- /lua/weather-station/10d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/10d.MONO -------------------------------------------------------------------------------- /lua/weather-station/11d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/11d.MONO -------------------------------------------------------------------------------- /lua/weather-station/13d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/13d.MONO -------------------------------------------------------------------------------- /lua/weather-station/50d.MONO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/50d.MONO -------------------------------------------------------------------------------- /lua/weather-station/README.md: -------------------------------------------------------------------------------- 1 | # Internet Connected Weather Station 2 | 3 | This project only requires three parts 4 | * [NodeMCU V1.0 (~$10)](http://s.click.aliexpress.com/e/JYrbmMVfU) 5 | * [OLED Display 128x64, I2C (~$4.50)] (http://www.banggood.com/0_96-Inch-4Pin-White-IIC-I2C-OLED-Display-Module-12864-LED-For-Arduino-p-958196.html?p=0P21061109440201501M) 6 | * [DuPont Connectors (female-female) (~$1.50)](http://www.banggood.com/40-x-10cm-Female-To-Female-Dupont-Jumper-Wires-Cable-p-89717.html?p=0P21061109440201501M) 7 | 8 | Then follow these steps: 9 | 10 | 1. Download this source code from github (either checkout with git or use the "[Download as ZIP](https://github.com/squix78/esp8266-projects/archive/master.zip)" Button 11 | 2. Download [ESPlorer](http://esp8266.ru/esplorer/) 12 | 3. Open init.lua in ESPlorer and replace SSID and PASSWORD with your Wifi credentials 13 | 4. Open weatherStation.lua in ESPlorer and adapt the city for which to receive weather information 14 | 5. Register at openweathermap.org to get an API key 15 | 6. Use "Safe to ESP" to transfer the file. Use "Safe&Compile" to compile the lua source code into an lc file to safe valuable RAM 16 | 7. Use the "Upload..." button in ESPlorer to transfer all the .MONO files to the ESP 17 | 8. Connect all the wires as depicted in the schema below 18 | 9. Reset the ESP. 19 | 20 | If everything went well you should see the current weather of your city on the tiny OLED display. 21 | 22 | Please let me know, if you see room for improvement. Also visit http://blog.squix.ch for more projects. 23 | 24 | 25 | ![The Weather Station Display](http://2.bp.blogspot.com/-W-UZsPvh-4I/VWCjUVTzxqI/AAAAAAAAATc/bmdILYERtGo/s320/display.jpg) 26 | ![Connecting the wires](https://github.com/squix78/esp8266-projects/blob/master/weather-station/simple-oled-sketch_bb.png) 27 | -------------------------------------------------------------------------------- /lua/weather-station/clouds.xbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/clouds.xbm -------------------------------------------------------------------------------- /lua/weather-station/init.lua: -------------------------------------------------------------------------------- 1 | 2 | print("Connecting to wifi...") 3 | wifi.setmode(wifi.STATION) 4 | wifi.sta.config("SSID","PWD") 5 | 6 | tmr.alarm(0, 1000, 1, function() 7 | print(".") 8 | ip = wifi.sta.getip() 9 | if ( ( ip ~= nil ) and ( ip ~= "0.0.0.0" ) )then 10 | print(ip) 11 | tmr.stop(0) 12 | sk=net.createConnection(net.TCP, 0) 13 | sk:dns("www.google.com",dnsIsWorking) 14 | sk = nil 15 | end 16 | end ) 17 | 18 | function dnsIsWorking(conn,ip) 19 | print("Google IP: "..ip) 20 | collectgarbage("collect") 21 | dofile("weatherStation.lc") 22 | end 23 | -------------------------------------------------------------------------------- /lua/weather-station/simple-oled-sketch_bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/simple-oled-sketch_bb.png -------------------------------------------------------------------------------- /lua/weather-station/src/01d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/01d.png -------------------------------------------------------------------------------- /lua/weather-station/src/02d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/02d.png -------------------------------------------------------------------------------- /lua/weather-station/src/03d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/03d.png -------------------------------------------------------------------------------- /lua/weather-station/src/04d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/04d.png -------------------------------------------------------------------------------- /lua/weather-station/src/09d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/09d.png -------------------------------------------------------------------------------- /lua/weather-station/src/10d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/10d.png -------------------------------------------------------------------------------- /lua/weather-station/src/11d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/11d.png -------------------------------------------------------------------------------- /lua/weather-station/src/13d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/13d.png -------------------------------------------------------------------------------- /lua/weather-station/src/50d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/50d.png -------------------------------------------------------------------------------- /lua/weather-station/src/display.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/display.jpg -------------------------------------------------------------------------------- /lua/weather-station/src/icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/icons.psd -------------------------------------------------------------------------------- /lua/weather-station/src/simple-oled-sketch.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squix78/esp8266-projects/5d20dd50a5de6618b8e01f10543d7f4973bce57d/lua/weather-station/src/simple-oled-sketch.fzz -------------------------------------------------------------------------------- /lua/weather-station/weatherStation.lua: -------------------------------------------------------------------------------- 1 | -- your offset to UTC 2 | local UTC_OFFSET = 2 3 | -- Enter your city, check openweathermap.org 4 | local CITY = "Zurich,ch" 5 | -- Get an APP ID on openweathermap.org 6 | local APPID = "YOUR_APP_ID" 7 | -- Update interval in minutes 8 | local INTERVAL = 10 9 | 10 | function init_i2c_display() 11 | -- SDA and SCL can be assigned freely to available GPIOs 12 | sda = 5 -- GPIO14 13 | scl = 6 -- GPIO12 14 | sla = 0x3c 15 | i2c.setup(0, sda, scl, i2c.SLOW) 16 | disp = u8g.ssd1306_128x64_i2c(sla) 17 | end 18 | 19 | function prepare() 20 | disp:setFont(u8g.font_6x10) 21 | disp:setFontRefHeightExtendedText() 22 | disp:setDefaultForegroundColor() 23 | disp:setFontPosTop() 24 | end 25 | 26 | function updateWeather() 27 | print("Updating weather") 28 | local conn=net.createConnection(net.TCP, 0) 29 | conn:on("receive", function(conn, payload) 30 | local lastUpdate = string.sub(payload,string.find(payload,"Date: ")+23,string.find(payload,"Date: ")+31) 31 | local hour = string.sub(lastUpdate, 0, 2) + UTC_OFFSET 32 | lastUpdate = hour..string.sub(lastUpdate, 3, 9) 33 | local payload = string.match(payload, "{.*}") 34 | print(payload) 35 | 36 | weather = nil 37 | weather = cjson.decode(payload) 38 | local icon = weather.weather[1].icon 39 | icon = string.gsub(icon, "n", "d") 40 | file.open(icon..".MONO", "r") 41 | xbm_data = file.read() 42 | file.close() 43 | 44 | payload = nil 45 | conn:close() 46 | conn = nil 47 | drawWeather(xbm_data, weather, lastUpdate) 48 | end ) 49 | 50 | conn:connect(80,"95.85.58.189") 51 | conn:send("GET /data/2.5/weather?q="..CITY.."&units=metric&APPID="..APPID 52 | .." HTTP/1.1\r\n" 53 | .."Host: api.openweathermap.org\r\n" 54 | .."Connection: close\r\n" 55 | .."Accept: */*\r\n" 56 | .."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n" 57 | .."\r\n") 58 | conn = nil 59 | 60 | end 61 | init_i2c_display() 62 | prepare() 63 | updateWeather() 64 | 65 | function drawWeather(xbmData, weather, lastUpdate) 66 | disp:firstPage() 67 | repeat 68 | if weather ~= nil then 69 | disp:drawXBM( 0, 0, 60, 60, xbm_data ) 70 | disp:setScale2x2() 71 | disp:drawStr(35,5, math.floor(weather.main.temp).."C") 72 | disp:drawStr(35,15, weather.main.humidity.."%") 73 | disp:undoScale() 74 | disp:drawStr(70,52, lastUpdate) 75 | end 76 | until disp:nextPage() == false 77 | end 78 | 79 | 80 | tmr.alarm(1, INTERVAL * 60000, 1, function() 81 | ip = wifi.sta.getip() 82 | if ip=="0.0.0.0" or ip==nil then 83 | print("connecting to AP...") 84 | else 85 | print("Loading weather...") 86 | updateWeather() 87 | end 88 | end ) 89 | 90 | --------------------------------------------------------------------------------