6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

M5StackAdvent Calendar 2018

Day 4

M5Stackでobnizラジコンを操作する

Last updated at Posted at 2018-12-03

こちらは「M5Stack Advent Calendar 2018」 の12月4日の記事になります。

前記事でobnizラジコンのnode化を行ないました。
このエントリーではM5Stackのボタンでobnizラジコンを操作してみます。

##準備

  • obnizラジコンとnodeサーバーのセットアップ(前記事参照)
  • M5Cloud用のファームウェア書き込み
  • M5StackのWi-Fiセットアップ

##参考にしたサイト
M5Stack API Reference
https://m5stack.readthedocs.io/en/master/api-reference/button/button.html

M5Stack Web IDE
https://github.com/m5stack/M5Cloud/blob/master/README_JP.md
https://github.com/m5stack/M5Cloud/blob/master/examples/HTTP_request/main.py

API Referenceを読むと、ボタンを押したときにコールバック関数を受け付けるAPIと、ボタンを離したときにコールバック関数を受け付けるAPIが、それぞれ提供されているようです。
button*.wasPressed(ボタン*を押したときの処理)
button*.wasReleased(ボタン*を離したときの処理)
M5Stackにはボタンが3つあるので、ボタンを使って前進・後退・右回転の3種類の動きをさせたいと思います。

##M5Cloudで作成するプログラム
各ボタンのbutton*.wasPressed()とbutton*.wasReleased()メソッドを使い、obnizのMessageエンドポイントをパラメータ付きで指定します。
このような感じになります。

main.py

from m5stack import *
import urequests

def on_A_wasPressed():
  lcd.print('Button A was Pressed\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=forward")
  print(r.text)

def on_A_wasReleased():
  lcd.print('Button A was Released\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=stop")
  print(r.text)

buttonA.wasPressed(on_A_wasPressed)
buttonA.wasReleased(on_A_wasReleased)

def on_B_wasPressed():
  lcd.print('Button B was Pressed\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=back")
  print(r.text)

def on_B_wasReleased():
  lcd.print('Button B was Released\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=stop")
  print(r.text)

buttonB.wasPressed(on_B_wasPressed)
buttonB.wasReleased(on_B_wasReleased)

def on_C_wasPressed():
  lcd.print('Button C was Pressed\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=right")
  print(r.text)

def on_C_wasReleased():
  lcd.print('Button C was Released\n')
  r = urequests.get("https://obniz.io/obniz/{obniz_id}/message?data=stop")
  print(r.text)

buttonC.wasPressed(on_C_wasPressed)
buttonC.wasReleased(on_C_wasReleased)

##動作確認
M5StackにUploadして、ボタンA → ボタンB → ボタンCの順番で押してみます。
若干タイムラグは感じますが思った通り動きました!

##終わりに

M5Stackのサンプルコードを動かした程度の私でも何とか作れました。使ったのはボタンだけでセンサーとか使ってないですしね。
ちなみに、このプログラムはタイミングが悪いところでWi-Fiが切れるとモーター停止のリクエストが届かず、ずーっと動き続けます。ちょうど動画撮影中に発生して撮り直しました。。

ここまで読んでいただきましてありがとうございました!

実はもう1話続きがありますのでよろしければそちらも読んでもらえると嬉しいです。
Pepperでobnizラジコンを操作する

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?