javier muñoz sáez
Published © GPL3+

5€ WiFi Intensity Meter (portable)

Made with a tiny I2C OLED display and a WiFi ESP8266 NOCEMU board. Really easy and hackable.

BeginnerFull instructions provided1 hour2,662
5€ WiFi Intensity Meter (portable)

Things used in this project

Hardware components

Adafruit 128X64 LED LCD OLED
×1
NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
×1
EXTERNAL POWER SOURCE
(board can not power the oled by itself)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Paint scheme, its portable!

Use an external 3.3v/5v source, for the OLED and the NODEMCU board (don't worry for the board, the 3.3v regulator will do his work).

Code

MAIN THING

C/C++
Upload it, but first you need all those fancy libraries which are in the Arduino library manager.
//Javier Muñoz 19/10/2016 ask me at javimusama@hotmail.com

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "ESP8266WiFi.h"

#define OLED_RESET LED_BUILTIN  //4
Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 64) //if that happens you could also visit my oled tutorial https://www.hackster.io/javier-munoz-saez/2-oled-i2c-analogpin-dynamic-plotting-46429b?ref=user&ref_id=85424&offset=1
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int level=0;//0--100 level (linear, not accurate)
int displaylevel=0;//0---63 for the oled screen

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//i2c direccion 0x3c

  // Clear the buffer.
  display.clearDisplay();//clear buffer
  display.display();//print the empty buffer

  display.setTextSize(1);// simple instruccions about the RSSI levels in dbm
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(" 0-->PERFECT");
  display.println("-40->HIGH");
  display.println("-60->IDEAL");
  display.println("-70->LOW ");
  display.println("-80->SHITTIEST SIGNAL");
  display.display();

   Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");

}

void loop() {

wifiSignalData();
   // Wait a bit before scanning again
  display.clearDisplay();
LEVELvasedisplay();
LEVELdisplay();
DATAdisplay();
  delay(1000);

}

void LEVELdisplay(){
  level=map(WiFi.RSSI(0),-80,0,0,100);
  displaylevel=map(level,0,100,0,63);
  display.drawFastVLine(2,63-displaylevel,displaylevel,WHITE);
    display.drawFastVLine(3,63-displaylevel,displaylevel,WHITE);
      display.drawFastVLine(4,63-displaylevel,displaylevel,WHITE);
  
}

void LEVELvasedisplay(){
  level=map(WiFi.RSSI(0),-80,0,63,0);
  display.drawFastVLine(0,0,63,WHITE);
    display.drawFastVLine(6,0,63,WHITE);

        display.drawFastVLine(7,1,1,WHITE);
        display.drawFastVLine(7,15,1,WHITE);
        display.drawFastVLine(7,32,1,WHITE);
        display.drawFastVLine(7,46,1,WHITE);
        display.drawFastVLine(7,63,1,WHITE);

}

void DATAdisplay(){
  display.setCursor(22,7);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.println(WiFi.SSID(0));


  
  display.setCursor(25,25);
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.print(WiFi.RSSI(0));
   display.setTextSize(2); 
  display.println("dbm");

  display.setCursor(107,55);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.print(level);
   display.setTextSize(1); 
  display.println("%");
  
    display.display();

}

void wifiSignalData(){
    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));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");
}

Credits

javier muñoz sáez

javier muñoz sáez

13 projects • 84 followers
Electronic engineer and sparky person. I make tutorials so my future self doesnt need to remember how he did the thing

Comments