Prerequisite
- 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
|
- Disabling auto reset for Arduino
- Relay that can handle large loads, you can use this 8 channel relay box or purchase the KTA-223 module from Ocean Control
Select the correct serial driver for your serial device. I'm using Arduino duemilanove, so SSH to router and enter code below:
| opkg update 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 |
Verify USB Serial DriverArduino sketch from Ocean Controls: KTA223 RelayDuino
Web interface: wireless router home automation v1.zip
Installation
- 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
/www/main.html
/www/main.js
/www/cgi-bin/
/www/images/
- 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)
Wireless Router Home Automation -- All OFF
Wireless Router Home Automation -- All ON- 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
- javascript:runCmd(1) triggered
- 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.
|
function readSerial() if string.len(serialData)>0 then if string.len(serialData) == 0 then end |
| 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
- More......
This is a very preliminary release, please report any bugs you may find to the project.
