- Wireless router flashed with OpenWRT. This project based on TP-LINK TL-WR1043ND wireless router, you can use TL-WR703N or TL-MR3420 if budget is concerned, any other router that support OpenWRT should work as well.
- Arduino code, sketch using Ocean Controls KTA223, or any serial device that use the following protocol.
Syntax for receiving message: @aaccpp
Syntax for replying message: #aapp
Select the correct serial driver for your serial device. I'm using Arduino duemilanove, so SSH to router and enter code below:
opkg install kmod-usb-serial-ftdi
|opkg install kmod-usb-acm|
If you are using PL2303 based USB/serial adapters
|opkg install kmod-usb-serial-pl2303|
If you are using CP201x based USB/serial adapters
|opkg install kmod-usb-serial-cp210x|
Plug in Arduino to the USB port of router, make sure the serial device is working with router, and know the port name assigned to the serial device.
|dmesg | grep -i usb|
Arduino sketch from Ocean Controls: KTA223 RelayDuino
Web interface: wireless router home automation v1.zip
- Download the web interface and extract to any folder of computer
- You should see three files and two folders on your computer
- Using WinSCP copy all the files and folders to /www folder of router
- Now your router should have
- You must have enough permission to run the file in /www/cgi-bin folder. So change the luaSerial file permission to 0755.
|chmod 0755 /www/cgi-bin/luaSerial|
Running the program
- Open Internet Explorer or Google Chrome.
- Enter http://192.168.1.1/main.html (192.168.1.1 is the router IP, you should use your own router IP)
- Click on each images to toggle ON and OFF, images will change accordingly.
- The Tools image & navigator images is not use at the moment.
- The status bar is use to display serial message which reply from Arduino
- The main program split into 3 files for easy understanding (main.html, main.css, main.js)
- When main.html started, it load two external files (main.css & main.js)
- onload (line 9) triggered and execute autoRun() function from main.js
- Update image caption on screen
- Issue runCmd(0) to get status from Arduino then start Timer to query status every 10 seconds
- Update images based on results from Arduino
- Startup process completed. Waiting for user input......
- User click on imageButton, say first image
- Clear old Timer and start a new Timer
- Ajax deal with serialLua
- serialLua reply status (I name it Arduino message) to Ajax
- Display Arduino message on status bar
- Update first imageButton according to Arduino message
I don't have a good solution to clear the serial buffer, I have to use the most stupid way (very shy) to clear the buffer. Refer to code below, I have to issue readSerial() function instead of just using serial:read and serial:flush.
if string.len(serialData)>0 then
if string.len(serialData) == 0 then
|echo '/cgi-bin:root:$p$root' > /etc/httpd.conf; /etc/init.d/uhttpd restart|
- Rewrite web interface
- More control, for example analog control
- Web cam integrated
This is a very preliminary release, please report any bugs you may find to the project.