M5stackで2足歩行ロボットの作成⑤「micropythonで立てたWEBサーバーにブラウザでアクセスしてPCA9685を制御しロボットを操作する」
M5Stack
2021-07-23
2021-07-23
今回は、第3回で作成したWIFI AP,WEBサーバーのプログラムに前回のプログラムを追加し、ブラウザからロボットのモーションを操作できるようにしてみます。
前回同様、サムネイルの写真の通りハードウェアを繋いでおきます。
server.py
import network import machine import time import socket import re from machine import Pin,I2C import servo import pca9685 ESSID = 'M5stack' PASSWORD = '11223344' IP = '192.168.5.1' i2c = I2C(0, scl=Pin(22), sda=Pin(21)) sev = servo.Servos(i2c) sv ="p" #サーボモーター制御 def servoset(): global sv if sv == "st": sev.position(0, 97) time.sleep_ms(1000) sev.position(1, 90) time.sleep_ms(1000) sev.position(2, 100) time.sleep_ms(1000) sev.position(3, 90) time.sleep_ms(1000) elif sv == "fw": sev.position(3, 70) sev.position(1, 70) time.sleep_ms(500) sev.position(0, 77) sev.position(2, 80) time.sleep_ms(500) sev.position(3, 90) sev.position(1, 90) time.sleep_ms(500) sev.position(3, 110) sev.position(1, 110) time.sleep_ms(500) sev.position(0,117) sev.position(2, 120) time.sleep_ms(500) sev.position(3, 90) sev.position(1, 90) time.sleep_ms(500) elif sv == "lt": sev.position(3, 40) sev.position(1, 60) time.sleep_ms(500) sev.position(0, 117) time.sleep_ms(500) sev.position(3, 90) time.sleep_ms(500) sev.position(1, 90) time.sleep_ms(500) sev.position(0, 97) time.sleep_ms(500) elif sv == "bk": sev.position(3, 110) sev.position(1, 110) time.sleep_ms(500) sev.position(0, 77) sev.position(2, 80) time.sleep_ms(500) sev.position(3, 90) sev.position(1, 90) time.sleep_ms(500) sev.position(3, 70) sev.position(1, 70) time.sleep_ms(500) sev.position(0,117) sev.position(2, 120) time.sleep_ms(500) sev.position(3, 90) sev.position(1, 90) time.sleep_ms(500) elif sv == "rt": sev.position(3, 120) sev.position(1, 140) time.sleep_ms(500) sev.position(2, 80) time.sleep_ms(500) sev.position(1, 90) time.sleep_ms(500) sev.position(3, 90) time.sleep_ms(500) sev.position(2, 100) time.sleep_ms(500) #html def home_page(): html = """<html lang="ja"> <head> <meta charset="utf-8"> <title>サーボテスト</title> <meta name="viewport" content=
"width= device-width, initial-scale=1"> <style> * { margin: 0px; padding: 0px; } body { max-width: 600px; font-size: 25px; width: 100%; } main { height: 40vh; background: skyblue; } ul { display: block; height: 40vh; list-style: none; padding-top: 10px; } .bc { display: flex; } .a, .bc, .d { height: 12vh; } li { width: 100px ; height: 90% ; margin-left: auto; margin-right: auto; background: yellow; } .b { margin-left: auto; } .c { margin-right: auto; } ul li { text-align: center; } .a li, .b li, .c li, .d li { border: solid 1px; } .n li { background: yellow; } a:active { color: #ff2020; } .a li, .b li, .c li, .d li, .n li { border: solid 1px; } .n { margin-right: 3px; margin-left: 3px; } </style> </head> <body> <main> <ul> <div class="a"> <a href="/svm_aa"> <li id="forward">前進</li> </a></div> <div class="bc"> <div class="b"> <a href="/svm_bb"> <li id="left">左旋回</li> </a></div> <div class="n"> <a href="/svm_ee"> <li id="set">SET</li> </a></div> <div class="c"> <a href="/svm_cc"> <li id="right">右旋回</li> </a></div> </div> <div class="d"> <a href="/svm_dd"> <li id="backward">後退</li> </a></div> </ul> </main> </body> </html>""" return html #テキストとして値を返す #WIFI APの立ち上げ ap = network.WLAN(network.AP_IF) ap.config(essid=ESSID, authmode=3, password=PASSWORD) ap.ifconfig((IP,'255.255.255.0',IP, '8.8.8.8')) ap.active(True) print("AP OK") #WEBサーバーの立ち上げ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 80)) s.listen(5) #クライアント接続 while True: conn, addr = s.accept() request = str(conn.recv(1024)) m = re.search(r'svm_(\D\D\s)', request) #print(request) #ボタン操作反映 if m != None : svm = m.group(0) if svm == 'svm_aa ': sv = "fw" elif svm == 'svm_bb ': sv = "lt" elif svm == 'svm_cc ': sv = "rt" elif svm == 'svm_dd ': sv = "bk" elif svm == 'svm_ee ': sv = "st" servoset() #サーボ関数呼び出し sv ="p" response = home_page() #html text格納 conn.send(response) #htmlデータ送信 conn.close() #scket破棄 print("Data Received")
importのモジュールと、サーボモーターの関数を追加しただけです。
それでは、このプログラムをPC上から実行してみます。
動作確認
M5stacのWIFI APに接続後、サーバーにアクセスします。
操作画面のhtmlが表示されるので、全てのボタンが正常に動作するか確認します。
問題なければ下のようになります。↓
次回は、M5stackの画面に表情をつけるプログラムを追加したいと思います。
コメントを残す
コメント一覧
コメントはまだありません⇧