Olá Habr!Este artigo descreve o sofrimento de um iniciante no processo de fabricação de uma plataforma de plataforma automotora baseada no esp8266 MK com micropython , gerenciada por um servidor da Web integrado.KDPV:
Como mencionei no primeiro artigo , o projeto é educacional, portanto, não julgue rigorosamente.Portanto, a tarefa do primeiro estágio é criar uma plataforma lagarta que possa ser controlada via wi-fi.Para que finalidade, nas caixas, foi encontrado um velho tanque de brinquedos, e também foram adquiridos o MK esp8266 (ESP-12E) e um driver de motor.esp8266 e montagem do motor Além disso, todos os itens acima foram coletados de acordo com o esquema:
e depois de alguns dias de um breve estudo da documentação , ficou claro como controlar os motores: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)
Assim, o pino 5 e o pino 4 - permitem definir a velocidade de rotação dos motores através do PWM, e o pino 0 e o pino 2 - controlam o inverso para as saídas "A" e "B", respectivamente. Além disso, como o LED também está conectado ao pin2 na minha placa, também observamos efeitos de luz em paralelo com o movimento :)No entanto, ele não decolou imediatamente ... OGoogle em um determinado tópico levou a um fórum em que havia uma recomendação para remover dois resistores "extras", o que foi feito. Citação de lá:Eu medi esses resistores, na entrada do L293DD, a resistência é de 1K, mas eles têm uma resistência de apenas 100 ohms ao terra. Isso significa que o sinal de entrada do controlador NodeMCU não pode alcançar o L293DD. Realmente não sei por que eles estão lá - o L293DD pode processar até 7 V na entrada e o NodeMCU fornece uma saída de 3,3 V. Removai
esses dois resistores de 100 Ohm (o primeiro e o terceiro à esquerda quando a antena está à direita) e agora Shield funciona.
Depois disso, as coisas correram bem, eversão final do código
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()
Acabou sendo bastante eficiente e resolveu com êxito a tarefa definida no primeiro estágio.O primeiro pokatushki:A primeira parte (Instalando o micropython no ESP8266 e trabalhando com ele no Linux)A próxima parte (Robô simples no MK esp8266 com micropython)Fontes de inspiração:funprojects.blog/2019/02/12/micropython-air-boatwww.instructables.com/id / Simplest-Wifi-Car-Using-ESP8266-Motorshieldforum.micropython.org/viewtopic.php?t=3977randomnerdtutorials.com/esp32-esp8266-micropython-web-serverdocs.micropython.org/en/latest/esp8266/ tutorial / index.html