Wi-Fi経由での接続
IoT(Internet of Things)の世界では有線ネットワーク接続はあまり用いられず、Wi-Fi(WLAN(Wireless Local Area Network)と呼ばれる場合もある)経由で行うのが一般的です。そのためにイーサネットシールドと同様の使い方ができる、Wi-Fiシールドが開発されました。
しかし、Wi-Fi通信モジュールとArduinoとの通信をシリアルポートによって行うものが多く、スケッチ書き込みの際にスイッチなどで通信を切り離す必要があり、少し使いにくい一面があります。同じ理由でシリアルモニタも使用できません。
別のライブラリを使用することで、通常のデジタル出入力ピンを使ってシリアル通信をさせることもできますが、応答時間やメモリの問題などがあります。
こうした背景から、ここ最近ではWi-Fiシールドそのものに内蔵されているチップを活用するという、新しい流れが生まれています。これはWi-Fi機能を持ったマイクロコントローラですが、Arduinoに使用されているATMega328Pよりも後から開発されたもので非常に高性能です。
よく使用されるモジュールはESP32とESP8266です。実際に動作させるためにはDHCPサーバー機能のあるローカルWi-Fiネットワークが必要になります。一般的な家庭用のワイヤレスLANのルーターがそのまま使用できます。
ArduinoとESP32/ESP8266の比較
マイクロコントローラの性能を表にして比較しました。
Arduino(ATMega328P) | ESP8266 | ESP32 | |
プロセッサコア数 | 1 | 1 | 2 |
クロック周波数 | 16MHz | 240MHz | 160MHz |
プログラムメモリ | 32kB | 4MB | 4MB |
ワーキングメモリ | 2kB | 160kB | 520kB |
入出力端子 | 23 | 17 | 36 |
アナログ入力 | 6 | 1 | 16 |
動作電圧 | 5V | 3.3V | 3.3V |
WiFi | × | 〇 | 〇 |
Bluetooth | × | × | 〇 |
PWM出力ピン | 6 | 8 | 16 |
マイクロコントローラの性能を比較してみると、Arduinoで使われているATMega328PとESP32/ESP8266との差が顕著に現れます。しかし、必ずしもArduinoが劣っているというわけではなく、それぞれにメリット・デメリットがあります。
Arduinoではデジタル入出力ピンとアナログ入力ピン合わせて20本しかありませんが、特殊な設定をすると、あと3ピンをデジタル入出力ピンとして使えるようになります。(クリスタル発信子につながる2ピンとリセットピン1ピン)
Arduino(ATMega328P)は非常に安価に入手でき(300円前後~)、この中ではもっとも古くから使われています。世界中に数多くのユーザーがいて、インターネットで調べればたいていのスケッチやライブラリ、やりたいことの「前例」が見つかりますし、手元のArduinoに書き込んで動作させることができます。また、メーカーがチップに関する技術情報を多数公開しており、ドキュメントが充実しています。
これに比べて、非常に高い性能を持つESP32は最新のモデルであるがゆえに(Arduinoほど)広く浸透していないのが現状です。提供されているコンパイラや設定ファイルに一部エラーがあったり、一部の機能がうまく動作しないということがあったりします。今後、状況は変わっていくでしょう。
ESP8266は2020年現在、両方の利点を兼ね備えた状態です。コンパイラは成熟しており、利用者も増えてきていることから、IoTを活用したモノづくりをする際の最初の選択肢となっています。しかし、Arduinoほど簡単には扱えないため、その分ユーザーにはスキルや経験値が求められます。
レベルシフト(電圧レベル変換)
前述の通り、Arduino(ATMega328P)のマイクロコントローラとESPファミリーとでは動作のための電源電圧が異なります。これらの信号ピンを相互接続したい場合(シリアル通信でデータのやり取りをする場合など)、信号レベルの調整が必要になります。
Arduinoから出力された信号をそのままESPに入力してしまうと、ESPにとって電圧が高すぎるので、ArduinoからESPに信号を送信する方向にはレベル変換回路を設けます。
単純な抵抗分圧回路を使用して、5Vの信号を減圧してESPに渡します。2つの抵抗値の比で出力電圧が変わり、例えばR1=22kΩ、R2=47kΩとすると出力は3.4Vとなり、これならESPの電子回路も問題なく受け取れます。
一方、Arduinoは3.0V以上の電圧が入力されれば「High」として読み取ります。つまり、ESPが出力した信号はそのままArduinoに入力しても問題なく読み取れるということです。
電圧の異なるデバイス同士で通信を行う場合、レベル変換モジュールを使うことで電源電圧が異なっていても信号のやり取りが行えるようになります。電圧が異なっていても「HighならHigh」「LowならLow」というように、うまく電圧を調整してくれます。
コメントを残す