哈Ha!本文介绍了初学者在通过集成Web服务器管理基于esp8266 MK和micropython的自走式平台的过程中所遭受的苦难。KDPV:
正如我在第一篇文章中提到的,该项目具有教育意义,因此请不要严格判断。因此,第一阶段的任务是制造一个可以通过wi-fi控制的履带式平台。为此,在垃圾箱中发现了一个旧玩具罐,并购买了MK esp8266(ESP-12E)和一个马达驱动器。此外,以上所有内容都是根据该方案收集的:
在对文档进行了几天的简短研究后,很清楚如何控制电动机:from machine import Pin, PWM
""" nodemcu pins from the motor shield """
servo_1 = Pin(5, Pin.OUT)
servo_2 = Pin(4, Pin.OUT)
revrs_L = Pin(0, Pin.OUT, value=0)
revrs_R = Pin(2, Pin.OUT, value=0)
""" named after the L9110 h-bridge pins """
motor_L = PWM(servo_1, freq=1000, duty=0)
motor_R = PWM(servo_2, freq=1000, duty=0)
""" TODO: variable speed """
speed = 1023
def stop_all():
revrs_L.value(0)
motor_L.duty(0)
revrs_R.value(0)
motor_R.duty(0)
def forward():
revrs_L.value(0)
motor_L.duty(speed)
revrs_R.value(0)
motor_R.duty(speed)
因此,针脚5和针脚4-允许您通过PWM设置电动机的旋转速度,而针脚0和针脚2-分别控制输出“ A”和“ B”的反向。此外,由于LED也连接到了我板上的pin2,因此我们观察到了与运动平行的灯光效果:)但是,它并没有立即起效……针对给定主题的Google导致了一个论坛,该论坛建议删除两个“额外”电阻,完成了。从那里引用:我测量了这些电阻,在L293DD的输入处的电阻为1K,但它们对地的电阻仅为100欧姆。这意味着来自NodeMCU控制器的输入信号无法到达L293DD。我真的不知道为什么会这样-L293DD可以在其输入上处理高达7 V的电压,而NodeMCU提供3.3 V的输出。
我移除了这两个100 Ohm电阻器(当天线位于右侧时,第一个和第三个在左侧),现在盾的作品。
之后,事情进展顺利,代码的最终版本
import network
import socket
from machine import Pin, PWM
""" nodemcu pins from the motor shield """
servo_1 = Pin(5, Pin.OUT)
servo_2 = Pin(4, Pin.OUT)
revrs_L = Pin(0, Pin.OUT, value=0)
revrs_R = Pin(2, Pin.OUT, value=0)
""" named after the L9110 h-bridge pins """
motor_L = PWM(servo_1, freq=1000, duty=0)
motor_R = PWM(servo_2, freq=1000, duty=0)
""" TODO: variable speed """
speed = 1023
""" function for connecting to your local WiFi network """
def do_connect():
essid = 'home_wifi'
password = '12345678'
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(essid, password)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
def stop_all():
revrs_L.value(0)
motor_L.duty(0)
revrs_R.value(0)
motor_R.duty(0)
def backward():
revrs_L.value(1)
motor_L.duty(speed)
revrs_R.value(1)
motor_R.duty(speed)
def forward():
revrs_L.value(0)
motor_L.duty(speed)
revrs_R.value(0)
motor_R.duty(speed)
def right():
revrs_L.value(0)
motor_L.duty(speed)
revrs_R.value(1)
motor_R.duty(speed)
def left():
revrs_L.value(1)
motor_L.duty(speed)
revrs_R.value(0)
motor_R.duty(speed)
def right_turn():
revrs_L.value(0)
motor_L.duty(speed)
revrs_R.value(0)
motor_R.duty(0)
def left_turn():
revrs_L.value(0)
motor_L.duty(0)
revrs_R.value(0)
motor_R.duty(speed)
def web_page(request):
motor_state="Stopped"
if request.find('GET /?forward') > 0:
motor_state="Going Forward"
forward()
if request.find('GET /?left') > 0:
motor_state="Rotate Left"
left()
if request.find('GET /?right') > 0:
motor_state="Rotate Right"
right()
if request.find('GET /?left_turn') > 0:
motor_state="Turn Left"
left_turn()
if request.find('GET /?right_turn') > 0:
motor_state="Turn Right"
right_turn()
if request.find('GET /?backward') > 0:
motor_state="Going Backward"
backward()
if request.find('GET /?stop') > 0:
motor_state="Stopped"
stop_all()
html = """<html><head><title>RoboTank WEB</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,"> <style>
html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}
.button{display: inline-block; background-color: #33c080; border: none;
border-radius: 4px; color: white; text-decoration: none; font-size: 30px; width:100%}
.button2{background-color: #4286f4; width:30%}
.button3{background-color: #eb2b10; width:35%}
.button4{background-color: #8386f4; width:44%}
</style></head>
<body> <h1>RoboTank WEB</h1>
<p>Status : <strong>""" + motor_state + """</strong></p>
<p><a href='/?forward'><button class="button">Forward</button></a></p>
<p><a href='/?left_turn'><button class="button button2">LEFT</button></a>
<a href='/?stop'><button class="button button3">STOP</button></a>
<a href='/?right_turn'><button class="button button2">RIGHT</button></a>
<p><a href='/?backward'><button class="button">Backward</button></a></p>
<p><a href='/?left'><button class="button button4">L-rotate</button></a>
<a href='/?right'><button class="button button4">R-rotate</button></a></p>
</body></html>"""
return html
stop_all()
do_connect()
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
try:
s.bind(addr)
s.listen(1)
except:
s.close()
s.bind(addr)
s.listen(1)
while True:
conn, addr = s.accept()
print('Got a connection from %s' % str(addr))
request = conn.recv(1024)
request = str(request)
print('The Content = %s' % request)
response = web_page(request)
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')
conn.sendall(response)
conn.close()
事实证明,这是非常有效的,并且可以成功解决第一阶段的任务。第一个pokatushki:第一部分(在ESP8266上安装micropython并在Linux下使用它)下一部分(在带有micropython的MK esp8266上的简单机器人)灵感来源:funprojects.blog/2019/02/12/micropython-air-boatwww.instructables.com/id / Simplest-Wifi-Car-Using-ESP8266-Motorshield forum.micropython.org/viewtopic.php?t=3977randomnerdtutorials.com/esp32-esp8266-micropython-web-serverdocs.micropython.org/en/latest/esp8266/教程/ index.html