[電子工作]Arduino/Nucleo/ESP32で電子工作AVRマイコン(8bitマイコン)、ARMマイコン(32bitマイコン)、ESP32で色々なものを動かしてみよう! ーーーー目次ーーーー ーーーーーーーーーー 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のはじめ方・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が端子番号になります。
・液晶パネル:カラーのドットマトリクスタイプであれば、microSDカードスロットも付いていて、 色々なことができます。タッチパネルが付いたものもあります。 買う時の注意ですが、SPIインタフェースの物をお勧めします。パラレルインタフェースは 止めるべきです。理由は、配線数が多く、端子設定の効率が悪く速度が出ない、などです。 SPIは16Mbps〜40Mbpsで動作し、DMAを使えばCPU負荷も最小限です。 AVRマイコンでは制約が多い(特にRAMが少ないためフレームメモリが持てない)ので、 NucleoやESP32の方が良いでしょう。
・モータードライバ、リレー:ロボット制御など、機構系の方は、これが必要でしょう。 私は買っていません。
・イーサーネット、無線モジュール:IoT製品の検討には必要でしょう。私は買っていません。 ESP32なら標準でWiFiとBluetoothが使えます。
・シールドを自作:私の目的はこれだったのですが、実はこれが大変でした。Arduinoボードの コネクタの一部(SCL〜D8)が半ピッチずれています。そのため、通常の、2.54mmピッチの ユニバーサル基板は使えません。(Uncompatinoだけは、通常の2.54mmピッチも持つ!) そこで、秋月電子通商で「Arduino用ユニバーサル基板」を買ったら、SCL,SDAの穴が無い! 下記の写真では、穴をあけて、半田付けしています。 全ての端子を使える基板として、「Arduino用ユニバーサル プロトシールド基板」がありますが、 実装できる面積が狭くて、下の写真のようなものが作れません。 aitendoで扱っているArduino「プロトタイプシールド基板」は、やや小さいですが、安価で 全ての端子が使えます。
下の写真のように、配線や抵抗、コンデンサなどのディスクリート部品を差し込むだけでマイコンボードと 各種パーツを接続できるブレッドボードと呼ばれるものが安価に売られています。これを使えば、 電子回路の接続試験や、抵抗値を決めるときに便利です。私は、ブレッドボードで動作確認してから、 実際のボードに半田付けしています。 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」の下にコピーすれば、スケッチ例に追加できます。
Arduino IDEの ファイル−スケッチ例 を参照すると良いでしょう。主なものは次の通り。 ・02.Digital−DigitalInputPullup : デジタルピンの入出力、プルアップ等のサンプル。 ・01.Basics−Fade : PWM出力によるLEDの輝度変更のサンプル。 ・02.Digital−toneMelody : デジタルピンで音を出すサンプル。 ・03.Analog−AnalogInOutSerial : アナログ端子から電圧をリード/ライトするサンプル。 なお、マイコンや基板によって、最大電圧が+3.3V/+5Vが異なるので注意。
Arduino IDEで液晶パネル、タッチパネル、SDカードを使う方法は、こちら。
「STM32の性能を発揮するには?」はこちら。
ESP32の詳細はこちら。 |