作者:貝殼物聯 | 更新時間:2016-03-02 | 瀏覽量:9119
1、刷了openwrt的路由器,需引出TX、RX、GND針腳。
圖為裸板GL-inet路由器,淘寶地址:
2、Arduino智能小車
淘寶地址:https://item.taobao.com/item.htm?id=523953094755
3、電腦
需安裝WinSCP軟件,向路由器上傳文件用;
需通過有線或無線與openwrt路由器通訊。
路由器 Arduino
TX RX
RX TX
GND GND
1、控制界面,car.htm放在/www文件夾下。
car.htm代碼如下:
<html> <head> </head> <body> <div style="float:left"> <script> function sendSer(value){ document.getElementById("ser").src="http://192.168.1.101/cgi-bin/web2ser?"+value; } </script> <table> <tr><td/><img id="ser" width="1" height="1"> <td><input type="button" onmousedown="sendSer('G')" onmouseup="sendSer('S')" value="前進" /></td><td/></tr> <tr><td><input type="button" onmousedown="sendSer('L')" onmouseup="sendSer('S')" value="左轉" /></td><td/> <td><input type="button" onmousedown="sendSer('R')" onmouseup="sendSer('S')" value="右轉" /></td></tr> <tr><td/><td><input type="button" onmousedown="sendSer('B')" onmouseup="sendSer('S')" value="后退" /></td><td/></tr> <tr><td colspan="3" align="middle"> <input type="button" onclick="sendSer('A')" value="自動控制" /></td></tr> <tr><td colspan="3" align="middle"> <input type="button" onclick="sendSer('M')" value="手動控制" /></td></tr> </table> </div> </body> </html>
2、lua代碼,通過控制界面調用lua腳本web2ser放在/www/cgi-bin/下。
web2ser腳本如下:
#!/usr/bin/lua io.output("/dev/ttyATH0") io.write(os.getenv("QUERY_STRING"))
代碼中ttyATHO為路由器串口,不同路由器其名稱有所不同,可以通過ls /dev 命令查看。
/* Arduino小車WIFI遙控程序 功能:小車接收到WIFI模塊串口發送過來命令,執行不同動作,字符“G”前進,字符“B”后退,字符“L”左轉,字符“R”右轉,字符“S”停止。 By 愛之家淘寶店 2015.11.5 小車DIY配件購買地址:https://item.taobao.com/item.htm?id=523953094755 */ const int L298nIn1 = 2;//L298N模塊信號輸入 const int L298nIn2 = 3; const int L298nIn3 = 4; const int L298nIn4 = 5; const String GO = "G";//串口發送信息代碼定義 const String BACK = "B"; const String RIGHT = "R"; const String LEFT = "L"; const String STOP = "S"; void setup() { pinMode(L298nIn1, OUTPUT); pinMode(L298nIn2, OUTPUT); pinMode(L298nIn3, OUTPUT); pinMode(L298nIn4, OUTPUT); Serial.begin(115200); } void goForward() {//小車前進 digitalWrite(L298nIn1, HIGH); digitalWrite(L298nIn2, LOW); digitalWrite(L298nIn3, LOW); digitalWrite(L298nIn4, HIGH); } void goBack() {//小車后退 digitalWrite(L298nIn1, LOW); digitalWrite(L298nIn2, HIGH); digitalWrite(L298nIn3, HIGH); digitalWrite(L298nIn4, LOW); } void goStop() {//小車停止 digitalWrite(L298nIn1, LOW); digitalWrite(L298nIn2, LOW); digitalWrite(L298nIn3, LOW); digitalWrite(L298nIn4, LOW); } void turnRight() {//小車右轉 digitalWrite(L298nIn1, LOW); digitalWrite(L298nIn2, HIGH); digitalWrite(L298nIn3, LOW); digitalWrite(L298nIn4, HIGH); } void turnLeft() {//小車左轉 digitalWrite(L298nIn1, HIGH); digitalWrite(L298nIn2, LOW); digitalWrite(L298nIn3, HIGH); digitalWrite(L298nIn4, LOW); } String readTtl() { String comdata = ""; while (Serial.available()) { comdata += char(Serial.read()); delay(2); } return comdata; } void loop()//主循環函數 { String s = readTtl(); if (s == GO ) goForward();//發送“G”,小車前進,直到接收到“S”停止 if (s == LEFT ) turnLeft(); if (s == STOP ) goStop(); if (s == RIGHT ) turnRight(); if (s == BACK ) goBack(); }