Bluetoothモジュール(HC-6)の名前の変え方 with Arduino
やりたいこと
HC-6というBluetoothモジュールの名前を変えたい。
以下の順で名前変更指示をする。
PC → Arduino Nano → Bluetoothモジュール
そのために
PC、Arduino間はハードウェアシリアル
Arduino、Bluetooth間はソフトウェアシリアル
で接続する。
参考サイト
前提
Arduino IDEがインストールされていること。
www.arduino.cc
材料
- Mini USB Nano V3.0 ATmega328P
HiLetgo® 3個セット Mini USB Nano V3.0 ATmega328P CH340G 5V 16M マイクロコントローラーボード Arduinoと互換
- 出版社/メーカー: HiLetgo
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
これは純正のArduinoではなく、中華製なのでドライバのインストールが必要。
このページを参考に。
qiita.com
- ブルートゥースモジュール [HC-06-4P] www.aitendo.com
TODO
- まずは配線
- Arduinoプログラムの作成
- ビルド&書き込み
- 名前変更
1. まずは配線
+ ArduinoとPCがつながっていること
2. Arduinoプログラムの作成
#include <stdio.h> #include <stdlib.h> #include <SoftwareSerial.h> #define PIN_BLUETOOTH_TX 10 // Bluetooth TX #define PIN_BLUETOOTH_RX 11 // Bluetooth RX /* Bluetoothモジュールと通信をするためのソフトウェアシリアル */ SoftwareSerial mySerial(PIN_BLUETOOTH_RX, PIN_BLUETOOTH_TX); // TX, RX void setup() { Serial.begin(9600); //ハードウェアシリアルの初期化 mySerial.begin(9600); // ソフトウェアシリアルの初期化 } void loop() { while( Serial.available() ) { char c = Serial.read(); mySerial.print(c); delay(5); } while( mySerial.available() ) { char c = mySerial.read(); Serial.print(c); delay(5); } }
3. ビルド&書き込み
「ツール」→「シリアルポート」をクリックし、接続したArduinoのポートを選択する。
「マイコンボードに書き込む」をクリック。
これによりビルドされ、書き込みまで行われる。
4. 名前変更
Arduino IDEの右上の虫眼鏡ボタンをクリックしてコンソールを表示。
AT+NAME:好きな名前
OKと表示されれば入力した名前に変更されているので、実際にBluetoothを検索してみて指定した名前が見つかれば成功。
RaspberryPiとGoogle AssistantのIFTTTを使った連携(2/2)
これの続き takuocean.hatenablog.com
ToDo
以下の順で指示が経由されるようにする。
GoogleAssistant → IFTTT → beebotte → RaspberryPi
今回は
「GoogleAssistant → IFTTT → beebotte」
を構築していく。
1. 新しいAppletの作成
右上にある「New Applet」をクリック。
2 「Google Assistant → IFTTT」の設定
IFTTTでは、トリガーとそれに応じた処理を設定できる。
例えば、「Googleカレンダの予定3日前」になったら「Lineで通知」する、みたいな。
ここではトリガーとなる部分を設定していく。
2.1 「This」をクリック。
2.2 サービスを選択
虫眼鏡の検索欄に「google」と入力し、 検索された「Google Assistant」をクリック。
2.3 トリガーとなる形式を選択
いくつか形式があるが、今回は「Say a simple phrase」をクリック。
2.4 トリガーとなる詳細を記述
ここではトリガーとなるGoogleAssistantへの命令を記述。
What do you want to say?: morning music
トリガーとなる言葉
What do you want the Assistant to say in response?: OK, play morning music
GoogleAssistantの応答
Language:English
言語
※スマホのGoogleAssistantを英語設定にしているので。
記述できれば「Create Trigger」をクリック。
3 「IFTTT → beebotte」の設定
3.1 「That」を選択
3.2 サービスを選択
GoogleAssistantの命令に対応するサービスを指定していく。 虫眼鏡の検索欄に「web」と入力し、 検索された「Webhooks」をクリック。
3.3 実行形式を選択
「Make a web request」をクリック。
3.4 実行することの詳細を記述
ここではGoogleAssistantで命令されたことに対して実行することの詳細を記述。
URL: http://api.beebotte.com/v1/data/publish/MySmartHome/PlayMusic?token=YourToken
YourTokenはbeebotteで作成したプロジェクトのトークン
Method: POST
HTTPのPOST
Content Type (optional): application/json
データの形式
Body (optional): { "data": [{"room":"living","device": "music"}]}
実際に送るデータ
記述できれば「Create Action」をクリック。
3.5 IFTTT上に記載される説明を確認
説明文がよければ、「Finish」をクリック。
ちなみに、動作には特に影響なし。
3.6 作成完了画面
4 動作確認
RaspberryPiにスピーカを装着し、
実際にスマホ、またはGoogleのスマートスピーカでGoogleAssistantを立ち上げて(OK, Googleと言って)、「morning music」と命令。
音楽が流れば完了。
RaspberryPiとGoogle AssistantのIFTTTを使った連携(1/2)
やりたいこと
RaspberryPiとGoogle AssistantをIFTTTを使って連携させる。
「音楽かけて」といったらRaspberryPiから音楽がながれるような感じ。
参考URL
ToDo
以下の順で指示が経由されるようにする。
GoogleAssistant → IFTTT → beebotte → RaspberryPi
今回は
「beebotte → RaspberryPi 」
を構築していく。
前提
・RaspberryPiの「/home/pi」に再生したい音楽を置く(今回はsample.mp3)
・↑を再生するアプリが入っている(今回はmpg321)
1. beebotteのセットアップ
1.1. 新しいChannelの作成
左のメニューバー上部にあるChannelsをクリックし、表示された画面で右上部にある「Create New」をクリックする。
1.2. Channel名、Resource名を登録
ここでは
Channel名:MySmartHome
Resource名:PlayMusic
入力ができたら、「Create Now」をクリックする。
1.3. トークン取得
「Create Now」をした直後にホーム画面でChannel名が表示される。
Channel名「MySmartHome」をクリックする。
アクセストークンが取得することができる。
1.4. beebotteの動作確認
左のメニューバーで「Account Settings」を選択し、表示された画面で「Access Management」タブをクリックする。
Secret keyをコピーする。
左のメニューバーで「Console」を選択し、先ほどコピーしたSecret KeyをこのページのSercret Key入力エリアに入力する。 されに SubscribeのChannelとResourceに、先ほど登録した"MySmartHome"と"PlayMusic"を入力し、Subscribeボタンを押下する。
以下のコマンドをPC上のコンソールで入力する。
curl -i -H "Content-Type: application/json" -X POST -d '{"data":"Hello World"}' http://api.beebotte.com/v1/data/publish/MySmartHome/PlayMusic?token=[Channelのトークン]
Messageエリアに指定したペイロードが表示される。
2 RaspberryPiの準備
2.1. RaspberryPiの受信プログラムの作成
指令を受けると音楽を再生するプログラム(sample.py)は以下の通り。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import paho.mqtt.client as mqtt import json import subprocess import os _TOKEN = 'Your Token' #IFTTTに設定したものと同じChannel Tokenを設定 HOSTNAME = 'api.beebotte.com' PORT = 1883 #SSLの場合は8883 TOPIC = 'smart_home/music' #トピック名/リソース名 の形で設定 # 接続中の処理を記載→subscribeする def on_connect(client, userdata, flags, respons_code): print('status {0}'.format(respons_code)) client.subscribe(TOPIC) # メッセージ受信時の処理を記載 def on_message(client, userdata, msg): print(msg.topic + ' ' + str(msg.payload)) data = json.loads(msg.payload.decode("utf-8"))["data"][0] # Google Assistantの側でTextFiledの前後に半角スペースが入ることがあるのでstripして削除 #data = {key:value.strip() for key, value in data.items()} if "room" in data.keys(): # 「証明を」と言ってしまった際に「を」が入ってTextFieldに入ってくることがあるので削除 #if data["device"].endswith("を"): #data["device"] = data["device"][:-1] # 日本語の表記ゆれに併せて、IFTTTのTextFieldをlightに修正 if data["device"] != "music": print("unkown device") return subprocess.call(['mpg321', '/home/pi/sample.mp3']) if __name__ == '__main__': client = mqtt.Client() #トークンを使って認証 client.username_pw_set("token:%s"%_TOKEN) client.on_connect = on_connect client.on_message = on_message client.connect(HOSTNAME, port=PORT, keepalive=60) # 待ち受け状態にする client.loop_forever()
2.2. RaspberryPiの動作確認
RaspberryPiで指令がきたら音楽を再生するプログラムを実行する。
python sample.py
次に、以下のコマンドをRaspberryPiのコンソールで実行して、音楽が再生か確認。
curl -i -H "Content-Type: application/json" -X POST -d '{ "data": [{"room":"living","device": "music"}]}' http://api.beebotte.com/v1/data/publish/MySmartHome/PlayMusic?token=[Channelのトークン]
実行し音楽が流れ始めたらOK!
Webページ更新時にJavascriptで処理をする
以下のコードにやりたい処理を追記。
$(document).ready( function() { //やりたい処理 });
RaspbianでIPアドレスを固定する方法
1. /etc/dhcpcd.confを編集。
... #固定したいインターフェース interface eth0 #固定したいIPアドレス static ip_address=192.168.xxx.xxx/24 #ルータのIPアドレス static routers=192.168.xxx.xxx #ここもルータのIPアドレス static domain_name_servers=192.168.xxx.xxx
2. 再起動
sudo reboot
これで反映されます。