作者:貝殼物聯 | 更新時間:2016-03-02 | 瀏覽量:9231
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();
}