Hallo Habr!Dieser Artikel beschreibt das Leid eines Anfängers bei der Herstellung einer selbstfahrenden Plattformplattform auf der Basis des esp8266 MK mit Mikropython , die über einen integrierten Webserver verwaltet wird.KDPV:
Wie ich im ersten Artikel erwähnt habe , ist das Projekt lehrreich, also urteilen Sie bitte nicht streng.Die Aufgabe der ersten Stufe besteht also darin, eine Raupenplattform zu schaffen, die über WLAN gesteuert werden kann.Zu welchem Zweck in den Behältern ein alter Spielzeugtank gefunden wurde, wurden auch MK esp8266 (ESP-12E) und ein Motortreiber dafür gekauft.esp8266 und Motorschutzbaugruppe Darüber hinaus wurde alles oben Genannte gemäß dem Schema gesammelt:
Und nach ein paar Tagen einer kurzen Untersuchung der Dokumentation wurde klar, wie die Motoren zu steuern sind: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)
Pin5 und Pin4 ermöglichen es Ihnen, die Drehzahl der Motoren über die PWM einzustellen, und Pin0 und Pin2 steuern den Rückwärtsgang für die Ausgänge "A" bzw. "B". Da die LED auch an Pin2 auf meinem Board angeschlossen ist, beobachten wir Lichteffekte parallel zur Bewegung :)Allerdings hat sie nicht sofort begonnen ...Google zu einem bestimmten Thema führte zu einem Forum, in dem empfohlen wurde, zwei "zusätzliche" Widerstände zu entfernen. was getan wurde. Zitat von dort:Ich habe diese Widerstände gemessen, am Eingang des L293DD beträgt der Widerstand 1K, aber sie haben einen Widerstand von nur 100 Ohm gegen Masse. Dies bedeutet, dass das Eingangssignal vom NodeMCU-Controller den L293DD nicht erreichen kann. Ich weiß wirklich nicht, warum sie dort sind - L293DD kann bis zu 7 V an seinem Eingang verarbeiten, und NodeMCU liefert einen 3,3-V-Ausgang.
Ich habe diese beiden 100-Ohm-Widerstände entfernt (der erste und dritte links, wenn sich die Antenne rechts befindet) und jetzt Schild funktioniert.
Danach lief alles reibungslos undendgültige Version des Codes
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()
Es stellte sich als recht effizient heraus und löste die in der ersten Phase gestellte Aufgabe erfolgreich.Der erste Pokatushki:Erster Teil (Installation micropython auf Esp8266 und das Arbeiten mit unter Linux) Dennächsten Teil (Simple Roboter auf MK Esp8266 mit micropython)Quellen der 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