2018年2月24日土曜日

Raspberry pi zero Wでgoogle-home-notifier

2021/11/22追記 現在はGoogleHome側の仕様変更により、下記の方法ではうまく動かないようです。


GoogleHomeにしゃべらせたくてラズベリーパイ ( Raspberry pi zero W ) を買いました。

ラズパイもnode.jsも触ったことがありませんが、有益なことを公開してくださっている皆様の情報をたよりに進めます。

私は中身が何もわかってないので以下の情報は間違っているかもしれません。

(1) Raspberry pi zero Wのセットアップ
(2) google-home-notifierのセットアップ
(3)外部からRaspberry piにリクエストを送ってGoogleHomeがしゃべる


@mascii様の
Raspberry PiにNode.jsとnpmの最新版をインストールする
を参考にnode.jsのセットアップしました。
以下引用:
sudo apt-get update
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install npm n -g
sudo n stable

@ktetsuo
Raspberry PiからGoogle Homeを喋らせる
を参考にgoogle-home-notifierをセットアップしました。
以下引用:
sudo apt-get install libavahi-compat-libdnssd-dev
npm install google-home-notifier

しゃべるだけなら下記を実行すればしゃべります。簡単すぎてビックリします。
以下引用
ファイル名:main2.js
const googlehome = require('google-home-notifier');
const language = 'ja';
googlehome.device("Google-Home", language);
googlehome.ip("192.168.xxx.xxx");
googlehome.notify('こんにちは。私はグーグルホームです。', function(res) {
  console.log(res);
});

node main2.js (パスは適宜追加してください)

次は
次に下記のファイルを編集して
/home/(ユーザー名)/node_modules/google-home-notifier/example.js

以下引用:
ファイル名:example.js
(略)
var ip = '192.168.1.10'; // default IP      //ここにIPを記載
(略)
  var language = 'ja'; // default language code   //ここに「ja」を記載
  if (req.query.language) {
    language;
  }
(略)
  if (req.query.ip) {
     ip = req.query.ip;
  }
  var language = 'ja'; // default language code     //ここに「ja」を記載
  if (req.query.language) {
    language;
  }
(略)

下記で実行
node /home/(ユーザー名)/node_modules/google-home-notifier/example.js

/etc/rc.localに下記を追記すると電源をオフにしても自動で起動します。
forever start /home/(ユーザー名)/node_modules/google-home-notifier/example.js

ラズベリーパイ上のコンソールから

curl -X POST -d "text=テスト" http://(RaspberryPiのIP):(ポート番号)/google-home-notifier

でしゃべると思います。

esp32からでも
下記のスケッチで無事しゃべりました。

#include
#include

const char* ssid     = "(SSID)";
const char* password = "(パスワード)";
const char URL[] = "http://(ラズパイのID):(ポート番号)/google-home-notifier";
WiFiServer server(80);

void setup()
{
    Serial.begin(115200);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    server.begin();
}

void loop() {
  HTTPClient http;
  http.begin(URL);
  String requestBody = "text=テストです";
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  int httpCode = http.POST(requestBody);

  Serial.printf("Response: %d", httpCode);
  Serial.println();
  if (httpCode == HTTP_CODE_OK) {
    String body = http.getString();
    Serial.print("Response Body: ");
    Serial.println(body);
  }

  delay(10000);
}


上記のやり方でなくても、Raspberry piとGoogle homeをBluetoothで接続してBluetoothスピーカとして鳴らすという手段もあると思います。
(スマホからは普通にBluetoothスピーカとしてGoogle homeに音を出せました。)


0 件のコメント:

コメントを投稿