こんにちは、ENGかぴです。
ESP32-WROOM-32EはArduino環境でソフト開発ができるため標準のライブラリで各種センサーの動作確認ができます。ソフト開発に対して苦手意識があり敷居が高く感じていた方でも簡単に動作確認ができるためお勧めのモジュールです。
私が動作確認しているライブラリなどのプログラムを動作させてみたり改造したりと有効利用していただき少しでも興味を持っていただけたのなら幸いです。
- ソフト開発と標準ライブラリの使い方
- ESP32-WROOM-32Eの開発環境を作る
- タイマ機能を使用する
- SPI通信を行う
- Wire(I2C)通信を行う
- シリアル通信を実装する
- WiFiのアクセスポイントを実装する
- WiFiサーバーを実装してレスポンスする
- Webサーバーを実装する
- TCPクライアントを実装する
- RGB LEDを操作する
- アクセスポイントとサーバーを実装する
- センサーのデータを履歴のグラフで表示する
- SDカードのファイルをFLASHに書き込む
- 履歴データをダウンロードする
- ブラウザーからRTCモジュールの時刻データをセットする
- サーボモーターを操作する
- ステッピングモーターを操作する
- ホールセンサーとタッチセンサーの使い方
- PWM波形を生成する
- 加速度センサーのデータ取得と動作履歴をSDカードに保存する
- FLASH(EEP)にデータを読み書きする
- UDP通信を実装する
- Bluetooth通信を実装する
- WiFiとZigBeeの特徴を活かした無線通信
- Arduinoライブラリに関する書籍
- まとめ:まずは感覚を掴むことが大切です。
- 関連リンク
ソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eは各種センサーの情報を取得するためのSPI通信やI2C通信機能を備えています。一番の特徴はWiFi通信やBluetooth通信ができることです。
各種ライブラリの説明やボードタイプによるピン配置などの説明のドキュメントがまとめられています。
ESP32-WROOM-32Eの開発環境を作る
Arduinoの開発環境であるArduino IDEにESP32の開発環境を追加する手順と動作確認を行った方法についてまとめています。
タイマ機能を使用する
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の計算方法についてまとめています。
広告
PR:わからないを放置せず、あなたにあったスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
シリアル通信を実装する
ESP32-WROOM-32EとPICマイコンをシリアル通信で接続して自作のフォーマットによる電文を使ってPICマイコンを操作して動作確認したことについてまとめています。
WebServerを実装してブラウザーから受信した文字コードを音声合成ICであるATP3012にシリアル通信でコマンドを送信し音声再生する方法をまとめました。
WiFiのアクセスポイントを実装する
WiFiライブラリを使用することでアクセスポイントとして使用することができます。同時にサーバーとして動作させることでクライアント(スマホ等)からの接続に対して応答することができます。
Wireを使ってSHT35-DISから取得したデータをスマホなどのブラウザに表示して動作確認しました。
広告
WiFiサーバーを実装してレスポンスする
WiFiサーバーを実装してアクセスポイントに接続してクライアントからのリクエストにレスポンスする方法をまとめています。mDNSで機器の名前を登録してIPアドレスを設定しなくても良い方法についてもまとめています。
Webサーバーを実装する
Webサーバーを実装するとクライアント(スマホなど)のリクエストに対応したレスポンスを返信する事ができるため複数のURLを切り替えながら表示することができます。
TCPクライアントを実装する
外部機器にTCP通信の接続要求を出して双方向通信するTCPクライアントを実装する方法をまとめました。外部機器にはArduino UNO(ETHERNET SHIELD)を使用し、TCPクライアントの接続要求とArduino UNOからの応答で動作確認を行いました。
RGB LEDを操作する
RGB LEDは赤・緑・青の光の三原色を調整することで様々なパターン色でLEDを点灯させることができます。Adafruit NeoPixelライブラリを追加してRGB LEDを操作して動作確認を行いました。Webサーバーを実装することでWiFi通信を使用してHTMLページを表示しカラーピッカで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を更新する方法をまとめました。
PR:スキマ時間を有効に!スマホで学べる人気のオンライン資格講座【スタディング】まずは気になる講座を無料で体験しよう!
SDカードのファイルをFLASHに書き込む
Arduino IDEのアップグレードでESP32 Sketch Data Uploadプラグインが使用できなくなった(今後対応する可能性あり)ため代替の方法としてSDカードのファイルをFLASHに書き込む方法をまとめました。
履歴データをダウンロードする
Webサーバーを使って表示したHTMLデータにダウンロードリンクを追加実装してSDカードに保存している温湿度データの履歴をダウンロードする方法をまとめています。
本記事ではSDカードを対象にしていますがSPIFFSを使用したフラッシュのデータについても同様の方法でダウンロードすることができます。
ブラウザーからRTCモジュールの時刻データをセットする
Webサーバーを実装するとスマホなどのブラウザーから時刻データを送信してRTCモジュールに時刻をセットすることができます。外部の回線に接続しないもので時刻管理が必要な機器において有効な方法です。
サーボモーターを操作する
Webサーバーを使ってブラウザー上に表示した回転角のパターンを反映してサーボモーターを操作する方法をまとめました。EPS32シリーズ用のライブラリをインストールの方法と使用例をまとめています。
ステッピングモーターを操作する
Webサーバーを使ってスマホなどのクライアントから回転速度と回転角度を指定してステッピングモーターを操作する方法をまとめました。
ホールセンサーとタッチセンサーの使い方
ホールセンサーとタッチセンサーはESP32-WROOM-32Eに初期搭載されているセンサーです。モジュールの金属モールドに磁石を当てるとセンサーの値が変化します。タッチセンサーに対応したピンをGPIOピンとして使用しない場合に使用することができます。指でタッチするとセンサー値が変化します。
PWM波形を生成する
ESP32シリーズは通常のArduinoライブラリとは別にPWM用のライブラリが実装されています。PWMの設定の仕方から応用例としてブザーを鳴らしたりモーターを駆動されて動作確認しました。
加速度センサーのデータ取得と動作履歴をSDカードに保存する
ESP32シリーズのDIに割り込みを使用する設定を行い加速度センサーであるADXL345のイベント情報を取得する方法をまとめています。ADXL345用のライブラリを追加して加速度情報を取得しています。
加速度のイベントをグラフ表示して動作確認したことをまとめました。イベントの発生前後の加速度の様子を確認することができます。
加速度イベントの動作履歴をSDカードに保存する方法をまとめました。SDカードに保存することで多くの履歴を保存することができます。
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通信を行うことができます。
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社会実現と組み込みエンジニアの職種との関係についてまとめています。
ZigBeeモジュールであるトワイライトでソフト開発と無線通信を行い動作確認したことについてリンクをまとめています。
トワイライト(TWELITE)のソフト開発と無線通信でできること
最後まで、読んでいただきありがとうございました。
ESP32-WROOM-32Eの最大の特徴であるWiFi通信でスマホ上にデータを表示できるため応用範囲が広がりそうです。