電子工作一覧

OLED の動作確認(ESP32)

HiLetGo の OLED を ESP32 (ESP-WROOM-32) で使おうと思ったときに、予期していた状態と異なったのでここにメモとして残しておきます。

ESP-WROOM-32 で Arduino フレームワークを使ってこのディスプレイを使おうとしたときに、以前の u8glib が使えなかったので別のライブラリを探すことにしました。 u8glib で GraphicsTest をコンパイルさせたところ、なぜかフラッシュの領域を超えるくらいの大きなものが出来てしまったようで。

続きを読む


ESP32 の I2C の罠

ESP-WROOM-32 を、 Arduino Core for the ESP32 で使用していたのですが、 I2C 関連で通信正常にできない問題に出遭いました。使用しているバージョンは 1.0.0 となっていました。
I2C については、こちらで語られているように問題があるようだったのですが、現時点のバージョンでは解消されているのかと考えています。

  • 参考:https://www.mgo-tec.com/blog-entry-problem-i2c-0628-arduino-esp32.html

遭遇した問題点

RTC のモジュールとして、 RX8900 を使おうとしたときに出遭いました。最初はラインをプルアップするのを忘れたので、そのせいで通信が正常に出来ないのだと考えていました。しかし、プルアップしてみても問題は解消せず、という状況でした。
問題といっているのは「デバイスからの値の取得が出来ない」といった状況が発生していました。しかし、 RTC の各レジスタに値はかけているようで、 RX8900 のデバイスは稼働しているようでした。この点から読み込みだけが失敗している状況と考えました。

このとき使用していたスケッチは、 RX8900 は秋月電子で購入した際に紹介されていた ino スケッチです。

解決方法

スケッチの中で、 Wire.endTransmission(false) としている点が、 ESP-WROOM-32 でまずいような感じでした。
後続にもコマンドがあるので I2C バスを解放せずという点はわかるのですが、これが駄目なようでした。この部分を endTransmission(true) でバス解放してあげることで、ひとまずはレジスタからの読み込みも成功するようになりました。

endTransmission(false) を使っているようなものでは、同じように問題に出遭うかもしれません。あるいはバージョンが上がったら、この問題も解消されるかもしれません。


ESP32でmp3単純再生

先日の WebRadio のプログラムを使って、 ESP-WROOM-32 で mp3 データが再生できることは確認しました。しかし単に mp3 だけを再生するにはどうしたらよいかが気になりました。今回はこれを確認したいと思って、色々と試してみることにしました。

WebRadio のほうは ISP-IDF の開発環境を必要としていたのですが、 Arduino の環境で出来たら手軽に使えるなと思うので、こちらで出来ないかから試してみました。結論としては、運良く Arduino のフレームワークで使えるものがあったのでこれを紹介します。

続きを読む


ESP-IDF で wav再生

ESP-IDF 環境で、 wav の再生をやってみました。
先日の WebRadio のもので I2S の配線済みだったので、wav の再生にも I2S へ書き込むようにしました。単なる wav の I2S 再生を ESP-IDF でやっているサンプルってあまりなさそうだったのは、簡単すぎて需要が無いのかも。

続きを読む


ESP-WROOM-32 のための VSCode 設定

ESP-WROOM-32 を Arduino として使っている際には、あまり意識していなかったのですが、 ESP-IDF 環境でプログラムを作成するとなるとちょっとつらくなってきたので環境を整えてみることにしました。

Visual Studio Code を用いて、コードの編集からコンパイル、転送までを集約したいと思います。

続きを読む


ESP32 で WebRadio

手元にあった ESP-WROOM-32 マイコンは mp3 を再生するパワーがあることがわかったので、手っ取り早く確認したかったので、WebRadio を再生するプログラムを動作させてみることにしました。

使用した開発ボードは、 ESP32-DevKitC というものですが、他のボードでも同様に動くと思います。スイッチサイエンスの ESPr Developer 32 も定番の開発ボードです。ESP32 マイコンがどのようなものかは、各所で説明されているのでここでは説明しません。

続きを読む


HiLetGo の OLED の動作確認 (続)

先日の HiLetGo の OLED パネルについて、少し間違った情報を書いてしまったようです。 u8glib 側のコードを編集する必要はありませんでした。

採用されているチップが実は SH1106 で SSD1306 ではなかった模様です。

接続

配線を次のようにします。

Adruinoピン OLEDピン
13 CLK
11 MOSI
10 CS
9 DC

OLED の RESET ピンは Vcc と接続しておきます。

GraphicsTest編集

有効にするのは、次の行でした。
(見ての通りリセットピンに対して制御がないので、前節の配線変更が必要になった感じです)。

参考

同じように OLED パネルを使っている事例を見つけたので、上記のような結論へたどり着くことが出来ました。こちらの方は 0.96 inch から 1.3 inch へ使用するパネルを変えた際にこの問題に遭遇したみたいです。


HiLetGo の OLED の動作確認

Amazon で HiLetGo の有機 EL パネルを買ってみました。割と情報が多く見つかるのが 0.96 インチのものですが、買ったのは 1.3 インチのものです。また接続形式は I2C ではなく、 SPI でした。
動作を Arduino UNO を用いて確認したのですが、ちょっとポイントがあったので備忘録と、誰かの役に立つかもと思って、記録&公開しておきます。

接続について

Arduino と OLED との接続は以下のようになります(電源接続を除く)。
Fritzing で配線図を書こうと思ったのですが、 HiLetGo OLED と合う物が見つからず…

Adruinoピン OLEDピン
13 CLK
11 MOSI
10 CS
9 DC
8 RES

続きを読む


小さい Arduino

夏休みに小さな Arduino を買いました。
というのも、 Atmega A328P-PU を買ってきて、ブートローダーの書き込みをして… とやっていたのですが途中からうんともすんとも言わない状況になってしまいお手上げになってしまったからです。
安いのでまた買ってくればよいのですが、他に何かないかなぁと探していたところに Arduino Nano, Pro-Mini を発見した次第です。

続きを読む


電源電圧を測定する

以前に、減電圧表示回路のほうで Attiny13a のアナログ読み取りと内部基準電圧を用いて測定する話題をやりました。
このときには、セオリー通り抵抗分圧してそのときの値を読み取るという感じで算出しましたが、 Atmega328P (Arduino Uno) を用いては、もう少し変わった方法があることを知りました。今回はこれを紹介したいと思います。

測定方法

気になる測定の方法ですが、「現在の電源電圧を基準電圧として、内部の基準電圧 1.1V を測定する」という方法になります。これにより、内部基準電圧 1.1V が現在の基準電圧(電源電圧)に対してどのくらいの割合になるかが測定されます。

スケッチ

内部基準電圧を測定対象とするためには通常の analogRead() 関数は使用できません。そのためレジスタの値に直接書き込むことにします。
スケッチについては以下のような内容となっています。複数回測定して平均値を出すようにしています。

結果

このスケッチを USB 接続している Aruduino UNO で実行して、電圧を確認してみたところ、 “5.029” と表示されました。そして、 Arduino Uno からとれる 3.3V 電源で、別の atmega328P を稼働させて、そちらで測定したときには、”3.352″ と表示されました。こちらのほうはテスターで計測してみたのですが、”3.32V” だったのでおおよそ合っているように思います。
さらに、単3電池2本で動かしてみたのですが、このときには、 テスター:2.78V、内部計測:2.81V となりました。先の結果よりは精度が落ちていますが、十分実用範囲だと思います。

まとめ

この測定方法により、アナログピンを消費せずに計測できるようになりました。また分圧のための抵抗2本ほども省略できそうです。電源電圧の低下を目安として知るための方法としてはかなり有用なのではないかと思っています。