TeraBytesMemo

プログラミング関連で自分のメモをまとめて書いたり気が向いたら書いたり

Arduinoをシミュレータで入門してみた

IoTには興味あるけど、実際に機器を買うまでモチベーションが至らなかったので、シミュレータから入った話。

ラズパイとWebの力で何かしたい、でも実際に何ができるかわからないから、名古屋版IoT縛りの勉強会! IoTLT vol1 - connpass に参加して聴講。

どうやら電子工作でのWebはArduino + esp8266の方が簡単らしい、ということでArduinoから入ることにしました。

123d circuits

Bring ideas to life with free online Arduino simulator and PCB apps | 123D Circuits by Autodesk

入門するにあたって使ったシミュレータです。

123d circuitsは、ウェブ上で動くシミュレータで、作った回路やコードを公開できます。

どうやら、パーツを壊すこともできるみたいで、「抵抗間違えてArduinoやパーツがお釈迦になった」なんていうハプニングも未然に防げるとか。

使ってみた感想、というか簡単な考察はこんな感じ。

メリット
  • プロトタイピングにはうってつけ。パーツや本体を買わなくても、シミュレータ上で試せる。シミュレータ上で失敗ができるので、本番で失敗しない。
  • 他人のソースコードや回路を観れたり、コピーして編集できる。他人の回路から勉強することも簡単にできる。
  • 回路を作ったら、必要なパーツが販促される。これ自体は良いことかは人によるが、これによって回路がすぐに実現できるかと。
  • なんとesp8266が使える。後述する設定で、Wifi通信ができるので、お試しでWeb通信も実装可能
デメリット
  • Arduinoの基本的なライブラリしか読めない。外部ライブラリを使いたければそのソースコードをコピペしろとのこと。
  • 動作が妙に遅い。シミュレータないの一秒が一秒以上であることがが普通。
  • esp8266でアクセスして、取得した結果がやけにおかしい。思った通りの情報を受け取れない。
  • pythonで書けない(憤怒)。巷ではpythonArduinoが書けるというらしいが、シミュレータにそんなものはサポートされているわけなかった。

以上のように、気軽に電子工作ができて共有もできるうえに、Wifi通信もシミュレートできる一方、

さすがになんでもかんでも作れるわけではない。そこについては、まあ仕方ないと割り切りましたが、さすがにWebから取得したレスポンスのメッセージが変ってのは腑に落ちませんね・・・

しかし、シミュレータ上で回路が落ちていたり、それを編集できるので、とりあえずArduino本体やパーツを買って、作りたい回路を見つけたorできたら早速作るのもアリですね。

で、シミュレータで遊んで作ったものを以下に記載します

制作物

ArduinoでWebAPIにアクセスして、取得した結果をLCDに表示させてみました。

回線だけは完全に丸パクリ。配線はその上で必要最低限分勉強しただけで、コードを変えてみたって感じです。

とりあえずHTTPリクエストの結果まんま(?)LCD上に表示させました。

動かしてみたらわかりますが、JSONのデータらしいものが表示されます。どうも結果の挙動がおかしいです。

そのせいで、肝心な欲しいデータだけを抽出しようにも全くできない状態。

本当は、クライアント端末からLEDやモーターを操作したかったのに、謎の取得結果のせいで実現できない状態に。

今後は、原因究明をするか、諦めて本番で作るかですかねー・・・

esp8266への接続

esp8266での接続では、ssidを "Simulator Wifi" で、パスワードは未入力("")で接続ができます。

つまり、123d circuitsでWifiに接続するまでなら、こんな感じに書ける。

(他人のコードのコピペですが・・・)

String ssid     = "Simulator Wifi";	// SSID to connect to
String password = ""; // Our virtual wifi has no password (so dont do your banking stuff on this network)

void setup() {
  // Start our ESP8266 Serial Communication
  Serial.begin(115200);		// Serial connection over USB to computer
  Serial.println("AT");		// Serial connection on Tx / Rx port to ESP8266
  delay(10);				// Wait a little for the ESP to respond
    
  // Connect to 123D Circuits Simulator Wifi
  Serial.println("AT+CWJAP=\"" + ssid + "\",\"" + password + "\"");
  delay(10);				// Wait a little for the ESP to respond
}
参考にしました

qiita.com

denshibu.blog.fc2.com

その他

123d circuitsでdweet.ioという、簡単にWebAPIを作れるものを使いたかったです。(使ったけど)

これは、認証も登録もなしで簡単にWebAPIが作れるというもので、プロトタイプには超うってつけです。

URLやパラメータで簡単にデザインできます。

dweet.io