Published © MIT

Arduino Musical WiFi Analyzer

Your WiFi connection is slow? AMWA will help you!

IntermediateShowcase (no instructions)30 minutes6,749
Arduino Musical WiFi Analyzer

Things used in this project

Hardware components

Arduino MKR1000
Arduino MKR1000
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Solderless Breadboard Full Size
Solderless Breadboard Full Size
×1
Li-Ion Battery 1000mAh
Li-Ion Battery 1000mAh
×1
Adafruit RGB Led
×1
Buzzer
Buzzer
×1
Pushbutton switch 12mm
SparkFun Pushbutton switch 12mm
×5
Resistor 330 ohm
Resistor 330 ohm
×1

Software apps and online services

Serial Projector

Story

Read more

Schematics

Circut

Use Arduino MKR1000 or Arduino Zero with WI-FI shield

Circuit

Use Arduino MKR1000 or Arduino Zero + Wi-Fi Shield

Code

Sketch

C/C++
Main code
#include <SPI.h>
#include <WiFi.h>
#include <ame.h>
#include <Wire.h>

#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"

#define RED_LED 8
#define GREEN_LED 9
#define BLUE_LED 10

#define BUZZER 11

#define MATRIX 0x70

#define BUTTON1 6
#define BUTTON2 5
#define BUTTON3 4
#define BUTTON4 3
#define BUTTON5 2

AME_Led RedLed(RED_LED);
AME_Led GreenLed(GREEN_LED);
AME_Led BlueLed(BLUE_LED);

AME_Button buttons[5] = {
	AME_Button(BUTTON1),
	AME_Button(BUTTON2),
	AME_Button(BUTTON3),
	AME_Button(BUTTON4),
	AME_Button(BUTTON5)
};

int mode = 1;
int numSsid;
int pitch = 5;
int best;

Adafruit_8x8matrix matrix = Adafruit_8x8matrix();

void setup(){
	Serial.begin(9600);

	String firmware = WiFi.firmwareVersion();
  
	if(firmware != "1.1.0"){
		RedLed.off();
		GreenLed.off();
		BlueLed.on();
		
		while(1);
	}
	
	matrix.begin(MATRIX);
	
	RedLed.off();
	GreenLed.on();
  BlueLed.off();
}

void loop(){
	switch(mode){
		case 1:
			numSsid = WiFi.scanNetworks();
			
			if(numSsid == -1){
			  RedLed.on();
			  GreenLed.off();
			  BlueLed.off();
			} else {
				RedLed.off();
				GreenLed.on();
			    BlueLed.off();
				
				Serial.print(numSsid + " ");
			
				for(int i = 0; i < numSsid; i++){
					Serial.print(i + " ");
					Serial.print(WiFi.SSID(i) + " ");
					Serial.println(WiFi.RSSI(i));
				}
			}
		break;
		case 2:
			numSsid = WiFi.scanNetworks();
			
			if(numSsid == -1){
			  RedLed.on();
			  GreenLed.off();
			  BlueLed.off();
			} else {
				RedLed.off();
				GreenLed.on();
			    BlueLed.off();
				
				matrix.clear();
				
				for(int j = 0; j < 2; j ++){
					for(int i = 0; i < numSsid && i < 8; i++){
						tone(BUZZER, WiFi.RSSI(i) * pitch, 1);
						
						matrix.drawRect(i, 8 - (WiFi.RSSI(i) / 32)), 1, WiFi.RSSI(i) / 32, LED_ON);
					}
				}
				
				matrix.writeDisplay();
			}
		break;
	}
	
	if(buttons[0].wasPressed()){
		mode = 1;
	} else if(buttons[1].wasPressed()){
		mode = 2;
	} else if(buttons[2].wasPressed()){
		if(pitch > 0){
			pitch--;
		}
	} else if(buttons[3].wasPressed()){
		if(pitch < 10){
			pitch++;
		}
	} else if(buttons[4].wasPressed()){
		numSsid = WiFi.scanNetworks();
		best = 0;
		
		if(numSsid == -1){
			RedLed.on();
			GreenLed.off();
			BlueLed.off();
		} else {
			for(int i = 0; i < numSsid; i++){
				if(WiFi.RSSI(best) < WiFi.RSSI(i)){
					best = 1;
				}
			}
		}
		
		Serial.println("<" + best + ">");
	}
}

Credits

Comments