こんにちは。ピャペロンです!
今回はパペロ本体のボタンを2度押し、3度押しで操作をしてみたよ。
パペロ本体にはボタンが3つしかないのでパペロ単体では限られた操作しかできません。
そこでボタンを押した回数で操作ができるようになると、2度押しでは6通り、3度押しでは9通りの機能を割り当てることが可能です。※四度押し以上も可能だと思いますが検証していません
使用するハード
・PaPeRo i実機
使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code)
・Python 3.4(PaPeRo i)
・WinSCP
・Tera Term
各ボタンを押すと「〇ボタンをX度押しました」と発話する簡単なプログラムです。
右ボタンを2度押すと「右ボタンを2度押しました」と発話します。
中央ボタンだけは3度押しもできるようにしています。
● PaPeRo i でPythonを使えるようにする | PaPeRo i [非公式] Developer Forumを参考にパペロ本体でpythonを実行できるようにします。
● パペロ本体にプログラムを転送して実行します。
test.py
- #!/Extension/pkgroot/usr/bin/python3
- import logging
- import sys
- import time
- import pypapero
- logger = logging.getLogger("pypapero")
- sh = logging.StreamHandler()
- fh = logging.FileHandler(filename="/var/log/test.log")
- logger.setLevel(logging.DEBUG)
- logger.addHandler(sh)
- #logger.addHandler(fh)
- class TestPapero(pypapero.Papero):
- def __init__(self, simulator_id=None, robot_name=None, arg_ws_server_addr="ws://127.0.0.1:8088/papero"):
- """PaPeRo i class
- Keyword Arguments:
- simulator_id {str} -- simulator_id (default: {None})
- robot_name {str} -- robot_name (default: {None})
- arg_ws_server_addr {str} -- websocket server address (default: {"ws://127.0.0.1:8088/papero"} simulator: {None})
- """
- self.end = False
- return super().__init__(simulator_id, robot_name, arg_ws_server_addr)
- def send_main_message(self, msg): # メインメッセージを処理
- """メインメッセージを処理
- """
- if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタン
- for count in range(5):
- msg = self.recv_msg(0.1)
- if msg is not None:
- if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタンを二度押し
- for count in range(5):
- msg = self.recv_msg(0.1)
- if msg is not None:
- if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタンを三度押し
- return self.send_start_speech("中央ボタンを三度押しました")
- return self.send_start_speech("中央ボタンを二度押しました")
- self.send_start_speech("中央ボタンを押しました")
- elif msg.get("Name") == "detectButton" and msg.get("Status") == "R": # 右ボタン
- for count in range(5):
- msg = self.recv_msg(0.1)
- if msg is not None:
- if msg.get("Name") == "detectButton" and msg.get("Status") == "R": # 右ボタンを二度押し
- return self.send_start_speech("右ボタンを二度押しました")
- self.send_start_speech("右ボタンを押しました")
- elif msg.get("Name") == "detectButton" and msg.get("Status") == "L": # 左ボタン
- for count in range(5):
- msg = self.recv_msg(0.1)
- if msg is not None:
- if msg.get("Name") == "detectButton" and msg.get("Status") == "L": # 左ボタンを二度押し
- return self.send_start_speech("左ボタンを二度押しました")
- self.send_start_speech("左ボタンを押しました")
- def recv_msg(self, timeout=None):
- """Receive a message
- Keyword Arguments:
- timeout {float} -- [description] (default: {None})
- Returns:
- [dict] -- Message dictionary
- """
- msg = papero.papero_robot_message_recv(timeout)
- if msg is not None:
- msg = msg[0]
- return msg
- else:
- return None
- if __name__ == "__main__":
- while True:
- papero = TestPapero()
- if papero.errOccurred == 0:
- break
- time.sleep(1)
- papero.send_start_speech("パペロが起動しました")
- while not papero.end:
- msg = papero.recv_msg()
- papero.send_main_message(msg)
- papero.papero_cleanup()
0