Instructables
Picture of impBoot: Remotely Turn on a Desktop Computer
While at school, I found myself needing to remote desktop or SSH into my computer quite frequently. I would send MATLAB scripts to run while I was in class or working on something else. I needed to either leave my desktop running (sucking around 200W while idle) or find a way to turn it on remotely. Wake-on-LAN (WoL) works quite well but requires a wired, Ethernet connection, and try as I might, I could not get Wake on Wireless LAN (WoWLAN) to work with my hardware. 

The Electric Imp with a simple switch allows for a different kind of Wake on Wireless LAN as long as you have WiFi access and a USB port that always provides power (even when the computer is off). This instructable is fairly straightforward but assumes you are comfortable soldering and stripping wires.
 
Remove these adsRemove these ads by Signing Up

Step 1: Equipment

Picture of Equipment
Materials

* Electric Imp
* Electric Imp Breakout (with male headers soldered to all ports)
* 3x Female-Female jumper wires
* Breadboard
* 1kΩ resistor
* 2N3904 (NPN Transistor)
* USB-mini cable
* 4x wires (22-26 ga. stranded), each about 4 feet long (both ends stripped and tinned)
* Android smartphone (if you can replicate Electric Imp Toggle functionality, Android isn't needed)

Tools

* Wire strippers
* Soldering iron
* Solder
* Flux
* Wet sponge

Step 2: Prepare Wires and Breakout Board

Stranded wire is the best for this application, as it allows for some flexibility (solid core wire has a habit of snapping after too many bends). Cut four lengths of wire, each about 4 feet long. You then need to strip and tin the ends, leaving about 1/2" to 1" of bare wire exposed.

There are many good tutorials on stripping and tinning. If you are short on soldering equipment, try this one by Jayefuu: Strip and Tin Wires Like a Pro. If you have good soldering equipment (and love reading ridiculously long training manuals), check out this guide: Wiring Techniques by CED Engineering.

As for the breakout board, you'll need to solder male pins to each of the header ports. Have the main row on the edge of the board face down and the 3 pins labeled "BAT, VIN, USB" face up. For soldering pin headers, see this guide: Pin header soldering.

Step 3: Connect the Hardware

Picture of Connect the Hardware
impBoot Schematic.png
to-92.gif
1. Place the Electric Imp Breakout on the breadboard
2. Slide the Electric Imp into the breakout board (you'll hear a click when it's seated properly)
3. Connect the 1k resistor from PIN8 of the breakout board to a free row on the breadboard
4. Place the transistor on the breadboard - line up the BASE with the other end of the 1k resistor
5. Using a jumper wire, connect "USB" to "VIN" power pins
6. That's it! The hardware is pretty simple, actually.

Step 4: Create Electric Imp Account

Picture of Create Electric Imp Account
If you already have an Electric Imp account, you can skip this step.

Sign up for an account at https://plan.electricimp.com/signup.

Step 5: Configure the Imp

1. Download the Electric Imp configuration utility
   a. Google Play: electric imp 
   b. iTunes: electric imp
   c. PC: Electric Imp Blink-Up Application for Windows
2. Plug in the USB-mini cable from a power source (e.g. a computer) to the breakout board
3. Make sure the Electric Imp is powered. It should start blinking orange waiting for a BlinkUp.
4. In the configuration utility, click "Other Network..."
5. Fill out your SSID and Password
6. Click "Send BlinkUp" and immediately hold the screen against the edge of the Electric Imp
7. Wait while the pattern is blinked to the Imp
8. The Imp should then slowly blink green, meaning it has connected to the cloud server.

Step 6: Connect the impBoot Hardware to the Computer

1. Open up your computer case, and find the power switch connector on your motherboard (it will be labeled "POWER SW")
2. Unplug the connector. Remember which pin is negative (black wire) and which pin is positive (not black wire).
3. Connect the positive header pin to the impBoot
   a. Connect a F/F jumper wire to the positive POWER SW header pin on the motherboard
   b. Connect one of the 4 ft. wires to the jumper wire
   c. Route the wire through the computer case
   d. Connect the wire to the COLLECTOR of the transistor
4. Repeat step 3 to connect the negative header on the POWER SW to the EMITTER on the transistor
5. Connect the positive wire from the case switch to the impBoot (COLLECTOR) using one of the 4 ft. wires
6. Connect the negative wire from the case switch to the impBoot (EMITTER) using the last wire
7. Place the impBoot in a safe location (e.g. on top of the computer case)
8. Connect the USB cable from the impBoot to a USB port that is always powered

Step 7: Write Electric Imp Code

1. Sign in to electricimp.com with your account
2. Go to https://plan.electricimp.com/code
3. Hit the giant "+" button
4. Name your new firmware "impBoot" and click OK
5. In the programming environment, enter the following (between START and END lines):

==START OF CODE==

// impBoot
//
// Cloud Wake-On-LAN. Remotely boots a desktop through the motherboard's switch
//
// Author: Shawn Hymel
// Date: November 15, 2012
//
// Hardware:
//     Connect 1k resistor to pin 8 of the imp. Connect that to the base
//     of an NPN transistor. Connect the collector to the + of the POWER
//     SW on the motherboard and the emitter to the - of the POWER SW on
//     the motherboard.
//
// You will need the Electric Imp Toggle Android app (or something similar).
//
// Based on the example Imp code provided by Taylor Alexander, which can
// be found at https://github.com/tlalexander/Electric-Imp-Toggle
//
// License: BeerWare (thanks Sparkfun!)
//     Please use, reuse, and modify this code as you need.
//     We hope it saves you some time, or helps you learn something!
//     If you find it handy, and we meet some day, you can buy me a beer
//     or iced tea in return.
//

//*****************************************************************************
// Class definitions

// Input port to accept on/off commands from Electric Imp Toggle app
class inputHTTP extends InputPort
{

    // Event handler when HTTP command is received
    function set(httpVal)
    {

        // If HTTP receives a "1" hold switch on for 1 second
        // If HTTP receives a "0" hold switch on for 6 seconds, forcing a
        // hard shutdown
        if (httpVal == 1)
        {
            server.log("Received ON command.");
            hardware.pin8.write(0);
            imp.sleep(0.01);
            hardware.pin8.write(1);
            imp.sleep(1);
            hardware.pin8.write(0);
            imp.sleep(0.5);
        } else if (httpVal == 0)
        {
            server.log("Received OFF command.");
            hardware.pin8.write(0);
            imp.sleep(0.01);
            hardware.pin8.write(1);
            imp.sleep(6);
            hardware.pin8.write(0);
            imp.sleep(0.5);
        }
    }
}

//*****************************************************************************
// Function definitions

// Initialize pin 8 to be output to control motherboard POWER SWITCH
function initSwitch()
{
    hardware.pin8.configure(DIGITAL_OUT_OD_PULLUP);
    hardware.pin8.write(0);
}

//*****************************************************************************
// Start of program

server.log("Started");

// Configure the input port of the Imp to listen for HTTP commands
imp.configure("impBoot", [inputHTTP()], []);

// Configure pins on the Imp
initSwitch();

==END OF CODE==

6. Click the "Save Code" button
7. Go to "Planner" on the Electric Imp site, where you should see a single block - your Electric Imp
8. Click the Settings Button on the Electric Imp block
7. In the drop-down box that appears, click on "impBoot"
8. Click the 'Add Node' button and add an "HTTP In" block, which should appear in the planner window
9. Click the "+" button on the "HTTP In" block and click the impBoot block to connect the two blocks (an arrow will appear)

Step 8: Configure Electric Imp Toggle

Picture of Configure Electric Imp Toggle
impBoot Web Address.png
EI Toggle QR.jpg
1. Download the Electric Imp Toggle app on Google Play
2. Download the Barcode Scanner app on Google Play (if you don't have it already)
3. Start the Electric Imp Toggle app and click on "Scan code"
4. Go to the Planner on your Electric Imp account
5. Click on the Settings button on the "HTTP In" block
6. Highlight and copy the web address (https://api.electricimp.com/v1/f1...)
7. Find a QR code generating site such as http://qrcode.kaywa.com/
8. Paste in the web address and click "Generate"
9. Hold up the smartphone running the Barcode Scanner to the newly generated barcode
10. The scanner should recognize the QR code, and Electric Imp Toggle will be configured!

Step 9: Try It Out!

Picture of Try It Out!
Turn off your newly impBoot-improved desktop. Power up the Electric Imp Toggle App, which should be configured with your impBoot website.

Press the "Turn On" button. Magic should happen. 

Note that the "Turn Off' button works by holding the switch for 6 seconds. This forces a hard shut down on the computer (if you're running Windows, you'll probably get a nasty message about not shutting down properly next time you start).

If you run into problems, you can start debugging by looking at the system messages. Go to your Planner on electricimp.com and click the "edit" button on the "impBoot" block. Under the "log" tab, you should see messages about power state and received "ON" or "OFF" commands.

There you have it. You can now be a lean, mean, remote tasking machine. 
Ah-che8 months ago

Is there a version for new IDE of Electric imp ? there is no more Planner :)

Supay1 year ago
This is an excellent idea, particularly as I have issues with my WoWLAN working as well and since I had to shift my PC location I no longer have access to an Ethernet connection.

I'd also be very interested in seeing if I could get this working to switch the mains socket on/off remotely as well as the PC, as I find that my PSUs still draw 40W or so even when the PC is switched off. It all adds up!
ShawnHymel (author)  Supay1 year ago
I thought about this as well - you would have to hack up a power strip and put a relay in line with the power wires. It should work....just a bit more work. I might play around with it, as then you would have an Internet-controlled power switch to just about anything.

And wow....I didn't know that the PSUs still draw so much when off!
bprins1 year ago
By default most PC's come with a wake on LAN feature built into the board. The board will hold a small enough charge to take replies from your network router. You could just port forward on your router for the packets to come through. Six bytes of 0xff, then its own MAC address 16 times.

I am able to turn my computer on and off from my work using:
https://itunes.apple.com/app/depicus-wake-on-lan/id399848364?mt=8

I understand what the OP is trying to accomplish but, not worth the penny, no PUN
ShawnHymel (author)  bprins1 year ago
It's definitely an expensive way to turn on a computer, I won't deny that :)

I've tried both Wake-On-LAN (WOL) as well as Wake on Wireless LAN (WoWLAN). WOL works beautifully, but only with an Ethernet connection. If your desktop is close to your router or you don't mind stringing cables across rooms, WOL is definitely the way to go.

However, I wanted to go wireless as much as possible. WoWLAN works with SOME hardware (specific WiFi NICs and motherboards) - not mine, unfortunately. I was left with a few options:
1) Buy a new NIC and possibly mobo
2) Setup my WRT54G as a bridge with custom firmware
3) Try something new with embedded systems

I really didn't like option #1. I've done #2 (if you have a WiFi bridge sitting around, I recommend that). #3 sounded like more fun...so that's what I did :)
This is quite elegant, I had almost the same situation but was sending Matlab scripts to a professors more powerful desktop and remotely connecting. Since the university footed the bill I figure he wouldn't have cared but it is cool nonetheless
Some PCs will shutdown properly if you just press the off button briefly. My old one used to. Not sure if this is something bios or motherboard dependant.

Nick
www.bleep.io
ShawnHymel (author)  myredhotcar1 year ago
For Windows (and I imagine for Linux and Mac), you can configure the behavior of briefly pressing the power button. Generally, I have mine pop up and ask me what I want to do (e.g. Shut Down, Reboot).

In college, I learned the hard way of having the power button configured to automatically shut down. A nice prank is to walk by someone's computer and hit that button quickly :)
LesB1 year ago
Nice project. I'd like to implement this with a timer so that I can set it for the system to come up at a prescribed time to record TV shows.

Q. How do you get past the Windows log-in with remote startup?

One suggestion: Electrical wiring is more lucidly explained with a schematic drawing. (At least for an old technician like me). ExpressSCH is a nice freeware schematic drawing program with an easy learning curve, and it lets you export the schematic as a bitmap file.
ShawnHymel (author)  LesB1 year ago
If I recall, you can Remote Desktop in to a computer that isn't logged in. You'll be presented with the log in screen, so you can just log in from there. Another way to explain this: the Remote Desktop Server service starts running before you log in.

If you're not going to use Remote Desktop, I see a couple ways around this. 1) Do the bad thing and setup an account with no password - you can have Windows automatically log in to that account. 2) Setup your TV recording programs as services with System-level privileges. I'm not sure which program you're planning to use, but System-level things can run without logging in.

Step 3 has a schematic attached as one of the pictures. I find it helps me, too. :)
ggarnier1 year ago
Was "inscrutable" an autocorrect gremlin, or a self-deprecating bit of tongue in cheek?
ShawnHymel (author)  ggarnier1 year ago
LOL...definitely an attack of the autocorrect. Thanks for catching that :)
clintdb1 year ago
Maybe set Chrome to start automatically on startup, then you can use Chrome Remote Desktop and not only verify that the computer is on, but also access it remotely from any other Chrome browser?
Great Instructable BTW.
Chrome has a remote?
Cool! Have to try that! :)

Thanks alot!
ShawnHymel (author)  clintdb1 year ago
Not a bad idea. My big issue was booting the computer. After that, I could use VNC, Windows' Remote Desktop, SSH, etc. I didn't realize Chrome had a remote desktop, so I might have to check that out.
Orngrimm1 year ago
I successfully made a small server i can wake up on wireless.
BUT: I had to use quite special hardware where you have an always-on-WiFi-Card with a small headercable connecting to the WoL-Pins on the Motherboard...
It was a nightmare to find and build.

So yeah: The solution (Nice 'ible by the way! Like it!) presented here is 100x simpler and for SURE more fun to build. :)
ShawnHymel (author)  Orngrimm1 year ago
I'm glad you liked it! I thought about doing something like you described with a Raspberry Pi, but it seemed overly complicated. I'm curious, are you able to get information about the state of the computer (e.g. ON or OFF) from the WoL pins? That's the one thing impBoot is missing, and I'd like to be able to determine if the computer is on or not.
As you are already taping into the power switch header, why not monitor the power LED header? Hard power off is a really bad idea.
ShawnHymel (author)  -A-N-D-Y-1 year ago
Monitoring the power LED is a good idea as well as the USB ports, as Orngrimm points out. I find hard power off to be handy if Windows (or Linux, sometimes) has issues shutting down. I just don't hit the "OFF" button unless I really have to :)

If you find yourself needing to implement remote boot, and you don't want hard power off, I would just leave out that section out of the Imp code.
As i posted, the hardware i used isnt selfmade... I dont know if you somehow can communicate with the Mobo and ask about status...

But if i were you, i would simply check an unused USB-Port for +5V.
If the Comp is shut down, that should be 0V. ;)
And that is a fine example of K.I.S.S. genius!
So glad you've gotten use out of my Electric Imp Toggle app! :)
ShawnHymel (author)  tlalexander1 year ago
It was exactly what I was looking for! Thank you :)