基于openwrt路由器串口通讯实现网页控制Arduino智能小车

硬件说明

1、刷了openwrt的路由器,需引出TX、RX、GND针脚。

1447308523268212.png

openwrt路由器

图为裸板GL-inet路由器,淘宝地址:

2、Arduino智能小车

1446782245752171.png

淘宝地址: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代码

/*
 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();
}

文章出自:基于openwrt路由器串口通讯实现网页控制Arduino智能小车

http://www.bigiot.net/talk/12.html