Bonjour, Habr!Cet article décrit les souffrances d'un débutant dans le processus de fabrication d'une plate-forme autopropulsée basée sur l'esp8266 MK avec micropython , gérée via un serveur Web intégré.KDPV:
Comme je l'ai mentionné dans le premier article , le projet est éducatif, alors ne jugez pas strictement.Ainsi, la tâche de la première étape est de créer une plate-forme de chenille qui peut être contrôlée via wi-fi.Dans quel but dans les bacs un vieux réservoir de jouets a été trouvé, et aussi MK esp8266 (ESP-12E) et un pilote de moteur pour cela ont été achetés.esp8266 et ensemble de protection de moteur De plus, tout ce qui précède a été assemblé conformément au schéma:
Et après quelques jours d'une brève étude de la documentation , il est devenu clair comment contrôler les moteurs: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)
Ainsi, les broches 5 et 4 - vous permettent de régler la vitesse de rotation des moteurs à travers le PWM, et les broches 0 et 2 - contrôlent l'inverse pour les sorties "A" et "B", respectivement. De plus, puisque la LED est également connectée à la broche 2 de ma carte, nous observons des effets de lumière en parallèle avec le mouvement :)Cependant, cela n'a pas immédiatement décollé ...Google sur un sujet donné a conduit à un forum où il était recommandé de supprimer deux résistances "supplémentaires", ce qui a été fait. Citation de là:J'ai mesuré ces résistances, à l'entrée du L293DD, la résistance est de 1K, mais elles ont une résistance de seulement 100 ohms à la masse. Cela signifie que le signal d'entrée du contrôleur NodeMCU ne peut pas atteindre le L293DD. Je ne sais vraiment pas pourquoi ils sont là - le L293DD peut traiter jusqu'à 7 V à son entrée, et NodeMCU donne une sortie 3,3 V.
J'ai retiré ces deux résistances de 100 Ohms (la première et la troisième à gauche lorsque l'antenne est à droite), et maintenant Bouclier fonctionne.
Après cela, les choses se sont bien passées, etversion finale du code
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()
Il s'est avéré assez efficace et a réussi à résoudre la tâche définie lors de la première étape.Le premier pokatushki:Première partie (Installer micropython sur ESP8266 et travailler avec Linux sous)Partie suivante (Robot simple sur MK esp8266 avec micropython)Sources d'inspiration: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