diff --git a/README.md b/README.md index cf71fc9..330afa6 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,14 @@ [![https://www.youtube.com/watch?v=EnLS2lJF1Ls](http://img.youtube.com/vi/EnLS2lJF1Ls/0.jpg)](http://www.youtube.com/watch?v=EnLS2lJF1Ls "Battery Gauges") +** TinyWifiScanner.ino ** + +A small WiFi scanner and battery meter for the Heltec WiFi Kit 8 - Click to watch demo video: + +[![TinyWiFiSccanner](http://img.youtube.com/vi/5GtzhiT66i0/0.jpg)](http://www.youtube.com/watch?v=5GtzhiT66i0 "TinyWiFiScanner") + # Useful links -Use the following guide to setup the arduino environment for the wifi kit 8: [https://robotzero.one/heltec-wifi-kit-8/](https://robotzero.one/heltec-wifi-kit-8/) \ No newline at end of file +Use the following guide to setup the arduino environment for the wifi kit 8: [https://robotzero.one/heltec-wifi-kit-8/](https://robotzero.one/heltec-wifi-kit-8/) + +Simple how to set up for access point mode or station mode: [https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/](https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/) \ No newline at end of file diff --git a/README.md b/README.md index cf71fc9..330afa6 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,14 @@ [![https://www.youtube.com/watch?v=EnLS2lJF1Ls](http://img.youtube.com/vi/EnLS2lJF1Ls/0.jpg)](http://www.youtube.com/watch?v=EnLS2lJF1Ls "Battery Gauges") +** TinyWifiScanner.ino ** + +A small WiFi scanner and battery meter for the Heltec WiFi Kit 8 - Click to watch demo video: + +[![TinyWiFiSccanner](http://img.youtube.com/vi/5GtzhiT66i0/0.jpg)](http://www.youtube.com/watch?v=5GtzhiT66i0 "TinyWiFiScanner") + # Useful links -Use the following guide to setup the arduino environment for the wifi kit 8: [https://robotzero.one/heltec-wifi-kit-8/](https://robotzero.one/heltec-wifi-kit-8/) \ No newline at end of file +Use the following guide to setup the arduino environment for the wifi kit 8: [https://robotzero.one/heltec-wifi-kit-8/](https://robotzero.one/heltec-wifi-kit-8/) + +Simple how to set up for access point mode or station mode: [https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/](https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/) \ No newline at end of file diff --git a/TinyWiFiScanner.ino b/TinyWiFiScanner.ino new file mode 100755 index 0000000..d927f7f --- /dev/null +++ b/TinyWiFiScanner.ino @@ -0,0 +1,219 @@ +/* + This sketch demonstrates how to scan WiFi networks. + The API is almost the same as with the WiFi Shield library, + the most obvious difference being the different file you need to include: +*/ +#include "ESP8266WiFi.h" +#include +#include + +#ifdef U8X8_HAVE_HW_SPI +#include +#endif +#ifdef U8X8_HAVE_HW_I2C +#include +#endif + +U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 16, /* clock=*/ 5, /* data=*/ 4); +ADC_MODE(ADC_VCC); + +void setup() { + Serial.begin(115200); + + // sceen stuff + pinMode(10, OUTPUT); + pinMode(9, OUTPUT); + digitalWrite(10, 0); + digitalWrite(9, 0); + u8g2.begin(); + u8g2.enableUTF8Print(); + + Serial.println("Setup done"); + + getBatteryLevel(); + + // Set WiFi to station mode and disconnect from an AP if it was previously connected + WiFi.mode(WIFI_STA); + WiFi.disconnect(); + delay(100); +} + +void getBatteryLevel() { + u8g2.setFont(u8g2_font_8x13_mf); + + uint32_t getVcc = ESP.getVcc(); + Serial.println(getVcc); + + // printing getVcc to screen + /* + String batvol2 = ""; + batvol2 += getVcc; + char batChr[batvol2.length()+1]; + batvol2.toCharArray(batChr, batvol2.length()+1); + u8g2.drawStr(0,10,batChr); + */ + + float measuredvbat = getVcc; // for actual voltage + measuredvbat /= 1024; // convert to voltage + Serial.println(measuredvbat); + + //printing actual votage to screen + /* + String batvol = ""; + batvol += measuredvbat; + char batChr2[batvol.length()+1]; + batvol.toCharArray(batChr2, batvol.length()+1); + u8g2.drawStr(0,20,batChr2); + */ + + int percent = map(getVcc, 2300, 3000, 1, 11); // turn vcc into batt perentage (yea I know it's not that accurate due to dropoff rate) + if(percent > 11){ percent = 11; } + if(percent < 1){ percent = 1; } + + u8g2.setFont(u8g_font_unifont); + //u8g.setFont(u8g_font_osb21); + u8g2.drawFrame(111,24,15,8); + u8g2.drawBox(113,26,percent,4); //3rd param is %(1-11) + u8g2.drawBox(126,26,2,4); + +} + +void drawScrollString(int16_t offset, const char *s){ + static char buf[36]; // should for screen with up to 256 pixel width + size_t len; + size_t char_offset = 0; + u8g2_uint_t dx = 0; + size_t visible = 0; + + u8g2.setDrawColor(0); // clear the scrolling area + u8g2.drawBox(0, 30, u8g2.getDisplayWidth()-1, u8g2.getDisplayHeight()-1); + u8g2.setDrawColor(1); // set the color for the text + + len = strlen(s); + if ( offset < 0 ) + { + char_offset = (-offset)/8; + dx = offset + char_offset*8; + if ( char_offset >= u8g2.getDisplayWidth()/8 ) + return; + visible = u8g2.getDisplayWidth()/8-char_offset+1; + strncpy(buf, s, visible); + buf[visible] = '\0'; + u8g2.setFont(u8g2_font_6x10_mf); + u8g2.drawStr(char_offset*8-dx, 30, buf); + } + else + { + char_offset = offset / 8; + if ( char_offset >= len ) + return; // nothing visible + dx = offset - char_offset*8; + visible = len - char_offset; + if ( visible > u8g2.getDisplayWidth()/8+1 ) + visible = u8g2.getDisplayWidth()/8+1; + strncpy(buf, s+char_offset, visible); + buf[visible] = '\0'; + u8g2.setFont(u8g2_font_6x10_mf); + u8g2.drawStr(-dx, 30, buf); + } + +} + +void loop() { + //u8g2.clearBuffer(); // only need this if you want "scanning..." on a clear screen! + + int16_t offset = -(int16_t)u8g2.getDisplayWidth(); + int16_t len = strlen("Scanning..."); + for(;;) // then do the scrolling + { + + drawScrollString(offset, "Scanning..."); // no clearBuffer required, screen will be partially cleared here + getBatteryLevel(); + u8g2.sendBuffer(); // transfer internal memory to the display + + delay(20); + offset+=2; + if ( offset > len*8+1 ) + break; + } + u8g2.sendBuffer(); + + Serial.println("scan start"); + + // WiFi.scanNetworks will return the number of networks found + int n = WiFi.scanNetworks(); + Serial.println("scan done"); + if (n == 0) { + Serial.println("no networks found"); + } else { + Serial.print(n); + Serial.println(" networks found"); + + for (int i = 0; i < n; ++i) { + // Print SSID and RSSI for each network found + Serial.print(i + 1); + Serial.print(": "); + Serial.print(WiFi.SSID(i)); + + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_8x13_mf); + char ssid[WiFi.SSID(i).length()+1]; + WiFi.SSID(i).toCharArray(ssid, WiFi.SSID(i).length()+1); + u8g2.drawStr(0,9,ssid); + u8g2.print(WiFi.SSID(i)); + + Serial.print(" ("); + Serial.print(WiFi.RSSI(i)); + Serial.print(")"); + Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*"); + u8g2.setFont(u8g2_font_6x12_mf); + + switch(WiFi.encryptionType(i)){ + case ENC_TYPE_NONE: + u8g2.drawStr(0,21,"Open"); + break; + case ENC_TYPE_WEP: + u8g2.drawStr(0,21,"WEP"); + break; + case ENC_TYPE_TKIP: + u8g2.drawStr(0,21,"WPA/PSK"); + break; + case ENC_TYPE_CCMP: + u8g2.drawStr(0,21,"WPA2/PSK"); + break; + case ENC_TYPE_AUTO: + u8g2.drawStr(0,21,"WPA/WPA2/PSK"); + break; + default: + u8g2.drawStr(0,21,"Unknown Encryption"); + break; + } + + u8g2.setFont(u8g2_font_6x10_mf); + String chStr = ""; + chStr += WiFi.channel(i); + char chan[chStr.length()+1]; + chStr.toCharArray(chan, chStr.length()+1); + + String rssiStr = ""; + rssiStr += WiFi.RSSI(i); + char rssi[rssiStr.length()+1]; + rssiStr.toCharArray(rssi, rssiStr.length()+1); + String toWrite = "ch: "+chStr+" dB: "+rssiStr; + + char chrWrite[toWrite.length()+1]; + toWrite.toCharArray(chrWrite, toWrite.length()+1); + + u8g2.drawStr(0,32,chrWrite); + + getBatteryLevel(); + + u8g2.sendBuffer(); + delay(2000); // was 2000 + } + } + Serial.println(""); + + // Wait a bit before scanning again + delay(1000); +}