Introduction: Smart Shelf Lights With LinkitONE

About: I build products which solve real world problems.

Have a old shelf at home? Is it too boring or too old? Want to automate it? Do you want to build something cool? Then you are at the right place!

Here I'll show you how to turn your old classy shelf into a smart shelf that you can control using your smartphone!

Let's begin...

Step 1: What Do You Need?

1 . LinkitONE board

2. An old lamp (I have a small LED lamp)

3. Breadboard

5. LinkitONE wifi antena

6. Battery pack

7. Relay module

8. An old shelf (of course)

Step 2: Looking in the Shelf!

Now look into the shelf you are using. I'm using a glass-wooden one which has a light bulb above it. I'll hack the shelf by connecting my board at the connection point.

Step 3: Hacking Into the Shelf!

Here's how we'll connect our board to the lights.

We'll connect wires to the bulb socket of the shelf.

Step 4: Attaching Relay to Shelf Light

As this light runs on 220 volts, we'll need to use a relay because arduino can only provide upto 5v max. So we'll attach a relay to it. I'm using a 6v relay.

Step 5: Attaching the Board

Now finally connect your board to the relay on breadboard and then connect it to your bulb on your shelf lights.

Step 6: Writing Some Code

Now we are going to write some code.

See the code from the web-led.ino file and burn the code.

The code is simple, when ever it finds a client, it gives back a webpage where you can control it!



#define WIFI_AP "Your WiFi network" // chance this to your wifi network name #define WIFI_PASSWORD "Password" // change this to the password for the network #define WIFI_AUTH LWIFI_WPA // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP according to your WiFi AP configuration // If this doesn't work, try LWIFI_WEP. If your network doesn't have a password, use LWIFI_OPEN. int serverPort = 80; LWiFiServer server(serverPort); int LED = 13;

void setup() { pinMode(LED, OUTPUT); LWiFi.begin(); Serial.begin(115200); // keep retrying until connected to AP Serial.println("Connecting to AP"); while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) { digitalWrite(LED, HIGH); delay(100); digitalWrite(LED, LOW); delay(100); digitalWrite(LED, HIGH); delay(100); digitalWrite(LED, LOW); delay(600);

} digitalWrite(LED, HIGH); printWifiStatus(); Serial.println("Start Server"); server.begin(); Serial.println("Server Started"); digitalWrite(LED, LOW); }

int loopCount = 0;

void loop() { // put your main code here, to run repeatedly: String str = ""; String url = ""; int i; delay(500); loopCount++; LWiFiClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { // we basically ignores client request, but wait for HTTP request end char c =; Serial.print(c); if(c != '\n') str += c; if(c == '\n') { //Serial.println(str); if(str.startsWith("GET ")) { url = str.substring(4, str.lastIndexOf(" ")); Serial.print("URL:"); Serial.print(url); Serial.println(":"); } str = ""; }

if (c == '\n' && currentLineIsBlank) { Serial.println("send response"); // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println();

if(url != String("favicon.ico")) { client.println("");

//i = digitalRead(LED); url.toLowerCase(); if(url == String("/on")) { digitalWrite(LED, HIGH); client.println("Turning LED on "); } else if(url == String("/off")) { digitalWrite(LED, LOW); client.println("Turning LED off "); } else { client.println("Doing nothing "); } client.println("


"); client.println(); break; } } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(50);

// close the connection: Serial.println("close connection"); client.stop(); Serial.println("client disconnected"); } }

void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(LWiFi.SSID());

// print your WiFi shield's IP address: IPAddress ip = LWiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip);

Serial.print("subnet mask: "); Serial.println(LWiFi.subnetMask());

Serial.print("gateway IP: "); Serial.println(LWiFi.gatewayIP());

// print the received signal strength: long rssi = LWiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }


Once you complete this step, go to the URL of LinkitONE and access your web interface.

http://192.168.xx.xx/on for turning light on

http://192.168.xx.xx/off for turning light off

Step 7: Building an Android App (Optional)

I made an android app for controlling the lights. It's very easy to do so!

You just need to use App Inventor, and build a simple app using its web interface. There are a lot of tutorials on app inventor, so refer to them.

Step 8: Finalising It!

Now finalize the circuit by connecting the WiFi antenna and the battery. After doing this you are finally done to play with it!

BE careful while doing connections as you are dealing with 220 volts!!!

Step 9: Testing It Out!

Test it out! Build the app and then test it! When you press green button, it turns on and when you press red it turns off!

Make It Glow! Contest

Participated in the
Make It Glow! Contest

Tech Contest

Participated in the
Tech Contest