ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

組み込みエンジニア
本記事はプロモーションが含まれています。

こんにちは、ENGかぴです。

ESP32-WROOM-32EはArduino環境でソフト開発ができるため標準のライブラリで各種センサーの動作確認ができます。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるためお勧めのモジュールです。

私が動作確認しているライブラリなどのプログラムを動作させてみたり改造したりと有効利用していただき少しでも興味を持っていただけたのなら幸いです。

ソフト開発と標準ライブラリの使い方

ESP32-WROOM-32Eは各種センサーの情報を取得するためのSPI通信やI2C通信機能を備えています。一番の特徴はWiFi通信やBluetooth通信ができることです。

ESP32 ArduinoCoreのドキュメントのサイト

各種ライブラリの説明やボードタイプによるピン配置などの説明のドキュメントがまとめられています。

タイマ機能を使用する

ESP32-WROOM-32Eの開発環境ではタイマに関するライブラリが標準で搭載されています。スケッチ例である「RepeatTimer」を引用しながらタイマ割り込みを使用する方法を説明しています。

タイマの応用例としてDIのチャタリング防止のためのDIフィルタを実装する方法について説明しています。

広告

SPI通信を行う

Arduino環境ではSPI通信を行うために標準ライブラリとしてSPIライブラリがあります。BME280の製作メーカが提供しているAPIを使用して温度・気圧・湿度の計算を行いSPI通信でセンサー情報を取得する方法をまとめました。

BME280の製作メーカーが提供しているBME280用のAPIを組み込んで動作させる方法とライブラリマネージャからインストールした「Adafruit BME280」を使用する方法を紹介しています。

スポンサーリンク

Wire(I2C)通信を行う

Wireライブラリを使ってI2C通信を行い温湿度センサーであるSHT35-DISから温湿度データを取得してシリアルモニタに計測値を表示する方法を説明しています。またSHT35-DISの測定データの整合性チェックを行うためCRC-8の計算方法についてまとめています。

広告

WiFiのアクセスポイントを実装する

WiFiライブラリを使用することでアクセスポイントとして使用することができます。同時にサーバーとして動作させることでクライアント(スマホ等)からの接続に対して応答することができます。

Wireを使ってSHT35-DISから取得したデータをスマホなどのブラウザに表示して動作確認しました。

ESP32-WROOM-32Eの最大の特徴であるWiFi通信でスマホ上にデータを表示できるため応用範囲が広がりそうです。

広告

WiFiサーバーを実装してレスポンスする

WiFiサーバーを実装してアクセスポイントに接続してクライアントからのリクエストにレスポンスする方法をまとめています。mDNSで機器の名前を登録してIPアドレスを設定しなくても良い方法についてもまとめています。

mDNSはAndroidでは実装されていないためAndroidで使用する場合は別途アプリ(.Local Finderなど)が必要です。

Webサーバーを実装する

Webサーバーを実装するとクライアント(スマホなど)のリクエストに対応したレスポンスを返信する事ができるため複数のURLを切り替えながら表示することができます。

RGB LEDを操作する

RGB LEDは赤・緑・青の光の三原色を調整することで様々なパターン色でLEDを点灯させることができます。Adafruit NeoPixelライブラリを追加してRGB LEDを操作して動作確認を行いました。Webサーバーを実装することでWiFi通信を使用してHTMLページを表示しカラーピッカでRGB LEDを操作します。

光の三原色で様々な色を作ることができるのでRGB LEDを使ったイルミネーションなどに応用できて楽しそうです。

アクセスポイントとサーバーを実装する

アクセスポイントとサーバーの双方を実装すると固定したアクセスポイントのIPアドレスでサーバーの設定を行うことができます。サーバーの設定が不明となり接続できない場合の最終手段としてアクセスポイントを補助的に使用するイメージです。

複数のルーターに接続していた場合、モジュールが混在して設定項目が分からなくなることがあるため固定したアクセスポイントで確実に設定項目を確認で切るようにしておくことはメリットが大きいと思います。

センサーのデータを履歴のグラフで表示する

Webサーバーとグラフ表示用のライブラリであるChart.jsを組み込むことでSHT35-DISから取得した温湿度情報をブラウザー上にグラフ表示しています。Chart.jsを組み込むためにSPIFFSをArduino IDEに追加する方法についてまとめています。

グラフ表示すると時間経過による状態の変化が視覚的に分かるため応用範囲が広がりそうです他のセンサーの情報もグラフ化して表示してみたいと考えています。

HTMLデータを文字列を加えながら生成する方法は簡素なページの実装には手軽ですが、ページのコンテンツを追加するにつれて管理が煩雑になってしまいます。他の方法としてHTMLファイルとJSファイルを別に管理する方法をまとめました。

ESP32-WROOM-32Eが取得した温湿度情報をJSONデータに変換し、Webソケットでクライアントに送信することでグラフが表示を行うことができます。

Webソケットの接続が継続していればESP32を起点にしてクライアントにセンサー情報を送信することができます。BME280からデータを取得したタイミングでJSONデータをWebソケットで送信しクライアントのHTMLを更新する方法をまとめました。

HTML言語、Javaスクリプトを分けて管理できるためソースコードの追加がしやすいメリットがあります。CSSファイルを追加するとページの見やすさなどデザインについても変更できるようになります。

PR:スキマ時間を有効に!スマホで学べる人気のオンライン資格講座【スタディング】まずは気になる講座を無料で体験しよう!

SDカードのファイルをFLASHに書き込む

Arduino IDEのアップグレードでESP32 Sketch Data Uploadプラグインが使用できなくなった(今後対応する可能性あり)ため代替の方法としてSDカードのファイルをFLASHに書き込む方法をまとめました。

SDカードのファイルを1バイトずつFLASHに書き込むため時間がかかってしまいますが、ESP32 Sketch Data Uploadプラグインを使用すると数秒で書き込むことができるため旧バージョンのArduino IDEを使用した方が良いかもしれません。

履歴データをダウンロードする

Webサーバーを使って表示したHTMLデータにダウンロードリンクを追加実装してSDカードに保存している温湿度データの履歴をダウンロードする方法をまとめています。

本記事ではSDカードを対象にしていますがSPIFFSを使用したフラッシュのデータについても同様の方法でダウンロードすることができます。

ブラウザーからRTCモジュールの時刻データをセットする

Webサーバーを実装するとスマホなどのブラウザーから時刻データを送信してRTCモジュールに時刻をセットすることができます。外部の回線に接続しないもので時刻管理が必要な機器において有効な方法です。

ブラウザーに表示している時刻設定のボタンを押すタイミングによって時刻のずれが最大60秒程度生じるため注意が必要です。設定の時刻を1分程度進めておきブラウザーの分が更新される1秒前くらいに設定するなど工夫が必要です。

広告

サーボモーターを操作する

Webサーバーを使ってブラウザー上に表示した回転角のパターンを反映してサーボモーターを操作する方法をまとめました。EPS32シリーズ用のライブラリをインストールの方法と使用例をまとめています。

ホールセンサーとタッチセンサーの使い方

ホールセンサーとタッチセンサーはESP32-WROOM-32Eに初期搭載されているセンサーです。モジュールの金属モールドに磁石を当てるとセンサーの値が変化します。タッチセンサーに対応したピンをGPIOピンとして使用しない場合に使用することができます。指でタッチするとセンサー値が変化します。

ホールセンサーはドアの開閉部のセンサーなどに応用でき、タッチセンサーは照明のスイッチなどに応用することができます。

PWM波形を生成する

ESP32シリーズは通常のArduinoライブラリとは別にPWM用のライブラリが実装されています。PWMの設定の仕方から応用例としてブザーを鳴らしたりモーターを駆動されて動作確認しました。

ESP32専用のライブラリでは音色が定数として定義されているためド~シまでの音程の調整が簡単にできるのが便利な点だと感じました。

加速度センサーのデータ取得と動作履歴をSDカードに保存する

ESP32シリーズのDIに割り込みを使用する設定を行い加速度センサーであるADXL345のイベント情報を取得する方法をまとめています。ADXL345用のライブラリを追加して加速度情報を取得しています。

加速度のイベントをグラフ表示して動作確認したことをまとめました。イベントの発生前後の加速度の様子を確認することができます。

加速度イベントの動作履歴をSDカードに保存する方法をまとめました。SDカードに保存することで多くの履歴を保存することができます。

SDカードに動作履歴を残す方法は他の用途にも応用できる方法です。ブラウザに履歴データのファイルを表示しグラフ表示するなど応用例が様々です。

PR:技術系の通信教育講座ならJTEX

FLASH(EEP)にデータを読み書きする

ESP32シリーズ用に実装されているSPIFFSライブラリを使用してFLASHからデータを読み書きする方法をまとめました。FLASHの一部をデータ用のストレージとして使用しArduino環境でSDカードにアクセスするイメージでデータを管理することができます。

ブラウザーで設定値を変更しSPIFFSを使って保存した設定情報を使ってアクセスポイントを動作させる方法をまとめています。

ESP32シリーズではEEPROMライブラリがArduino環境で開発できるように下位互換として実装されています。電源OFFしてもデータを管理することができますが、FLASHを使用することが推奨されています。EEPROMライブラリを使った方法は他のArduino環境で開発したソフトを流用する際の参考としてまとめています。

UDP通信を実装する

ESP32-WROOM-32EのWiFi通信は基本的にTCP/IP通信ですが、UDP通信ライブラリ追加するとUDP/IP通信を実装することができます。UDP通信の特徴は複数の端末にパケットを送信するブロードキャスト(マルチキャスト)通信です。UDP通信ライブラリの実装と動作確認したことをまとめています。

スポンサーリンク

Bluetooth通信を実装する

ESP32-WROOM-32EはBluetooth機能が実装されています。シリアル通信をBluetooth通信に変換して使用するためにESP32専用にBluetoothSerialライブラリが実装されています。BlutoothSerialライブラリを使用するとArduino環境のSerialライブラリのように手軽にBluetooth通信を行うことができます。

Bluetoothはiphoneでは使用できないのが残念な点です。スマホのOSを選ばずに使用できるWiFi通信の方を中心に実装する方が良いと感じています。

ESP32-WROOM-32Eモジュール間のBlutooth通信の方法をまとめました。親機をマスターとして動作させ、子機をスレーブとして動作させます。子機が取得したセンサー情報を親機にBluetooth通信を使って親機のシリアルモニターに表示しました。

WiFiとZigBeeの特徴を活かした無線通信

ESP32-WROOM-32EとTWELITE(トワイライト)の特徴を活かしてWiFiでは届かない範囲のセンサーの情報を取得する方法をまとめました。

TWELITEの中距離通信で温湿度センサーから取得したデータを無線通信します。ESP32-WROOM-32EはTWELITEから取得したデータを履歴保存してクライアントからの接続要求でHTTPデータで応答し、温湿度の履歴を表示します。

TWELITE SPOTはESP32-WROOM-32EとTWELITEの組み合わせをモジュール化した製品です。プリインストールされているアプリの動作確認と「ESP32-WROOM-32EとTWELITEの特徴を活かした無線通信」のソースコードを一部追加修正して動作確認を行いました。

WiFiとZigBee通信の特徴を活かした構成により応用範囲が広がりそうです。

Arduinoライブラリに関する書籍

ESP32を使った開発環境の作り方からソースコード例が説明されています。WiFiのアクセスポイントの実装の仕方やWebServerを使った方法は当サイト記事が一部引用されています。

ESP32シリーズでソフト開発する際に参考になる書籍を紹介しています。Arudinoライブラリの使い方が説明されているためArduinoライブラリに慣れていない初心者からお勧めできる書籍です。

Arduino IDEによるソフト開発環境の作り方からArudinoライブラリの使い方までを説明しておりESPだけでなくArduino UNOを使った例が説明されているため基礎知識ない状態からArduino環境に慣れていきたい方にお勧めできる一冊です。

ESP32を中心に電子回路に関する省エネの考え方やI2CやSPI通信の構成の説明など回路からソフト開発の例が豊富なのが良いです。

まとめ:まずは感覚を掴むことが大切です。

Arduinoはライブラリを使用することでSPIやI2C通信などが簡単に実現できるためマイコンの動作を勉強するには最適な環境です。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるため苦手意識をなくせることがメリットと言えます。

Arduinoはライブラリを使って各種機能を実現するためライブラリにない動作を組み込みたい場合は自作する必要があります。ライブラリは有志が作成したものであるためバグがある可能性もあり動作の保証はないのがデメリットです。

実際にセンサー情報を取得したりシリアルモニタに表示したりと動作確認しながら1つ1つの技術の成功を積み重ねていけばできることが増えていき自信がつくことでソフト開発に対する苦手意識がなくなっていくことは間違いありません。

自信がつきマイコンの機能をフル活用してみようとレジスタの操作についてデータシートを見てみようと興味が湧いてくれば、あっという間に脱初心者となるでしょう。

私は業務に追われながらも独学していたためソフト開発に慣れるまでに10年程度かかってしまいました。ArduinoだけでなくPICマイコンやRXマイコン最近はIoTモジュールのソフト開発などをしていますが、早い段階でプログラミングを教養として身に着けておけば10年もかからなかったと感じています。

広告

最近では無料体験できるプログラミングスクールも増えてきており、あなたに合った学習プランによって短期集中してプログラミングに親しめる環境があります。無料体験でもプログラミングに対する感覚を掴めておけばソフト開発に対するハードルが下がることは間違いありません。

関連リンク

Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。

Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方

Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方

ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

Arduinoのようにソフト開発したり周辺回路と組み合わせてデータを取得させたりして電子製品を開発するエンジニアは組み込みエンジニアといいます。IoT社会実現と組み込みエンジニアの職種との関係についてまとめています。

組み込みエンジニアはIoT社会実現のために需要が高い職種

ZigBeeモジュールであるトワイライトでソフト開発と無線通信を行い動作確認したことについてリンクをまとめています。

トワイライト(TWELITE)のソフト開発と無線通信でできること

最後まで、読んでいただきありがとうございました。

タイトルとURLをコピーしました