[電子工作]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が異なるので注意。

 

Arduino IDEで液晶パネル、タッチパネル、SDカードを使う方法は、こちら。

 

「STM32の性能を発揮するには?」はこちら

 

ESP32の詳細はこちら。