[電子工作]Arduino/Nucleo/ESP32で電子工作
AVRマイコン(8bitマイコン)、ARMマイコン(32bitマイコン)、ESP32で色々なものを動かしてみよう!

ーーーー目次ーーーー
1.Arduinoとは?
2.Nucleoとは?
3.ESP32とは?
4.Arduinoのはじめ方
(1)メインボード
(2)シールドを買おう
(3)電子回路の実験をしよう
5.Arduino
IDEの使い方
(1)ArduinoIDEでプログラムを作ろう
(2)デジタルピン、アナログピンの使い方
ーーーーーーーーーー
1.Arduinoとは?
2005年にイタリアの方が、安価なデジタル制御ボードを開発、販売するために、Arduinoプロジェクトを
立ち上げました。現在は、Arduino FoundationとArduino
Holdingが開発ツール「Arduino IDE」の管理、
関連製品の販売を行っているようです。
私も名前は知っていましたが、今更8bitマイコンを使うつもりなく、興味はありませんでした。
しかし、会社のメンバーが製品の開発にAVRマイコンやArduino互換機を使っているのをみて、
安価なI2CやSPIのホストとして使えるかと思って、Arduino
Uno Rev3とArduino用の液晶パネル
(一般にシールドと呼ばれる)やI2C制御のOLEDなどを買ってみました。
そして、Arduino
IDEをインストールして、「ああ、これなら誰でも、何でも作れそうだ。」って感じました。
理由は次の通り。
・簡略化されたC言語でプログラム可。
・標準のサンプルが豊富。サンプルを見れば、アナログ入力、デジタルI/O(PWM可能)、SPIインタフェース、
I2Cインタフェース、UARTなどが簡単に使える。
・ネットにつなげば、一般に売られているシールドのライブラリが入手できる。
・液晶パネル、OLEDパネル、SDカードスロット、各種センサー、LAN、Wifi等、一般的な電子部品用の
ライブラリもそろっている。
私が買ったシールドも、サンプルを実行すれば、液晶パネル、タッチパネル、SDカードの制御
ができます。8bitマイコンでも、これぐらいならできるんですね。
2.Nucleoとは?
こちらは、STMicroが、自社のマイコンの評価用に開発、販売しているマイコンボードです。
ARM
Cortex-M0〜M4(FPU付き)まで、低消費電力〜ハイパフォーマンスまで、幅広いラインナップから
選ぶことができます。
Arduino互換の端子を持ち、32bitなのでArduinoより高性能で、フラッシュメモリやSRAMの容量も多く、
2000円以下で購入可能で、なんとArduino
UNOより安い!
Arduino互換端子があるなら、シールドは使えます。ソフト開発をどうしようかと思っていたら、なんと、
「Arduino
IDE」でNucleoのソフトが開発できる! しかもArduino
Unoとソースコードに互換性がある!
ってことが判明しました。(実は、分かる前にボードだけ買ってあったのですが...)方法はこちら。
上記、液晶パネルとタッチパネルとSDカードを持つシールドを接続し、同じサンプルソフトを
書き込むと、そのまま動きました。タイマーが入っているので、実行時間はやや早いかな、程度で
ほぼ同じですが、タイマー外してCPU性能を比較すると、10〜100倍、速いようです。
ただ、デジタル端子及びアナログ端子の電圧が異なるので、注意が必要です。Arduino
Uno Rev3が
0〜+5V、Nucleoが0〜+3.3Vです。よって、使用するデバイスが何V対応なのか、確認が必要です。
(私が作ったボードは、+5Vと+3.3Vをショートピンで切り替え可能にしました。)
と、言う訳で、安価で、高性能なマイコンボードをお探しの方は、Nucleoをお勧めします。
注意.Nucleoは動作速度が速く、機能は上ですが、SPI等のハードマクロや浮動小数点演算やDSP等
の専用ハードを生かすためには専用ライブラリが必要で、Arduino
Unoとソースコードに互換性が
無くなったり、ライブラリが提供されていなかったりします。
本当の性能を出すためには、専用コンパイラを使うべきです。
3.ESP32とは?
こちらは、中国のEspressif Systems
Pte.(ESP)社が開発したマイコンで、240MHzのXtensa 32bit
LX6プロセッサ
を2個搭載し、520KBのRAMを持ち、何と802.11b/g/n(Max.150Mbps)のWiFiとBluetooth
v4.2に対応し、1000円
未満で買えてしまうという、とんでもなくコストパフォーマンスの高いマイコンです。
IoT
Express Mk
IIやESPDuino-32と呼ばれるArduino互換のコネクタを持つボードもありますが、一般には、
下記の写真のようなDIPタイプのボードに搭載されたものが、様々なメーカーから販売されています。こちらも、
Arduino
IDEで開発可能なので、このページで紹介します。多くの方が、Arduino
IDEで、ESP32の性能を出せる
ようにライブラリを作っているので、多くのプログラムが、無茶苦茶高速に動作します。
WiFiやBluetoothに対応し、PCやスマートフォン等から無線で制御できるため、まさにIoTのためのマイコンです。
最近、ESP-32Dと呼ばれる新型が出ていますが、安価な製品は旧型のESP-32が使われています。しかし、
新型には、シングルコアのものや、クロックを160MHzに落としたものもあるので、どうしても新型が欲しい方は、
国内の信用できる販売店から購入することをお勧めします。
ESP32の詳細は、こちらをご覧ください。

4.Arduinoのはじめ方
(1)メインボードを買おう
・Arduino Uno
Rev3 : DIPタイプのマイコンを搭載した、もっとも標準的なボードです。価格は約3000円。
注意.本ボードでARVマイコンの書き込みが行えると思っていたら、実はまっさらのマイコンには
書き込めません。Arduino
IDEからフラッシュメモリを書き換えるブートローダが書き込め
ません。そのため、ブートローダ書き込み済みのマイコンを購入するか、同じボードを2枚
買うか、下記のボードを使う必要があります。(各方法の詳細は、ネットで検索下さい。)

・秋月電子通商製ATmega168/328マイコンボードキット : 自分で半田付けが必要なキットで、
価格は2100円です。改造する事で、まっさらのマイコンにブートローダを書き込むことができます。
20MHzの水晶も付いているので、高速化も可能です。(タイマや通信速度も速くなると思われるので
正常に動くかどうか分かりません。)
私は持っていません。
注意.標準で付いてくるのはATmega168Pマイコンですので、メモリ容量が少ないです。
Arduino Uno
Rev3互換にするためには、別途、ATmega328Pを購入する必要があります。
注意.ブートローダを書き込む方法は、ネットで検索下さい。書き込方法は、例えば、こちら。
・Uncompatino : 秋月電子通商でボードとパーツセットを購入し、自分で半田付けする必要があります。
価格は2つ合わせて1300円と最も安く、ショートピンの設定だけでブートローダを書き込むことが
できます。更に特筆すべきは、通常の2.54mmピッチの位置にもコネクタがあることで、普通の
2.54mmピッチのユニバーサル基板で接続可能です。(詳細は、下記の「自作シールド」を参照。)
私は、今後のために、買っておきました。
注意.表面実装(28pinSOP)を半田付けする技術が必要です。私も、鉛含有半田なら簡単に実装
できますが、鉛フリー半田で挑戦したら苦戦しました。(フラックスが必須です。)
注意.付属のATmega328Pにはブートローダーが書き込まれていません。ここを参考に自分で
ブートローダーを書き込んで下さい。
注意.+3.3Vが出せません。そのためArduino Uno
Rev3互換にするためには、NJM2845DL1-33と
積層セラコン2個を別途購入し、空きパターンに実装する必要があります。
下記の写真を参照するか、こちらを参照下さい。
+3.3Vレギュレータ実装済み
・STMicro製Nucleoボード : マイコンはARM
Cortex-M0〜M4(FPU付き)、フラッシュメモリは
64KB〜1MB、RAMは8KB〜128KB、通常電力/低消費電力など、様々なものがあります。
一部、Arduino
IDEのSTM32開発環境でサポートしていないボードもあるので、HPを確認
してから買って下さい。インストール方法は、GettingStartを参照。価格は、1500〜2000円。
私は、メモリ容量と消費電力を最優先で選定し、STM32L476RG(Cortex-M4(FPU)、
フラッシュメモリ1MB、RAM128KB、低消費電力)を購入しました。
あと、Arduino互換の端子は、一部、半ピッチずれているため、普通の2.54mmピッチの
ユニバーサル基板が使えませんが、Morphoコネクタに接続すれば、ユニバーサル基板が
使えます。Nucleo専用になりますが、自作には好都合です。
注意.GPIOの電圧やA/Dの変換電圧が0〜+3.3Vなので、Arduino
Uno Rev3と完全互換にはなりません。
でも、多くのシールドが+3.3V/+5V両対応なので、大概、そのまま使えます。
基板によっては、ボード上で+5V/+3.3Vを切り替えたり、ソフトを書き換える必要があります。

・新Wi-Fiアルデュイーノ(IoT
Express Mk II) : 上で説明した通り、240MHzのXtensa 32bit
LX6プロセッサを2個、520KBのRAM、802.11b/g/n(Max.150Mbps)のWiFiとBluetooth
v4.2に対応する
ESP32を搭載し、Arduino互換の端子を持ち、MicroSDカードスロット、ブザーを持つボードです。
価格は、3,000円弱です。
但し、元のArduino
Uno等と端子番号が違うので、スケッチ例を書き換える必要があります。
よって、初心者にはお勧めしません。
しかし、高速動作、大容量RAM、WifiやBluetooth対応、安価、と非常に魅力的な製品です。
同様にESP32を搭載し、Arduino互換の端子を持つボードとして、ESPDuino-32もあります。ピン配置
に互換性はありませんので注意下さい。
ESP32の詳細は、こちらをご覧ください。
注意.Nucleoなどと同じで、GPIOの電圧やA/Dの変換電圧が0〜+3.3Vです。
注意.端子の指定方法が違います。基板のIOxxのxxが端子番号になります。
(2)シールドを買おう
・液晶パネル:カラーのドットマトリクスタイプであれば、microSDカードスロットも付いていて、
色々なことができます。タッチパネルが付いたものもあります。
買う時の注意ですが、SPIインタフェースの物をお勧めします。パラレルインタフェースは
止めるべきです。理由は、配線数が多く、端子設定の効率が悪く速度が出ない、などです。
SPIは16Mbps〜40Mbpsで動作し、DMAを使えばCPU負荷も最小限です。
AVRマイコンでは制約が多い(特にRAMが少ないためフレームメモリが持てない)ので、
NucleoやESP32の方が良いでしょう。
Adafruit製2.8型TFTタッチシールド

・モータードライバ、リレー:ロボット制御など、機構系の方は、これが必要でしょう。
私は買っていません。
・イーサーネット、無線モジュール:IoT製品の検討には必要でしょう。私は買っていません。
ESP32なら標準でWiFiとBluetoothが使えます。
・シールドを自作:私の目的はこれだったのですが、実はこれが大変でした。Arduinoボードの
コネクタの一部(SCL〜D8)が半ピッチずれています。そのため、通常の、2.54mmピッチの
ユニバーサル基板は使えません。(Uncompatinoだけは、通常の2.54mmピッチも持つ!)
そこで、秋月電子通商で「Arduino用ユニバーサル基板」を買ったら、SCL,SDAの穴が無い!
下記の写真では、穴をあけて、半田付けしています。
全ての端子を使える基板として、「Arduino用ユニバーサル プロトシールド基板」がありますが、
実装できる面積が狭くて、下の写真のようなものが作れません。
aitendoで扱っているArduino「プロトタイプシールド基板」は、やや小さいですが、安価で
全ての端子が使えます。

(3)電子回路の実験をしよう
・ブレッドボード
下の写真のように、配線や抵抗、コンデンサなどのディスクリート部品を差し込むだけでマイコンボードと
各種パーツを接続できるブレッドボードと呼ばれるものが安価に売られています。これを使えば、
電子回路の接続試験や、抵抗値を決めるときに便利です。私は、ブレッドボードで動作確認してから、
実際のボードに半田付けしています。
1つは持っておくことをお勧めします。

5.Arduino
IDEの使い方
(1)Arduino IDEでプログラムを作ろう
まず、Arduino
IDEをインストールしてください。
Nucleoの場合、
ファイルー環境設定の追加のボードマネージャのURLに
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
を追加し、ツールーボードのボードマネージャで「stm32」等で検索し、インストールします。
詳細は、Nucleoの場合、Arduino
IDEのSTM32開発環境のGettingStartを参考して下さい。
ESP32の場合、
ファイルー環境設定の追加のボードマネージャのURLに
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
を追加し、ツールーボードのボードマネージャで「esp32」等で検索し、インストールします。
詳細は、Arduino
IDEのESP32開発環境のInstallation
instructions using Arduino IDE Boards Manager
を参考にして下さい。
・LEDを点滅するサンプルを実行
ボードをPCとUSBケーブルで接続します。
ツール−ボード で接続しているボードを選びます。そして、ツール−シリアルポート で
ボードのCOMポート番号を選びます。
Nucleo-64などを選んだ場合は、Board part
numberも選びます。
ファイル−スケッチ例−01.Basic−Blink を選びます。
スケッチ−マイコンボードに書き込む を選ぶと、プログラムがコンパイルされ、ボードに転送され、
実行します。通常は、ボード上のLEDが点滅します。delay(時間(ms)); の時間を変更すると、
点滅の時間が変化します。
なお、Nucleoボードの場合、ST-LINKのソフトのアップデートを行う確認のウインドが出るので、
メッセージに従い、アップデートして下さい。
・デバッグ方法
サンプルコードを見ると、よく「Serial.print」のコマンドが書かれています。このメッセージを
表示したい時は、 ツール−シリアルモニタ を起動し、マイコンボードに書き込んで実行
下さい。
これを使用することで、表示デバイスが無くても、プログラムの実行状況が確認できます。
・ネットからライブラリをダウンロード
スケッチ−ライブラリをインクルード−ライブラリを管理 を選び、検索ウインドに使いたいデバイス名
やシールドの名前を入れると、様々なライブラリが見つかります。そこで、インストールを選べば、
ライブラリがダウンロードされ、スケッチ例に追加されます。
ちなみに、ダウンロードされたライブラリは、PCの「Users\ユーザー名\Documents\Arduino」又は
「PC\ドキュメント\Arduino」に格納されます。
・手でライブラリを追加
標準ライブラリにはなくても、ネットにArduino
IDEのライブラリやサンプルが置かれている場合が
あります。その場合、手で「Users\ユーザー名\Documents\Arduino」又は「PC\ドキュメント\Arduino」
の下にコピーすれば、Arduino
IDEのスケッチブックに追加できます。
また、「Arduino\libraries」の下にコピーすれば、スケッチ例に追加できます。
(2)デジタルピン、アナログピンの使い方
Arduino
IDEの ファイル−スケッチ例 を参照すると良いでしょう。主なものは次の通り。
・02.Digital−DigitalInputPullup : デジタルピンの入出力、プルアップ等のサンプル。
・01.Basics−Fade : PWM出力によるLEDの輝度変更のサンプル。
・02.Digital−toneMelody : デジタルピンで音を出すサンプル。
・03.Analog−AnalogInOutSerial : アナログ端子から電圧をリード/ライトするサンプル。
なお、マイコンや基板によって、最大電圧が+3.3V/+5Vが異なるので注意。
|