3
1

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 7

グラスをスマートにする技術~その2:Line MessageAPI~

Last updated at Posted at 2018-12-06

###概要:
 飲み会に遅刻しそう、先に乾杯しちゃって欲しいけど、幹事に連絡がつかない、そんな経験ありませんか?
 私が所属するaNo研は、遠隔伝言グラス「スマートグラス e幹事」を発表しました。
 この記事は、「スマートグラス e幹事」に使われている技術を紹介します。

####実施例

###システム構成
181125_3.png

###RasberryPI準備
事前に、LineDeveloperのHPから、アカウントを取得して、Developer TrialMessaging のLineBotを取得してください。

####Line Developer

Line Developer

Channel Secret のシークレットキと、Channel Access Token のトークンをいれて、
下記のコマンドを打ちます。

export LINE_CHANNEL_SECRET=YOUR_LINE_CHANNEL_SECRET
export LINE_CHANNEL_ACCESS_TOKEN=YOUR_LINE_CHANNEL_ACCESS_TOKEN

####line-bot-sdk-python
Line BotのPythonサンプルをダウンロードし、pythonの依存ライブラリをインストールします。

 $ git clone  https://github.com/line/line-bot-sdk-python.git
 $ cd ~/line-bot-sdk-python
 $ pip3 install -r requirements.txt

####python-osc
pythonでOSCを使うためのライブラリ、python-oscのインストールします。

pip3 install python-osc

####ngrok
Lineのサーバから、LAN内で運用しているRasberryPIにアクセスするために、
ネットワークをリレーするツール、ngrokをインストールします。

 $ brew update
 $ brew install homebrew/binary/ngrok2
 $ ngrok http 8000

ngrok で取得した、グローバルIPアドレスを、Line DeveloperのWebHookURLに入力します。

181125_ekanji_3.png

####実装例
line-bot-sdk-pythonのサンプルのひとつ、flask-kitchensinkの、
handle_text_message関数を以下のように編集します。
Lineから受信したメッセージをOSCに変換して送信します。
M5Stackでは、OSCからのメッセージをAquesTalkTTSに入力して音声を出力します。

####RasberryPI

from pythonosc import osc_message_builder
from pythonosc import udp_client
port_num = 10000
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="192.168.1.", help="The ip of th OSC Server")
parser.add_argument("--port", type=int, default=port_num, help="The port the OSC server is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)


@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
    text = event.message.text
    cmd = 'talk ' + text
    print(cmd)
    text2 ='speak to message'
    client.send_message("/msg", cmd)
    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=text2))

####M5stack

#include <M5Stack.h>
#include <ArduinoOSC.h>
#include <AquesTalkTTS.h>
const char* ssid = "";
const char* password = "";
WiFiUDP udp;
ArduinoOSCWiFi osc;
const int recv_port = 10000;
void messageCb(OSCMessage& m) {
  String str = m.getArgAsString(0);
  int len = str.length(); 
  String cmd = str.substring(0, 4);
  String value = str.substring(5);
  if (cmd == "talk") {
    TTS.playK(value.c_str(), 100);
    delay(3000);
  }
}
void setup() {
  M5.begin();
  setupWiFi();
  osc.begin(udp, recv_port);
  osc.addCallback("/msg", &messageCb);
  int iret = TTS.createK("");
}
void loop() {
  osc.parse();
}



aNo研:https://anoken.jimdo.com/

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?