我有运行 Micropython 的 ESP8266 12E 的 RC 汽车项目。ESP 处于 AP 模式,它托管的 HTML 页面包含两个滑块(一个用于转向,一个用于驱动速度)。两个滑块的值由 AJAX 请求每 200 毫秒发送一次。使用我的笔记本电脑进行控制时,一切正常,在我的旧 Android 手机(HTC Desire 200、Android 4.0)上运行也很好。但是,当我想用我现在的手机(华为 P8 lite,Android 6.0)控制汽车时,它运行了大约 2 分钟,然后它停止工作并在一段时间后重新连接。
有谁知道,什么或哪里可能是问题?
感谢您的任何回复。
这是python代码:
import socket
import machine
f = open('html.html')
html = f.read()
f.close()
servo = machine.PWM(machine.Pin(4), freq=50)
fwd = machine.PWM(machine.Pin(12), freq=50)
bwd = machine.PWM(machine.Pin(14), freq=50)
def speed(i):
if i > 300:
i = i-300
fwd.duty(i)
bwd.duty(0)
elif i < -300:
i = i*(-1)
i = i-300
fwd.duty(0)
bwd.duty(i)
else:
fwd.duty(0)
bwd.duty(0)
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
while True:
conn, addr = s.accept()
request = conn.recv(1024)
conn.sendall('HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type:text/html\r\n\r\n')
request = str(request)
ix = request.find('X')
iy = request.find('Y')
iz = request.find('Z')
if ix > 0 :
ie = request.find(' ', ix)
ValX = int(request[ix+1:iy])
ValY = int(request[iy+1:iz])
servo.duty(ValX)
speed(ValY)
else:
conn.sendall(html)
conn.sendall('\n')
conn.close()
和html:
<!DOCTYPE html>
<html>
<head>
<meta content='width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no;' name='viewport'/>
<title>Ferrari F430</title>
<style>
input[type=range]::-moz-range-thumb {
width: 40px;
height: 40px;
background: black;
}
input[type=range] {
-webkit-appearance: none;
height: 5px;
background: lightgrey;
outline: none;
position:absolute;
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 40px;
height: 40px;
border-radius: 5px;
background: black;
}
</style>
</head>
<body>
<input type='range' ontouchend='resetX()' onmouseup='resetX()' min='61' max='101' value='81' id='sliderX' style='width:50%; left:5%; top:50%;'>
<input type='range' ontouchend='resetY()' onmouseup='resetY()' min='-1323' max='1323' value='0' id='sliderY' style='width:40%; -webkit-transform:rotate(270deg); left:60%; top:50%;'>
<script>
function myFunction(){
var x = document.getElementById("sliderX").value;
var y = document.getElementById("sliderY").value;
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","Val=X" + x + "Y" + y + "Z",true);
xmlhttp.send();
}
setInterval(myFunction, 200);
function resetX(){
document.getElementById("sliderX").value = 81;
}
function resetY(){
document.getElementById("sliderY").value = 0;
}
</script>
</body>
</html>