Arduino IoT Cloud使うための準備

IoT Cloudを使うために、

<事前準備>

① アカウント取得

② Arduino Client Plugin、実はagentのインストール

③ Arduino IoT Cloudに入って使う

の手順になりますが、②のagentインストールで証明書インストールエラー(一言で言うと)でインストール完了しません。

スクリーンショット 2021-12-03 13.59.54.png

WebのArduino forumのリンクで関連する事象あったので対応出来ました。

https://forum.arduino.cc/t/macos-big-sur-installation-problem-createagent/929305/4

具体的には、

“Upon further investigation this is something we can’t seem to be able to tackle unless InstallBuilder allows shell scripts to be executed.
There is a chain of trust which fails when launching an AppleScript invoking a Shell script.

For now, users who get this issue, please run this command in the terminal after installing the Agent”

で、インストールが不完全に終わった後で、以下のコマンドを実行。このコマンドで証明書をキーチェーンに追加するようです。

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /Users/$(whoami)/Applications/ArduinoCreateAgent/ArduinoCreateAgent.app/Contents/MacOS/ca.cert.pem

このアプリ自身はバックグランド動作(おそらくクラウドにログオンするためのエージェント)するのでこのアプリ自体をクリックしても何も起きませんが、他のアプリを動かすことでagentの動作を確認できます。

常駐したことは、アイコン表示で知ることができます。

ここまでできれば、

https://www.arduino.cc/en/Guide/MKRWiFi1010

のガイドにあるように、

スクリーンショット 2021-12-03 14.25.22.png

3.のArduino IoT Cloudにログイン出来て、こんな画面が最初に現れます。常駐アイコンのクリックメニューでもArduino createに入れますが。

https://create.arduino.cc/iot/things

スクリーンショット 2021-12-03 14.24.08.png

<デバイスのCloudへの登録>

Arduino IoT Cloudのメニューにデバイス登録があるので登録してみました。

ここで再びArduino Client Plugin見つかんないよと言われたので、同じことを再度繰り返し。実はこのリンク辿るとPluginの版数が異なってますね。

ともかくArudinoをUSB接続して認識されると、クラウドにデバイスが登録されました。デバイスの名称(Aubry)はデフォルト値そのままです。この登録過程ではArudinoに書き込まれていたファームは書き換えされるようです。

IoT CloudではWebエディターも使えるから、もしかしたらデスクトップIDEが必要ないのかもしれない。

 

admin

ArduinoのWi-Fi機能確認

参考は、

https://www.denshi.club/cookbook/arduino/mkr1010/arduinoiot3wi-fil.html

・Wi-Fi使うためにWiFiNINAライブラリのインストール

どこかでインストールしてしまったか、既にインストール済みになっていた。

使い方は既存のA.Pに接続してIPアドレスを取得し、自分自身はHTTPサーバーとなって他のクライアントからのリクエストを受け取ってレスポンスを返すというもの。

あるいは、Arduino自身をA.Pにすることもできるようですね。

スクリーンショット 2021-12-01 17.09.40.png

・サンプルプログラム

サンプルからSimpleWebServerWiFiを読み込む。

IDEエディタのヘッダーファイルarduino_secrets.hに自分が使うA.P情報を追加入力する。

char ssid[] = “aterm”; # 自分のAP SSID

char pass[] = “pw”; # 自分のpw

int keyIndex = 0;   

Wi-Fiはnではつながるけれどもacにはつながらないようです。実用上は全く問題ないですが。

・動作の確認

コンパイルしてArduinoに転送するとプログラムが起動して、

ネットワークにArduinoが見えました、Wi-Fiモジュール(Espressif)は中国製のようです。pingにも応答します。

スクリーンショット 2021-12-02 14.51.27.png

シリアルモニターにArduinoが吐き出すメッセージとクライアントとの通信ログ(HTTPリクエストの中身)も見えます。また、setup()関数の最後にprintWifiStatus()関数で自分のWi-Fiのステータスを吐き出してます。シリアルモニターはあくまでUSB経由つないだ時しか見れず、Arduinoを切り離してWi-Fiで運用するときには機能しません。あり得ないけど、USBつないでるときは無線でやりとりしないで、USB経由でやりとりしてる?

スクリーンショット 2021-12-02 14.56.51.png

ブラウザから該当のURLをアクセスすると、このようなメニューが表示されて、ボードのLEDのオンオフがブラウザから”Click here”のリンクをクリックすることで制御できます。ブラウザからのアクセス受け付けるまでに、データ転送完了後あるいはArduinoの電源オンから5秒以上は待たないといけないようです。

スクリーンショット 2021-12-02 14.52.46.png

これでWi-Fiの疎通確認ができました。

Arduinoはwebサーバー機能あるといっても、HTMLやHTTPステートメントは全てprint文で記述しなければいけないのでかなり面倒ではあります。

 

admin

Arduino IDEのセットアップと動作確認

購入後の最初の動作確認をしてみます。

 

<set up>

・Arduino MKR WiFi 1010はデフォルトのボード選択リストに入っていないから、ボードマネージャーで追加します。手順は以下を参考に、

https://www.denshi.club/cookbook/arduino/mkr1010/arduinoiot1iotarduino.html

 

<動作確認>

・動作確認のためにサンプルプログラムを動かす(定番のLチカ)

コードはこんな感じで、ボード搭載のLEDを出力指定して、時間を指定してオン。オフ切り替えしています。

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(2000);                       // wait for 2 seconds

  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);                       // wait for a second

}

最初電源供給できるだけのUSBケーブルでつないでいたからシリアルポート見えなくて当然、データ転送できるUSBケーブルで以下のように見えます。(/dev/usbmodem*****)

USBだけど、Arduinoはシリアルポートと呼んでいます。シリアルに違いはないけども。

スクリーンショット 2021-12-01 13.34.22.png

ソースをコンパイル、転送すると自動的にプログラムはスタート。指定した通りにボード上のLED が点滅しています。他のプログラム言語のHello world!と同じ。

下の動画はLED点灯のオンオフを100msにしたものです。

 

admin

Arduino IDE

Arduinoはオーダー(Arduino MKR WiFi 1010)してまだ届かないけど、Arduino IDEだけはインストールしてみた。

Arduinoではプログラムと言わずにsketchというらしい。デフォルトで作成されるsetup()関数は初期化関数(init()相当)だろうし、処理は普通終了することがないからloop()だろう。もちろん他の関数を定義して呼び出しもできるだろうけど、この二つの関数は間違いなくデフォルトで必要。

言語そのものはcだけれども、IDEによって面倒なところは隠蔽しているのはJavaを使うProcessingなどと同じ。

 

admin