Introduction: DIY Apple Watch VLC Controller With ESP8266, Arduino

Its a homemade project to make my own media controller app.

My laptop connected to tv, and im too lazy, so maked a VLC control app.

Yes im know, there is an official VLC app in store, better function, but this one is my :)

And im added a PC turn off button to my watch app (lazyness overload)


Step 1: Parts, Programs.

Part list:

- ARDUINO with keyboard emulation. (in this project, im using DUE)

- ESP8266 for control the arduino (in this project, im using ESP-01)


- Xcode 7 beta (because from this version, without payed developer account, can upload your app to own devices)

- Watch OS 1.01

Step 2: ESP8266 and Arduino Side

ESP8266 is a webserver in STA mode.

For upload ESP code, im using Arduino IDE 1.6.5 for ESP8266


For installing help, go to the

My code, is a little modified ESP8266 webserver example from the Arduino IDE.

Im just removed the gpio control, and added some new indexOf method for every button in the watch app.

For upload, use any 3v3 TTL to USB converter, but don't forget connect gpio0 to gnd when flashing!

After uploaded the code, remove this connection, and restart the ESP.

The connection:

ESP vcc connected to DUE 3.3v.

ESP gnd connected to DUE gnd.

ESP Tx connected to DUE Rx1 (because in the arduino code, im using Serial1)

Arduino app is a simple serial string receive code with keyboard emulation.

Used in my other projects too.

Every received string configured for a VLC shortcut key.

(when receive "play" string, arduino press "SPACE" key...)

Step 3: Xcode and Ip Config

The coding is all in the video.

One thing missing:

If you got error with NSURLSession, you need to enable NSAppTransportSecurity in the plist. (see pic here)

Not need to run program at the iphone side, but the Apple watch using the iphone wifi.

You can see, im added fix ip in the xcode url's, so to make sure for the router assign the good IP to the ESP8266, in the router DHCP/Address reservation menu add your ESP Mac address and the IP from the code.

After this need to reboot router.