├── Blink ├── WebServerBlink.ino └── favicon.h ├── Mozz_TM1650 └── Mozz_TM1650.ino ├── OLED_SSD1306 ├── OLED_SSD1306.cpp ├── OLED_SSD1306.h ├── README.md └── font.h ├── OpenWeatherMap_OLED └── OpenWeatherMap_OLED.ino ├── PIR_Neopixel ├── PIR_Neopixel.ino └── README.md ├── README.md ├── WiFi_DHT ├── Mozz_WiFi_DHT.ino └── README.md ├── WiFi_OLED ├── Mozz_WiFi_OLED ├── README.md └── font.h ├── WiFi_Scan_SPIFFS └── WiFi_Scan_SPIFFS.ino ├── WiFi_Sensors ├── Mozz_WiFi_Sensors.ino └── README.md ├── WiFi_TFT ├── README.md └── WiFi_TFT.ino ├── WiFi_TFT_DS18B20 ├── Mozz_TFT_WiFi_DS18B20.ino └── README.md ├── oval-pcb.dxf └── webping ├── README.md ├── http.lua └── init.lua /Blink/WebServerBlink.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2015. Mario Mikočević 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 | * The above copyright notice and this permission notice shall be included in all 12 | * copies or substantial portions of the Software. 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | * 21 | */ 22 | 23 | // Serial printing ON/OFF 24 | #include "Arduino.h" 25 | #define DEBUG true 26 | #define Serial if(DEBUG)Serial 27 | #define DEBUG_OUTPUT Serial 28 | 29 | ADC_MODE(ADC_VCC); 30 | 31 | #include 32 | #include 33 | #include 34 | 35 | // if you use GPIO1 set Serial #define to false 36 | // #define LED_PIN 1 // ESP-01 blue LED, GPIO1 37 | #define LED_PIN 16 // NodeMCU blue LED 38 | #define LED_ON digitalWrite( LED_PIN, LOW ) 39 | #define LED_OFF digitalWrite( LED_PIN, HIGH ) 40 | 41 | const char* myssid = "ESPWiFi"; 42 | const char* mypass = "esp8266pwd"; 43 | 44 | ESP8266WebServer server ( 80 ); 45 | 46 | char tmpstr[40]; 47 | 48 | extern "C" { 49 | #include "user_interface.h" 50 | } 51 | 52 | void setup() { 53 | uint8_t i; 54 | 55 | Serial.begin(115200); 56 | delay(10); 57 | Serial.setDebugOutput(true); 58 | 59 | Serial.println(); 60 | Serial.print(F("Heap: ")); Serial.println(system_get_free_heap_size()); 61 | Serial.print(F("Boot Vers: ")); Serial.println(system_get_boot_version()); 62 | Serial.print(F("CPU: ")); Serial.println(system_get_cpu_freq()); 63 | Serial.print(F("SDK: ")); Serial.println(system_get_sdk_version()); 64 | Serial.print(F("Chip ID: ")); Serial.println(system_get_chip_id()); 65 | Serial.print(F("Flash ID: ")); Serial.println(spi_flash_get_id()); 66 | Serial.print(F("Vcc: ")); Serial.println(ESP.getVcc()); 67 | Serial.println(); 68 | 69 | delay( 3000 ); 70 | pinMode( LED_PIN, OUTPUT ); 71 | 72 | // let them know we're alive 73 | for ( i=0; i<10; i++ ) { 74 | LED_ON; 75 | delay(30); 76 | LED_OFF; 77 | delay(60); 78 | } 79 | LED_OFF; 80 | 81 | initWiFi(); 82 | 83 | setupWebServer(); 84 | 85 | } 86 | 87 | void loop() { 88 | server.handleClient(); 89 | delay(1); 90 | } 91 | 92 | void initWiFi(void) { 93 | 94 | WiFi.softAP( myssid, mypass ); 95 | IPAddress myIP = WiFi.softAPIP(); 96 | Serial.print("AP IP address: "); 97 | Serial.println(myIP); 98 | 99 | // WiFi.config( myIP ); 100 | 101 | } 102 | 103 | String HTML_Root = " ESP8266 Web Server \ 104 |
\ 105 | \ 106 | \ 107 |
\ 108 | "; 109 | 110 | String HTML_LED_ON = " \ 111 | \ 112 |

LED is now ON!

"; 113 | 114 | String HTML_LED_OFF = " \ 115 | \ 116 |

LED is now OFF!

"; 117 | 118 | void handleLEDON() { 119 | Serial.println("LED ON"); 120 | ElapsedStr( tmpstr ); 121 | Serial.println( tmpstr ); 122 | server.send ( 200, "text/html", HTML_LED_ON ); 123 | LED_ON; 124 | } 125 | 126 | void handleLEDOFF() { 127 | Serial.println("LED OFF"); 128 | ElapsedStr( tmpstr ); 129 | Serial.println( tmpstr ); 130 | server.send ( 200, "text/html", HTML_LED_OFF ); 131 | LED_OFF; 132 | } 133 | 134 | void handleFavIcon() { 135 | Serial.println("favicon.ico"); 136 | ElapsedStr( tmpstr ); 137 | Serial.println( tmpstr ); 138 | WiFiClient client = server.client(); 139 | client.write( EspFavIcon, sizeof(EspFavIcon) ); 140 | server.send ( 200, "image/x-icon", "" ); 141 | } 142 | 143 | void handleRoot() { 144 | server.send ( 200, "text/html", HTML_Root ); 145 | } 146 | 147 | void setupWebServer(void) { 148 | 149 | server.on ( "/", handleRoot ); 150 | 151 | /* 152 | server.on ( "/favicon.ico", []() { 153 | Serial.println("favicon.ico"); 154 | ElapsedStr( tmpstr ); 155 | Serial.println( tmpstr ); 156 | server.send ( 200, "text/html", "" ); // better than 404 157 | } ); 158 | */ 159 | server.on ( "/favicon.ico", handleFavIcon ); 160 | 161 | server.on ( "/ledon", handleLEDON ); 162 | 163 | server.on ( "/ledoff", handleLEDOFF ); 164 | 165 | server.onNotFound ( []() { 166 | Serial.println("Page Not Found"); 167 | server.send ( 404, "text/html", "Page not Found" ); 168 | } ); 169 | 170 | server.begin(); 171 | 172 | } 173 | 174 | void ElapsedStr( char *str ) { 175 | 176 | unsigned long sec, minute, hour; 177 | 178 | sec = millis() / 1000; 179 | minute = ( sec % 3600 ) / 60; 180 | hour = sec / 3600; 181 | sprintf( str, "Elapsed " ); 182 | if ( hour == 0 ) { 183 | sprintf( str, "%s ", str ); 184 | } else { 185 | sprintf( str, "%s%2d:", str, hour ); 186 | } 187 | if ( minute >= 10 ) { 188 | sprintf( str, "%s%2d:", str, minute ); 189 | } else { 190 | if ( hour != 0 ) { 191 | sprintf( str, "%s0%1d:", str, minute ); 192 | } else { 193 | sprintf( str, "%s ", str ); 194 | if ( minute == 0 ) { 195 | sprintf( str, "%s ", str ); 196 | } else { 197 | sprintf( str, "%s%1d:", str, minute ); 198 | } 199 | } 200 | } 201 | if ( ( sec % 60 ) < 10 ) { 202 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 203 | } else { 204 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 205 | } 206 | 207 | } 208 | -------------------------------------------------------------------------------- /Blink/favicon.h: -------------------------------------------------------------------------------- 1 | #ifndef _ESPFAVICON_H_ 2 | #define _ESPFAVICON_H_ 3 | 4 | const char EspFavIcon[] = { 5 | 0x42, 0x4d, 0x36, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 6 | 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xc4, 0x0e, 0x00, 0x00, 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xaa, 0xf1, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 9 | 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 10 | 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 0x8e, 0x92, 0xed, 11 | 0x8e, 0x92, 0xed, 0xc6, 0xc8, 0xf7, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 12 | 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1e, 0x27, 0xdc, 0x51, 0x58, 0xe2, 0x8b, 0x90, 0xeb, 0x96, 0x99, 13 | 0xed, 0x75, 0x7b, 0xe7, 0x2a, 0x31, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 14 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x28, 15 | 0x31, 0xdd, 0x5b, 0x62, 0xe3, 0x9d, 0xa0, 0xed, 0x89, 0x8e, 0xea, 0x74, 0x7a, 0xe7, 0x3c, 0x44, 16 | 0xdf, 0x7a, 0x80, 0xe8, 0xaa, 0xad, 0xee, 0x81, 0x86, 0xe8, 0x3d, 0x44, 0xdf, 0x1d, 0x26, 0xdc, 17 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x9b, 18 | 0x9f, 0xee, 0xb5, 0xb8, 0xf1, 0x28, 0x31, 0xdc, 0xa6, 0xa9, 0xee, 0xf7, 0xf7, 0xfd, 0x60, 0x66, 19 | 0xe4, 0xd7, 0xd8, 0xf6, 0xd5, 0xd7, 0xf7, 0x3b, 0x42, 0xde, 0x6d, 0x73, 0xe5, 0x1d, 0x26, 0xdc, 20 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x6c, 0x71, 0xe4, 0xb4, 21 | 0xb7, 0xf1, 0xff, 0xff, 0xff, 0x96, 0x9a, 0xed, 0x8c, 0x90, 0xec, 0xff, 0xff, 0xff, 0x87, 0x8c, 22 | 0xea, 0xd4, 0xd6, 0xf6, 0xff, 0xff, 0xff, 0x48, 0x4f, 0xe1, 0x5e, 0x64, 0xe4, 0x1d, 0x26, 0xdc, 23 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x35, 0x3d, 0xde, 0x93, 0x96, 0xed, 0x49, 24 | 0x51, 0xe2, 0xa6, 0xaa, 0xf0, 0x49, 0x50, 0xe1, 0xb4, 0xb7, 0xf2, 0xff, 0xff, 0xff, 0x71, 0x76, 25 | 0xe7, 0xe1, 0xe2, 0xf8, 0xf8, 0xf8, 0xfd, 0x63, 0x69, 0xe3, 0xfb, 0xfb, 0xfd, 0x36, 0x3e, 0xdf, 26 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe4, 0x85, 0x8a, 0xea, 0x45, 0x4c, 0xe0, 0xc1, 27 | 0xc4, 0xf3, 0xad, 0xb0, 0xf0, 0xc4, 0xc6, 0xf4, 0xf8, 0xf8, 0xfd, 0xd2, 0xd3, 0xf6, 0x67, 0x6c, 28 | 0xe4, 0xfa, 0xfa, 0xfd, 0xa5, 0xa8, 0xf0, 0x9f, 0xa1, 0xec, 0xfe, 0xfe, 0xfe, 0x3c, 0x43, 0xe0, 29 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x50, 0x58, 0xe4, 0x8c, 0x91, 0xec, 0x89, 0x8e, 0xea, 0xfe, 30 | 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfd, 0xda, 0xdc, 0xf8, 0x53, 0x5a, 0xe3, 0xe2, 0xe3, 31 | 0xf7, 0xf6, 0xf6, 0xfd, 0x4a, 0x50, 0xe0, 0xe8, 0xe8, 0xf7, 0xf0, 0xf1, 0xfc, 0x28, 0x30, 0xd9, 32 | 0x1f, 0x28, 0xdc, 0x88, 0x8d, 0xed, 0x54, 0x5b, 0xe4, 0x89, 0x8e, 0xeb, 0xe5, 0xe5, 0xf8, 0x8c, 33 | 0x90, 0xec, 0x88, 0x8d, 0xeb, 0x8a, 0x8e, 0xea, 0x86, 0x8a, 0xe9, 0xd6, 0xd8, 0xf6, 0xfc, 0xfc, 34 | 0xfe, 0x9b, 0x9f, 0xed, 0x9e, 0xa1, 0xeb, 0xfe, 0xfe, 0xfe, 0x86, 0x8b, 0xea, 0x9b, 0x9d, 0xe2, 35 | 0x2d, 0x35, 0xdd, 0x88, 0x8d, 0xed, 0x51, 0x58, 0xe2, 0x8c, 0x91, 0xeb, 0x78, 0x7c, 0xe6, 0xea, 36 | 0xeb, 0xfb, 0xea, 0xea, 0xfb, 0xea, 0xeb, 0xfb, 0xf7, 0xf7, 0xfd, 0xfe, 0xfe, 0xfe, 0xbc, 0xbf, 37 | 0xf2, 0x7d, 0x81, 0xe7, 0xf7, 0xf7, 0xfd, 0xd7, 0xd9, 0xf8, 0x59, 0x5e, 0xdc, 0xed, 0xee, 0xfb, 38 | 0x27, 0x2f, 0xdd, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x7b, 0x80, 0xea, 0x4a, 0x50, 0xe1, 0xdd, 39 | 0xde, 0xf8, 0xe8, 0xe9, 0xfb, 0xdf, 0xe1, 0xf9, 0xbb, 0xbe, 0xf3, 0x82, 0x88, 0xe8, 0x7d, 0x81, 40 | 0xe8, 0xf1, 0xf1, 0xfb, 0xf5, 0xf6, 0xfd, 0x8e, 0x93, 0xeb, 0xc4, 0xc6, 0xf3, 0xc9, 0xcb, 0xf5, 41 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x27, 0x2f, 0xdd, 0xa9, 0xad, 0xef, 0x42, 42 | 0x49, 0xe0, 0x77, 0x7c, 0xe7, 0x8f, 0x93, 0xea, 0xac, 0xaf, 0xef, 0xcb, 0xcd, 0xf4, 0xfe, 0xfe, 43 | 0xfe, 0xe6, 0xe7, 0xfa, 0x6c, 0x72, 0xe6, 0xaf, 0xb3, 0xef, 0xf1, 0xf2, 0xfb, 0x39, 0x40, 0xdf, 44 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x41, 0x48, 0xdf, 0x8c, 45 | 0x90, 0xeb, 0xb4, 0xb7, 0xf2, 0xfd, 0xfe, 0xfe, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfd, 0xc1, 0xc4, 46 | 0xf3, 0x51, 0x57, 0xe1, 0xd5, 0xd6, 0xf4, 0xf6, 0xf6, 0xfc, 0x69, 0x70, 0xe6, 0x1d, 0x26, 0xdc, 47 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe2, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x3e, 48 | 0x45, 0xe0, 0x32, 0x39, 0xde, 0x90, 0x95, 0xed, 0x83, 0x88, 0xea, 0x5e, 0x64, 0xe3, 0x82, 0x87, 49 | 0xe9, 0xc6, 0xc8, 0xf4, 0xb8, 0xbb, 0xf3, 0x64, 0x6a, 0xe5, 0x1f, 0x28, 0xdc, 0x1d, 0x26, 0xdc, 50 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x4e, 0x56, 0xe4, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 51 | 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x27, 0x2f, 0xdc, 0x47, 0x4f, 52 | 0xe1, 0x3f, 0x46, 0xe0, 0x28, 0x31, 0xdd, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 0x1d, 0x26, 0xdc, 53 | 0x1d, 0x26, 0xdc, 0x88, 0x8d, 0xed, 0x7a, 0x80, 0xea, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 54 | 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 55 | 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 0x56, 0x5c, 0xe5, 56 | 0x56, 0x5c, 0xe5, 0xa8, 0xab, 0xf1 57 | }; 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /Mozz_TM1650/Mozz_TM1650.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2015. Mario Mikočević 4 | * 5 | * MIT Licence 6 | * 7 | */ 8 | 9 | // Serial printing ON/OFF 10 | #include 11 | #include 12 | #define DEBUG true 13 | #define Serial if(DEBUG)Serial 14 | #define DEBUG_OUTPUT Serial 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | ADC_MODE(ADC_VCC); 22 | 23 | #include 24 | Ticker tickerShowTime; 25 | #define WAITTIME 1 26 | boolean tickerFired; 27 | 28 | // I2C pins 29 | #define SDA_pin 4 30 | #define SCL_pin 5 31 | 32 | #include 33 | 34 | TM1650 Disp4Seg; 35 | 36 | const char* ssid = "MozzWiFi"; 37 | const char* pass = "xx"; 38 | const char* host = "yy"; 39 | 40 | int timezone = 1; 41 | int dst = -1; // bugged, doesnt count 42 | 43 | uint16_t i,j,k; 44 | uint8_t b; 45 | 46 | void flagShowTime( void ) { 47 | tickerFired = true; 48 | } 49 | 50 | void initWiFi( void ) { 51 | 52 | Serial.print( "Connecting to " ); 53 | Serial.println( ssid ); 54 | WiFi.mode( WIFI_STA ); 55 | WiFi.begin( ); 56 | while ( WiFi.waitForConnectResult() != WL_CONNECTED ){ 57 | WiFi.begin( ssid, pass ); 58 | Serial.println("Retrying connection..."); 59 | // Serial.println("Connection Failed! Rebooting..."); 60 | // delay(5000); 61 | // ESP.restart(); 62 | } 63 | Serial.println( "WiFi connected" ); 64 | Serial.print( "IP address: " ); 65 | Serial.println( WiFi.localIP() ); 66 | 67 | } 68 | 69 | void SetupArduinoOTA( void ) { 70 | 71 | // Port defaults to 8266 72 | // ArduinoOTA.setPort(8266); 73 | 74 | // Hostname defaults to esp8266-[ChipID] 75 | ArduinoOTA.setHostname("disp7-esp"); 76 | 77 | // ArduinoOTA.setPassword((const char *)"xx"); 78 | 79 | ArduinoOTA.onStart([]() { 80 | Serial.println("Start"); 81 | }); 82 | ArduinoOTA.onEnd([]() { 83 | Serial.println("End"); 84 | }); 85 | ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { 86 | Serial.printf("Progress: %u%%\n", (progress / (total / 100))); 87 | }); 88 | ArduinoOTA.onError([](ota_error_t error) { 89 | Serial.printf("Error[%u]: ", error); 90 | if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); 91 | else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); 92 | else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); 93 | else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); 94 | else if (error == OTA_END_ERROR) Serial.println("End Failed"); 95 | }); 96 | ArduinoOTA.begin(); 97 | 98 | } 99 | 100 | void setup() { 101 | 102 | Serial.begin(115200); 103 | Serial.println( "Booting" ); 104 | Serial.println(); 105 | Serial.printf( "Sketch size: %u\n", ESP.getSketchSize() ); 106 | Serial.printf( "Free size: %u\n", ESP.getFreeSketchSpace() ); 107 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 108 | Serial.printf( "Boot Vers: %u\n", ESP.getBootVersion() ); 109 | Serial.printf( "CPU: %uMHz\n", ESP.getCpuFreqMHz() ); 110 | Serial.printf( "SDK: %s\n", ESP.getSdkVersion() ); 111 | Serial.printf( "Chip ID: %u\n", ESP.getChipId() ); 112 | Serial.printf( "Flash ID: %u\n", ESP.getFlashChipId() ); 113 | Serial.printf( "Flash Size: %u\n", ESP.getFlashChipRealSize() ); 114 | Serial.printf( "Vcc: %u\n", ESP.getVcc() ); 115 | Serial.println(); 116 | 117 | initWiFi(); 118 | SetupArduinoOTA(); 119 | Serial.println( "OTA Setup Done!" ); 120 | 121 | Wire.begin( SDA_pin, SCL_pin ); 122 | Wire.setClock( 400000 ); 123 | 124 | Disp4Seg.Init(); 125 | Serial.println( "TM1650 Setup Done!" ); 126 | 127 | configTime( timezone * 3600, dst * 3600, "pool.ntp.org", "time.nist.gov", "tik.t-com.hr" ); 128 | Serial.println("\nWaiting for time"); 129 | while (!time(nullptr)) { 130 | Serial.print("."); 131 | delay(1000); 132 | } 133 | Serial.println(""); 134 | 135 | i = 0; 136 | j = 0; 137 | k = 0; 138 | b = 1; 139 | 140 | tickerShowTime.attach( WAITTIME, flagShowTime ); 141 | tickerFired = true; 142 | 143 | } 144 | 145 | void displayFun( uint16_t i ) { 146 | 147 | if( ( i % 100 ) == 0 ) { 148 | // Disp4Seg.SendControl( b ); 149 | // Serial.printf( "Command bit - %d\n", b ); 150 | Serial.printf( "Counter - %d\n", i ); 151 | b = ( b << 1 ) & 0xff; 152 | if ( b == 0 ) { 153 | b = 1; 154 | } 155 | } 156 | 157 | ( i & 0x04 ) ? Disp4Seg.ColonON() : Disp4Seg.ColonOFF(); 158 | 159 | Disp4Seg.SetBrightness( 4 ); 160 | Disp4Seg.WriteNum( i ); 161 | 162 | // j = i & 0x03; 163 | // k = ( i >> 3 ) & 0x07; 164 | // Serial.printf( "Brgithness %d at %d\n", k, j ); 165 | // Disp4Seg.SetBrightness( k ); 166 | 167 | } 168 | 169 | void loop() { 170 | 171 | ArduinoOTA.handle(); 172 | 173 | if( tickerFired ) { 174 | tickerFired = false; 175 | time_t now = time(nullptr); 176 | struct tm* t = localtime( &now ); 177 | int sec = t->tm_sec; 178 | int minute = t->tm_min; 179 | int hour = t->tm_hour; 180 | // Serial.println(ctime(&now)); 181 | // Serial.printf( "%2d:%2d\n", minute, sec ); 182 | 183 | ( sec & 0x01 ) ? Disp4Seg.ColonON() : Disp4Seg.ColonOFF(); 184 | Disp4Seg.SetBrightness( 4 ); 185 | Disp4Seg.WriteNum( hour * 100 + minute ); 186 | } 187 | 188 | } 189 | -------------------------------------------------------------------------------- /OLED_SSD1306/OLED_SSD1306.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * OLED_SSD1306.cpp - I2C 128x64 OLED Driver Library 3 | * 4 | * This library is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU Lesser General Public 6 | * License as published by the Free Software Foundation; either 7 | * version 2.1 of the License, or (at your option) any later version. 8 | * 9 | * This library is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * Lesser General Public License for more details. 13 | * 14 | * Copyright (c) 2015. Mario Mikočević 15 | * 16 | */ 17 | 18 | #include 19 | #include "OLED_SSD1306.h" 20 | #include "font.h" 21 | 22 | OLED_SSD1306::OLED_SSD1306( uint8_t i2caddr ) { 23 | localI2CAddress = i2caddr; 24 | low_col_offset = 0; 25 | } 26 | 27 | OLED_SSD1306::OLED_SSD1306( uint8_t i2caddr, uint8_t offset ) { 28 | localI2CAddress = i2caddr; 29 | low_col_offset = 2; 30 | } 31 | 32 | void OLED_SSD1306::SendCommand( unsigned char cmd ) { 33 | Wire.beginTransmission( localI2CAddress ); 34 | Wire.write( 0x80 ); 35 | Wire.write( cmd ); 36 | Wire.endTransmission(); 37 | } 38 | 39 | void OLED_SSD1306::SendChar( unsigned char data ) { 40 | Wire.beginTransmission( localI2CAddress ); 41 | Wire.write( 0x40 ); 42 | Wire.write( data ); 43 | Wire.endTransmission(); 44 | } 45 | 46 | void OLED_SSD1306::SetCursorXY( unsigned char row, unsigned char col ) { 47 | OLED_SSD1306::SendCommand( 0xB0 + ( row & 0x0F ) ); // set page address 48 | OLED_SSD1306::SendCommand( 0x00 + ( 8 * col & 0x0F ) + low_col_offset ); // set low col address 49 | OLED_SSD1306::SendCommand( 0x10 + ( ( 8 * col>>4 ) & 0x0F ) ); // set high col address 50 | } 51 | 52 | //==========================================================// 53 | // Prints a string in coordinates X Y, being multiples of 8. 54 | // This means we have 16 COLS (0-15) and 8 ROWS (0-7). 55 | void OLED_SSD1306::SendStrXY( const char *string, int X, int Y ) { 56 | unsigned char i; 57 | 58 | OLED_SSD1306::SetCursorXY( X, Y ); 59 | while( *string ) { 60 | for( i=0; i<8; i++ ) { 61 | OLED_SSD1306::SendChar( pgm_read_byte( myFont[*string-0x20] + i ) ); 62 | } 63 | *string++; 64 | } 65 | } 66 | 67 | void OLED_SSD1306::ClearDisplay(void) { 68 | unsigned char i,j; 69 | 70 | OLED_SSD1306::DisplayOFF(); 71 | for( int i=0; i < 8; i++ ) { 72 | OLED_SSD1306::SetCursorXY( i, 0 ); 73 | for( int j=0; j < 128; j++ ) { 74 | OLED_SSD1306::SendChar( 0x00 ); 75 | } 76 | } 77 | OLED_SSD1306::DisplayON(); 78 | } 79 | 80 | #define Scroll_2Frames 0x07 81 | #define Scroll_3Frames 0x04 82 | #define Scroll_4Frames 0x05 83 | #define Scroll_5Frames 0x00 84 | #define Scroll_25Frames 0x06 85 | #define Scroll_64Frames 0x01 86 | #define Scroll_128Frames 0x02 87 | #define Scroll_256Frames 0x03 88 | // speed is in number of frames 89 | void OLED_SSD1306::ScrollRight( unsigned char start, unsigned char end, unsigned char speed ) { 90 | 91 | SendCommand( 0x26 ); // Right Horizontal Scroll 92 | SendCommand( 0x00 ); // Dummy byte (Set as 00h) 93 | 94 | SendCommand( start ); // start page address 95 | SendCommand( speed ); // set time interval between each scroll 96 | SendCommand( end ); // end page address 97 | 98 | SendCommand( 0x00 ); // Dummy byte (Set as 00h) 99 | SendCommand( 0xFF ); // Dummy byte (Set as FFh) 100 | 101 | SendCommand( 0x2F ); // Activate Scroll 102 | 103 | } 104 | 105 | void OLED_SSD1306::ScrollStop( void ) { 106 | SendCommand( 0x2E ); // Deactivate Scroll 107 | } 108 | 109 | void OLED_SSD1306::DisplayFlipON( void ) { 110 | SendCommand( 0xC0 ); // Set COM Output Scan Direction 111 | SendCommand( 0xA0 ); // Set Segment Re-Map // column 0 mapped to SEG0 112 | } 113 | 114 | void OLED_SSD1306::DisplayFlipOFF( void ) { 115 | SendCommand( 0xC8 ); // Set COM Output Scan Direction 116 | SendCommand( 0xA1 ); // Set Segment Re-Map // column 127 mapped to SEG0 117 | } 118 | // 0xC0 & 0xA1 or 0xC8 & 0xA0 combinations are mirror like text 119 | 120 | void OLED_SSD1306::BlinkOFF(void) { 121 | SendCommand( 0xA4 ); // Entire Display Normal 122 | } 123 | 124 | void OLED_SSD1306::BlinkON(void) { 125 | SendCommand( 0xA5 ); // Entire Display ON 126 | } 127 | 128 | void OLED_SSD1306::DisplayNormal(void) { 129 | SendCommand( 0xA6 ); // Set Display Normal 130 | } 131 | 132 | void OLED_SSD1306::DisplayInverse(void) { 133 | SendCommand( 0xA7 ); // Set Display Inverse 134 | } 135 | 136 | void OLED_SSD1306::DisplayON(void) { 137 | SendCommand( 0xAF ); // Set Display On 138 | } 139 | 140 | void OLED_SSD1306::DisplayOFF(void) { 141 | SendCommand( 0xAE ); // Set Display Off 142 | } 143 | 144 | void OLED_SSD1306::Init(void) { 145 | 146 | SendCommand( 0xAE ); // Set Display Off 147 | 148 | SendCommand( 0xA8 ); // Set Multiplex Ratio 149 | SendCommand( 0x3F ); 150 | 151 | SendCommand( 0xD3 ); // Set Display Offset 152 | SendCommand( 0x00 ); // no offset 153 | 154 | SendCommand( 0x40 ); // Set Display Start Line 155 | 156 | SendCommand( 0xA1 ); // Set Segment Re-Map 157 | 158 | SendCommand( 0xC8 ); // Set COM Output Scan Direction 159 | 160 | SendCommand( 0xDA ); // Set COM Pins Hardware Configuration 161 | SendCommand( 0x12 ); 162 | 163 | SendCommand( 0x81 ); // Set Contrast Control 164 | SendCommand( 0x7F ); 165 | 166 | SendCommand( 0xA4 ); // Set Entire Display On/Off 167 | 168 | SendCommand( 0xA6 ); // Set Normal/Inverse Display 169 | 170 | SendCommand( 0xD9 ); // Set Pre-Charge Period 171 | SendCommand( 0xF1 ); // internal 172 | 173 | SendCommand( 0xDB ); // Set VCOMH Deselect Level 174 | SendCommand( 0x40 ); 175 | 176 | SendCommand( 0xD5 ); // Set Display Clock Divide Ratio\Oscilator Frequency 177 | SendCommand( 0x80 ); // the suggested ratio 0x80 178 | 179 | SendCommand( 0x8D ); // Set Charge Pump 180 | SendCommand( 0x14 ); // Vcc internal 181 | 182 | SendCommand( 0x00 + low_col_offset ); // Set Lower Column Start Address 183 | 184 | SendCommand( 0x10 ); // Set Higher Column Start Address 185 | 186 | SendCommand( 0xB0 ); // Set Page Start Address for Page Addressing Mode 187 | 188 | // 00 - Horizontal Addressing Mode 189 | // 01 - Vertical Addressing Mode 190 | // 02 - Page Addressing Mode 191 | SendCommand( 0x20 ); // Set Memory Addressing Mode 192 | SendCommand( 0x00 ); 193 | 194 | SendCommand( 0x21 ); // Set Column Address (only for horizontal or vertical mode) 195 | SendCommand( 0x00 ); 196 | SendCommand( 0x7F ); 197 | 198 | SendCommand( 0x22 ); // Set Page Address 199 | SendCommand( 0x00 ); 200 | SendCommand( 0x07 ); 201 | 202 | SendCommand( 0x2E ); // Deactivate Scroll 203 | 204 | SendCommand( 0xAF ); // Set Display On 205 | 206 | } 207 | -------------------------------------------------------------------------------- /OLED_SSD1306/OLED_SSD1306.h: -------------------------------------------------------------------------------- 1 | /* 2 | * OLED_SSD1306.h - I2C 128x64 OLED Driver Library 3 | * 4 | * This library is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU Lesser General Public 6 | * License as published by the Free Software Foundation; either 7 | * version 2.1 of the License, or (at your option) any later version. 8 | * 9 | * This library is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * Lesser General Public License for more details. 13 | * 14 | * Copyright (c) 2015. Mario Mikočević 15 | * 16 | */ 17 | 18 | #ifndef OLED_SSD1306_H 19 | #define OLED_SSD1306_H 20 | 21 | class OLED_SSD1306 { 22 | 23 | private: 24 | 25 | uint8_t localI2CAddress; 26 | uint8_t low_col_offset; 27 | 28 | public: 29 | 30 | OLED_SSD1306( uint8_t i2caddr ); 31 | OLED_SSD1306( uint8_t i2caddr, uint8_t offset ); 32 | 33 | void Init( void ); 34 | 35 | void SendCommand( unsigned char Command ); 36 | void SendChar( unsigned char Data ); 37 | 38 | void SendStrXY( const char *string, int X, int Y ); 39 | void SetCursorXY( unsigned char row, unsigned char col ); 40 | void DisplayON( void ); 41 | void DisplayOFF( void ); 42 | void DisplayInverse( void ); 43 | void DisplayNormal( void ); 44 | void BlinkON( void ); 45 | void BlinkOFF( void ); 46 | void ClearDisplay( void ); 47 | 48 | void DisplayFlipON( void ); 49 | void DisplayFlipOFF( void ); 50 | 51 | void ScrollRight( unsigned char start, unsigned char end, unsigned char speed ); 52 | void ScrollStop( void ); 53 | 54 | }; 55 | 56 | #endif 57 | -------------------------------------------------------------------------------- /OLED_SSD1306/README.md: -------------------------------------------------------------------------------- 1 | My take on SSD1306 library, 2 | works with 0.96" and 1.3" OLEDs 3 | 4 | example -> 5 | 6 | ``` c++ 7 | #define OLED_ADDRESS 0x3C 8 | OLED_SSD1306 oled( OLED_ADDRESS ); 9 | 10 | void setup() { 11 | Serial.println("OLED Init..."); 12 | Wire.begin( SDA_pin, SCL_pin ); 13 | oled.Init(); 14 | } 15 | void loop() { 16 | oled.ClearDisplay(); 17 | oled.SendStrXY( "Hello World!", 3, 0 ); 18 | } 19 | ``` 20 | 21 | for SH1106 OLEDs (like some 1.3" ones from ebay) change to 22 | ``` c++ 23 | #define OLED_ADDRESS 0x3C 24 | #define SH1106_LC_OFFSET 2 25 | OLED_SSD1306 oled( OLED_ADDRESS, SH1106_LC_OFFSET ); 26 | ``` 27 | 28 | -- 29 | Mozz 30 | -------------------------------------------------------------------------------- /OLED_SSD1306/font.h: -------------------------------------------------------------------------------- 1 | // CREDITS TO MIKE RANKIN 2 | // ADAPTED DANBICKS 3 | 4 | const char myFont[][8] PROGMEM = { 5 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 6 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, 7 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, 8 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, 9 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, 10 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, 11 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, 12 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, 13 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, 14 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, 15 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, 16 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, 17 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, 18 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, 19 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, 20 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, 21 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, 22 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, 23 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, 24 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, 25 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, 26 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, 27 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, 28 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, 29 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, 30 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, 31 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, 32 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, 33 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, 34 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, 35 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, 36 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, 37 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, 38 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, 39 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, 40 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, 41 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, 42 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, 43 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, 44 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, 45 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, 46 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, 47 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, 48 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, 49 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, 50 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, 51 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, 52 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, 53 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, 54 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, 55 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, 56 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, 57 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, 58 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, 59 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, 60 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, 61 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, 62 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, 63 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, 64 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, 65 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, 66 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, 67 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, 68 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, 69 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, 70 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, 71 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, 72 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, 73 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, 74 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, 75 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, 76 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, 77 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, 78 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, 79 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, 80 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, 81 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, 82 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, 83 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, 84 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, 85 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, 86 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, 87 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, 88 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, 89 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, 90 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, 91 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, 92 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, 93 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, 94 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, 95 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, 96 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, 97 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, 98 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, 99 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, 100 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} 101 | }; 102 | 103 | 104 | const char WIFI1[] PROGMEM = { 105 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 108 | 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 109 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 110 | 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 114 | 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 115 | 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 116 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 117 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 118 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 119 | 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 120 | 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121 | 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 122 | 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 123 | 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 124 | 0xFF, 0xFF, 0x3F, 0x3F, 0x1F, 0x1F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 125 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x03, 0xC3, 0xC1, 0xC1, 0xC0, 126 | 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 127 | 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE1, 0xC1, 0x03, 128 | 0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x3E, 0x7E, 0xF8, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 129 | 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 130 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3F, 0xFF, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 131 | 0x00, 0x00, 0x03, 0x3F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0xFF, 132 | 0xFF, 0xFF, 0x0E, 0x0E, 0x0C, 0x0C, 0x0E, 0x0E, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 133 | 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 134 | 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 135 | 0x87, 0x87, 0x87, 0x07, 0x00, 0x00, 0x00, 0x09, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x00, 136 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 137 | 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 138 | 0xFF, 0xFF, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xFF, 0xFF, 0xF0, 139 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 140 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 141 | 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 142 | 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 143 | 0x0F, 0x0F, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 144 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 145 | 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 146 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 147 | 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 148 | 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 149 | 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 150 | 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x80, 152 | 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0x7F, 0x3F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 154 | 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 155 | 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 156 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 157 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 158 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x7E, 0x7E, 0x3E, 0x1E, 159 | 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x07, 160 | 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 161 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 162 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 164 | 0x0F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 165 | 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F, 166 | 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 169 | }; 170 | 171 | 172 | const char locked[] PROGMEM = { 173 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 174 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 175 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 176 | 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 177 | 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 178 | 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 179 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 180 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 181 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 | 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 184 | 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 185 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 186 | 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 187 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 188 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 | 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 194 | 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 | 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 199 | 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 200 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 201 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 202 | 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 203 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 206 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 207 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 208 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 209 | 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 210 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 211 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 212 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 213 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 214 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 215 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 216 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 217 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 218 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 219 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 220 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 221 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 222 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 223 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 224 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 225 | 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 226 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 227 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 228 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 229 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 230 | 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 231 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 232 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 233 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 234 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 235 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 236 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 237 | }; 238 | 239 | 240 | const char rfwaves[] PROGMEM = { 241 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 242 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 243 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 244 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 247 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 248 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 249 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 250 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 251 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 252 | 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 253 | 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 254 | 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 255 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 256 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 257 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 258 | 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 259 | 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 260 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 261 | 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 262 | 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 263 | 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xE0, 264 | 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 265 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 266 | 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x80, 0x80, 0x80, 0xC0, 0xC0, 267 | 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 268 | 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 269 | 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 270 | 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 271 | 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 272 | 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 274 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 275 | 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x81, 0x81, 0x80, 276 | 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 277 | 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 278 | 0x80, 0x80, 0x81, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F, 279 | 0x1F, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 280 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 281 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 282 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 283 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 284 | 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 285 | 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 286 | 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 287 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 288 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 289 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 290 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 292 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x0E, 0x0E, 0x0E, 0x1E, 0x1E, 0x3F, 293 | 0x3F, 0x3E, 0x1E, 0x1E, 0x0E, 0x0E, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 294 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 295 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 296 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 297 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 298 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 299 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 300 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 301 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 302 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 303 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 304 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 305 | }; 306 | 307 | /* Standard ASCII 6x8 font 308 | const char PROGMEM font6x8[] = { 309 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp 310 | 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! 311 | 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " 312 | 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # 313 | 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ 314 | 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % 315 | 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & 316 | 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' 317 | 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( 318 | 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) 319 | 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * 320 | 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + 321 | 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , 322 | 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - 323 | 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . 324 | 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / 325 | 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 326 | 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 327 | 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 328 | 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 329 | 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 330 | 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 331 | 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 332 | 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 333 | 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 334 | 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 335 | 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : 336 | 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; 337 | 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < 338 | 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = 339 | 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > 340 | 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? 341 | 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ 342 | 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A 343 | 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B 344 | 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C 345 | 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 346 | 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E 347 | 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F 348 | 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G 349 | 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 350 | 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I 351 | 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J 352 | 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K 353 | 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L 354 | 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M 355 | 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 356 | 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 357 | 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P 358 | 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 359 | 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R 360 | 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S 361 | 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T 362 | 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 363 | 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 364 | 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W 365 | 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X 366 | 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y 367 | 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z 368 | 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ 369 | 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 370 | 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] 371 | 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 372 | 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ 373 | 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' 374 | 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a 375 | 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b 376 | 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c 377 | 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d 378 | 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e 379 | 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f 380 | 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g 381 | 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h 382 | 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i 383 | 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j 384 | 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k 385 | 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l 386 | 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m 387 | 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n 388 | 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o 389 | 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p 390 | 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q 391 | 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r 392 | 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s 393 | 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t 394 | 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 395 | 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 396 | 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 397 | 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x 398 | 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y 399 | 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z 400 | 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines 401 | }; 402 | */ 403 | 404 | /* Standard ASCII 8x16 font */ 405 | const char PROGMEM font8X16[] ={ 406 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 407 | 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 408 | 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 409 | 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 410 | 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 411 | 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 412 | 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 413 | 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 414 | 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 415 | 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 416 | 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 417 | 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 418 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 419 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 420 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 421 | 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 422 | 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 423 | 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 424 | 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 425 | 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 426 | 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 427 | 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 428 | 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 429 | 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 430 | 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 431 | 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 432 | 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 433 | 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 434 | 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 435 | 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 436 | 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 437 | 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 438 | 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 439 | 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 440 | 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 441 | 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 442 | 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 443 | 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 444 | 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 445 | 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 446 | 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 447 | 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 448 | 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 449 | 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 450 | 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 451 | 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 452 | 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 453 | 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 454 | 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 455 | 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 456 | 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 457 | 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 458 | 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 459 | 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 460 | 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 461 | 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 462 | 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 463 | 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 464 | 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 465 | 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 466 | 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 467 | 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 468 | 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 469 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 470 | 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 471 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 472 | 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 473 | 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 474 | 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 475 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 476 | 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 477 | 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 478 | 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 479 | 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 480 | 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 481 | 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 482 | 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 483 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 484 | 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 485 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 486 | 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 487 | 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 488 | 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 489 | 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 490 | 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 491 | 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 492 | 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 493 | 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 494 | 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 495 | 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 496 | 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 497 | 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 498 | 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 499 | 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 500 | 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 501 | }; 502 | -------------------------------------------------------------------------------- /OpenWeatherMap_OLED/OpenWeatherMap_OLED.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * OpenWeather 3 | * 4 | * The MIT License (MIT) 5 | * 6 | * Copyright (c) 2015. Mario Mikočević 7 | * 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy 9 | * of this software and associated documentation files (the "Software"), to deal 10 | * in the Software without restriction, including without limitation the rights 11 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | * copies of the Software, and to permit persons to whom the Software is 13 | * furnished to do so, subject to the following conditions: 14 | * The above copyright notice and this permission notice shall be included in all 15 | * copies or substantial portions of the Software. 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | * 24 | */ 25 | 26 | // Serial printing ON/OFF 27 | #include "Arduino.h" 28 | #define DEBUG true 29 | #define Serial if(DEBUG)Serial 30 | 31 | ADC_MODE(ADC_VCC); 32 | 33 | #include 34 | #include 35 | #include 36 | 37 | #include 38 | #define REALDATA 39 | // #undef REALDATA 40 | // #define HTTPDEBUG 41 | #undef HTTPDEBUG 42 | char httpJson[1200] = ""; 43 | 44 | #include 45 | // #include 46 | #include "font.h" 47 | 48 | /* 49 | * SSD1306 - 0.96" 128x64 50 | * SH1106 - 1.3" 132x64 51 | */ 52 | 53 | //// HW SPI pins 54 | // #define SDA_pin 13 55 | // #define SCL_pin 14 56 | // I2C pins 57 | // #define SDA_pin 4 58 | // #define SCL_pin 5 59 | //// ESP-01 pins 60 | #define SDA_pin 0 61 | #define SCL_pin 2 62 | 63 | #define OLED_ADDRESS 0x3C 64 | // #define OLED_ADDRESS 0x78 65 | #define SCROLL_WORKS 66 | // #undef SCROLL_WORKS 67 | 68 | // 0.96" OLED 69 | // OLED_SSD1306 oled( OLED_ADDRESS ); 70 | 71 | // 1.3" OLED 72 | // #define SH1106_LC_OFFSET 2 73 | // OLED_SSD1306 oled( OLED_ADDRESS, SH1106_LC_OFFSET ); 74 | 75 | const char* ssid = "MozzWiFi"; 76 | const char* pass = "x"; 77 | const char* host = "mozgy.t-com.hr"; 78 | 79 | const char* urlHost = "api.openweathermap.org"; 80 | String urlCall = ""; 81 | 82 | unsigned long foo; 83 | char tmpstr[20]; 84 | 85 | extern "C" { 86 | #include "user_interface.h" 87 | } 88 | 89 | void setup() { 90 | 91 | Serial.begin(115200); 92 | Serial.setDebugOutput(true); 93 | 94 | // print out all system information 95 | Serial.println(); 96 | Serial.print("Heap: "); Serial.println(system_get_free_heap_size()); 97 | Serial.print("Boot Vers: "); Serial.println(system_get_boot_version()); 98 | Serial.print("CPU: "); Serial.println(system_get_cpu_freq()); 99 | Serial.print("ChipID: "); Serial.println(ESP.getChipId()); 100 | Serial.print("SDK: "); Serial.println(system_get_sdk_version()); 101 | Serial.print("Vcc: "); Serial.println(ESP.getVcc()); 102 | Serial.println(); 103 | 104 | // Wire.begin( SDA_pin, SCL_pin ); 105 | // Wire.setClock( 400000 ); 106 | 107 | // Serial.println("OLED Init..."); 108 | // oled.Init(); 109 | // oled.DisplayFlipON(); 110 | 111 | initWiFi(); 112 | setupURL(); 113 | 114 | 115 | Serial.println("Setup done"); 116 | 117 | foo = 0; 118 | 119 | } 120 | 121 | void loop() { 122 | 123 | unsigned long sec; 124 | char tmpstr2[10]; 125 | boolean someflag; 126 | 127 | if( foo == 0 ) { 128 | 129 | someflag = getOpenWeatherMapData(); 130 | if( someflag ) { 131 | someflag = parseOpenWeatherMapJSON(); 132 | } 133 | if( !someflag ) { 134 | Serial.println( "Parsing went wrong !" ); 135 | } 136 | 137 | Serial.println(); 138 | Serial.print( "Time elapsed so far: " ); 139 | Serial.print( millis() / 1000 ); 140 | Serial.println( "sec." ); 141 | delay(10); 142 | } 143 | delay(6); 144 | foo++; 145 | // 10 delay + 100000 -> 1000sec 146 | if( foo > 100000 ) { 147 | foo = 0; 148 | } 149 | 150 | } 151 | 152 | boolean getOpenWeatherMapData(void) { 153 | 154 | uint16_t json_len, http_len; 155 | WiFiClient client; 156 | 157 | #ifdef REALDATA 158 | Serial.println("Fetching DATA"); 159 | if( client.connect( urlHost, 80 ) ) { 160 | client.println( urlCall ); 161 | } 162 | #else 163 | // TODO - check for overflow 164 | httpJson[] = "{\ 165 | \"coord\":{\"lon\":16.38,\"lat\":45.47},\ 166 | \"weather\":[{\"id\":800,\"main\":\"Clear\",\"description\":\"Sky is Clear\",\"icon\":\"01d\"}],\ 167 | \"base\":\"stations\",\ 168 | \"main\":{\"temp\":301.21,\"pressure\":1016,\"humidity\":38,\"temp_min\":297.15,\"temp_max\":306.15},\ 169 | \"id\":3190813,\"name\":\"Sisak\",\"cod\":200}"; 170 | #endif 171 | #ifdef HTTPDEBUG 172 | Serial.println(urlHost); 173 | Serial.println(urlCall); 174 | #endif 175 | 176 | String httpResponse; 177 | 178 | #ifdef REALDATA 179 | while( client.available() ) { 180 | String line; 181 | line = client.readStringUntil('\r'); 182 | httpResponse += line; 183 | if( line.charAt(1) == '{' ) { 184 | unsigned int lnlen = line.length(); 185 | line.toCharArray( httpJson, lnlen ); 186 | #ifdef HTTPDEBUG 187 | Serial.println(line); 188 | Serial.print("JSON LEN : "); 189 | Serial.println(lnlen); 190 | Serial.println(httpJson); 191 | #endif 192 | json_len = lnlen; 193 | } 194 | } 195 | http_len = httpResponse.length(); 196 | #ifdef HTTPDEBUG 197 | Serial.println(); 198 | Serial.print(httpResponse); 199 | Serial.print("HTTP LEN : "); 200 | Serial.println(http_len); 201 | #endif 202 | #endif 203 | 204 | client.stop(); 205 | 206 | if( http_len == 0 ) { 207 | Serial.println("NO http data !"); 208 | return false; 209 | } 210 | if( json_len == 0 ) { 211 | Serial.println("Something went wrong with Jason !"); 212 | return false; 213 | } 214 | return true; 215 | } 216 | 217 | boolean parseOpenWeatherMapJSON(void) { 218 | 219 | double KelvinScale = -273.15; 220 | 221 | StaticJsonBuffer<2047> jsonBuffer; 222 | JsonObject &HttpData = jsonBuffer.parseObject( httpJson ); 223 | 224 | if ( !HttpData.success() ) { 225 | Serial.println("parsing failed"); 226 | return false; 227 | } 228 | 229 | JsonObject &CoordData = HttpData["coord"]; 230 | JsonArray &WeatherData = HttpData["weather"]; 231 | JsonObject &MainData = HttpData["main"]; 232 | JsonObject &SysData = HttpData["sys"]; 233 | 234 | const char* CityBase = HttpData["base"]; 235 | const char* CityName = HttpData["name"]; 236 | unsigned long CityId = HttpData["id"]; 237 | // const char* CityWeather = WeatherData["description"][2]; 238 | double CityLon = CoordData["lon"]; 239 | double CityLat = CoordData["lat"]; 240 | unsigned long CitySunrise = SysData["sunrise"]; 241 | unsigned long CitySunset = SysData["sunset"]; 242 | double CityTemp = MainData["temp"]; 243 | CityTemp += KelvinScale; 244 | unsigned int CityPressure = MainData["pressure"]; 245 | unsigned int CityHumidity = MainData["humidity"]; 246 | double CityTempMin = MainData["temp_min"]; 247 | CityTempMin += KelvinScale; 248 | double CityTempMax = MainData["temp_max"]; 249 | CityTempMax += KelvinScale; 250 | 251 | Serial.print("Buffer - "); 252 | Serial.print(jsonBuffer.size()); 253 | Serial.print(" , JSON Length - "); 254 | Serial.print(HttpData.measureLength()); 255 | Serial.print(" , JSON Size - "); 256 | Serial.println(HttpData.size()); 257 | Serial.print("- "); 258 | Serial.println(CityBase); 259 | Serial.print("- "); 260 | Serial.print(CityName); 261 | Serial.print(", "); 262 | Serial.print(CityId); 263 | Serial.print(" - ["); 264 | Serial.print(CityLon); 265 | Serial.print(", "); 266 | Serial.print(CityLat); 267 | Serial.println("]"); 268 | Serial.print("- "); 269 | Serial.print(CitySunrise); 270 | Serial.print(" - "); 271 | Serial.println(CitySunset); 272 | // Serial.print("- "); 273 | // Serial.println(WeatherData.prinTo()); 274 | Serial.print("- "); 275 | Serial.print(CityTemp); 276 | Serial.print("C ["); 277 | Serial.print(CityTempMin); 278 | Serial.print("-"); 279 | Serial.print(CityTempMax); 280 | Serial.println("]"); 281 | Serial.print("- "); 282 | Serial.print(CityPressure); 283 | Serial.println(" hPa"); 284 | Serial.print("- "); 285 | Serial.print(CityHumidity); 286 | Serial.println(" %"); 287 | 288 | return true; 289 | 290 | } 291 | 292 | void setupURL(void) { 293 | 294 | // api.openweathermap.org/data/2.5/forecast?id={city ID} 295 | 296 | urlCall = "GET "; 297 | // urlCall += "/data/2.5/forecast"; 298 | urlCall += "/data/2.5/weather"; 299 | urlCall += "?id=3190813"; // Sisak,HR 300 | // urlCall += "&units=metric"; // SI notation 301 | urlCall += "&APPID=y"; // Mozz's API key 302 | 303 | urlCall += " HTTP/1.1\r\n"; 304 | urlCall += "Host: "; 305 | urlCall += host; 306 | urlCall += "\r\n"; 307 | urlCall += "Connection: close\r\n"; 308 | urlCall += "Accept: */*\r\n"; 309 | urlCall += "User-Agent: Mozilla/4.0 (compatible; esp8266 Arduino IDE; Windows NT 5.1)\r\n"; 310 | urlCall += "\r\n"; 311 | 312 | 313 | } 314 | 315 | void initWiFi(void) { 316 | 317 | uint8_t WiFiCounter = 0; 318 | 319 | Serial.print( "Connecting to " ); 320 | Serial.println( ssid ); 321 | // WiFi.mode( WIFI_STA ); 322 | WiFi.begin( ssid, pass ); 323 | 324 | while ( WiFiCounter < 30 ) { // 15 sec 325 | if( WiFi.status() == WL_CONNECTED ) break; 326 | if( WiFi.status() == WL_CONNECT_FAILED ) break; 327 | delay(500); 328 | WiFiCounter++; 329 | Serial.print( "." ); 330 | } 331 | Serial.println( "" ); 332 | if( WiFiCounter == 30 ) { 333 | Serial.print("Could not connect to "); 334 | Serial.println( ssid ); 335 | while(1) delay(1000); // fire up wdt reset; 336 | // ESP.restart(); 337 | } 338 | 339 | Serial.println( "WiFi connected" ); 340 | Serial.print( "IP address: " ); 341 | Serial.println( WiFi.localIP() ); 342 | 343 | } 344 | 345 | void ElapsedStr( char *str ) { 346 | 347 | unsigned long sec, minute, hour; 348 | 349 | sec = millis() / 1000; 350 | minute = ( sec % 3600 ) / 60; 351 | hour = sec / 3600; 352 | sprintf( str, "Elapsed " ); 353 | if ( hour == 0 ) { 354 | sprintf( str, "%s ", str ); 355 | } else { 356 | sprintf( str, "%s%2d:", str, hour ); 357 | } 358 | if ( minute >= 10 ) { 359 | sprintf( str, "%s%2d:", str, minute ); 360 | } else { 361 | if ( hour != 0 ) { 362 | sprintf( str, "%s0%1d:", str, minute ); 363 | } else { 364 | sprintf( str, "%s ", str ); 365 | if ( minute == 0 ) { 366 | sprintf( str, "%s ", str ); 367 | } else { 368 | sprintf( str, "%s%1d:", str, minute ); 369 | } 370 | } 371 | } 372 | if ( ( sec % 60 ) < 10 ) { 373 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 374 | } else { 375 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 376 | } 377 | 378 | } 379 | 380 | /* 381 | oled.ClearDisplay(); 382 | // oled.SendStrXY( "Start-up .... ", 0, 1 ); 383 | sprintf( tmpstr, "ChipID %9d", ESP.getChipId() ); 384 | oled.SendStrXY( tmpstr, 1, 0 ); 385 | // sprintf( tmpstr, "FlashID %06X", ESP.getFlashChipId() ); 386 | sprintf( tmpstr, "SDK %12s", ESP.getSdkVersion() ); 387 | oled.SendStrXY( tmpstr, 2, 0 ); 388 | sprintf( tmpstr, "Flash %8dkB", ESP.getFlashChipSize() / 1024 ); 389 | oled.SendStrXY( tmpstr, 3, 0 ); 390 | // sprintf( tmpstr, "Vcc %d", ESP.getVcc() ); 391 | // Vdd = (float)ESP.getVcc() / 1000.0; 392 | Vdd = (float)readvdd33() / 1000.0; 393 | dtostrf( Vdd, 6, 3, tmpstr2 ); 394 | sprintf( tmpstr, "Vcc %12s", tmpstr2 ); 395 | oled.SendStrXY( tmpstr, 5, 0 ); 396 | ElapsedStr( tmpstr ); // form str with hh:mm:ss 397 | oled.SendStrXY( tmpstr, 6, 0 ); 398 | delay(10000); 399 | */ 400 | -------------------------------------------------------------------------------- /PIR_Neopixel/PIR_Neopixel.ino: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern "C" { 5 | #include "user_interface.h" 6 | } 7 | 8 | #define NeoPixelCount 8 9 | #define NeoPixelPin 0 10 | NeoPixelBus strip = NeoPixelBus( NeoPixelCount, NeoPixelPin ); 11 | 12 | int led = 13; // the pin that the LED is atteched to 13 | int sensor = 2; // the pin that the sensor is atteched to 14 | int state = LOW; // by default, no motion detected 15 | int val = 0; // variable to store the sensor status (value) 16 | 17 | uint16_t c; 18 | 19 | 20 | void setup(void) { 21 | 22 | Serial.begin( 115200 ); 23 | delay(100); 24 | // print out all system information 25 | Serial.println(); 26 | Serial.print( "Heap: " ); 27 | Serial.println( system_get_free_heap_size() ); 28 | Serial.print( "Boot Vers: " ); 29 | Serial.println( system_get_boot_version() ); 30 | Serial.print( "CPU: " ); 31 | Serial.println( system_get_cpu_freq() ); 32 | Serial.print( "ChipID: " ); 33 | Serial.println( ESP.getChipId() ); 34 | Serial.println(); 35 | 36 | strip.Begin(); 37 | strip.Show(); 38 | c = 0; 39 | 40 | // pinMode( led, OUTPUT ); // initalize LED as an output 41 | pinMode( sensor, INPUT ); // initialize sensor as an input 42 | Serial.println( "Setup done" ); 43 | 44 | } 45 | 46 | void loop(void) { 47 | 48 | strip.SetPixelColor( 0, RgbColor( 0, 0, c ) ); 49 | strip.Show(); 50 | 51 | val = digitalRead( sensor ); // read sensor value 52 | delay(100); 53 | if ( val == HIGH ) { // check if the sensor is HIGH 54 | // digitalWrite( led, HIGH ); // turn LED ON 55 | delay(100); 56 | 57 | if ( state == LOW ) { 58 | Serial.println("Motion detected!"); 59 | state = HIGH; // update variable state to HIGH 60 | strip.SetPixelColor( 1, RgbColor( 128, 0, 0 ) ); // Red 61 | strip.SetPixelColor( 2, RgbColor( 128, 0, 0 ) ); // Red 62 | strip.SetPixelColor( 3, RgbColor( 128, 0, 0 ) ); // Red 63 | strip.SetPixelColor( 4, RgbColor( 128, 0, 0 ) ); // Red 64 | strip.SetPixelColor( 5, RgbColor( 128, 0, 0 ) ); // Red 65 | strip.SetPixelColor( 6, RgbColor( 128, 0, 0 ) ); // Red 66 | strip.SetPixelColor( 7, RgbColor( 128, 0, 0 ) ); // Red 67 | strip.Show(); 68 | } 69 | } else { 70 | // digitalWrite( led, LOW ); // turn LED OFF 71 | delay(100); 72 | 73 | if ( state == HIGH ) { 74 | Serial.println( "Motion stopped!" ); 75 | state = LOW; // update variable state to LOW 76 | strip.SetPixelColor( 1, RgbColor( 0, 128, 0 ) ); // Green 77 | strip.SetPixelColor( 2, RgbColor( 0, 128, 0 ) ); // Green 78 | strip.SetPixelColor( 3, RgbColor( 0, 128, 0 ) ); // Green 79 | strip.SetPixelColor( 4, RgbColor( 0, 128, 0 ) ); // Green 80 | strip.SetPixelColor( 5, RgbColor( 0, 128, 0 ) ); // Green 81 | strip.SetPixelColor( 6, RgbColor( 0, 128, 0 ) ); // Green 82 | strip.SetPixelColor( 7, RgbColor( 0, 128, 0 ) ); // Green 83 | strip.Show(); 84 | } 85 | } 86 | 87 | c = c + 3; 88 | c = c % 128; 89 | 90 | // Serial.println( "Loop!" ); 91 | delay(500); 92 | 93 | } 94 | -------------------------------------------------------------------------------- /PIR_Neopixel/README.md: -------------------------------------------------------------------------------- 1 | Having fun with Adafruit Neopixel 8 LED strip and motion sensor, 2 | it actualy works on ESP-01 :) 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp8266 2 | ESP8266 stuff 3 | 4 | Useful reading -> http://www.esp8266.com/index.php. 5 | -------------------------------------------------------------------------------- /WiFi_DHT/Mozz_WiFi_DHT.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2015. Mario Mikočević 4 | * 5 | * MIT Licence 6 | * 7 | */ 8 | 9 | // Serial printing ON/OFF 10 | #include "Arduino.h" 11 | #define DEBUG true 12 | #define Serial if(DEBUG)Serial 13 | #define DEBUG_OUTPUT Serial 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | ADC_MODE(ADC_VCC); 21 | 22 | #include 23 | Ticker tickerDHTScan; 24 | #define WAITTIME 600 25 | boolean tickerFired; 26 | 27 | #include "DHT.h" 28 | #define DHTPIN 2 29 | // Uncomment whatever type you're using! 30 | #define DHTTYPE DHT11 // DHT 11 31 | //#define DHTTYPE DHT22 // DHT 22 (AM2302) 32 | //#define DHTTYPE DHT21 // DHT 21 (AM2301) 33 | 34 | DHT dht(DHTPIN, DHTTYPE); 35 | 36 | const char* ssid = "xx"; 37 | const char* pass = "yy"; 38 | const char* host = "foo.bar"; 39 | const char* urlHost = "192.168.4.101"; 40 | 41 | // const char* sensorLocation = "Room"; 42 | // const char* sensorLocation = "Attic"; 43 | // const char* sensorLocation = "LiFePO4Test"; 44 | const char* sensorLocation = "OTATest"; 45 | 46 | char tmpstr[40]; 47 | 48 | void flagDHTScan( void ) { 49 | tickerFired = true; 50 | } 51 | 52 | void initWiFi(void) { 53 | 54 | Serial.print( "Connecting to " ); 55 | Serial.println( ssid ); 56 | WiFi.mode( WIFI_STA ); 57 | WiFi.begin( ); 58 | while ( WiFi.waitForConnectResult() != WL_CONNECTED ){ 59 | WiFi.begin( ssid, pass ); 60 | Serial.println("Retrying connection..."); 61 | // Serial.println("Connection Failed! Rebooting..."); 62 | // delay(5000); 63 | // ESP.restart(); 64 | } 65 | Serial.println( "WiFi connected" ); 66 | Serial.print( "IP address: " ); 67 | Serial.println( WiFi.localIP() ); 68 | 69 | } 70 | 71 | void ElapsedStr( char *str ) { 72 | 73 | unsigned long sec, minute, hour; 74 | 75 | sec = millis() / 1000; 76 | minute = ( sec % 3600 ) / 60; 77 | hour = sec / 3600; 78 | sprintf( str, "Elapsed " ); 79 | if ( hour == 0 ) { 80 | sprintf( str, "%s ", str ); 81 | } else { 82 | sprintf( str, "%s%2d:", str, hour ); 83 | } 84 | if ( minute >= 10 ) { 85 | sprintf( str, "%s%2d:", str, minute ); 86 | } else { 87 | if ( hour != 0 ) { 88 | sprintf( str, "%s0%1d:", str, minute ); 89 | } else { 90 | sprintf( str, "%s ", str ); 91 | if ( minute == 0 ) { 92 | sprintf( str, "%s ", str ); 93 | } else { 94 | sprintf( str, "%s%1d:", str, minute ); 95 | } 96 | } 97 | } 98 | if ( ( sec % 60 ) < 10 ) { 99 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 100 | } else { 101 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 102 | } 103 | 104 | } 105 | 106 | void sendSensorData( const char *id, float hum, float temp ) { 107 | 108 | WiFiClient client; 109 | int mV = ESP.getVcc(); 110 | 111 | initWiFi(); 112 | 113 | client.stop(); 114 | uint8_t i = 0; 115 | while( !client.connect( urlHost, 80 ) && i++ < 50 ) { 116 | Serial.println( "Cannot connect!" ); 117 | delay(500); 118 | } 119 | 120 | String WiFiString = "GET /room/insertdata.php?hash=test&s="; 121 | WiFiString += id; 122 | WiFiString += "&h="; 123 | WiFiString += hum; 124 | WiFiString += "&t="; 125 | WiFiString += temp; 126 | WiFiString += "&vcc="; 127 | WiFiString += mV; 128 | WiFiString += " HTTP/1.1\r\n"; 129 | WiFiString += "Host: "; 130 | WiFiString += host; 131 | WiFiString += "\r\n"; 132 | WiFiString += "Connection: close\r\n"; 133 | WiFiString += "\r\n"; 134 | 135 | Serial.println( WiFiString ); 136 | client.println( WiFiString ); 137 | 138 | /* 139 | char charBuf[200]; 140 | WiFiString.toCharArray( charBuf, 200 ); 141 | wifi.send(1, (const uint8_t*)charBuf, 200); 142 | */ 143 | 144 | client.stop(); 145 | 146 | } 147 | 148 | boolean doSomethingWithDHT( void ) { 149 | 150 | float h = dht.readHumidity(); 151 | float t = dht.readTemperature(); 152 | if ( isnan(h) || isnan(t) ) { 153 | // Serial.println( "Failed to read from DHT sensor!" ); 154 | Serial.print("."); 155 | delay(10); 156 | return false; 157 | } 158 | 159 | Serial.print("Humidity: "); 160 | Serial.print(h); 161 | Serial.print(" %\t"); 162 | Serial.print("Temperature: "); 163 | Serial.print(t); 164 | Serial.print(" *C "); 165 | Serial.println(); 166 | 167 | sendSensorData( sensorLocation, h, t ); 168 | 169 | return true; 170 | } 171 | 172 | void setup() { 173 | 174 | Serial.begin(115200); 175 | Serial.println( "Booting" ); 176 | Serial.println(); 177 | Serial.printf( "Sketch size: %u\n", ESP.getSketchSize() ); 178 | Serial.printf( "Free size: %u\n", ESP.getFreeSketchSpace() ); 179 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 180 | Serial.printf( "Boot Vers: %u\n", ESP.getBootVersion() ); 181 | Serial.printf( "CPU: %uMHz\n", ESP.getCpuFreqMHz() ); 182 | Serial.printf( "SDK: %u\n", ESP.getSdkVersion() ); 183 | Serial.printf( "Chip ID: %u\n", ESP.getChipId() ); 184 | Serial.printf( "Flash ID: %u\n", ESP.getFlashChipId() ); 185 | Serial.printf( "Flash Size: %u\n", ESP.getFlashChipRealSize() ); 186 | Serial.printf( "Vcc: %u\n", ESP.getVcc() ); 187 | Serial.println(); 188 | 189 | initWiFi(); 190 | 191 | // Port defaults to 8266 192 | // ArduinoOTA.setPort(8266); 193 | 194 | // Hostname defaults to esp8266-[ChipID] 195 | // ArduinoOTA.setHostname("some-esp"); 196 | 197 | // No authentication by default 198 | // ArduinoOTA.setPassword((const char *)"123"); 199 | 200 | ArduinoOTA.onStart([]() { 201 | Serial.println("Start"); 202 | }); 203 | ArduinoOTA.onEnd([]() { 204 | Serial.println("End"); 205 | }); 206 | ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { 207 | Serial.printf("Progress: %u%%\n", (progress / (total / 100))); 208 | }); 209 | ArduinoOTA.onError([](ota_error_t error) { 210 | Serial.printf("Error[%u]: ", error); 211 | if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); 212 | else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); 213 | else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); 214 | else if (error == OTA_RECIEVE_ERROR) Serial.println("Receive Failed"); 215 | else if (error == OTA_END_ERROR) Serial.println("End Failed"); 216 | }); 217 | ArduinoOTA.begin(); 218 | 219 | dht.begin(); 220 | 221 | tickerDHTScan.attach( WAITTIME, flagDHTScan ); 222 | tickerFired = true; 223 | 224 | Serial.println("Ready"); 225 | Serial.print("IP address: "); 226 | Serial.println(WiFi.localIP()); 227 | } 228 | 229 | void loop() { 230 | 231 | ArduinoOTA.handle(); 232 | 233 | if( tickerFired ) { 234 | tickerFired = false; 235 | while( ! doSomethingWithDHT() ); 236 | 237 | ElapsedStr( tmpstr ); 238 | Serial.println( tmpstr ); 239 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 240 | } 241 | 242 | } 243 | -------------------------------------------------------------------------------- /WiFi_DHT/README.md: -------------------------------------------------------------------------------- 1 | Sensor reading and posting data on web page. 2 | 3 | Fully functional OTA. 4 | 5 | Required - 6 | - Arduino IDE 1.6.7 with igrr's OTA patch 7 | - 2.0 esp8266/Arduino or later 8 | 9 | -- 10 | mozz 11 | -------------------------------------------------------------------------------- /WiFi_OLED/Mozz_WiFi_OLED: -------------------------------------------------------------------------------- 1 | /* 2 | * OLEDWiFiScan - example of ESP8266 WiFi scan and OLED listing 3 | * 4 | * The MIT License (MIT) 5 | * 6 | * Copyright (c) 2015. Mario Mikočević 7 | * 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy 9 | * of this software and associated documentation files (the "Software"), to deal 10 | * in the Software without restriction, including without limitation the rights 11 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | * copies of the Software, and to permit persons to whom the Software is 13 | * furnished to do so, subject to the following conditions: 14 | * The above copyright notice and this permission notice shall be included in all 15 | * copies or substantial portions of the Software. 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | * 24 | * Credits for parts of this code go to Daniel Eichhorn & Mike Rankin. 25 | * Thank you so much for sharing! 26 | * 27 | * Ideas and code snippets - http://www.esp8266.com/viewtopic.php?f=29&t=3256 28 | * 29 | */ 30 | 31 | // Serial printing ON/OFF 32 | #include "Arduino.h" 33 | #define DEBUG false 34 | #define Serial if(DEBUG)Serial 35 | 36 | #include 37 | #include 38 | #include 39 | #include 40 | #include "font.h" 41 | 42 | /* 43 | * SSD1306 - 0.96" 128x64 44 | * SH1106 - 1.3" 132x64 45 | */ 46 | 47 | //// HW SPI pins 48 | // #define SDA_pin 13 49 | // #define SCL_pin 14 50 | // I2C pins 51 | // #define SDA_pin 4 52 | // #define SCL_pin 5 53 | //// ESP-01 pins 54 | #define SDA_pin 0 55 | #define SCL_pin 2 56 | 57 | #define OLED_ADDRESS 0x3C 58 | // #define OLED_ADDRESS 0x78 59 | #define SCROLL_WORKS 60 | // #undef SCROLL_WORKS 61 | 62 | // 0.96" OLED 63 | OLED_SSD1306 oled( OLED_ADDRESS ); 64 | 65 | // 1.3" OLED 66 | // #define SH1106_LC_OFFSET 2 67 | // OLED_SSD1306 oled( OLED_ADDRESS, SH1106_LC_OFFSET ); 68 | 69 | char tmpstr[20]; 70 | 71 | extern "C" { 72 | #include "user_interface.h" 73 | uint32_t readvdd33(void); 74 | } 75 | 76 | void setup() { 77 | 78 | Serial.begin(115200); 79 | 80 | // print out all system information 81 | Serial.println(); 82 | Serial.print(F("Heap: ")); Serial.println(system_get_free_heap_size()); 83 | Serial.print(F("Boot Vers: ")); Serial.println(system_get_boot_version()); 84 | Serial.print(F("CPU: ")); Serial.println(system_get_cpu_freq()); 85 | Serial.print(F("SDK: ")); Serial.println(system_get_sdk_version()); 86 | Serial.println(); 87 | 88 | Wire.begin( SDA_pin, SCL_pin ); 89 | Wire.setClock( 400000 ); 90 | 91 | Serial.println("OLED Init..."); 92 | oled.Init(); 93 | // oled.DisplayFlipON(); 94 | 95 | Serial.println("Setup done"); 96 | 97 | } 98 | 99 | void loop() { 100 | 101 | unsigned long sec; 102 | float Vdd; 103 | char tmpstr2[10]; 104 | 105 | oled.ClearDisplay(); 106 | // oled.SendStrXY( "Start-up .... ", 0, 1 ); 107 | sprintf( tmpstr, "ChipID %9d", ESP.getChipId() ); 108 | oled.SendStrXY( tmpstr, 1, 0 ); 109 | // sprintf( tmpstr, "FlashID %06X", ESP.getFlashChipId() ); 110 | sprintf( tmpstr, "SDK %10s", ESP.getSdkVersion() ); 111 | oled.SendStrXY( tmpstr, 2, 0 ); 112 | sprintf( tmpstr, "Flash %dkB", ESP.getFlashChipSize() / 1024 ); 113 | oled.SendStrXY( tmpstr, 3, 0 ); 114 | // sprintf( tmpstr, "Vcc %d", ESP.getVcc() ); 115 | // Vdd = (float)ESP.getVcc() / 1000.0; 116 | sprintf( tmpstr, "Vcc %d", readvdd33() ); 117 | Vdd = (float)readvdd33() / 1000.0; 118 | dtostrf( Vdd, 6, 3, tmpstr2 ); 119 | sprintf( tmpstr, "Vcc %s", tmpstr2 ); 120 | oled.SendStrXY( tmpstr, 5, 0 ); 121 | ElapsedStr( tmpstr ); // form str with hh:mm:ss 122 | oled.SendStrXY( tmpstr, 6, 0 ); 123 | delay(10000); 124 | 125 | Serial.println("Drawing waves"); 126 | Draw_Waves(); 127 | delay(1500); 128 | 129 | Serial.println("Drawing WiFi"); 130 | Draw_WiFi(); 131 | delay(2000); 132 | 133 | Serial.println("Starting Scan..."); 134 | Scan_Wifi_Networks(); 135 | 136 | Serial.print( "Time elapsed so far: " ); 137 | Serial.print( millis() / 1000 ); 138 | Serial.println( "sec." ); 139 | delay(30000); 140 | 141 | } 142 | 143 | void Scan_Wifi_Networks() { 144 | 145 | int c = 0; 146 | char myStr[17]; 147 | 148 | // Set WiFi to station mode and disconnect from an AP if it was previously connected 149 | // Need to be in disconnected mode to Run network Scan! 150 | WiFi.mode(WIFI_STA); 151 | WiFi.disconnect(); 152 | delay(100); 153 | 154 | // WiFi.scanNetworks will return the number of networks found 155 | int n = WiFi.scanNetworks(); 156 | Serial.println("Scaning Networks Complete.."); 157 | Serial.print(n); Serial.println(" Networks have been Found"); 158 | sprintf( myStr, "%d APs found\0", n ); 159 | oled.ClearDisplay(); 160 | oled.SendStrXY( myStr, 3, 0 ); // display the number of APs found 161 | delay(3000); 162 | 163 | if (n == 0) { 164 | 165 | oled.ClearDisplay(); 166 | oled.SendStrXY( "No net found", 3, 0 ); 167 | Serial.println("No networks found"); 168 | 169 | } else { 170 | 171 | oled.ClearDisplay(); 172 | 173 | Serial.print(n); Serial.println(" networks found"); 174 | for( int i=0; i 7) { 194 | delay(10000); 195 | oled.ClearDisplay(); 196 | c = 0 ; 197 | } 198 | delay(500); 199 | 200 | } 201 | } 202 | 203 | Serial.println(""); 204 | } 205 | 206 | void ElapsedStr( char *str ) { 207 | 208 | unsigned long sec, minute, hour; 209 | 210 | sec = millis() / 1000; 211 | minute = ( sec % 3600 ) / 60; 212 | hour = sec / 3600; 213 | sprintf( str, "Elapsed " ); 214 | if ( hour == 0 ) { 215 | sprintf( str, "%s ", str ); 216 | } else { 217 | sprintf( str, "%s%2d:", str, hour ); 218 | } 219 | if ( minute >= 10 ) { 220 | sprintf( str, "%s%2d:", str, minute ); 221 | } else { 222 | if ( hour != 0 ) { 223 | sprintf( str, "%s0%1d:", str, minute ); 224 | } else { 225 | sprintf( str, "%s ", str ); 226 | if ( minute == 0 ) { 227 | sprintf( str, "%s ", str ); 228 | } else { 229 | sprintf( str, "%s%1d:", str, minute ); 230 | } 231 | } 232 | } 233 | if ( ( sec % 60 ) < 10 ) { 234 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 235 | } else { 236 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 237 | } 238 | 239 | } 240 | 241 | #ifdef SCROLL_WORKS 242 | 243 | void Draw_Waves(void) { 244 | unsigned char i; 245 | 246 | // oled.DisplayOFF(); 247 | // oled.ClearDisplay(); 248 | oled.SetCursorXY( 0, 0 ); 249 | for( int i=0; i < 128*8; i++ ) { 250 | oled.SendChar( pgm_read_byte( rfwaves + i ) ); 251 | } 252 | oled.DisplayON(); 253 | } 254 | 255 | void Draw_WiFi(void) { 256 | unsigned char i; 257 | 258 | // oled.DisplayOFF(); 259 | // oled.ClearDisplay(); 260 | oled.SetCursorXY( 0, 0 ); 261 | for( int i=0; i < 128*8; i++ ) { 262 | oled.SendChar( pgm_read_byte( WIFI1 + i ) ); 263 | } 264 | oled.DisplayON(); 265 | } 266 | 267 | #else 268 | 269 | void Draw_Waves(void) { 270 | unsigned char i,j; 271 | 272 | oled.DisplayOFF(); 273 | // oled.ClearDisplay(); 274 | for( int i=0; i<8; i++ ) { 275 | oled.SetCursorXY( i, 0 ); 276 | for( int j=0; j<16*8; j++ ) { 277 | oled.SendChar( pgm_read_byte( rfwaves + j + i*16*8 ) ); 278 | } 279 | } 280 | oled.DisplayON(); 281 | 282 | } 283 | 284 | void Draw_WiFi(void) { 285 | unsigned char i,j; 286 | 287 | oled.DisplayOFF(); 288 | // oled.ClearDisplay(); 289 | for( int i=0; i<8; i++ ) { 290 | oled.SetCursorXY( i, 0 ); 291 | for( int j=0; j<16*8; j++ ) { 292 | oled.SendChar( pgm_read_byte( WIFI1 + j + i*16*8 ) ); 293 | } 294 | } 295 | oled.DisplayON(); 296 | } 297 | 298 | #endif 299 | -------------------------------------------------------------------------------- /WiFi_OLED/README.md: -------------------------------------------------------------------------------- 1 | ESP8266 + 0.96" OLED 2 | 3 | Ideas and code snippets from http://www.esp8266.com/viewtopic.php?f=29&t=3256. 4 | -------------------------------------------------------------------------------- /WiFi_OLED/font.h: -------------------------------------------------------------------------------- 1 | // CREDITS TO MIKE RANKIN 2 | // ADAPTED DANBICKS 3 | 4 | const char myFont[][8] PROGMEM = { 5 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 6 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, 7 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, 8 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, 9 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, 10 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, 11 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, 12 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, 13 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, 14 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, 15 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, 16 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, 17 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, 18 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, 19 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, 20 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, 21 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, 22 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, 23 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, 24 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, 25 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, 26 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, 27 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, 28 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, 29 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, 30 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, 31 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, 32 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, 33 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, 34 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, 35 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, 36 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, 37 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, 38 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, 39 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, 40 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, 41 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, 42 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, 43 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, 44 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, 45 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, 46 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, 47 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, 48 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, 49 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, 50 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, 51 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, 52 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, 53 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, 54 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, 55 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, 56 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, 57 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, 58 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, 59 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, 60 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, 61 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, 62 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, 63 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, 64 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, 65 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, 66 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, 67 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, 68 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, 69 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, 70 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, 71 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, 72 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, 73 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, 74 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, 75 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, 76 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, 77 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, 78 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, 79 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, 80 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, 81 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, 82 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, 83 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, 84 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, 85 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, 86 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, 87 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, 88 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, 89 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, 90 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, 91 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, 92 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, 93 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, 94 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, 95 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, 96 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, 97 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, 98 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, 99 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, 100 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} 101 | }; 102 | 103 | 104 | const char WIFI1[] PROGMEM = { 105 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 106 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 107 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF8, 108 | 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 109 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 110 | 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 112 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 113 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 114 | 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 115 | 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 116 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 117 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 118 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 119 | 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 120 | 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 121 | 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 122 | 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 123 | 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 124 | 0xFF, 0xFF, 0x3F, 0x3F, 0x1F, 0x1F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 125 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x03, 0xC3, 0xC1, 0xC1, 0xC0, 126 | 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 127 | 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE1, 0xC1, 0x03, 128 | 0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x3E, 0x7E, 0xF8, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 129 | 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 130 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3F, 0xFF, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 131 | 0x00, 0x00, 0x03, 0x3F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0xFF, 132 | 0xFF, 0xFF, 0x0E, 0x0E, 0x0C, 0x0C, 0x0E, 0x0E, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 133 | 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 134 | 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 135 | 0x87, 0x87, 0x87, 0x07, 0x00, 0x00, 0x00, 0x09, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x00, 136 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 137 | 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 138 | 0xFF, 0xFF, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xFF, 0xFF, 0xF0, 139 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 140 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 141 | 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 142 | 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 143 | 0x0F, 0x0F, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 144 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 145 | 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 146 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 147 | 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 148 | 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 149 | 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 150 | 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x80, 152 | 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0x7F, 0x3F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 153 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 154 | 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 155 | 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 156 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 157 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 158 | 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x7E, 0x7E, 0x3E, 0x1E, 159 | 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x07, 160 | 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 161 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 162 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 163 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 164 | 0x0F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 165 | 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F, 166 | 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 169 | }; 170 | 171 | 172 | const char locked[] PROGMEM = { 173 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 174 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 175 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 176 | 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 177 | 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 178 | 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 179 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 180 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 181 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 182 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 | 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 184 | 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 185 | 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 186 | 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 187 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 188 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 | 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 194 | 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 | 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 199 | 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 200 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 201 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 202 | 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 203 | 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 206 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 207 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 208 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 209 | 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 210 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 211 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 212 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 213 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 214 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 215 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 216 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 217 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 218 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 219 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 220 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 221 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 222 | 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 223 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 224 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 225 | 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 226 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 227 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 228 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 229 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 230 | 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 231 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 232 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 233 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 234 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 235 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 236 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 237 | }; 238 | 239 | 240 | const char rfwaves[] PROGMEM = { 241 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 242 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 243 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 244 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 247 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 248 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 249 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 250 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 251 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 252 | 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 253 | 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 254 | 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 255 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 256 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 257 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 258 | 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 259 | 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 260 | 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 261 | 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 262 | 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 263 | 0x7E, 0x7E, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xE0, 264 | 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 265 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 266 | 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x80, 0x80, 0x80, 0xC0, 0xC0, 267 | 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 268 | 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 269 | 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 270 | 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 271 | 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 272 | 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 273 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 274 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 275 | 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x81, 0x81, 0x80, 276 | 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 277 | 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 278 | 0x80, 0x80, 0x81, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F, 279 | 0x1F, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 280 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 281 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 282 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 283 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x07, 0x0F, 0x0F, 0x1F, 0x1F, 0x3F, 284 | 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 285 | 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 286 | 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 287 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 288 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 289 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 290 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 292 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x0E, 0x0E, 0x0E, 0x1E, 0x1E, 0x3F, 293 | 0x3F, 0x3E, 0x1E, 0x1E, 0x0E, 0x0E, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 294 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 295 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 296 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 297 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 298 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 299 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 300 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 301 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 302 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 303 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 304 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 305 | }; 306 | 307 | /* Standard ASCII 6x8 font 308 | const char PROGMEM font6x8[] = { 309 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp 310 | 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! 311 | 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " 312 | 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # 313 | 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ 314 | 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % 315 | 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & 316 | 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' 317 | 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( 318 | 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) 319 | 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * 320 | 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + 321 | 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , 322 | 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - 323 | 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . 324 | 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / 325 | 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 326 | 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 327 | 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 328 | 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 329 | 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 330 | 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 331 | 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 332 | 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 333 | 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 334 | 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 335 | 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : 336 | 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; 337 | 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < 338 | 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = 339 | 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > 340 | 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? 341 | 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ 342 | 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A 343 | 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B 344 | 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C 345 | 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 346 | 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E 347 | 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F 348 | 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G 349 | 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 350 | 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I 351 | 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J 352 | 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K 353 | 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L 354 | 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M 355 | 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 356 | 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 357 | 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P 358 | 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 359 | 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R 360 | 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S 361 | 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T 362 | 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 363 | 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 364 | 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W 365 | 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X 366 | 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y 367 | 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z 368 | 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ 369 | 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 370 | 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] 371 | 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 372 | 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ 373 | 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' 374 | 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a 375 | 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b 376 | 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c 377 | 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d 378 | 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e 379 | 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f 380 | 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g 381 | 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h 382 | 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i 383 | 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j 384 | 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k 385 | 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l 386 | 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m 387 | 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n 388 | 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o 389 | 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p 390 | 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q 391 | 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r 392 | 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s 393 | 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t 394 | 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 395 | 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 396 | 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 397 | 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x 398 | 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y 399 | 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z 400 | 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines 401 | }; 402 | */ 403 | 404 | /* Standard ASCII 8x16 font */ 405 | const char PROGMEM font8X16[] ={ 406 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 407 | 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 408 | 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 409 | 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 410 | 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 411 | 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 412 | 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 413 | 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 414 | 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 415 | 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 416 | 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 417 | 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 418 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 419 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 420 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 421 | 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 422 | 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 423 | 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 424 | 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 425 | 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 426 | 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 427 | 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 428 | 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 429 | 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 430 | 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 431 | 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 432 | 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 433 | 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 434 | 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 435 | 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 436 | 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 437 | 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 438 | 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 439 | 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 440 | 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 441 | 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 442 | 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 443 | 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 444 | 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 445 | 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 446 | 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 447 | 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 448 | 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 449 | 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 450 | 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 451 | 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 452 | 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 453 | 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 454 | 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 455 | 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 456 | 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 457 | 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 458 | 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 459 | 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 460 | 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 461 | 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 462 | 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 463 | 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 464 | 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 465 | 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 466 | 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 467 | 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 468 | 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 469 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 470 | 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 471 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 472 | 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 473 | 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 474 | 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 475 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 476 | 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 477 | 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 478 | 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 479 | 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 480 | 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 481 | 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 482 | 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 483 | 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 484 | 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 485 | 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 486 | 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 487 | 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 488 | 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 489 | 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 490 | 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 491 | 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 492 | 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 493 | 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 494 | 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 495 | 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 496 | 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 497 | 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 498 | 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 499 | 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 500 | 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 501 | }; 502 | 503 | -------------------------------------------------------------------------------- /WiFi_Scan_SPIFFS/WiFi_Scan_SPIFFS.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015. Mario Mikočević 3 | * 4 | * MIT Licence 5 | * 6 | */ 7 | 8 | // Serial printing ON/OFF 9 | #include "Arduino.h" 10 | #define DEBUG true 11 | // #define Serial if(DEBUG)Serial 12 | // #define DEBUG_OUTPUT Serial 13 | 14 | #include "ESP8266WiFi.h" 15 | #include "FS.h" 16 | 17 | ADC_MODE(ADC_VCC); 18 | 19 | #include // https://github.com/bblanchon/ArduinoJson 20 | 21 | #include 22 | Ticker tickerWiFiScan; 23 | #define WAITTIME 600 24 | boolean tickerFired; 25 | 26 | char tmpstr[40]; 27 | 28 | File fh_netdata; 29 | String line; 30 | 31 | void flagWiFiScan( void ) { 32 | tickerFired = true; 33 | } 34 | 35 | String bssidToString( uint8_t *bssid ) { 36 | 37 | char mac[18] = {0}; 38 | 39 | sprintf( mac,"%02X:%02X:%02X:%02X:%02X:%02X", bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5] ); 40 | return String( mac ); 41 | 42 | } 43 | 44 | bool update_netdata( int netNum ) { 45 | 46 | int netId; 47 | int netFound = 0; 48 | 49 | DynamicJsonBuffer jsonBuffer; 50 | 51 | // fh_netdata.println( "{\"count\":0,\"max\":0}" ); 52 | // fh_netdata.println( "{\"count\":0,\"max\":0,\"networks\":[{\"ssid\":\"ssid\",\"bssid\":\"bssid\",\"rssi\":0,\"ch\":1,\"enc\":\"*\"}]}" ); 53 | 54 | // create new data from network list 55 | JsonObject& WiFiData = jsonBuffer.createObject(); 56 | WiFiData["count"] = netNum; 57 | WiFiData["max"] = netNum; 58 | 59 | JsonArray& WiFiDataArray = WiFiData.createNestedArray("networks"); 60 | 61 | fh_netdata = SPIFFS.open( "/netdata.txt", "r" ); 62 | 63 | if ( !fh_netdata ) { 64 | 65 | // no last data 66 | Serial.println( "Data file doesn't exist yet." ); 67 | 68 | fh_netdata = SPIFFS.open( "/netdata.txt", "w" ); 69 | if ( !fh_netdata ) { 70 | Serial.println( "Data file creation failed" ); 71 | return false; 72 | } 73 | for ( int i = 0; i < netNum; ++i ) { 74 | 75 | JsonObject& tmpObj = jsonBuffer.createObject(); 76 | 77 | tmpObj["id"] = i; 78 | tmpObj["ssid"] = WiFi.SSID(i); 79 | tmpObj["bssid"] = bssidToString( WiFi.BSSID(i) ); 80 | tmpObj["rssi"] = WiFi.RSSI(i); 81 | tmpObj["ch"] = WiFi.channel(i); 82 | tmpObj["enc"] = ((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); 83 | 84 | Serial.print("Add - ");tmpObj.printTo( Serial );Serial.println(); 85 | WiFiDataArray.add( tmpObj ); 86 | 87 | } 88 | 89 | // WiFiData is wifi scan snapshot 90 | // Serial.println("Scanned wifi data ->"); 91 | // WiFiData.printTo( Serial ); 92 | // WiFiData.prettyPrintTo( Serial ); 93 | // Serial.println(""); 94 | 95 | } else { 96 | 97 | // read last WiFi data from file 98 | // Serial.println( "Reading saved wifi data .." ); 99 | line = fh_netdata.readStringUntil('\n'); 100 | // Serial.print( "Line (read) " );Serial.println( line ); 101 | 102 | JsonObject& WiFiDataFile = jsonBuffer.parseObject( line ); 103 | if ( !WiFiDataFile.success() ) { 104 | Serial.println( "parsing failed" ); 105 | // parsing failed, removing old data 106 | SPIFFS.remove( "/netdata.txt" ); 107 | return false; 108 | } 109 | 110 | int netNumFile = WiFiDataFile["count"]; 111 | int netMaxFile = WiFiDataFile["max"]; 112 | netId = netMaxFile; 113 | 114 | // WiFiDataFile.prettyPrintTo( Serial ); 115 | // Serial.println(""); 116 | 117 | JsonArray& tmpArray = WiFiDataFile["networks"]; 118 | for ( JsonArray::iterator it = tmpArray.begin(); it != tmpArray.end(); ++it ) { 119 | JsonObject& tmpObj = *it; 120 | WiFiDataArray.add( tmpObj ); 121 | Serial.print( "Copy - " );tmpObj.printTo( Serial );Serial.println(); 122 | } 123 | 124 | for ( int i = 0; i < netNum; i++ ) { 125 | bool wifiNetFound = false; 126 | for ( int j = 0; j < netNumFile; j++ ) { 127 | String ssid1 = WiFi.SSID(i); 128 | String ssid2 = WiFiDataArray[j]["ssid"]; 129 | if ( ssid1 == ssid2 ) { 130 | String bssid1 = bssidToString( WiFi.BSSID(i) ); 131 | String bssid2 = WiFiDataArray[j]["bssid"]; 132 | if ( bssid1 == bssid2 ) { 133 | wifiNetFound = true; 134 | Serial.print( "Station - " );Serial.print(ssid1); 135 | Serial.print( ", scanned RSSI - " );Serial.print(WiFi.RSSI(i)); 136 | Serial.print( ", saved RSSI - " ); 137 | String rssi2 = WiFiDataArray[j]["rssi"]; 138 | Serial.println(rssi2); 139 | } 140 | } 141 | } 142 | if ( !wifiNetFound ) { 143 | 144 | JsonObject& tmpObj = jsonBuffer.createObject(); 145 | 146 | tmpObj["id"] = netId; 147 | tmpObj["ssid"] = WiFi.SSID(i); 148 | tmpObj["bssid"] = bssidToString( WiFi.BSSID(i) ); 149 | tmpObj["rssi"] = WiFi.RSSI(i); 150 | tmpObj["ch"] = WiFi.channel(i); 151 | tmpObj["enc"] = ((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); 152 | 153 | WiFiDataArray.add( tmpObj ); 154 | Serial.print( "Found new - " );tmpObj.printTo( Serial );Serial.println(); 155 | 156 | netFound++; 157 | netId++; 158 | } 159 | } 160 | 161 | WiFiData["count"] = netNumFile + netFound; 162 | WiFiData["max"] = netId; 163 | 164 | // Serial.println("Computed wifi data ->"); 165 | // WiFiData.prettyPrintTo( Serial ); 166 | 167 | fh_netdata.close(); 168 | // SPIFFS.remove( "/netdata.txt" ); 169 | 170 | fh_netdata = SPIFFS.open( "/netdata.txt", "w" ); 171 | if ( !fh_netdata ) { 172 | Serial.println( "Data file creation failed" ); 173 | return false; 174 | } 175 | 176 | } 177 | WiFiData.printTo( fh_netdata ); 178 | fh_netdata.println( "\n" ); 179 | fh_netdata.close(); 180 | 181 | return true; 182 | } 183 | 184 | void parse_networks( int netNum ) { 185 | 186 | /* 187 | for (int i = 0; i < net_num; ++i) 188 | { 189 | // Print SSID and RSSI for each network found 190 | Serial.print(i + 1); 191 | Serial.print(": "); 192 | Serial.print(WiFi.SSID(i)); 193 | Serial.print(" ("); 194 | Serial.print(WiFi.RSSI(i)); 195 | Serial.print(")"); 196 | Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); 197 | delay(10); 198 | } 199 | */ 200 | 201 | if ( !update_netdata( netNum ) ) { 202 | Serial.println( "Something went WRONG!" ); 203 | } 204 | 205 | } 206 | 207 | void do_wifiscan( void ) { 208 | int netCount; 209 | 210 | Serial.println( "scan start" ); 211 | 212 | // WiFi.scanNetworks will return the number of networks found 213 | netCount = WiFi.scanNetworks(); 214 | // Serial.println( "scan done" ); // no need if Serial.setDebugOutput(true) 215 | if ( netCount == 0 ) { 216 | Serial.println( "no network found" ); 217 | } else { 218 | Serial.print(netCount); 219 | Serial.println( " network(s) found" ); 220 | parse_networks( netCount ); 221 | } 222 | Serial.println(); 223 | 224 | } 225 | 226 | void ElapsedStr( char *str ) { 227 | 228 | unsigned long sec, minute, hour; 229 | 230 | sec = millis() / 1000; 231 | minute = ( sec % 3600 ) / 60; 232 | hour = sec / 3600; 233 | sprintf( str, "Elapsed " ); 234 | if ( hour == 0 ) { 235 | sprintf( str, "%s ", str ); 236 | } else { 237 | sprintf( str, "%s%2d:", str, hour ); 238 | } 239 | if ( minute >= 10 ) { 240 | sprintf( str, "%s%2d:", str, minute ); 241 | } else { 242 | if ( hour != 0 ) { 243 | sprintf( str, "%s0%1d:", str, minute ); 244 | } else { 245 | sprintf( str, "%s ", str ); 246 | if ( minute == 0 ) { 247 | sprintf( str, "%s ", str ); 248 | } else { 249 | sprintf( str, "%s%1d:", str, minute ); 250 | } 251 | } 252 | } 253 | if ( ( sec % 60 ) < 10 ) { 254 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 255 | } else { 256 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 257 | } 258 | 259 | } 260 | 261 | void setup() { 262 | 263 | Serial.begin(115200); 264 | delay(10); 265 | Serial.setDebugOutput(true); 266 | 267 | Serial.println(); 268 | Serial.printf( "Sketch size: %u\n", ESP.getSketchSize() ); 269 | Serial.printf( "Free size: %u\n", ESP.getFreeSketchSpace() ); 270 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 271 | Serial.printf( "Boot Vers: %u\n", ESP.getBootVersion() ); 272 | Serial.printf( "CPU: %uMHz\n", ESP.getCpuFreqMHz() ); 273 | Serial.printf( "SDK: %s\n", ESP.getSdkVersion() ); 274 | Serial.printf( "Chip ID: %u\n", ESP.getChipId() ); 275 | Serial.printf( "Flash ID: %u\n", ESP.getFlashChipId() ); 276 | Serial.printf( "Flash Size: %u\n", ESP.getFlashChipRealSize() ); 277 | Serial.printf( "Vcc: %u\n", ESP.getVcc() ); 278 | Serial.println(); 279 | 280 | bool result = SPIFFS.begin(); 281 | if( !result ) { 282 | Serial.println( "SPIFFS open failed!" ); 283 | } 284 | 285 | /* 286 | // comment format section after DEBUGING done 287 | result = SPIFFS.format(); 288 | if( !result ) { 289 | Serial.println("SPIFFS format failed!"); 290 | } 291 | */ 292 | // SPIFFS.remove( "/netdata.txt" ); 293 | 294 | // Set WiFi to station mode and disconnect from an AP if it was previously connected 295 | WiFi.mode(WIFI_STA); 296 | WiFi.disconnect(); 297 | delay(100); 298 | 299 | tickerWiFiScan.attach( WAITTIME, flagWiFiScan ); 300 | tickerFired = true; 301 | 302 | Serial.println( "Setup done" ); 303 | } 304 | 305 | void loop() { 306 | 307 | if( tickerFired ) { 308 | tickerFired = false; 309 | do_wifiscan(); 310 | ElapsedStr( tmpstr ); 311 | Serial.println( tmpstr ); 312 | Serial.print( "Heap: " ); Serial.println( ESP.getFreeHeap() ); 313 | } 314 | 315 | } 316 | -------------------------------------------------------------------------------- /WiFi_Sensors/Mozz_WiFi_Sensors.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2015. Mario Mikočević 4 | * 5 | * MIT Licence 6 | * 7 | */ 8 | 9 | // Serial printing ON/OFF 10 | #include "Arduino.h" 11 | #define DEBUG true 12 | #define Serial if(DEBUG)Serial 13 | #define DEBUG_OUTPUT Serial 14 | 15 | // set only one of these true 16 | // #define SENSOR_DHT 17 | // #undef SENSOR_DS18B20 18 | #undef SENSOR_DHT 19 | #define SENSOR_DS18B20 20 | // set only one of these true 21 | 22 | // set only one of these true 23 | #define DEEPSLEEP 24 | #undef OTA 25 | // #undef DEEPSLEEP 26 | // #define OTA 27 | // set only one of these true 28 | 29 | // ToDo - OTA as lib and as http get 30 | #ifdef DEEPSLEEP 31 | #undef OTA_LIB 32 | #undef OTA_HTTP 33 | #endif 34 | // ToDo 35 | 36 | /* END of compile DEFINEs */ 37 | 38 | #include 39 | #ifdef OTA 40 | #include 41 | #include 42 | #endif 43 | 44 | ADC_MODE(ADC_VCC); 45 | 46 | #include 47 | Ticker tickerSensorScan; 48 | #define WAITTIME 300 49 | boolean tickerFired; 50 | 51 | const char* ssid = "x"; 52 | const char* pass = "y"; 53 | const char* host = "foo.bar"; 54 | const char* urlHost = "192.168.256.256"; 55 | 56 | const char* sensorLocation = "Room"; 57 | // const char* sensorLocation = "Attic1"; 58 | // const char* sensorLocation = "Attic2"; 59 | // const char* sensorLocation = "LiFePO4Test"; 60 | // const char* sensorLocation = "LiPO2STest"; 61 | 62 | #ifdef SENSOR_DHT 63 | #include "DHT.h" 64 | #define DHTPIN 2 65 | // Uncomment whatever type you're using! 66 | #define DHTTYPE DHT11 // DHT 11 67 | //#define DHTTYPE DHT22 // DHT 22 (AM2302) 68 | //#define DHTTYPE DHT21 // DHT 21 (AM2301) 69 | 70 | DHT dht( DHTPIN, DHTTYPE ); 71 | #endif 72 | 73 | #ifdef SENSOR_DS18B20 74 | #include 75 | #include 76 | 77 | // (a 4.7K resistor is necessary) 78 | #define ONE_WIRE_BUS 2 79 | 80 | // Setup a oneWire instance to communicate with any OneWire devices 81 | // (not just Maxim/Dallas temperature ICs) 82 | OneWire oneWire( ONE_WIRE_BUS ); 83 | 84 | // Pass our oneWire reference to Dallas Temperature. 85 | DallasTemperature sensors( &oneWire ); 86 | #endif 87 | 88 | char tmpstr[40]; 89 | 90 | const int sleepTimeSec = 300; 91 | 92 | void flagSensorScan( void ) { 93 | tickerFired = true; 94 | } 95 | 96 | void initWiFi( void ) { 97 | 98 | uint8_t connAttempts = 0; 99 | uint8_t connAttemptsMAX = 25; 100 | 101 | Serial.print( "Connecting to " ); 102 | Serial.println( ssid ); 103 | WiFi.mode( WIFI_STA ); 104 | WiFi.begin( ); 105 | while ( WiFi.waitForConnectResult() != WL_CONNECTED ){ 106 | WiFi.begin( ssid, pass ); 107 | delay(500); 108 | connAttempts++; 109 | // Serial.println( "Retrying connection..." ); // if connAttempts > 1 110 | if ( connAttempts > connAttemptsMAX ) { 111 | #ifdef DEEPSLEEP 112 | Serial.println( "Connection Failed! Gonna ..zzZZ" ); 113 | ESP.deepSleep( sleepTimeSec * 1000000, RF_NO_CAL ); 114 | #endif 115 | // if deepsleep is not defined we just reboot 116 | // TODO - after MAX attempts create AP for ESP Setup over OTA 117 | delay(5000); 118 | ESP.restart(); 119 | } 120 | } 121 | Serial.println( "WiFi connected" ); 122 | Serial.print( "IP address: " ); 123 | Serial.println( WiFi.localIP() ); 124 | 125 | } 126 | 127 | void ElapsedStr( char *str ) { 128 | 129 | unsigned long sec, minute, hour; 130 | 131 | sec = millis() / 1000; 132 | minute = ( sec % 3600 ) / 60; 133 | hour = sec / 3600; 134 | sprintf( str, "Elapsed " ); 135 | if ( hour == 0 ) { 136 | sprintf( str, "%s ", str ); 137 | } else { 138 | sprintf( str, "%s%2d:", str, hour ); 139 | } 140 | if ( minute >= 10 ) { 141 | sprintf( str, "%s%2d:", str, minute ); 142 | } else { 143 | if ( hour != 0 ) { 144 | sprintf( str, "%s0%1d:", str, minute ); 145 | } else { 146 | sprintf( str, "%s ", str ); 147 | if ( minute == 0 ) { 148 | sprintf( str, "%s ", str ); 149 | } else { 150 | sprintf( str, "%s%1d:", str, minute ); 151 | } 152 | } 153 | } 154 | if ( ( sec % 60 ) < 10 ) { 155 | sprintf( str, "%s0%1d", str, ( sec % 60 ) ); 156 | } else { 157 | sprintf( str, "%s%2d", str, ( sec % 60 ) ); 158 | } 159 | 160 | } 161 | 162 | bool sendSensorData( const char *id, float hum, float temp ) { 163 | 164 | WiFiClient client; 165 | int mV = ESP.getVcc(); 166 | 167 | initWiFi(); 168 | 169 | client.stop(); 170 | uint8_t i = 0; 171 | while( !client.connect( urlHost, 80 ) && i++ < 50 ) { 172 | Serial.println( "Cannot connect!" ); 173 | delay(500); 174 | } 175 | if( i >= 50 ) { 176 | return false; 177 | } 178 | 179 | String WiFiString = "GET /sensors/insertdata.php?hash=test&s="; 180 | WiFiString += id; 181 | WiFiString += "&h="; 182 | WiFiString += hum; 183 | WiFiString += "&t="; 184 | WiFiString += temp; 185 | WiFiString += "&vcc="; 186 | WiFiString += mV; 187 | WiFiString += " HTTP/1.1\r\n"; 188 | WiFiString += "Host: "; 189 | WiFiString += host; 190 | WiFiString += "\r\n"; 191 | WiFiString += "Connection: close\r\n"; 192 | WiFiString += "\r\n"; 193 | 194 | Serial.println( WiFiString ); 195 | client.println( WiFiString ); 196 | 197 | /* 198 | char charBuf[200]; 199 | WiFiString.toCharArray( charBuf, 200 ); 200 | wifi.send(1, (const uint8_t*)charBuf, 200); 201 | */ 202 | 203 | client.stop(); 204 | 205 | return true; 206 | } 207 | 208 | #ifdef SENSOR_DHT 209 | bool doSomethingWithSensor( void ) { 210 | 211 | float h = dht.readHumidity(); 212 | float t = dht.readTemperature(); 213 | if ( isnan(h) || isnan(t) ) { 214 | // Serial.println( "Failed to read from DHT sensor!" ); 215 | Serial.print("."); 216 | delay(10); 217 | return false; 218 | } 219 | 220 | Serial.print("Humidity: "); 221 | Serial.print(h); 222 | Serial.print(" %\t"); 223 | Serial.print("Temperature: "); 224 | Serial.print(t); 225 | Serial.print(" *C "); 226 | Serial.println(); 227 | 228 | return sendSensorData( sensorLocation, h, t ); 229 | } 230 | #endif 231 | 232 | #ifdef SENSOR_DS18B20 233 | bool doSomethingWithSensor( void ) { 234 | 235 | // we are reusing same php on receiving side, hence humidity -1% here ;) 236 | float hum = -1; 237 | 238 | float temp; 239 | 240 | // call sensors.requestTemperatures() to issue a global temperature 241 | // request to all devices on the bus 242 | Serial.print(" Requesting temperature..."); 243 | sensors.requestTemperatures(); // Send the command to get temperatures 244 | Serial.println("DONE"); 245 | 246 | Serial.print("Temperature for Device 1 is: "); 247 | temp = sensors.getTempCByIndex( 0 ); 248 | Serial.print( temp ); 249 | // Why "byIndex"? 250 | // You can have more than one IC on the same bus. 251 | // 0 refers to the first IC on the wire 252 | Serial.println(); 253 | 254 | return sendSensorData( sensorLocation, hum, temp ); 255 | } 256 | #endif 257 | 258 | #ifdef OTA 259 | void SetupArduinoOTA( void ) { 260 | 261 | // Port defaults to 8266 262 | // ArduinoOTA.setPort(8266); 263 | 264 | // Hostname defaults to esp8266-[ChipID] 265 | ArduinoOTA.setHostname("sensorX-esp"); 266 | 267 | // ArduinoOTA.setPassword((const char *)"xxx"); 268 | 269 | ArduinoOTA.onStart([]() { 270 | Serial.println("Start"); 271 | }); 272 | ArduinoOTA.onEnd([]() { 273 | Serial.println("End"); 274 | }); 275 | ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { 276 | static uint8_t done = 0; 277 | uint8_t percent = (progress / (total / 100) ); 278 | if ( percent % 2 == 0 && percent != done ) { 279 | Serial.print("#"); 280 | done = percent; 281 | } 282 | if ( percent == 100 ) { 283 | Serial.println(); 284 | } 285 | }); 286 | ArduinoOTA.onError([](ota_error_t error) { 287 | Serial.printf( "Error[%u]: ", error ); 288 | switch ( error ) { 289 | case OTA_AUTH_ERROR: 290 | Serial.println("Auth Failed"); 291 | break; 292 | case OTA_BEGIN_ERROR: 293 | Serial.println("Begin Failed"); 294 | break; 295 | case OTA_CONNECT_ERROR: 296 | Serial.println("Connect Failed"); 297 | break; 298 | case OTA_RECEIVE_ERROR: 299 | Serial.println("Receive Failed"); 300 | break; 301 | case OTA_END_ERROR: 302 | Serial.println("End Failed"); 303 | break; 304 | default: 305 | Serial.println("OTA Error"); 306 | } 307 | }); 308 | ArduinoOTA.begin(); 309 | 310 | } 311 | #endif 312 | 313 | void setup() { 314 | 315 | Serial.begin(115200); 316 | Serial.println( "Booting" ); 317 | Serial.println(); 318 | Serial.print( "Last Reset Reason: " ); 319 | Serial.println( ESP.getResetReason() ); 320 | Serial.printf( "Sketch size: %u\n", ESP.getSketchSize() ); 321 | Serial.printf( "Free size: %u\n", ESP.getFreeSketchSpace() ); 322 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 323 | Serial.printf( "Boot Mode / Vers: %u / %u\n", ESP.getBootMode(), ESP.getBootVersion() ); 324 | Serial.printf( "SDK: %s\n", ESP.getSdkVersion() ); 325 | Serial.printf( "Arduino: %d\n", ARDUINO ); 326 | Serial.printf( "CPU: %uMHz\n", ESP.getCpuFreqMHz() ); 327 | Serial.printf( "Chip ID: %u\n", ESP.getChipId() ); 328 | Serial.printf( "Flash ID: %u\n", ESP.getFlashChipId() ); 329 | Serial.printf( "Flash Size: %u\n", ESP.getFlashChipRealSize() ); 330 | Serial.printf( "Vcc: %u\n", ESP.getVcc() ); 331 | Serial.println(); 332 | 333 | initWiFi(); 334 | 335 | #ifdef OTA 336 | SetupArduinoOTA(); 337 | #endif 338 | 339 | #ifdef SENSOR_DHT 340 | dht.begin(); 341 | #endif 342 | 343 | #ifdef SENSOR_DS18B20 344 | sensors.begin(); 345 | #endif 346 | 347 | #ifdef DEEPSLEEP 348 | while( ! doSomethingWithSensor() ); 349 | 350 | Serial.printf( "Gonna ZZzz..\n" ); 351 | ESP.deepSleep( sleepTimeSec * 1000000, RF_NO_CAL ); 352 | #endif 353 | 354 | tickerSensorScan.attach( WAITTIME, flagSensorScan ); 355 | tickerFired = true; 356 | 357 | } 358 | 359 | void loop() { 360 | 361 | #ifdef OTA 362 | ArduinoOTA.handle(); 363 | #endif 364 | 365 | if( tickerFired ) { 366 | tickerFired = false; 367 | while( ! doSomethingWithSensor() ); 368 | 369 | ElapsedStr( tmpstr ); 370 | Serial.println( tmpstr ); 371 | Serial.printf( "Heap: %u\n", ESP.getFreeHeap() ); 372 | } 373 | 374 | } 375 | -------------------------------------------------------------------------------- /WiFi_Sensors/README.md: -------------------------------------------------------------------------------- 1 | Sensor reading and posting data on web page. 2 | 3 | Fully functional OTA. 4 | 5 | Required - 6 | - Arduino IDE 1.6.7 7 | - 2.0 esp8266/Arduino or later 8 | 9 | -- 10 | mozz 11 | -------------------------------------------------------------------------------- /WiFi_TFT/README.md: -------------------------------------------------------------------------------- 1 | WiFi scan networks and list them on 1.8" TFT, 2 | SPI interface .. 3 | -------------------------------------------------------------------------------- /WiFi_TFT/WiFi_TFT.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * TFT + WiFi 3 | * 4 | * Copyright (c) 2015. Mario Mikočević 5 | * 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include // nzmichaelh's version - https://github.com/nzmichaelh/Adafruit-ST7735-Library 12 | #include 13 | 14 | const char* ssid = "MozzWiFi"; 15 | const char* pass = "x"; 16 | const char* host = "mozgy.t-com.hr"; 17 | 18 | /* 19 | * ESP8266-12 HY-1.8 SPI 20 | * GPIO5 Pin 06 (RESET) 21 | * GPIO2 Pin 07 (A0) 22 | * GPIO13 (HSPID) Pin 08 (SDA) 23 | * GPIO14 (HSPICLK) Pin 09 (SCK) 24 | * GPIO15 (HSPICS) Pin 10 (CS) 25 | */ 26 | #define TFT_PIN_CS 15 27 | #define TFT_PIN_DC 2 28 | #define TFT_PIN_RST 5 29 | 30 | Adafruit_ST7735 tft = Adafruit_ST7735(TFT_PIN_CS, TFT_PIN_DC, TFT_PIN_RST); 31 | 32 | char tmpstr[32]; 33 | 34 | extern "C" { 35 | #include "user_interface.h" 36 | } 37 | 38 | void setup( void ) { 39 | 40 | Serial.begin(115200); 41 | delay(2000); // wait for uart to settle and print Espressif blurb.. 42 | // print out all system information 43 | Serial.println(); 44 | Serial.print("Heap: "); Serial.println(system_get_free_heap_size()); 45 | Serial.print("Boot Vers: "); Serial.println(system_get_boot_version()); 46 | Serial.print("CPU: "); Serial.println(system_get_cpu_freq()); 47 | Serial.println(); 48 | 49 | tft.initR( INITR_BLACKTAB ); 50 | tft.setTextWrap( false ); 51 | tft.setTextColor( ST7735_WHITE ); 52 | tft.setRotation( 3 ); 53 | Serial.println("TFT Init..."); 54 | 55 | Serial.println("Setup done"); 56 | 57 | } 58 | 59 | void loop( void ) { 60 | 61 | tft.fillScreen( ST7735_BLACK ); 62 | delay(500); 63 | tft.setTextColor( ST7735_WHITE ); 64 | tft.setCursor( 0, 8 ); 65 | tft.print( "Start-up ...." ); 66 | sprintf( tmpstr, "ChipID %d\0", ESP.getChipId() ); 67 | tft.setCursor( 0, 24 ); 68 | tft.print( tmpstr ); 69 | ElapsedStr(); // form str with hh:mm:ss 70 | tft.setCursor( 0, 40 ); 71 | tft.print( tmpstr ); 72 | delay(8000); 73 | 74 | Serial.println("Starting Scan..."); 75 | Scan_Wifi_Networks(); 76 | 77 | Serial.print( "Time elapsed so far: " ); 78 | Serial.print( millis() / 1000 ); 79 | Serial.println( "sec." ); 80 | delay(30000); 81 | 82 | } 83 | 84 | void Scan_Wifi_Networks( void ) { 85 | 86 | int c = 0; 87 | char myStr[22]; 88 | 89 | // Set WiFi to station mode and disconnect from an AP if it was previously connected 90 | // Need to be in disconnected mode to Run network Scan! 91 | WiFi.mode(WIFI_STA); 92 | WiFi.disconnect(); 93 | delay(100); 94 | 95 | // WiFi.scanNetworks will return the number of networks found 96 | int n = WiFi.scanNetworks(); 97 | Serial.println("Scaning Networks Complete.."); 98 | Serial.print(n); Serial.println(" Networks have been Found"); 99 | sprintf( myStr, "%d APs found\0", n ); 100 | // tft.fillScreen( ST7735_BLACK ); 101 | tft.setCursor( 0, 64 ); 102 | tft.print( myStr ); // display the number of APs found 103 | delay(3000); 104 | 105 | if (n == 0) { 106 | 107 | tft.fillScreen( ST7735_BLACK ); 108 | tft.setCursor( 0, 20 ); 109 | tft.print( "No networks found" ); 110 | Serial.println("No networks found"); 111 | 112 | } else { 113 | 114 | tft.fillScreen( ST7735_BLACK ); 115 | 116 | Serial.print(n); Serial.println(" networks found"); 117 | for( int i=0; i 112) { 142 | delay(10000); 143 | tft.fillScreen( ST7735_BLACK ); 144 | c = 0 ; 145 | } 146 | delay(500); 147 | 148 | } 149 | } 150 | 151 | Serial.println(""); 152 | } 153 | 154 | void ElapsedStr( void ) { 155 | 156 | unsigned long sec, minute, hour; 157 | 158 | sec = millis() / 1000; 159 | minute = ( sec % 3600 ) / 60; 160 | hour = sec / 3600; 161 | sprintf( tmpstr, "Elapsed \0" ); 162 | if ( hour == 0 ) { 163 | sprintf( tmpstr, "%s \0", tmpstr ); 164 | } else { 165 | sprintf( tmpstr, "%s%2d:\0", tmpstr, hour ); 166 | } 167 | if ( minute == 0 ) { 168 | sprintf( tmpstr, "%s \0", tmpstr ); 169 | } else { 170 | sprintf( tmpstr, "%s%2d:\0", tmpstr, minute ); 171 | } 172 | if ( ( sec % 60 ) < 10 ) { 173 | sprintf( tmpstr, "%s0%1d\0", tmpstr, ( sec % 60 ) ); 174 | } else { 175 | sprintf( tmpstr, "%s%2d\0", tmpstr, ( sec % 60 ) ); 176 | } 177 | // sprintf( tmpstr, "Elapsed %2d:%2d:%2d\0", ( sec / 3600 ), ( ( sec % 3600 ) / 60 ), ( sec % 60 ) ); 178 | 179 | } 180 | 181 | 182 | /* 183 | * Arduino (Mini, Nano, Uno) HY-1.8 SPI 184 | * D9 Pin 07 (A0) 185 | * D10 (SS) Pin 10 (CS) 186 | * D11 (MOSI) Pin 08 (SDA) 187 | * D13 (SCK) Pin 09 (SCK) 188 | * D8 Pin 06 (RESET) 189 | */ 190 | -------------------------------------------------------------------------------- /WiFi_TFT_DS18B20/Mozz_TFT_WiFi_DS18B20.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * TFT + WiFi + DS18B20 3 | * 4 | * Copyright (c) 2015. Mario Mikočević 5 | * 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include // nzmichaelh's version - https://github.com/nzmichaelh/Adafruit-ST7735-Library 12 | #include 13 | #include 14 | #include 15 | 16 | const char* ssid = "MozzWiFi"; 17 | const char* pass = "x"; 18 | const char* host = "mozgy.t-com.hr"; 19 | 20 | /* 21 | * ESP8266-12 HY-1.8 SPI 22 | * GPIO5 Pin 06 (RESET) 23 | * GPIO2 Pin 07 (A0) 24 | * GPIO13 (HSPID) Pin 08 (SDA) 25 | * GPIO14 (HSPICLK) Pin 09 (SCK) 26 | * GPIO15 (HSPICS) Pin 10 (CS) 27 | */ 28 | #define TFT_PIN_CS 15 29 | #define TFT_PIN_DC 2 30 | #define TFT_PIN_RST 5 31 | 32 | Adafruit_ST7735 tft = Adafruit_ST7735(TFT_PIN_CS, TFT_PIN_DC, TFT_PIN_RST); 33 | 34 | // (a 4.7K resistor is necessary) 35 | #define ONE_WIRE_BUS 4 36 | 37 | OneWire oneWire( ONE_WIRE_BUS ); 38 | DallasTemperature sensors( &oneWire ); 39 | 40 | char tmpstr[32]; 41 | 42 | uint8_t xTemp, yTemp; 43 | 44 | extern "C" { 45 | #include "user_interface.h" 46 | } 47 | 48 | void setup( void ) { 49 | 50 | // for debuging .. 51 | Serial.begin( 115200 ); 52 | delay(100); 53 | // print out all system information 54 | Serial.println(); 55 | Serial.print("Heap: "); Serial.println(system_get_free_heap_size()); 56 | Serial.print("Boot Vers: "); Serial.println(system_get_boot_version()); 57 | Serial.print("CPU: "); Serial.println(system_get_cpu_freq()); 58 | Serial.println(); 59 | 60 | tft.initR( INITR_BLACKTAB ); 61 | tft.setTextWrap( false ); 62 | tft.setTextColor( ST7735_WHITE ); 63 | tft.setRotation( 3 ); 64 | tft.fillScreen( ST7735_BLACK ); 65 | Serial.println("TFT Init..."); 66 | 67 | sensors.begin(); 68 | Serial.println("DS18B20 Init..."); 69 | 70 | xTemp = 0; 71 | yTemp = 0; 72 | 73 | sprintf( tmpstr, "ChipID %d\0", ESP.getChipId() ); 74 | tft.setCursor( 0, 16 ); 75 | tft.print( tmpstr ); 76 | 77 | Serial.println("Setup done"); 78 | 79 | } 80 | 81 | void loop() { 82 | 83 | float temp; 84 | char t[10]; 85 | 86 | // tft.fillScreen( ST7735_BLACK ); 87 | 88 | sensors.requestTemperatures(); 89 | Serial.print("Temperature for Device 1 is: "); 90 | temp = sensors.getTempCByIndex( 0 ); 91 | Serial.print( temp ); 92 | Serial.println(); 93 | 94 | dtostrf( temp, 3, 2, t); 95 | sprintf( tmpstr, "Temp %s\0", t ); 96 | tft.fillRect( 0, 32, 80, 8, ST7735_BLACK ); 97 | tft.setCursor( 0, 32 ); 98 | tft.print( tmpstr ); 99 | 100 | ElapsedStr(); // form str with hh:mm:ss 101 | tft.fillRect( 0, 40, 96, 8, ST7735_BLACK ); 102 | tft.setCursor( 0, 40 ); 103 | tft.print( tmpstr ); 104 | 105 | // 1°C resolution -10 - +50 106 | // yTemp = 117 - temp + 0; 107 | 108 | // 2°C resolution +5 - +35 109 | // yTemp = 117 - temp * 2 + 30; 110 | 111 | // 3°C resolution +x - +x 112 | yTemp = 117 - temp * 3 + 45; 113 | 114 | tft.drawPixel( xTemp, yTemp, ST7735_YELLOW ); 115 | xTemp++; 116 | if ( xTemp > 150 ) { 117 | xTemp = 0; 118 | tft.fillRect( 0, 60, 151, 60, ST7735_BLACK ); 119 | } 120 | 121 | delay(10000); 122 | 123 | } 124 | 125 | void ElapsedStr( void ) { 126 | 127 | unsigned long sec, minute, hour; 128 | 129 | sec = millis() / 1000; 130 | minute = ( sec % 3600 ) / 60; 131 | hour = sec / 3600; 132 | sprintf( tmpstr, "Elapsed " ); 133 | if ( hour == 0 ) { 134 | sprintf( tmpstr, "%s ", tmpstr ); 135 | } else { 136 | sprintf( tmpstr, "%s%3d:", tmpstr, hour ); 137 | } 138 | if ( minute >= 10 ) { 139 | sprintf( tmpstr, "%s%2d:", tmpstr, minute ); 140 | } else { 141 | if ( hour != 0 ) { 142 | sprintf( tmpstr, "%s0%1d:", tmpstr, minute ); 143 | } else { 144 | sprintf( tmpstr, "%s ", tmpstr ); 145 | if ( minute == 0 ) { 146 | sprintf( tmpstr, "%s ", tmpstr ); 147 | } else { 148 | sprintf( tmpstr, "%s%1d:", tmpstr, minute ); 149 | } 150 | } 151 | } 152 | if ( ( sec % 60 ) < 10 ) { 153 | sprintf( tmpstr, "%s0%1d", tmpstr, ( sec % 60 ) ); 154 | } else { 155 | sprintf( tmpstr, "%s%2d", tmpstr, ( sec % 60 ) ); 156 | } 157 | // sprintf( tmpstr, "Elapsed %2d:%2d:%2d", ( sec / 3600 ), ( ( sec % 3600 ) / 60 ), ( sec % 60 ) ); 158 | 159 | } 160 | -------------------------------------------------------------------------------- /WiFi_TFT_DS18B20/README.md: -------------------------------------------------------------------------------- 1 | Temp scan and print on TFT .. having fun .. 2 | -------------------------------------------------------------------------------- /oval-pcb.dxf: -------------------------------------------------------------------------------- 1 | 999 2 | dxflib 3.7.5.0 3 | 0 4 | SECTION 5 | 2 6 | HEADER 7 | 9 8 | $ACADVER 9 | 1 10 | AC1015 11 | 9 12 | $HANDSEED 13 | 5 14 | FFFF 15 | 9 16 | $DIMADEC 17 | 70 18 | 0 19 | 9 20 | $DIMASZ 21 | 40 22 | 2.5 23 | 9 24 | $DIMAUNIT 25 | 70 26 | 0 27 | 9 28 | $DIMAZIN 29 | 70 30 | 2 31 | 9 32 | $DIMDEC 33 | 70 34 | 4 35 | 9 36 | $DIMEXE 37 | 40 38 | 1.25 39 | 9 40 | $DIMEXO 41 | 40 42 | 0.625 43 | 9 44 | $DIMGAP 45 | 40 46 | 0.625 47 | 9 48 | $DIMLUNIT 49 | 70 50 | 2 51 | 9 52 | $DIMSCALE 53 | 40 54 | 1.0 55 | 9 56 | $DIMTSZ 57 | 40 58 | 0.0 59 | 9 60 | $DIMTXT 61 | 40 62 | 2.5 63 | 9 64 | $DIMZIN 65 | 70 66 | 8 67 | 9 68 | $DWGCODEPAGE 69 | 3 70 | ANSI_1252 71 | 9 72 | $INSUNITS 73 | 70 74 | 4 75 | 9 76 | $LTSCALE 77 | 40 78 | 1.0 79 | 9 80 | $PDMODE 81 | 70 82 | 0 83 | 9 84 | $PDSIZE 85 | 40 86 | 0 87 | 0 88 | ENDSEC 89 | 0 90 | SECTION 91 | 2 92 | TABLES 93 | 0 94 | TABLE 95 | 2 96 | VPORT 97 | 5 98 | 8 99 | 100 100 | AcDbSymbolTable 101 | 70 102 | 1 103 | 0 104 | VPORT 105 | 5 106 | 30 107 | 100 108 | AcDbSymbolTableRecord 109 | 100 110 | AcDbViewportTableRecord 111 | 2 112 | *Active 113 | 70 114 | 0 115 | 10 116 | 0.0 117 | 20 118 | 0.0 119 | 11 120 | 1.0 121 | 21 122 | 1.0 123 | 12 124 | 286.3055555555554861 125 | 22 126 | 148.5 127 | 13 128 | 0.0 129 | 23 130 | 0.0 131 | 14 132 | 10.0 133 | 24 134 | 10.0 135 | 15 136 | 10.0 137 | 25 138 | 10.0 139 | 16 140 | 0.0 141 | 26 142 | 0.0 143 | 36 144 | 1.0 145 | 17 146 | 0.0 147 | 27 148 | 0.0 149 | 37 150 | 0.0 151 | 40 152 | 297.0 153 | 41 154 | 1.92798353909465 155 | 42 156 | 50.0 157 | 43 158 | 0.0 159 | 44 160 | 0.0 161 | 50 162 | 0.0 163 | 51 164 | 0.0 165 | 71 166 | 0 167 | 72 168 | 100 169 | 73 170 | 1 171 | 74 172 | 3 173 | 75 174 | 1 175 | 76 176 | 1 177 | 77 178 | 0 179 | 78 180 | 0 181 | 281 182 | 0 183 | 65 184 | 1 185 | 110 186 | 0.0 187 | 120 188 | 0.0 189 | 130 190 | 0.0 191 | 111 192 | 1.0 193 | 121 194 | 0.0 195 | 131 196 | 0.0 197 | 112 198 | 0.0 199 | 122 200 | 1.0 201 | 132 202 | 0.0 203 | 79 204 | 0 205 | 146 206 | 0.0 207 | 0 208 | ENDTAB 209 | 0 210 | TABLE 211 | 2 212 | LTYPE 213 | 5 214 | 5 215 | 100 216 | AcDbSymbolTable 217 | 70 218 | 50 219 | 0 220 | LTYPE 221 | 5 222 | 16 223 | 100 224 | AcDbSymbolTableRecord 225 | 100 226 | AcDbLinetypeTableRecord 227 | 2 228 | Continuous 229 | 70 230 | 0 231 | 3 232 | Solid line 233 | 72 234 | 65 235 | 73 236 | 0 237 | 40 238 | 0.0 239 | 0 240 | LTYPE 241 | 5 242 | 31 243 | 100 244 | AcDbSymbolTableRecord 245 | 100 246 | AcDbLinetypeTableRecord 247 | 2 248 | ACAD_ISO15W100 249 | 70 250 | 0 251 | 3 252 | ISO double-dash triple-dot __ __ . . . __ __ . . 253 | 72 254 | 65 255 | 73 256 | 10 257 | 40 258 | 39.0 259 | 49 260 | 12.0 261 | 74 262 | 0 263 | 49 264 | -3.0 265 | 74 266 | 0 267 | 49 268 | 12.0 269 | 74 270 | 0 271 | 49 272 | -3.0 273 | 74 274 | 0 275 | 49 276 | 0.0 277 | 74 278 | 0 279 | 49 280 | -3.0 281 | 74 282 | 0 283 | 49 284 | 0.0 285 | 74 286 | 0 287 | 49 288 | -3.0 289 | 74 290 | 0 291 | 49 292 | 0.0 293 | 74 294 | 0 295 | 49 296 | -3.0 297 | 74 298 | 0 299 | 0 300 | LTYPE 301 | 5 302 | 32 303 | 100 304 | AcDbSymbolTableRecord 305 | 100 306 | AcDbLinetypeTableRecord 307 | 2 308 | HOT_WATER_SUPPLY 309 | 70 310 | 0 311 | 3 312 | Hot water supply ---- HW ---- HW ---- HW ---- 313 | 72 314 | 65 315 | 73 316 | 3 317 | 40 318 | 22.8599999999999994 319 | 49 320 | 12.6999999999999993 321 | 74 322 | 0 323 | 49 324 | -5.0800000000000001 325 | 74 326 | 0 327 | 49 328 | -5.0800000000000001 329 | 74 330 | 0 331 | 0 332 | LTYPE 333 | 5 334 | 33 335 | 100 336 | AcDbSymbolTableRecord 337 | 100 338 | AcDbLinetypeTableRecord 339 | 2 340 | DIVIDE 341 | 70 342 | 0 343 | 3 344 | Divide ____ . . ____ . . ____ . . ____ . . ____ 345 | 72 346 | 65 347 | 73 348 | 6 349 | 40 350 | 31.75 351 | 49 352 | 12.6999999999999993 353 | 74 354 | 0 355 | 49 356 | -6.3499999999999996 357 | 74 358 | 0 359 | 49 360 | 0.0 361 | 74 362 | 0 363 | 49 364 | -6.3499999999999996 365 | 74 366 | 0 367 | 49 368 | 0.0 369 | 74 370 | 0 371 | 49 372 | -6.3499999999999996 373 | 74 374 | 0 375 | 0 376 | LTYPE 377 | 5 378 | 34 379 | 100 380 | AcDbSymbolTableRecord 381 | 100 382 | AcDbLinetypeTableRecord 383 | 2 384 | ACAD_ISO10W100 385 | 70 386 | 0 387 | 3 388 | ISO dash dot __ . __ . __ . __ . __ . __ . __ . 389 | 72 390 | 65 391 | 73 392 | 4 393 | 40 394 | 18.0 395 | 49 396 | 12.0 397 | 74 398 | 0 399 | 49 400 | -3.0 401 | 74 402 | 0 403 | 49 404 | 0.0 405 | 74 406 | 0 407 | 49 408 | -3.0 409 | 74 410 | 0 411 | 0 412 | LTYPE 413 | 5 414 | 35 415 | 100 416 | AcDbSymbolTableRecord 417 | 100 418 | AcDbLinetypeTableRecord 419 | 2 420 | GAS_LINE 421 | 70 422 | 0 423 | 3 424 | Gas line ----GAS----GAS----GAS----GAS----GAS----GAS-- 425 | 72 426 | 65 427 | 73 428 | 3 429 | 40 430 | 24.1300000000000026 431 | 49 432 | 12.6999999999999993 433 | 74 434 | 0 435 | 49 436 | -5.0800000000000001 437 | 74 438 | 0 439 | 49 440 | -6.3499999999999996 441 | 74 442 | 0 443 | 0 444 | LTYPE 445 | 5 446 | 36 447 | 100 448 | AcDbSymbolTableRecord 449 | 100 450 | AcDbLinetypeTableRecord 451 | 2 452 | ACAD_ISO04W100 453 | 70 454 | 0 455 | 3 456 | ISO long-dash dot ____ . ____ . ____ . ____ . _ 457 | 72 458 | 65 459 | 73 460 | 4 461 | 40 462 | 30.0 463 | 49 464 | 24.0 465 | 74 466 | 0 467 | 49 468 | -3.0 469 | 74 470 | 0 471 | 49 472 | 0.0 473 | 74 474 | 0 475 | 49 476 | -3.0 477 | 74 478 | 0 479 | 0 480 | LTYPE 481 | 5 482 | 37 483 | 100 484 | AcDbSymbolTableRecord 485 | 100 486 | AcDbLinetypeTableRecord 487 | 2 488 | CENTER2 489 | 70 490 | 0 491 | 3 492 | Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 493 | 72 494 | 65 495 | 73 496 | 4 497 | 40 498 | 28.5750000000000028 499 | 49 500 | 19.0500000000000007 501 | 74 502 | 0 503 | 49 504 | -3.1749999999999998 505 | 74 506 | 0 507 | 49 508 | 3.1749999999999998 509 | 74 510 | 0 511 | 49 512 | -3.1749999999999998 513 | 74 514 | 0 515 | 0 516 | LTYPE 517 | 5 518 | 38 519 | 100 520 | AcDbSymbolTableRecord 521 | 100 522 | AcDbLinetypeTableRecord 523 | 2 524 | ACAD_ISO11W100 525 | 70 526 | 0 527 | 3 528 | ISO double-dash dot __ __ . __ __ . __ __ . __ _ 529 | 72 530 | 65 531 | 73 532 | 6 533 | 40 534 | 33.0 535 | 49 536 | 12.0 537 | 74 538 | 0 539 | 49 540 | -3.0 541 | 74 542 | 0 543 | 49 544 | 12.0 545 | 74 546 | 0 547 | 49 548 | -3.0 549 | 74 550 | 0 551 | 49 552 | 0.0 553 | 74 554 | 0 555 | 49 556 | -3.0 557 | 74 558 | 0 559 | 0 560 | LTYPE 561 | 5 562 | 39 563 | 100 564 | AcDbSymbolTableRecord 565 | 100 566 | AcDbLinetypeTableRecord 567 | 2 568 | HIDDEN2 569 | 70 570 | 0 571 | 3 572 | Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 573 | 72 574 | 65 575 | 73 576 | 2 577 | 40 578 | 4.7624999999999993 579 | 49 580 | 3.1749999999999998 581 | 74 582 | 0 583 | 49 584 | -1.5874999999999999 585 | 74 586 | 0 587 | 0 588 | LTYPE 589 | 5 590 | 3A 591 | 100 592 | AcDbSymbolTableRecord 593 | 100 594 | AcDbLinetypeTableRecord 595 | 2 596 | BORDERX2 597 | 70 598 | 0 599 | 3 600 | Border (2x) ____ ____ . ____ ____ . ___ 601 | 72 602 | 65 603 | 73 604 | 6 605 | 40 606 | 88.8999999999999915 607 | 49 608 | 25.3999999999999986 609 | 74 610 | 0 611 | 49 612 | -12.6999999999999993 613 | 74 614 | 0 615 | 49 616 | 25.3999999999999986 617 | 74 618 | 0 619 | 49 620 | -12.6999999999999993 621 | 74 622 | 0 623 | 49 624 | 0.0 625 | 74 626 | 0 627 | 49 628 | -12.6999999999999993 629 | 74 630 | 0 631 | 0 632 | LTYPE 633 | 5 634 | 3B 635 | 100 636 | AcDbSymbolTableRecord 637 | 100 638 | AcDbLinetypeTableRecord 639 | 2 640 | ACAD_ISO05W100 641 | 70 642 | 0 643 | 3 644 | ISO long-dash double-dot ____ .. ____ .. ____ . 645 | 72 646 | 65 647 | 73 648 | 6 649 | 40 650 | 33.0 651 | 49 652 | 24.0 653 | 74 654 | 0 655 | 49 656 | -3.0 657 | 74 658 | 0 659 | 49 660 | 0.0 661 | 74 662 | 0 663 | 49 664 | -3.0 665 | 74 666 | 0 667 | 49 668 | 0.0 669 | 74 670 | 0 671 | 49 672 | -3.0 673 | 74 674 | 0 675 | 0 676 | LTYPE 677 | 5 678 | 3C 679 | 100 680 | AcDbSymbolTableRecord 681 | 100 682 | AcDbLinetypeTableRecord 683 | 2 684 | DASHDOTX2 685 | 70 686 | 0 687 | 3 688 | Dash dot (2x) ____ . ____ . ____ . ___ 689 | 72 690 | 65 691 | 73 692 | 4 693 | 40 694 | 50.7999999999999972 695 | 49 696 | 25.3999999999999986 697 | 74 698 | 0 699 | 49 700 | -12.6999999999999993 701 | 74 702 | 0 703 | 49 704 | 0.0 705 | 74 706 | 0 707 | 49 708 | -12.6999999999999993 709 | 74 710 | 0 711 | 0 712 | LTYPE 713 | 5 714 | 3D 715 | 100 716 | AcDbSymbolTableRecord 717 | 100 718 | AcDbLinetypeTableRecord 719 | 2 720 | HIDDENX2 721 | 70 722 | 0 723 | 3 724 | Hidden (2x) ____ ____ ____ ____ ____ ____ ____ 725 | 72 726 | 65 727 | 73 728 | 2 729 | 40 730 | 19.0499999999999972 731 | 49 732 | 12.6999999999999993 733 | 74 734 | 0 735 | 49 736 | -6.3499999999999996 737 | 74 738 | 0 739 | 0 740 | LTYPE 741 | 5 742 | 3E 743 | 100 744 | AcDbSymbolTableRecord 745 | 100 746 | AcDbLinetypeTableRecord 747 | 2 748 | CENTERX2 749 | 70 750 | 0 751 | 3 752 | Center (2x) ________ __ ________ __ _____ 753 | 72 754 | 65 755 | 73 756 | 4 757 | 40 758 | 101.6000000000000085 759 | 49 760 | 63.5 761 | 74 762 | 0 763 | 49 764 | -12.6999999999999993 765 | 74 766 | 0 767 | 49 768 | 12.6999999999999993 769 | 74 770 | 0 771 | 49 772 | -12.6999999999999993 773 | 74 774 | 0 775 | 0 776 | LTYPE 777 | 5 778 | 3F 779 | 100 780 | AcDbSymbolTableRecord 781 | 100 782 | AcDbLinetypeTableRecord 783 | 2 784 | BORDER2 785 | 70 786 | 0 787 | 3 788 | Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 789 | 72 790 | 65 791 | 73 792 | 6 793 | 40 794 | 22.2249999999999979 795 | 49 796 | 6.3499999999999996 797 | 74 798 | 0 799 | 49 800 | -3.1749999999999998 801 | 74 802 | 0 803 | 49 804 | 6.3499999999999996 805 | 74 806 | 0 807 | 49 808 | -3.1749999999999998 809 | 74 810 | 0 811 | 49 812 | 0.0 813 | 74 814 | 0 815 | 49 816 | -3.1749999999999998 817 | 74 818 | 0 819 | 0 820 | LTYPE 821 | 5 822 | 40 823 | 100 824 | AcDbSymbolTableRecord 825 | 100 826 | AcDbLinetypeTableRecord 827 | 2 828 | DASHDOT2 829 | 70 830 | 0 831 | 3 832 | Dash dot (.5x) _._._._._._._._._._._._._._._. 833 | 72 834 | 65 835 | 73 836 | 4 837 | 40 838 | 12.6999999999999993 839 | 49 840 | 6.3499999999999996 841 | 74 842 | 0 843 | 49 844 | -3.1749999999999998 845 | 74 846 | 0 847 | 49 848 | 0.0 849 | 74 850 | 0 851 | 49 852 | -3.1749999999999998 853 | 74 854 | 0 855 | 0 856 | LTYPE 857 | 5 858 | 41 859 | 100 860 | AcDbSymbolTableRecord 861 | 100 862 | AcDbLinetypeTableRecord 863 | 2 864 | ACAD_ISO12W100 865 | 70 866 | 0 867 | 3 868 | ISO dash double-dot __ . . __ . . __ . . __ . . 869 | 72 870 | 65 871 | 73 872 | 6 873 | 40 874 | 21.0 875 | 49 876 | 12.0 877 | 74 878 | 0 879 | 49 880 | -3.0 881 | 74 882 | 0 883 | 49 884 | 0.0 885 | 74 886 | 0 887 | 49 888 | -3.0 889 | 74 890 | 0 891 | 49 892 | 0.0 893 | 74 894 | 0 895 | 49 896 | -3.0 897 | 74 898 | 0 899 | 0 900 | LTYPE 901 | 5 902 | 42 903 | 100 904 | AcDbSymbolTableRecord 905 | 100 906 | AcDbLinetypeTableRecord 907 | 2 908 | ACAD_ISO07W100 909 | 70 910 | 0 911 | 3 912 | ISO dot . . . . . . . . . . . . . . . . . . . . 913 | 72 914 | 65 915 | 73 916 | 2 917 | 40 918 | 3.0 919 | 49 920 | 0.0 921 | 74 922 | 0 923 | 49 924 | -3.0 925 | 74 926 | 0 927 | 0 928 | LTYPE 929 | 5 930 | 43 931 | 100 932 | AcDbSymbolTableRecord 933 | 100 934 | AcDbLinetypeTableRecord 935 | 2 936 | ACAD_ISO06W100 937 | 70 938 | 0 939 | 3 940 | ISO long-dash triple-dot ____ ... ____ ... ____ 941 | 72 942 | 65 943 | 73 944 | 8 945 | 40 946 | 36.0 947 | 49 948 | 24.0 949 | 74 950 | 0 951 | 49 952 | -3.0 953 | 74 954 | 0 955 | 49 956 | 0.0 957 | 74 958 | 0 959 | 49 960 | -3.0 961 | 74 962 | 0 963 | 49 964 | 0.0 965 | 74 966 | 0 967 | 49 968 | -3.0 969 | 74 970 | 0 971 | 49 972 | 0.0 973 | 74 974 | 0 975 | 49 976 | -3.0 977 | 74 978 | 0 979 | 0 980 | LTYPE 981 | 5 982 | 44 983 | 100 984 | AcDbSymbolTableRecord 985 | 100 986 | AcDbLinetypeTableRecord 987 | 2 988 | CENTER 989 | 70 990 | 0 991 | 3 992 | Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 993 | 72 994 | 65 995 | 73 996 | 4 997 | 40 998 | 50.8000000000000043 999 | 49 1000 | 31.75 1001 | 74 1002 | 0 1003 | 49 1004 | -6.3499999999999996 1005 | 74 1006 | 0 1007 | 49 1008 | 6.3499999999999996 1009 | 74 1010 | 0 1011 | 49 1012 | -6.3499999999999996 1013 | 74 1014 | 0 1015 | 0 1016 | LTYPE 1017 | 5 1018 | 45 1019 | 100 1020 | AcDbSymbolTableRecord 1021 | 100 1022 | AcDbLinetypeTableRecord 1023 | 2 1024 | HIDDEN 1025 | 70 1026 | 0 1027 | 3 1028 | Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __ 1029 | 72 1030 | 65 1031 | 73 1032 | 2 1033 | 40 1034 | 9.5249999999999986 1035 | 49 1036 | 6.3499999999999996 1037 | 74 1038 | 0 1039 | 49 1040 | -3.1749999999999998 1041 | 74 1042 | 0 1043 | 0 1044 | LTYPE 1045 | 5 1046 | 46 1047 | 100 1048 | AcDbSymbolTableRecord 1049 | 100 1050 | AcDbLinetypeTableRecord 1051 | 2 1052 | DOTX2 1053 | 70 1054 | 0 1055 | 3 1056 | Dot (2x) . . . . . . . . . . . . . . 1057 | 72 1058 | 65 1059 | 73 1060 | 2 1061 | 40 1062 | 12.6999999999999993 1063 | 49 1064 | 0.0 1065 | 74 1066 | 0 1067 | 49 1068 | -12.6999999999999993 1069 | 74 1070 | 0 1071 | 0 1072 | LTYPE 1073 | 5 1074 | 47 1075 | 100 1076 | AcDbSymbolTableRecord 1077 | 100 1078 | AcDbLinetypeTableRecord 1079 | 2 1080 | PHANTOM 1081 | 70 1082 | 0 1083 | 3 1084 | Phantom ______ __ __ ______ __ __ ______ 1085 | 72 1086 | 65 1087 | 73 1088 | 6 1089 | 40 1090 | 63.5000000000000071 1091 | 49 1092 | 31.75 1093 | 74 1094 | 0 1095 | 49 1096 | -6.3499999999999996 1097 | 74 1098 | 0 1099 | 49 1100 | 6.3499999999999996 1101 | 74 1102 | 0 1103 | 49 1104 | -6.3499999999999996 1105 | 74 1106 | 0 1107 | 49 1108 | 6.3499999999999996 1109 | 74 1110 | 0 1111 | 49 1112 | -6.3499999999999996 1113 | 74 1114 | 0 1115 | 0 1116 | LTYPE 1117 | 5 1118 | 48 1119 | 100 1120 | AcDbSymbolTableRecord 1121 | 100 1122 | AcDbLinetypeTableRecord 1123 | 2 1124 | ACAD_ISO08W100 1125 | 70 1126 | 0 1127 | 3 1128 | ISO long-dash short-dash ____ __ ____ __ ____ _ 1129 | 72 1130 | 65 1131 | 73 1132 | 4 1133 | 40 1134 | 36.0 1135 | 49 1136 | 24.0 1137 | 74 1138 | 0 1139 | 49 1140 | -3.0 1141 | 74 1142 | 0 1143 | 49 1144 | 6.0 1145 | 74 1146 | 0 1147 | 49 1148 | -3.0 1149 | 74 1150 | 0 1151 | 0 1152 | LTYPE 1153 | 5 1154 | 49 1155 | 100 1156 | AcDbSymbolTableRecord 1157 | 100 1158 | AcDbLinetypeTableRecord 1159 | 2 1160 | DASHEDX2 1161 | 70 1162 | 0 1163 | 3 1164 | Dashed (2x) ____ ____ ____ ____ ____ ___ 1165 | 72 1166 | 65 1167 | 73 1168 | 2 1169 | 40 1170 | 38.0999999999999943 1171 | 49 1172 | 25.3999999999999986 1173 | 74 1174 | 0 1175 | 49 1176 | -12.6999999999999993 1177 | 74 1178 | 0 1179 | 0 1180 | LTYPE 1181 | 5 1182 | 4A 1183 | 100 1184 | AcDbSymbolTableRecord 1185 | 100 1186 | AcDbLinetypeTableRecord 1187 | 2 1188 | DRAINAGE 1189 | 70 1190 | 0 1191 | 3 1192 | Drainage ---->---->---->---- 1193 | 72 1194 | 65 1195 | 73 1196 | 2 1197 | 40 1198 | 10.1600000000000001 1199 | 49 1200 | 5.0800000000000001 1201 | 74 1202 | 0 1203 | 49 1204 | 5.0800000000000001 1205 | 74 1206 | 0 1207 | 0 1208 | LTYPE 1209 | 5 1210 | 4B 1211 | 100 1212 | AcDbSymbolTableRecord 1213 | 100 1214 | AcDbLinetypeTableRecord 1215 | 2 1216 | ACAD_ISO02W100 1217 | 70 1218 | 0 1219 | 3 1220 | ISO dash __ __ __ __ __ __ __ __ __ __ __ __ __ 1221 | 72 1222 | 65 1223 | 73 1224 | 2 1225 | 40 1226 | 15.0 1227 | 49 1228 | 12.0 1229 | 74 1230 | 0 1231 | 49 1232 | -3.0 1233 | 74 1234 | 0 1235 | 0 1236 | LTYPE 1237 | 5 1238 | 4C 1239 | 100 1240 | AcDbSymbolTableRecord 1241 | 100 1242 | AcDbLinetypeTableRecord 1243 | 2 1244 | PHANTOM2 1245 | 70 1246 | 0 1247 | 3 1248 | Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _ 1249 | 72 1250 | 65 1251 | 73 1252 | 6 1253 | 40 1254 | 31.7500000000000036 1255 | 49 1256 | 15.875 1257 | 74 1258 | 0 1259 | 49 1260 | -3.1749999999999998 1261 | 74 1262 | 0 1263 | 49 1264 | 3.1749999999999998 1265 | 74 1266 | 0 1267 | 49 1268 | -3.1749999999999998 1269 | 74 1270 | 0 1271 | 49 1272 | 3.1749999999999998 1273 | 74 1274 | 0 1275 | 49 1276 | -3.1749999999999998 1277 | 74 1278 | 0 1279 | 0 1280 | LTYPE 1281 | 5 1282 | 4D 1283 | 100 1284 | AcDbSymbolTableRecord 1285 | 100 1286 | AcDbLinetypeTableRecord 1287 | 2 1288 | DASHED2 1289 | 70 1290 | 0 1291 | 3 1292 | Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1293 | 72 1294 | 65 1295 | 73 1296 | 2 1297 | 40 1298 | 9.5249999999999986 1299 | 49 1300 | 6.3499999999999996 1301 | 74 1302 | 0 1303 | 49 1304 | -3.1749999999999998 1305 | 74 1306 | 0 1307 | 0 1308 | LTYPE 1309 | 5 1310 | 4E 1311 | 100 1312 | AcDbSymbolTableRecord 1313 | 100 1314 | AcDbLinetypeTableRecord 1315 | 2 1316 | ACAD_ISO09W100 1317 | 70 1318 | 0 1319 | 3 1320 | ISO long-dash double-short-dash ____ __ __ ____ 1321 | 72 1322 | 65 1323 | 73 1324 | 6 1325 | 40 1326 | 45.0 1327 | 49 1328 | 24.0 1329 | 74 1330 | 0 1331 | 49 1332 | -3.0 1333 | 74 1334 | 0 1335 | 49 1336 | 6.0 1337 | 74 1338 | 0 1339 | 49 1340 | -3.0 1341 | 74 1342 | 0 1343 | 49 1344 | 6.0 1345 | 74 1346 | 0 1347 | 49 1348 | -3.0 1349 | 74 1350 | 0 1351 | 0 1352 | LTYPE 1353 | 5 1354 | 4F 1355 | 100 1356 | AcDbSymbolTableRecord 1357 | 100 1358 | AcDbLinetypeTableRecord 1359 | 2 1360 | ACAD_ISO13W100 1361 | 70 1362 | 0 1363 | 3 1364 | ISO double-dash double-dot __ __ . . __ __ . . _ 1365 | 72 1366 | 65 1367 | 73 1368 | 8 1369 | 40 1370 | 36.0 1371 | 49 1372 | 12.0 1373 | 74 1374 | 0 1375 | 49 1376 | -3.0 1377 | 74 1378 | 0 1379 | 49 1380 | 12.0 1381 | 74 1382 | 0 1383 | 49 1384 | -3.0 1385 | 74 1386 | 0 1387 | 49 1388 | 0.0 1389 | 74 1390 | 0 1391 | 49 1392 | -3.0 1393 | 74 1394 | 0 1395 | 49 1396 | 0.0 1397 | 74 1398 | 0 1399 | 49 1400 | -3.0 1401 | 74 1402 | 0 1403 | 0 1404 | LTYPE 1405 | 5 1406 | 50 1407 | 100 1408 | AcDbSymbolTableRecord 1409 | 100 1410 | AcDbLinetypeTableRecord 1411 | 2 1412 | TRACKS 1413 | 70 1414 | 0 1415 | 3 1416 | Tracks -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|- 1417 | 72 1418 | 65 1419 | 73 1420 | 2 1421 | 40 1422 | 7.6200000000000001 1423 | 49 1424 | 3.8100000000000001 1425 | 74 1426 | 0 1427 | 49 1428 | 3.8100000000000001 1429 | 74 1430 | 0 1431 | 0 1432 | LTYPE 1433 | 5 1434 | 51 1435 | 100 1436 | AcDbSymbolTableRecord 1437 | 100 1438 | AcDbLinetypeTableRecord 1439 | 2 1440 | DRAINAGE2 1441 | 70 1442 | 0 1443 | 3 1444 | Drainage reversed----<----<----<---- 1445 | 72 1446 | 65 1447 | 73 1448 | 2 1449 | 40 1450 | 10.1600000000000001 1451 | 49 1452 | 5.0800000000000001 1453 | 74 1454 | 0 1455 | 49 1456 | 5.0800000000000001 1457 | 74 1458 | 0 1459 | 0 1460 | LTYPE 1461 | 5 1462 | 52 1463 | 100 1464 | AcDbSymbolTableRecord 1465 | 100 1466 | AcDbLinetypeTableRecord 1467 | 2 1468 | DOT2 1469 | 70 1470 | 0 1471 | 3 1472 | Dot (.5x) ........................................ 1473 | 72 1474 | 65 1475 | 73 1476 | 2 1477 | 40 1478 | 3.1749999999999998 1479 | 49 1480 | 0.0 1481 | 74 1482 | 0 1483 | 49 1484 | -3.1749999999999998 1485 | 74 1486 | 0 1487 | 0 1488 | LTYPE 1489 | 5 1490 | 53 1491 | 100 1492 | AcDbSymbolTableRecord 1493 | 100 1494 | AcDbLinetypeTableRecord 1495 | 2 1496 | ZIGZAG 1497 | 70 1498 | 0 1499 | 3 1500 | Zig zag /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ 1501 | 72 1502 | 65 1503 | 73 1504 | 4 1505 | 40 1506 | 20.32254 1507 | 49 1508 | 0.00254 1509 | 74 1510 | 0 1511 | 49 1512 | -5.0800000000000001 1513 | 74 1514 | 0 1515 | 49 1516 | -10.1600000000000001 1517 | 74 1518 | 0 1519 | 49 1520 | -5.0800000000000001 1521 | 74 1522 | 0 1523 | 0 1524 | LTYPE 1525 | 5 1526 | 54 1527 | 100 1528 | AcDbSymbolTableRecord 1529 | 100 1530 | AcDbLinetypeTableRecord 1531 | 2 1532 | DASHED 1533 | 70 1534 | 0 1535 | 3 1536 | Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 1537 | 72 1538 | 65 1539 | 73 1540 | 2 1541 | 40 1542 | 19.0499999999999972 1543 | 49 1544 | 12.6999999999999993 1545 | 74 1546 | 0 1547 | 49 1548 | -6.3499999999999996 1549 | 74 1550 | 0 1551 | 0 1552 | LTYPE 1553 | 5 1554 | 55 1555 | 100 1556 | AcDbSymbolTableRecord 1557 | 100 1558 | AcDbLinetypeTableRecord 1559 | 2 1560 | ACAD_ISO14W100 1561 | 70 1562 | 0 1563 | 3 1564 | ISO dash triple-dot __ . . . __ . . . __ . . . _ 1565 | 72 1566 | 65 1567 | 73 1568 | 8 1569 | 40 1570 | 24.0 1571 | 49 1572 | 12.0 1573 | 74 1574 | 0 1575 | 49 1576 | -3.0 1577 | 74 1578 | 0 1579 | 49 1580 | 0.0 1581 | 74 1582 | 0 1583 | 49 1584 | -3.0 1585 | 74 1586 | 0 1587 | 49 1588 | 0.0 1589 | 74 1590 | 0 1591 | 49 1592 | -3.0 1593 | 74 1594 | 0 1595 | 49 1596 | 0.0 1597 | 74 1598 | 0 1599 | 49 1600 | -3.0 1601 | 74 1602 | 0 1603 | 0 1604 | LTYPE 1605 | 5 1606 | 15 1607 | 100 1608 | AcDbSymbolTableRecord 1609 | 100 1610 | AcDbLinetypeTableRecord 1611 | 2 1612 | BYLAYER 1613 | 70 1614 | 0 1615 | 3 1616 | 1617 | 72 1618 | 65 1619 | 73 1620 | 0 1621 | 40 1622 | 0.0 1623 | 0 1624 | LTYPE 1625 | 5 1626 | 56 1627 | 100 1628 | AcDbSymbolTableRecord 1629 | 100 1630 | AcDbLinetypeTableRecord 1631 | 2 1632 | PHANTOMX2 1633 | 70 1634 | 0 1635 | 3 1636 | Phantom (2x) ____________ ____ ____ _ 1637 | 72 1638 | 65 1639 | 73 1640 | 6 1641 | 40 1642 | 127.0000000000000142 1643 | 49 1644 | 63.5 1645 | 74 1646 | 0 1647 | 49 1648 | -12.6999999999999993 1649 | 74 1650 | 0 1651 | 49 1652 | 12.6999999999999993 1653 | 74 1654 | 0 1655 | 49 1656 | -12.6999999999999993 1657 | 74 1658 | 0 1659 | 49 1660 | 12.6999999999999993 1661 | 74 1662 | 0 1663 | 49 1664 | -12.6999999999999993 1665 | 74 1666 | 0 1667 | 0 1668 | LTYPE 1669 | 5 1670 | 14 1671 | 100 1672 | AcDbSymbolTableRecord 1673 | 100 1674 | AcDbLinetypeTableRecord 1675 | 2 1676 | BYBLOCK 1677 | 70 1678 | 0 1679 | 3 1680 | 1681 | 72 1682 | 65 1683 | 73 1684 | 0 1685 | 40 1686 | 0.0 1687 | 0 1688 | LTYPE 1689 | 5 1690 | 57 1691 | 100 1692 | AcDbSymbolTableRecord 1693 | 100 1694 | AcDbLinetypeTableRecord 1695 | 2 1696 | DIVIDEX2 1697 | 70 1698 | 0 1699 | 3 1700 | Divide (2x) ________ . . ________ . . _ 1701 | 72 1702 | 65 1703 | 73 1704 | 6 1705 | 40 1706 | 63.5 1707 | 49 1708 | 25.3999999999999986 1709 | 74 1710 | 0 1711 | 49 1712 | -12.6999999999999993 1713 | 74 1714 | 0 1715 | 49 1716 | 0.0 1717 | 74 1718 | 0 1719 | 49 1720 | -12.6999999999999993 1721 | 74 1722 | 0 1723 | 49 1724 | 0.0 1725 | 74 1726 | 0 1727 | 49 1728 | -12.6999999999999993 1729 | 74 1730 | 0 1731 | 0 1732 | LTYPE 1733 | 5 1734 | 58 1735 | 100 1736 | AcDbSymbolTableRecord 1737 | 100 1738 | AcDbLinetypeTableRecord 1739 | 2 1740 | BORDER 1741 | 70 1742 | 0 1743 | 3 1744 | Border __ __ . __ __ . __ __ . __ __ . __ __ . 1745 | 72 1746 | 65 1747 | 73 1748 | 6 1749 | 40 1750 | 44.4499999999999957 1751 | 49 1752 | 12.6999999999999993 1753 | 74 1754 | 0 1755 | 49 1756 | -6.3499999999999996 1757 | 74 1758 | 0 1759 | 49 1760 | 12.6999999999999993 1761 | 74 1762 | 0 1763 | 49 1764 | -6.3499999999999996 1765 | 74 1766 | 0 1767 | 49 1768 | 0.0 1769 | 74 1770 | 0 1771 | 49 1772 | -6.3499999999999996 1773 | 74 1774 | 0 1775 | 0 1776 | LTYPE 1777 | 5 1778 | 59 1779 | 100 1780 | AcDbSymbolTableRecord 1781 | 100 1782 | AcDbLinetypeTableRecord 1783 | 2 1784 | DIVIDE2 1785 | 70 1786 | 0 1787 | 3 1788 | Divide (.5x) __..__..__..__..__..__..__..__.._ 1789 | 72 1790 | 65 1791 | 73 1792 | 6 1793 | 40 1794 | 15.875 1795 | 49 1796 | 6.3499999999999996 1797 | 74 1798 | 0 1799 | 49 1800 | -3.1749999999999998 1801 | 74 1802 | 0 1803 | 49 1804 | 0.0 1805 | 74 1806 | 0 1807 | 49 1808 | -3.1749999999999998 1809 | 74 1810 | 0 1811 | 49 1812 | 0.0 1813 | 74 1814 | 0 1815 | 49 1816 | -3.1749999999999998 1817 | 74 1818 | 0 1819 | 0 1820 | LTYPE 1821 | 5 1822 | 5A 1823 | 100 1824 | AcDbSymbolTableRecord 1825 | 100 1826 | AcDbLinetypeTableRecord 1827 | 2 1828 | DOT 1829 | 70 1830 | 0 1831 | 3 1832 | Dot . . . . . . . . . . . . . . . . . . . . . . . . 1833 | 72 1834 | 65 1835 | 73 1836 | 2 1837 | 40 1838 | 6.3499999999999996 1839 | 49 1840 | 0.0 1841 | 74 1842 | 0 1843 | 49 1844 | -6.3499999999999996 1845 | 74 1846 | 0 1847 | 0 1848 | LTYPE 1849 | 5 1850 | 5B 1851 | 100 1852 | AcDbSymbolTableRecord 1853 | 100 1854 | AcDbLinetypeTableRecord 1855 | 2 1856 | DASHDOT 1857 | 70 1858 | 0 1859 | 3 1860 | Dash dot __ . __ . __ . __ . __ . __ . __ . __ 1861 | 72 1862 | 65 1863 | 73 1864 | 4 1865 | 40 1866 | 25.3999999999999986 1867 | 49 1868 | 12.6999999999999993 1869 | 74 1870 | 0 1871 | 49 1872 | -6.3499999999999996 1873 | 74 1874 | 0 1875 | 49 1876 | 0.0 1877 | 74 1878 | 0 1879 | 49 1880 | -6.3499999999999996 1881 | 74 1882 | 0 1883 | 0 1884 | LTYPE 1885 | 5 1886 | 5C 1887 | 100 1888 | AcDbSymbolTableRecord 1889 | 100 1890 | AcDbLinetypeTableRecord 1891 | 2 1892 | FENCELINE1 1893 | 70 1894 | 0 1895 | 3 1896 | Fenceline circle ----0-----0----0-----0----0-----0-- 1897 | 72 1898 | 65 1899 | 73 1900 | 4 1901 | 40 1902 | 36.8299999999999983 1903 | 49 1904 | 6.3499999999999996 1905 | 74 1906 | 0 1907 | 49 1908 | -2.54 1909 | 74 1910 | 0 1911 | 49 1912 | -2.54 1913 | 74 1914 | 0 1915 | 49 1916 | 25.3999999999999986 1917 | 74 1918 | 0 1919 | 0 1920 | LTYPE 1921 | 5 1922 | 5D 1923 | 100 1924 | AcDbSymbolTableRecord 1925 | 100 1926 | AcDbLinetypeTableRecord 1927 | 2 1928 | BATTING 1929 | 70 1930 | 0 1931 | 3 1932 | Batting SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 1933 | 72 1934 | 65 1935 | 73 1936 | 4 1937 | 40 1938 | 10.1625399999999999 1939 | 49 1940 | 0.00254 1941 | 74 1942 | 0 1943 | 49 1944 | -2.54 1945 | 74 1946 | 0 1947 | 49 1948 | -5.0800000000000001 1949 | 74 1950 | 0 1951 | 49 1952 | -2.54 1953 | 74 1954 | 0 1955 | 0 1956 | LTYPE 1957 | 5 1958 | 5E 1959 | 100 1960 | AcDbSymbolTableRecord 1961 | 100 1962 | AcDbLinetypeTableRecord 1963 | 2 1964 | ACAD_ISO03W100 1965 | 70 1966 | 0 1967 | 3 1968 | ISO dash space __ __ __ __ __ __ 1969 | 72 1970 | 65 1971 | 73 1972 | 2 1973 | 40 1974 | 30.0 1975 | 49 1976 | 12.0 1977 | 74 1978 | 0 1979 | 49 1980 | -18.0 1981 | 74 1982 | 0 1983 | 0 1984 | LTYPE 1985 | 5 1986 | 5F 1987 | 100 1988 | AcDbSymbolTableRecord 1989 | 100 1990 | AcDbLinetypeTableRecord 1991 | 2 1992 | FENCELINE2 1993 | 70 1994 | 0 1995 | 3 1996 | Fenceline square ----[]-----[]----[]-----[]----[]--- 1997 | 72 1998 | 65 1999 | 73 2000 | 4 2001 | 40 2002 | 36.8299999999999983 2003 | 49 2004 | 6.3499999999999996 2005 | 74 2006 | 0 2007 | 49 2008 | -2.54 2009 | 74 2010 | 0 2011 | 49 2012 | -2.54 2013 | 74 2014 | 0 2015 | 49 2016 | 25.3999999999999986 2017 | 74 2018 | 0 2019 | 0 2020 | ENDTAB 2021 | 0 2022 | TABLE 2023 | 2 2024 | LAYER 2025 | 5 2026 | 2 2027 | 100 2028 | AcDbSymbolTable 2029 | 70 2030 | 1 2031 | 0 2032 | LAYER 2033 | 5 2034 | 10 2035 | 100 2036 | AcDbSymbolTableRecord 2037 | 100 2038 | AcDbLayerTableRecord 2039 | 2 2040 | 0 2041 | 70 2042 | 0 2043 | 62 2044 | 7 2045 | 420 2046 | 16777215 2047 | 6 2048 | Continuous 2049 | 370 2050 | 25 2051 | 390 2052 | F 2053 | 0 2054 | ENDTAB 2055 | 0 2056 | TABLE 2057 | 2 2058 | STYLE 2059 | 5 2060 | 3 2061 | 100 2062 | AcDbSymbolTable 2063 | 70 2064 | 1 2065 | 0 2066 | STYLE 2067 | 5 2068 | 60 2069 | 100 2070 | AcDbSymbolTableRecord 2071 | 100 2072 | AcDbTextStyleTableRecord 2073 | 2 2074 | Standard 2075 | 70 2076 | 0 2077 | 40 2078 | 0.0 2079 | 41 2080 | 1.0 2081 | 50 2082 | 0.0 2083 | 71 2084 | 0 2085 | 42 2086 | 2.5 2087 | 3 2088 | 2089 | 4 2090 | 2091 | 1001 2092 | ACAD 2093 | 1000 2094 | txt 2095 | 1071 2096 | 0 2097 | 0 2098 | ENDTAB 2099 | 0 2100 | TABLE 2101 | 2 2102 | VIEW 2103 | 5 2104 | 6 2105 | 100 2106 | AcDbSymbolTable 2107 | 70 2108 | 0 2109 | 0 2110 | ENDTAB 2111 | 0 2112 | TABLE 2113 | 2 2114 | UCS 2115 | 5 2116 | 7 2117 | 100 2118 | AcDbSymbolTable 2119 | 70 2120 | 0 2121 | 0 2122 | ENDTAB 2123 | 0 2124 | TABLE 2125 | 2 2126 | APPID 2127 | 5 2128 | 9 2129 | 100 2130 | AcDbSymbolTable 2131 | 70 2132 | 1 2133 | 0 2134 | APPID 2135 | 5 2136 | 12 2137 | 100 2138 | AcDbSymbolTableRecord 2139 | 100 2140 | AcDbRegAppTableRecord 2141 | 2 2142 | ACAD 2143 | 70 2144 | 0 2145 | 0 2146 | APPID 2147 | 5 2148 | 61 2149 | 100 2150 | AcDbSymbolTableRecord 2151 | 100 2152 | AcDbRegAppTableRecord 2153 | 2 2154 | QCAD 2155 | 70 2156 | 0 2157 | 0 2158 | ENDTAB 2159 | 0 2160 | TABLE 2161 | 2 2162 | DIMSTYLE 2163 | 5 2164 | A 2165 | 100 2166 | AcDbSymbolTable 2167 | 70 2168 | 1 2169 | 100 2170 | AcDbDimStyleTable 2171 | 71 2172 | 0 2173 | 0 2174 | DIMSTYLE 2175 | 105 2176 | 27 2177 | 100 2178 | AcDbSymbolTableRecord 2179 | 100 2180 | AcDbDimStyleTableRecord 2181 | 2 2182 | Standard 2183 | 41 2184 | 2.5 2185 | 42 2186 | 0.625 2187 | 43 2188 | 3.75 2189 | 44 2190 | 1.25 2191 | 70 2192 | 0 2193 | 73 2194 | 0 2195 | 74 2196 | 0 2197 | 77 2198 | 1 2199 | 78 2200 | 8 2201 | 140 2202 | 2.5 2203 | 141 2204 | 2.5 2205 | 143 2206 | 0.03937007874016 2207 | 147 2208 | 0.625 2209 | 171 2210 | 3 2211 | 172 2212 | 1 2213 | 271 2214 | 2 2215 | 272 2216 | 2 2217 | 274 2218 | 3 2219 | 278 2220 | 44 2221 | 283 2222 | 0 2223 | 284 2224 | 8 2225 | 340 2226 | 60 2227 | 0 2228 | ENDTAB 2229 | 0 2230 | TABLE 2231 | 2 2232 | BLOCK_RECORD 2233 | 5 2234 | 1 2235 | 100 2236 | AcDbSymbolTable 2237 | 70 2238 | 1 2239 | 0 2240 | BLOCK_RECORD 2241 | 5 2242 | 1F 2243 | 100 2244 | AcDbSymbolTableRecord 2245 | 100 2246 | AcDbBlockTableRecord 2247 | 2 2248 | *Model_Space 2249 | 340 2250 | 22 2251 | 0 2252 | BLOCK_RECORD 2253 | 5 2254 | 1B 2255 | 100 2256 | AcDbSymbolTableRecord 2257 | 100 2258 | AcDbBlockTableRecord 2259 | 2 2260 | *Paper_Space 2261 | 340 2262 | 1E 2263 | 0 2264 | BLOCK_RECORD 2265 | 5 2266 | 23 2267 | 100 2268 | AcDbSymbolTableRecord 2269 | 100 2270 | AcDbBlockTableRecord 2271 | 2 2272 | *Paper_Space0 2273 | 340 2274 | 26 2275 | 0 2276 | ENDTAB 2277 | 0 2278 | ENDSEC 2279 | 0 2280 | SECTION 2281 | 2 2282 | BLOCKS 2283 | 0 2284 | BLOCK 2285 | 5 2286 | 20 2287 | 100 2288 | AcDbEntity 2289 | 8 2290 | 0 2291 | 100 2292 | AcDbBlockBegin 2293 | 2 2294 | *Model_Space 2295 | 70 2296 | 0 2297 | 10 2298 | 0.0 2299 | 20 2300 | 0.0 2301 | 30 2302 | 0.0 2303 | 3 2304 | *Model_Space 2305 | 1 2306 | 2307 | 0 2308 | ENDBLK 2309 | 5 2310 | 21 2311 | 100 2312 | AcDbEntity 2313 | 8 2314 | 0 2315 | 100 2316 | AcDbBlockEnd 2317 | 0 2318 | BLOCK 2319 | 5 2320 | 1C 2321 | 100 2322 | AcDbEntity 2323 | 67 2324 | 1 2325 | 8 2326 | 0 2327 | 100 2328 | AcDbBlockBegin 2329 | 2 2330 | *Paper_Space 2331 | 70 2332 | 0 2333 | 10 2334 | 0.0 2335 | 20 2336 | 0.0 2337 | 30 2338 | 0.0 2339 | 3 2340 | *Paper_Space 2341 | 1 2342 | 2343 | 0 2344 | ENDBLK 2345 | 5 2346 | 1D 2347 | 100 2348 | AcDbEntity 2349 | 67 2350 | 1 2351 | 8 2352 | 0 2353 | 100 2354 | AcDbBlockEnd 2355 | 0 2356 | BLOCK 2357 | 5 2358 | 24 2359 | 100 2360 | AcDbEntity 2361 | 8 2362 | 0 2363 | 100 2364 | AcDbBlockBegin 2365 | 2 2366 | *Paper_Space0 2367 | 70 2368 | 0 2369 | 10 2370 | 0.0 2371 | 20 2372 | 0.0 2373 | 30 2374 | 0.0 2375 | 3 2376 | *Paper_Space0 2377 | 1 2378 | 2379 | 0 2380 | ENDBLK 2381 | 5 2382 | 25 2383 | 100 2384 | AcDbEntity 2385 | 8 2386 | 0 2387 | 100 2388 | AcDbBlockEnd 2389 | 0 2390 | ENDSEC 2391 | 0 2392 | SECTION 2393 | 2 2394 | ENTITIES 2395 | 0 2396 | ARC 2397 | 5 2398 | 62 2399 | 100 2400 | AcDbEntity 2401 | 8 2402 | 0 2403 | 62 2404 | 256 2405 | 370 2406 | -1 2407 | 48 2408 | 1.0 2409 | 6 2410 | BYLAYER 2411 | 100 2412 | AcDbCircle 2413 | 10 2414 | 3.0000000000000013 2415 | 20 2416 | 13.0 2417 | 30 2418 | 0.0 2419 | 40 2420 | 3.0000000000000013 2421 | 100 2422 | AcDbArc 2423 | 50 2424 | 180.0 2425 | 51 2426 | 270.0 2427 | 0 2428 | ARC 2429 | 5 2430 | 63 2431 | 100 2432 | AcDbEntity 2433 | 8 2434 | 0 2435 | 62 2436 | 256 2437 | 370 2438 | -1 2439 | 48 2440 | 1.0 2441 | 6 2442 | BYLAYER 2443 | 100 2444 | AcDbCircle 2445 | 10 2446 | 37.0 2447 | 20 2448 | 27.0 2449 | 30 2450 | 0.0 2451 | 40 2452 | 3.0 2453 | 100 2454 | AcDbArc 2455 | 50 2456 | 0.0 2457 | 51 2458 | 90.0 2459 | 0 2460 | ARC 2461 | 5 2462 | 64 2463 | 100 2464 | AcDbEntity 2465 | 8 2466 | 0 2467 | 62 2468 | 256 2469 | 370 2470 | -1 2471 | 48 2472 | 1.0 2473 | 6 2474 | BYLAYER 2475 | 100 2476 | AcDbCircle 2477 | 10 2478 | 37.0 2479 | 20 2480 | 13.0 2481 | 30 2482 | 0.0 2483 | 40 2484 | 3.0 2485 | 100 2486 | AcDbArc 2487 | 50 2488 | 270.0 2489 | 51 2490 | 0.0 2491 | 0 2492 | ARC 2493 | 5 2494 | 65 2495 | 100 2496 | AcDbEntity 2497 | 8 2498 | 0 2499 | 62 2500 | 256 2501 | 370 2502 | -1 2503 | 48 2504 | 1.0 2505 | 6 2506 | BYLAYER 2507 | 100 2508 | AcDbCircle 2509 | 10 2510 | 3.0 2511 | 20 2512 | 27.0 2513 | 30 2514 | 0.0 2515 | 40 2516 | 3.0 2517 | 100 2518 | AcDbArc 2519 | 50 2520 | 90.0 2521 | 51 2522 | 180.0 2523 | 0 2524 | LINE 2525 | 5 2526 | 66 2527 | 100 2528 | AcDbEntity 2529 | 100 2530 | AcDbLine 2531 | 8 2532 | 0 2533 | 62 2534 | 256 2535 | 370 2536 | -1 2537 | 48 2538 | 1.0 2539 | 6 2540 | BYLAYER 2541 | 10 2542 | 3.0 2543 | 20 2544 | 30.0 2545 | 30 2546 | 0.0 2547 | 11 2548 | 37.0 2549 | 21 2550 | 30.0 2551 | 31 2552 | 0.0 2553 | 0 2554 | LINE 2555 | 5 2556 | 67 2557 | 100 2558 | AcDbEntity 2559 | 100 2560 | AcDbLine 2561 | 8 2562 | 0 2563 | 62 2564 | 256 2565 | 370 2566 | -1 2567 | 48 2568 | 1.0 2569 | 6 2570 | BYLAYER 2571 | 10 2572 | 40.0 2573 | 20 2574 | 27.0 2575 | 30 2576 | 0.0 2577 | 11 2578 | 40.0 2579 | 21 2580 | 13.0 2581 | 31 2582 | 0.0 2583 | 0 2584 | LINE 2585 | 5 2586 | 68 2587 | 100 2588 | AcDbEntity 2589 | 100 2590 | AcDbLine 2591 | 8 2592 | 0 2593 | 62 2594 | 256 2595 | 370 2596 | -1 2597 | 48 2598 | 1.0 2599 | 6 2600 | BYLAYER 2601 | 10 2602 | 3.0000000000000009 2603 | 20 2604 | 9.9999999999999982 2605 | 30 2606 | 0.0 2607 | 11 2608 | 37.0 2609 | 21 2610 | 10.0 2611 | 31 2612 | 0.0 2613 | 0 2614 | LINE 2615 | 5 2616 | 69 2617 | 100 2618 | AcDbEntity 2619 | 100 2620 | AcDbLine 2621 | 8 2622 | 0 2623 | 62 2624 | 256 2625 | 370 2626 | -1 2627 | 48 2628 | 1.0 2629 | 6 2630 | BYLAYER 2631 | 10 2632 | 0.0 2633 | 20 2634 | 27.0 2635 | 30 2636 | 0.0 2637 | 11 2638 | 0.0 2639 | 21 2640 | 13.0 2641 | 31 2642 | 0.0 2643 | 0 2644 | ENDSEC 2645 | 0 2646 | SECTION 2647 | 2 2648 | OBJECTS 2649 | 0 2650 | DICTIONARY 2651 | 5 2652 | C 2653 | 100 2654 | AcDbDictionary 2655 | 280 2656 | 0 2657 | 281 2658 | 1 2659 | 3 2660 | ACAD_GROUP 2661 | 350 2662 | D 2663 | 3 2664 | ACAD_LAYOUT 2665 | 350 2666 | 1A 2667 | 3 2668 | ACAD_MLINESTYLE 2669 | 350 2670 | 17 2671 | 3 2672 | ACAD_PLOTSETTINGS 2673 | 350 2674 | 19 2675 | 3 2676 | ACAD_PLOTSTYLENAME 2677 | 350 2678 | E 2679 | 3 2680 | AcDbVariableDictionary 2681 | 350 2682 | 6A 2683 | 3 2684 | QCAD_OBJECTS 2685 | 350 2686 | 6B 2687 | 0 2688 | DICTIONARY 2689 | 5 2690 | D 2691 | 100 2692 | AcDbDictionary 2693 | 280 2694 | 0 2695 | 281 2696 | 1 2697 | 0 2698 | ACDBDICTIONARYWDFLT 2699 | 5 2700 | E 2701 | 100 2702 | AcDbDictionary 2703 | 281 2704 | 1 2705 | 3 2706 | Normal 2707 | 350 2708 | F 2709 | 100 2710 | AcDbDictionaryWithDefault 2711 | 340 2712 | F 2713 | 0 2714 | ACDBPLACEHOLDER 2715 | 5 2716 | F 2717 | 0 2718 | DICTIONARY 2719 | 5 2720 | 17 2721 | 100 2722 | AcDbDictionary 2723 | 280 2724 | 0 2725 | 281 2726 | 1 2727 | 3 2728 | Standard 2729 | 350 2730 | 18 2731 | 0 2732 | MLINESTYLE 2733 | 5 2734 | 18 2735 | 100 2736 | AcDbMlineStyle 2737 | 2 2738 | STANDARD 2739 | 70 2740 | 0 2741 | 3 2742 | 2743 | 62 2744 | 256 2745 | 51 2746 | 90.0 2747 | 52 2748 | 90.0 2749 | 71 2750 | 2 2751 | 49 2752 | 0.5 2753 | 62 2754 | 256 2755 | 6 2756 | BYLAYER 2757 | 49 2758 | -0.5 2759 | 62 2760 | 256 2761 | 6 2762 | BYLAYER 2763 | 0 2764 | DICTIONARY 2765 | 5 2766 | 19 2767 | 100 2768 | AcDbDictionary 2769 | 280 2770 | 0 2771 | 281 2772 | 1 2773 | 0 2774 | DICTIONARY 2775 | 5 2776 | 1A 2777 | 100 2778 | AcDbDictionary 2779 | 281 2780 | 1 2781 | 3 2782 | Layout1 2783 | 350 2784 | 1E 2785 | 3 2786 | Layout2 2787 | 350 2788 | 26 2789 | 3 2790 | Model 2791 | 350 2792 | 22 2793 | 0 2794 | LAYOUT 2795 | 5 2796 | 1E 2797 | 100 2798 | AcDbPlotSettings 2799 | 1 2800 | 2801 | 2 2802 | none_device 2803 | 4 2804 | 2805 | 6 2806 | 2807 | 40 2808 | 0.0 2809 | 41 2810 | 0.0 2811 | 42 2812 | 0.0 2813 | 43 2814 | 0.0 2815 | 44 2816 | 0.0 2817 | 45 2818 | 0.0 2819 | 46 2820 | 0.0 2821 | 47 2822 | 0.0 2823 | 48 2824 | 0.0 2825 | 49 2826 | 0.0 2827 | 140 2828 | 0.0 2829 | 141 2830 | 0.0 2831 | 142 2832 | 1.0 2833 | 143 2834 | 1.0 2835 | 70 2836 | 688 2837 | 72 2838 | 0 2839 | 73 2840 | 0 2841 | 74 2842 | 5 2843 | 7 2844 | 2845 | 75 2846 | 16 2847 | 147 2848 | 1.0 2849 | 148 2850 | 0.0 2851 | 149 2852 | 0.0 2853 | 100 2854 | AcDbLayout 2855 | 1 2856 | Layout1 2857 | 70 2858 | 1 2859 | 71 2860 | 1 2861 | 10 2862 | 0.0 2863 | 20 2864 | 0.0 2865 | 11 2866 | 420.0 2867 | 21 2868 | 297.0 2869 | 12 2870 | 0.0 2871 | 22 2872 | 0.0 2873 | 32 2874 | 0.0 2875 | 14 2876 | 100000000000000000000.0 2877 | 24 2878 | 100000000000000000000.0 2879 | 34 2880 | 100000000000000000000.0 2881 | 15 2882 | -100000000000000000000.0 2883 | 25 2884 | -100000000000000000000.0 2885 | 35 2886 | -100000000000000000000.0 2887 | 146 2888 | 0.0 2889 | 13 2890 | 0.0 2891 | 23 2892 | 0.0 2893 | 33 2894 | 0.0 2895 | 16 2896 | 1.0 2897 | 26 2898 | 0.0 2899 | 36 2900 | 0.0 2901 | 17 2902 | 0.0 2903 | 27 2904 | 1.0 2905 | 37 2906 | 0.0 2907 | 76 2908 | 0 2909 | 330 2910 | 1B 2911 | 0 2912 | LAYOUT 2913 | 5 2914 | 22 2915 | 100 2916 | AcDbPlotSettings 2917 | 1 2918 | 2919 | 2 2920 | none_device 2921 | 4 2922 | 2923 | 6 2924 | 2925 | 40 2926 | 0.0 2927 | 41 2928 | 0.0 2929 | 42 2930 | 0.0 2931 | 43 2932 | 0.0 2933 | 44 2934 | 0.0 2935 | 45 2936 | 0.0 2937 | 46 2938 | 0.0 2939 | 47 2940 | 0.0 2941 | 48 2942 | 0.0 2943 | 49 2944 | 0.0 2945 | 140 2946 | 0.0 2947 | 141 2948 | 0.0 2949 | 142 2950 | 1.0 2951 | 143 2952 | 1.0 2953 | 70 2954 | 1712 2955 | 72 2956 | 0 2957 | 73 2958 | 0 2959 | 74 2960 | 0 2961 | 7 2962 | 2963 | 75 2964 | 0 2965 | 147 2966 | 1.0 2967 | 148 2968 | 0.0 2969 | 149 2970 | 0.0 2971 | 100 2972 | AcDbLayout 2973 | 1 2974 | Model 2975 | 70 2976 | 1 2977 | 71 2978 | 0 2979 | 10 2980 | 0.0 2981 | 20 2982 | 0.0 2983 | 11 2984 | 12.0 2985 | 21 2986 | 9.0 2987 | 12 2988 | 0.0 2989 | 22 2990 | 0.0 2991 | 32 2992 | 0.0 2993 | 14 2994 | 0.0 2995 | 24 2996 | 0.0 2997 | 34 2998 | 0.0 2999 | 15 3000 | 0.0 3001 | 25 3002 | 0.0 3003 | 35 3004 | 0.0 3005 | 146 3006 | 0.0 3007 | 13 3008 | 0.0 3009 | 23 3010 | 0.0 3011 | 33 3012 | 0.0 3013 | 16 3014 | 1.0 3015 | 26 3016 | 0.0 3017 | 36 3018 | 0.0 3019 | 17 3020 | 0.0 3021 | 27 3022 | 1.0 3023 | 37 3024 | 0.0 3025 | 76 3026 | 0 3027 | 330 3028 | 1F 3029 | 0 3030 | LAYOUT 3031 | 5 3032 | 26 3033 | 100 3034 | AcDbPlotSettings 3035 | 1 3036 | 3037 | 2 3038 | none_device 3039 | 4 3040 | 3041 | 6 3042 | 3043 | 40 3044 | 0.0 3045 | 41 3046 | 0.0 3047 | 42 3048 | 0.0 3049 | 43 3050 | 0.0 3051 | 44 3052 | 0.0 3053 | 45 3054 | 0.0 3055 | 46 3056 | 0.0 3057 | 47 3058 | 0.0 3059 | 48 3060 | 0.0 3061 | 49 3062 | 0.0 3063 | 140 3064 | 0.0 3065 | 141 3066 | 0.0 3067 | 142 3068 | 1.0 3069 | 143 3070 | 1.0 3071 | 70 3072 | 688 3073 | 72 3074 | 0 3075 | 73 3076 | 0 3077 | 74 3078 | 5 3079 | 7 3080 | 3081 | 75 3082 | 16 3083 | 147 3084 | 1.0 3085 | 148 3086 | 0.0 3087 | 149 3088 | 0.0 3089 | 100 3090 | AcDbLayout 3091 | 1 3092 | Layout2 3093 | 70 3094 | 1 3095 | 71 3096 | 2 3097 | 10 3098 | 0.0 3099 | 20 3100 | 0.0 3101 | 11 3102 | 12.0 3103 | 21 3104 | 9.0 3105 | 12 3106 | 0.0 3107 | 22 3108 | 0.0 3109 | 32 3110 | 0.0 3111 | 14 3112 | 0.0 3113 | 24 3114 | 0.0 3115 | 34 3116 | 0.0 3117 | 15 3118 | 0.0 3119 | 25 3120 | 0.0 3121 | 35 3122 | 0.0 3123 | 146 3124 | 0.0 3125 | 13 3126 | 0.0 3127 | 23 3128 | 0.0 3129 | 33 3130 | 0.0 3131 | 16 3132 | 1.0 3133 | 26 3134 | 0.0 3135 | 36 3136 | 0.0 3137 | 17 3138 | 0.0 3139 | 27 3140 | 1.0 3141 | 37 3142 | 0.0 3143 | 76 3144 | 0 3145 | 330 3146 | 23 3147 | 0 3148 | DICTIONARY 3149 | 5 3150 | 6A 3151 | 100 3152 | AcDbDictionary 3153 | 281 3154 | 1 3155 | 3 3156 | DIMASSOC 3157 | 350 3158 | 6D 3159 | 3 3160 | HIDETEXT 3161 | 350 3162 | 6C 3163 | 0 3164 | DICTIONARYVAR 3165 | 5 3166 | 6C 3167 | 100 3168 | DictionaryVariables 3169 | 280 3170 | 0 3171 | 1 3172 | 2 3173 | 0 3174 | DICTIONARYVAR 3175 | 5 3176 | 6D 3177 | 100 3178 | DictionaryVariables 3179 | 280 3180 | 0 3181 | 1 3182 | 1 3183 | 0 3184 | DICTIONARY 3185 | 5 3186 | 6B 3187 | 100 3188 | AcDbDictionary 3189 | 281 3190 | 1 3191 | 3 3192 | ColorSettings/BackgroundColor 3193 | 350 3194 | 6E 3195 | 3 3196 | ColorSettings/ColorMode 3197 | 350 3198 | 6F 3199 | 3 3200 | Grid/DisplayGrid00 3201 | 350 3202 | 70 3203 | 3 3204 | Grid/DisplayGrid01 3205 | 350 3206 | 71 3207 | 3 3208 | Grid/DisplayGrid02 3209 | 350 3210 | 72 3211 | 3 3212 | Grid/DisplayGrid03 3213 | 350 3214 | 73 3215 | 3 3216 | Grid/GridSpacingX00 3217 | 350 3218 | 74 3219 | 3 3220 | Grid/GridSpacingX01 3221 | 350 3222 | 75 3223 | 3 3224 | Grid/GridSpacingX02 3225 | 350 3226 | 76 3227 | 3 3228 | Grid/GridSpacingX03 3229 | 350 3230 | 77 3231 | 3 3232 | Grid/GridSpacingY00 3233 | 350 3234 | 78 3235 | 3 3236 | Grid/GridSpacingY01 3237 | 350 3238 | 79 3239 | 3 3240 | Grid/GridSpacingY02 3241 | 350 3242 | 7A 3243 | 3 3244 | Grid/GridSpacingY03 3245 | 350 3246 | 7B 3247 | 3 3248 | Grid/IsometricGrid00 3249 | 350 3250 | 7C 3251 | 3 3252 | Grid/IsometricGrid01 3253 | 350 3254 | 7D 3255 | 3 3256 | Grid/IsometricGrid02 3257 | 350 3258 | 7E 3259 | 3 3260 | Grid/IsometricGrid03 3261 | 350 3262 | 7F 3263 | 3 3264 | Grid/IsometricProjection00 3265 | 350 3266 | 80 3267 | 3 3268 | Grid/IsometricProjection01 3269 | 350 3270 | 81 3271 | 3 3272 | Grid/IsometricProjection02 3273 | 350 3274 | 82 3275 | 3 3276 | Grid/IsometricProjection03 3277 | 350 3278 | 83 3279 | 3 3280 | Grid/MetaGridSpacingX00 3281 | 350 3282 | 84 3283 | 3 3284 | Grid/MetaGridSpacingX01 3285 | 350 3286 | 85 3287 | 3 3288 | Grid/MetaGridSpacingX02 3289 | 350 3290 | 86 3291 | 3 3292 | Grid/MetaGridSpacingX03 3293 | 350 3294 | 87 3295 | 3 3296 | Grid/MetaGridSpacingY00 3297 | 350 3298 | 88 3299 | 3 3300 | Grid/MetaGridSpacingY01 3301 | 350 3302 | 89 3303 | 3 3304 | Grid/MetaGridSpacingY02 3305 | 350 3306 | 8A 3307 | 3 3308 | Grid/MetaGridSpacingY03 3309 | 350 3310 | 8B 3311 | 3 3312 | MultiPageSettings/Columns 3313 | 350 3314 | 8C 3315 | 3 3316 | MultiPageSettings/GlueMarginsBottom 3317 | 350 3318 | 8D 3319 | 3 3320 | MultiPageSettings/GlueMarginsLeft 3321 | 350 3322 | 8E 3323 | 3 3324 | MultiPageSettings/GlueMarginsRight 3325 | 350 3326 | 8F 3327 | 3 3328 | MultiPageSettings/GlueMarginsTop 3329 | 350 3330 | 90 3331 | 3 3332 | MultiPageSettings/PrintCropMarks 3333 | 350 3334 | 91 3335 | 3 3336 | MultiPageSettings/Rows 3337 | 350 3338 | 92 3339 | 3 3340 | PageSettings/OffsetX 3341 | 350 3342 | 93 3343 | 3 3344 | PageSettings/OffsetY 3345 | 350 3346 | 94 3347 | 3 3348 | PageSettings/PageOrientation 3349 | 350 3350 | 95 3351 | 3 3352 | PageSettings/PaperHeight 3353 | 350 3354 | 96 3355 | 3 3356 | PageSettings/PaperWidth 3357 | 350 3358 | 97 3359 | 3 3360 | PageSettings/Scale 3361 | 350 3362 | 98 3363 | 3 3364 | PageSettings/ShowPaperBorders 3365 | 350 3366 | 99 3367 | 3 3368 | QCADVersion 3369 | 350 3370 | 9A 3371 | 3 3372 | UnitSettings/PaperUnit 3373 | 350 3374 | 9B 3375 | 0 3376 | XRECORD 3377 | 5 3378 | 6E 3379 | 330 3380 | 6B 3381 | 100 3382 | AcDbXrecord 3383 | 280 3384 | 1 3385 | 1000 3386 | White 3387 | 0 3388 | XRECORD 3389 | 5 3390 | 6F 3391 | 330 3392 | 6B 3393 | 100 3394 | AcDbXrecord 3395 | 280 3396 | 1 3397 | 1000 3398 | FullColor 3399 | 0 3400 | XRECORD 3401 | 5 3402 | 70 3403 | 330 3404 | 6B 3405 | 100 3406 | AcDbXrecord 3407 | 280 3408 | 1 3409 | 290 3410 | 1 3411 | 0 3412 | XRECORD 3413 | 5 3414 | 71 3415 | 330 3416 | 6B 3417 | 100 3418 | AcDbXrecord 3419 | 280 3420 | 1 3421 | 290 3422 | 1 3423 | 0 3424 | XRECORD 3425 | 5 3426 | 72 3427 | 330 3428 | 6B 3429 | 100 3430 | AcDbXrecord 3431 | 280 3432 | 1 3433 | 290 3434 | 1 3435 | 0 3436 | XRECORD 3437 | 5 3438 | 73 3439 | 330 3440 | 6B 3441 | 100 3442 | AcDbXrecord 3443 | 280 3444 | 1 3445 | 290 3446 | 1 3447 | 0 3448 | XRECORD 3449 | 5 3450 | 74 3451 | 330 3452 | 6B 3453 | 100 3454 | AcDbXrecord 3455 | 280 3456 | 1 3457 | 1000 3458 | auto 3459 | 0 3460 | XRECORD 3461 | 5 3462 | 75 3463 | 330 3464 | 6B 3465 | 100 3466 | AcDbXrecord 3467 | 280 3468 | 1 3469 | 1000 3470 | auto 3471 | 0 3472 | XRECORD 3473 | 5 3474 | 76 3475 | 330 3476 | 6B 3477 | 100 3478 | AcDbXrecord 3479 | 280 3480 | 1 3481 | 1000 3482 | auto 3483 | 0 3484 | XRECORD 3485 | 5 3486 | 77 3487 | 330 3488 | 6B 3489 | 100 3490 | AcDbXrecord 3491 | 280 3492 | 1 3493 | 1000 3494 | auto 3495 | 0 3496 | XRECORD 3497 | 5 3498 | 78 3499 | 330 3500 | 6B 3501 | 100 3502 | AcDbXrecord 3503 | 280 3504 | 1 3505 | 1000 3506 | auto 3507 | 0 3508 | XRECORD 3509 | 5 3510 | 79 3511 | 330 3512 | 6B 3513 | 100 3514 | AcDbXrecord 3515 | 280 3516 | 1 3517 | 1000 3518 | auto 3519 | 0 3520 | XRECORD 3521 | 5 3522 | 7A 3523 | 330 3524 | 6B 3525 | 100 3526 | AcDbXrecord 3527 | 280 3528 | 1 3529 | 1000 3530 | auto 3531 | 0 3532 | XRECORD 3533 | 5 3534 | 7B 3535 | 330 3536 | 6B 3537 | 100 3538 | AcDbXrecord 3539 | 280 3540 | 1 3541 | 1000 3542 | auto 3543 | 0 3544 | XRECORD 3545 | 5 3546 | 7C 3547 | 330 3548 | 6B 3549 | 100 3550 | AcDbXrecord 3551 | 280 3552 | 1 3553 | 290 3554 | 0 3555 | 0 3556 | XRECORD 3557 | 5 3558 | 7D 3559 | 330 3560 | 6B 3561 | 100 3562 | AcDbXrecord 3563 | 280 3564 | 1 3565 | 290 3566 | 0 3567 | 0 3568 | XRECORD 3569 | 5 3570 | 7E 3571 | 330 3572 | 6B 3573 | 100 3574 | AcDbXrecord 3575 | 280 3576 | 1 3577 | 290 3578 | 0 3579 | 0 3580 | XRECORD 3581 | 5 3582 | 7F 3583 | 330 3584 | 6B 3585 | 100 3586 | AcDbXrecord 3587 | 280 3588 | 1 3589 | 290 3590 | 0 3591 | 0 3592 | XRECORD 3593 | 5 3594 | 80 3595 | 330 3596 | 6B 3597 | 100 3598 | AcDbXrecord 3599 | 280 3600 | 1 3601 | 90 3602 | 0 3603 | 0 3604 | XRECORD 3605 | 5 3606 | 81 3607 | 330 3608 | 6B 3609 | 100 3610 | AcDbXrecord 3611 | 280 3612 | 1 3613 | 90 3614 | 0 3615 | 0 3616 | XRECORD 3617 | 5 3618 | 82 3619 | 330 3620 | 6B 3621 | 100 3622 | AcDbXrecord 3623 | 280 3624 | 1 3625 | 90 3626 | 0 3627 | 0 3628 | XRECORD 3629 | 5 3630 | 83 3631 | 330 3632 | 6B 3633 | 100 3634 | AcDbXrecord 3635 | 280 3636 | 1 3637 | 90 3638 | 0 3639 | 0 3640 | XRECORD 3641 | 5 3642 | 84 3643 | 330 3644 | 6B 3645 | 100 3646 | AcDbXrecord 3647 | 280 3648 | 1 3649 | 1000 3650 | auto 3651 | 0 3652 | XRECORD 3653 | 5 3654 | 85 3655 | 330 3656 | 6B 3657 | 100 3658 | AcDbXrecord 3659 | 280 3660 | 1 3661 | 1000 3662 | auto 3663 | 0 3664 | XRECORD 3665 | 5 3666 | 86 3667 | 330 3668 | 6B 3669 | 100 3670 | AcDbXrecord 3671 | 280 3672 | 1 3673 | 1000 3674 | auto 3675 | 0 3676 | XRECORD 3677 | 5 3678 | 87 3679 | 330 3680 | 6B 3681 | 100 3682 | AcDbXrecord 3683 | 280 3684 | 1 3685 | 1000 3686 | auto 3687 | 0 3688 | XRECORD 3689 | 5 3690 | 88 3691 | 330 3692 | 6B 3693 | 100 3694 | AcDbXrecord 3695 | 280 3696 | 1 3697 | 1000 3698 | auto 3699 | 0 3700 | XRECORD 3701 | 5 3702 | 89 3703 | 330 3704 | 6B 3705 | 100 3706 | AcDbXrecord 3707 | 280 3708 | 1 3709 | 1000 3710 | auto 3711 | 0 3712 | XRECORD 3713 | 5 3714 | 8A 3715 | 330 3716 | 6B 3717 | 100 3718 | AcDbXrecord 3719 | 280 3720 | 1 3721 | 1000 3722 | auto 3723 | 0 3724 | XRECORD 3725 | 5 3726 | 8B 3727 | 330 3728 | 6B 3729 | 100 3730 | AcDbXrecord 3731 | 280 3732 | 1 3733 | 1000 3734 | auto 3735 | 0 3736 | XRECORD 3737 | 5 3738 | 8C 3739 | 330 3740 | 6B 3741 | 100 3742 | AcDbXrecord 3743 | 280 3744 | 1 3745 | 90 3746 | 1 3747 | 0 3748 | XRECORD 3749 | 5 3750 | 8D 3751 | 330 3752 | 6B 3753 | 100 3754 | AcDbXrecord 3755 | 280 3756 | 1 3757 | 40 3758 | 10.0 3759 | 0 3760 | XRECORD 3761 | 5 3762 | 8E 3763 | 330 3764 | 6B 3765 | 100 3766 | AcDbXrecord 3767 | 280 3768 | 1 3769 | 40 3770 | 10.0 3771 | 0 3772 | XRECORD 3773 | 5 3774 | 8F 3775 | 330 3776 | 6B 3777 | 100 3778 | AcDbXrecord 3779 | 280 3780 | 1 3781 | 40 3782 | 10.0 3783 | 0 3784 | XRECORD 3785 | 5 3786 | 90 3787 | 330 3788 | 6B 3789 | 100 3790 | AcDbXrecord 3791 | 280 3792 | 1 3793 | 40 3794 | 10.0 3795 | 0 3796 | XRECORD 3797 | 5 3798 | 91 3799 | 330 3800 | 6B 3801 | 100 3802 | AcDbXrecord 3803 | 280 3804 | 1 3805 | 290 3806 | 0 3807 | 0 3808 | XRECORD 3809 | 5 3810 | 92 3811 | 330 3812 | 6B 3813 | 100 3814 | AcDbXrecord 3815 | 280 3816 | 1 3817 | 90 3818 | 1 3819 | 0 3820 | XRECORD 3821 | 5 3822 | 93 3823 | 330 3824 | 6B 3825 | 100 3826 | AcDbXrecord 3827 | 280 3828 | 1 3829 | 40 3830 | 0.0 3831 | 0 3832 | XRECORD 3833 | 5 3834 | 94 3835 | 330 3836 | 6B 3837 | 100 3838 | AcDbXrecord 3839 | 280 3840 | 1 3841 | 40 3842 | 0.0 3843 | 0 3844 | XRECORD 3845 | 5 3846 | 95 3847 | 330 3848 | 6B 3849 | 100 3850 | AcDbXrecord 3851 | 280 3852 | 1 3853 | 1000 3854 | Portrait 3855 | 0 3856 | XRECORD 3857 | 5 3858 | 96 3859 | 330 3860 | 6B 3861 | 100 3862 | AcDbXrecord 3863 | 280 3864 | 1 3865 | 40 3866 | 297.0 3867 | 0 3868 | XRECORD 3869 | 5 3870 | 97 3871 | 330 3872 | 6B 3873 | 100 3874 | AcDbXrecord 3875 | 280 3876 | 1 3877 | 40 3878 | 210.0 3879 | 0 3880 | XRECORD 3881 | 5 3882 | 98 3883 | 330 3884 | 6B 3885 | 100 3886 | AcDbXrecord 3887 | 280 3888 | 1 3889 | 1000 3890 | 1:1 3891 | 0 3892 | XRECORD 3893 | 5 3894 | 99 3895 | 330 3896 | 6B 3897 | 100 3898 | AcDbXrecord 3899 | 280 3900 | 1 3901 | 290 3902 | 1 3903 | 0 3904 | XRECORD 3905 | 5 3906 | 9A 3907 | 330 3908 | 6B 3909 | 100 3910 | AcDbXrecord 3911 | 280 3912 | 1 3913 | 1000 3914 | 3.11.0 3915 | 0 3916 | XRECORD 3917 | 5 3918 | 9B 3919 | 330 3920 | 6B 3921 | 100 3922 | AcDbXrecord 3923 | 280 3924 | 1 3925 | 90 3926 | 4 3927 | 0 3928 | ENDSEC 3929 | 0 3930 | EOF 3931 | -------------------------------------------------------------------------------- /webping/ README.md: -------------------------------------------------------------------------------- 1 | Some simple http GET test, 2 | counting how many times it access web page. 3 | -------------------------------------------------------------------------------- /webping/http.lua: -------------------------------------------------------------------------------- 1 | -- http.lua 2 | 3 | Tstart = tmr.now() 4 | 5 | conn = nil 6 | conn = net.createConnection(net.TCP, 0) 7 | 8 | conn:on("receive", function(conn, payload) 9 | -- print(payload) 10 | local a, b = string.find( payload, "Hits:" ) 11 | if a == nil then a = 0 end 12 | if b == nil then b = 0 end 13 | if b ~= 0 then b = b + 5 end 14 | print( string.sub(payload, a, b )) 15 | end) 16 | 17 | conn:on("connection", function(conn, payload) 18 | print("\nConnected") 19 | conn:send("GET /esp8266.php" 20 | .." HTTP/1.1\r\n" 21 | .."Host: mozgy.t-com.hr\r\n" 22 | .."Connection: close\r\n" 23 | .."Accept: */*\r\n" 24 | .."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n" 25 | .."\r\n") 26 | end) 27 | 28 | conn:on("disconnection", function(conn, payload) 29 | print("Disconnected") 30 | end) 31 | 32 | conn:connect(80, 'mozgy.t-com.hr') 33 | -------------------------------------------------------------------------------- /webping/init.lua: -------------------------------------------------------------------------------- 1 | --init.lua 2 | 3 | tmr.alarm(3, 300000, 1, function() dofile('init.lua') end) 4 | 5 | wifi.sta.config("MozzWiFi","xx") 6 | if wifi.sta.getip() ~= nil then 7 | wifi.sta.connect() 8 | end 9 | 10 | tmr.alarm(1, 5000, 1, function() 11 | if wifi.sta.getip() == nil then 12 | print("IP unavailable, Waiting...") 13 | else 14 | tmr.stop(1) 15 | print("ESP8266 mode is: " .. wifi.getmode()) 16 | print("The module MAC address is: " .. wifi.ap.getmac()) 17 | print("Config done, IP is "..wifi.sta.getip()) 18 | dofile ("http.lua") 19 | end 20 | end) 21 | 22 | print("Heap: " .. node.heap()) 23 | 24 | --------------------------------------------------------------------------------