Самоходная Платформа На Мк Esp8266 С Микропитоном

Привет, Хабр! Ээта статья описывает страдания новичка процесс изготовления самоходной платформы на базе МК esp8266 с микропитон , управляемый через встроенный веб-сервер.

КДПВ:

Самоходная платформа на МК esp8266 с микропитоном

Интерфейс:

Самоходная платформа на МК esp8266 с микропитоном

Как я уже упоминал в первая статья , это образовательный проект, поэтому прошу не судить строго.

Итак, задача первого этапа — сделать гусеничную платформу, управляемую через Wi-Fi. По этой причине в закромах был найден старый игрушечный танк, куплен МК esp8266 (ESP-12E) и моторчик к нему.

esp8266 и моторный щит в сборе

Самоходная платформа на МК esp8266 с микропитоном

Далее все вышеперечисленное было собрано в соответствии со схемой:

Самоходная платформа на МК esp8266 с микропитоном

И после пару дней короткое исследование документация , стало понятно, как управлять моторами:

  
  
   

from machine import Pin, PWM """ nodemcu pins from the motor shield """ servo_1 = Pin(5, Pin.OUT) # PWMA-GPIO5 servo_2 = Pin(4, Pin.OUT) # PWMB-GPIO4 revrs_L = Pin(0, Pin.OUT, value=0) # DA-GPIO0 revrs_R = Pin(2, Pin.OUT, value=0) # DB-GPIO2 """ 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 позволяют задавать скорость вращения двигателей через ШИМ, а пин0 и пин2 управляют реверсом для выходов «А» и «В» соответственно.

Кроме того, поскольку на моей плате к пину2 подключен еще и светодиод, то параллельно с движением мы видим еще и световые эффекты :) Однако не сразу получилось.

Гугление по заданной теме привело к Форум , где была рекомендация убрать два «лишних» резистора, что и было сделано.

Цитата оттуда:

Я измерил сопротивление этих резисторов 1 кОм на входе L293DD, но они имеют сопротивление относительно земли только 100 Ом.

Это означает, что входной сигнал от контроллера NodeMCU не может достичь L293DD. Я действительно не знаю, почему они там — L293DD может обрабатывать до 7 В на своем входе, а NodeMCU выдает на выходе 3,3 В.

Я убрал эти два резистора по 100 Ом (первый и третий слева, когда антенна справа) и теперь шилд работает.



Самоходная платформа на МК esp8266 с микропитоном

После этого все пошло на лад, и окончательный код

# RoboTank based on ESP8266 with motor shield import network import socket from machine import Pin, PWM """ nodemcu pins from the motor shield """ servo_1 = Pin(5, Pin.OUT) # PWMA-GPIO5 servo_2 = Pin(4, Pin.OUT) # PWMB-GPIO4 revrs_L = Pin(0, Pin.OUT, value=0) # DA-GPIO0 revrs_R = Pin(2, Pin.OUT, value=0) # DB-GPIO2 """ 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="ширина = ширина устройства, начальный масштаб = 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 motors first stop_all() # connect to wi-fi network do_connect() # create socket for web srvr 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) # main loop 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()

оказался достаточно эффективным и успешно решил задачу, поставленную на первом этапе.

Первые поездки: Часть первая (Установка micropython на ESP8266 и работа с ним под Linux) Следующая часть (Простой робот на МК esp8266 с микропитоном) Источники вдохновения: funprojects.blog/2019/02/12/micropython-air-boat www.instructables.com/id/Simplest-Wifi-Car-Using-ESP8266-Motorshield forum.micropython.org/viewtopic.phpЭt=3977 randomnerdtutorials.com/esp32-esp8266-micropython-web-server docs.micropython.org/en/latest/esp8266/tutorial/index.html Теги: #Программирование микроконтроллеров #python #Сделай сам или сделай сам #Электроника для начинающих #MicroPython #ESP8266 #motorshield

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.