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の画面に表情をつけるプログラムを追加したいと思います。
コメントを残す
コメント一覧
コメントはまだありません⇧