IoTリモート木魚 〜インターネット経由で木魚を叩く〜 #iotlt #Arduino


理由は謎ですが、Arduino IoT Cloud + Arduino MKR WiFi 1010で木魚を叩いてみます。

ちなみに先日の[IoTLT](https://speakerdeck.com/n0bisuke2/rimotomu-yu-number-iotlt-number-arduino)でやったネタです。

> ![スクリーンショット 2021-08-21 17.40.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/37d4a3cd-6157-c107-8a99-131207339f7c.png "スクリーンショット 2021-08-21 17.40.19.png")

Arduino MKR WiFiでArduino IoT Cloudを利用してみます。以下の記事の続編です。
- その1. [Arduino MKR WiFi 1010でハローワールド（Lチカ） #Arduino](https://qiita.com/n0bisuke/items/d8b01fc3d7de28c488d0)
- その2. [Arduino MKR WiFi 1010でGoogle検索（謎） #Arduino](https://qiita.com/n0bisuke/items/35d4b9d28d61895aff08)

## インターネット経由で木魚

木魚をインターネット経由で叩いてみます。
ただそれだけ。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">リモート木魚 <a href="https://twitter.com/hashtag/iotlt?src=hash&amp;ref_src=twsrc%5Etfw">#iotlt</a> <a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/arduino?src=hash&amp;ref_src=twsrc%5Etfw">#arduino</a> <a href="https://t.co/KVltAlefy4">pic.twitter.com/KVltAlefy4</a></p>&mdash; 菅原のびすけ (@n0bisuke) <a href="https://twitter.com/n0bisuke/status/1429002329521418245?ref_src=twsrc%5Etfw">August 21, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 実装方法

端的にいうとサーボモータをリモートで動かして木魚を叩いてみるという仕組みを作ります。

以下を使います。

- Arduino MKR WiFi 1010（通称:テンテン）
- Arduino IoT Cloud
- サーボモータ（SG90）


なんとなくこんなイメージな気がします。

```
木魚 <---> SG90 <---> テンテン <---(インターネット経由)---> Arduino IoT Cloud <---> PCやスマホ
```

### 1. Arduino MKR WiFi 1010の設定など

（前回までの記事参照）

### 2. Arduino IoT Cloudを使っていく

Arduino公式が展開しているクラウド環境。先日のIoTLTで知りましたが、Arduino Cloudという大きな概念の中にArduino IoT Cloudがあるみたいです。AWSの中のS3みたいな。

> https://create.arduino.cc/iot/dashboards 

とりあえずアカウント作成からと思いましたが、昔アカウントを作っていた模様です。

> ![スクリーンショット 2021-08-16 16.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/c5b91024-5384-4fc2-1cb8-c027b1fe7dc8.png "スクリーンショット 2021-08-16 16.52.41.png")

### 3. Arduiono IoT CloudとArduiono MKR WiFi 1010を繋いでみる

@youtoyさんの[Arduino MKR WiFi 1010 で始める Arduino IoT Cloud【下準備編】](https://qiita.com/youtoy/items/930f0e05302785856366)を参考にさせて頂きました。

接続できたらLチカなどを試してみましょう。

#### 3.1 デバイス登録でハマる

https://create.arduino.cc/iot/devices にアクセスしてデバイス登録をしていきますが、基本は↑の@youtoyさんの記事通りでうまくいくと思います。

僕の場合はセットアップタイミングでトラブル発生したので

> [Arduino IoT Cloudのデバイス登録でめちゃハマった件 #Arduino](https://qiita.com/n0bisuke/items/ec02d9f02678419b605f)

#### 3.2 mokugyoボタンと変数を作る

@youtoyさんの記事を参考に、Adruino IoT Cloudでmokugoボタンと変数を作成します。

まずはVariablesでmokugyo変数を作成します。

タイプは`bool`にしましょう。

> ![スクリーンショット 2021-08-21 17.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/a8c41328-cebb-2e8a-e024-6635f4d0ad5c.png "スクリーンショット 2021-08-21 17.28.02.png")

またダッシュボードで木魚ボタンを作成し、変数と紐付けます。

> ![スクリーンショット 2021-08-21 17.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/d7654aa2-47f6-7370-b824-a1867c77b58d.png "スクリーンショット 2021-08-21 17.26.47.png")
 	
### 4. サーボモータを制御するコードを入れ込む

Web上のSketchのタブを見ると以下のようなコードが生成されています。

> ![スクリーンショット 2021-08-21 17.30.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/28cb471b-b7e2-605d-c85b-753a5db93235.png "スクリーンショット 2021-08-21 17.30.25.png")

```ino
・・・省略

void onMokugyoChange() {
  // Do something

}
```

この`onMokugyoChange関数`が先ほど作成した木魚ボタンのON/OFFを変更した際に反応する箇所になります。

> ![スクリーンショット 2021-08-21 17.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/aa9fd449-54f2-addb-f208-0228735b8776.png "スクリーンショット 2021-08-21 17.32.05.png")

Arduinoでサーボモータを動かすコードのサンプルは調べるとたくさん出てくるので調べて抜粋です。

参考: [ライブラリを使ってサーボモーターを回してみよう](https://www.fabshop.jp/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%9C%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E5%9B%9E%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88/)


こういった記事を参考に、設定情報や`onMokugyoChange関数`の中身などを記述して以下のようなコードになりました。

```ino
#include "thingProperties.h"
#include <Servo.h>//サーボのためのライブラリ
Servo servo; //木魚サーボ

void setup() {

  Serial.begin(9600);
  delay(1500); 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  
  servo.attach(3); //3番PINで利用 
}

void loop() {
  ArduinoCloud.update();
}

void onMokugyoChange() {
  // Do something
  if(mokugyo){
    servo.write(0);
    delay(500);
    servo.write(30);
    delay(500);
    servo.write(60);
    delay(500);
    servo.write(90);
    delay(500);
  } else {
    
  }
}

```

これをこのままWebエディタから書き込みを行えばOKです。

### 5. 木魚を叩いてみる

あとはWeb上（Arduino IoT Cloud上）の`木魚ボタン`が押されたらサーボが反応してくれます。

**。。。が、サーボを動かせば木魚が上手く叩けるというとそういう訳でも無い**んですよね。

ということで何個かやった記録動画の一部を載せておきます。
IoTLTの配信などでもみれますね

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">サーボあるある <a href="https://twitter.com/hashtag/iotlt?src=hash&amp;ref_src=twsrc%5Etfw">#iotlt</a> <a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/arduino?src=hash&amp;ref_src=twsrc%5Etfw">#arduino</a> <a href="https://t.co/JygKQFZNjX">pic.twitter.com/JygKQFZNjX</a></p>&mdash; 菅原のびすけ (@n0bisuke) <a href="https://twitter.com/n0bisuke/status/1429002641334431744?ref_src=twsrc%5Etfw">August 21, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ちゃんとやる人は機構をちゃんと作りましょう。
僕はここまでの状態でIoTLTで話をしてきました（笑）

## まとめや所感

Arduino IoT CloudとArduino MKR WiFi 1010を触ってみたくらいの話で試してみました。木魚にこだわりはないですが[会社に置いてあった](https://twitter.com/ukokq/status/1392305811724984321)ので最近ネタとして使ってます。

Arduino IoT Cloudは便利ですが、当たり前のようにWi-Fi接続などのコードもインクルードされているスケッチになるので、ローカルのArduino IDEで安易に上書きしてしまうとArduino IoT Cloud用の接続情報などが消えてしまうので注意が必要そうです。

とはいえ僕の場合は↑にも書いたようにブラウザ経由書き込みの不具合の問題が残っているので、現状できればArduino IDEから書き込みしたいんですよね。

Arduino IoT Cloud上のWebエディタからコードを全て手元に落としてきたら使えるような気もするので気が向いたらローカルからの書き込みも試してみたいと思います。

現時点だと利用がおっくうなデバイスになってしまっています苦笑

Wi-Fi以外にもBluetoothも利用できそうな雰囲気なのでそのうち試したいですね。

それでは！