※ ESP-WROOM-02 の Flashメモリサイズが 4MB のはずが、実は 2MB だったという情報がありました。
以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。
●ESP-WROOM-02 ( ESP8266 ) チップ・メモリ・MACアドレス情報確認方法
(2017/10/2)
※OLED_SSD1351ライブラリのbeta 1.53 では動きません。beta 1.40をご使用ください。 こちらのページに再アップしました。 今までうまく動作しなかった方は大変失礼いたしました。 ライブラリをアンインストールする際は以前のライブラリのフォルダごと削除してから、新たにインストールしてください。(2016/10/21)
こんばんは。
前回の記事では、BME280 の温度・湿度・気圧のデータを 一時的に ESP-WROOM-02 ( ESP8266 ) のSRAMに記憶して、有機EL ( OLED ) SSD1351 に表示させる簡易ロガーを作りましたが、今回はOLED SSD1351 に付属しているmicro SD カードにデータを保存してみました。
そして、ESP-WROOM-02 ( ESP8266 ) のWi-Fi 機能の生かして、NTPサーバーから定時に時刻を自動取得してディスプレイに表示させて、その時刻もmicro SD カードに記録してみました。
下図のディスプレイ右下にある時刻がNTPサーバーから取得して時刻補正したものです。
更に、フリーの日本語漢字フォント、東雲フォントをmicro SDカードから読み込んでみました。
今まで、東雲フォントはSPIFFSファイルシステムを使って読み込んでいましたが、今回実験した結果、micro SD カードから読み込んだ方が表示が速いことに気付きました。
こちらの比較動画をご覧ください。
いかがでしょうか。
左側のmicro SD カードからフォントを読み込んだ方の表示が速いですね。
こうなると、わざわざSPIFFSの面倒なアップロードや、ファイルサイズ気にしないでも存分にストレス無くフォントやデータファイルを使用できますね。
ESP-WROOM-02 ( ESP8266 )ではSPI通信デバイスを複数連結する場合はいろいろと注意が必要で、特にSDカードを使って、Arduino IDE の SD.h ライブラリを使う場合にはSCLKピンやMOSIピン、MISOピン、CSピンをプログラム中で工夫して使わなければなりません。
SD.h ライブラリではCSピンしか指定できませんので、Arduino core for ESP8266 Wi-Fi chip ボードのSD.h ライブラリの中で MOSI, MISO, SCLK ピンを予め定義しているのです。
ですから、SD.h ライブラリの関数を使うと、他のライブラリのピン設定が変わるようで、毎回ピン設定をしなければいけないようです。
因みに、この記事を書いている最中に台風が通過しました。
気圧の変化が面白かったので報告しておきます。
こんな感じになりました。
下の写真は5時間ロガー設定で、台風が近づいているときに計測したものです。
気圧がだんだん下がっていることがわかり、台風が近づいていることがよくわかりますね。
湿度がギザギザしているのはエアコンが入っているためです。
エアコンが定期的に動くと、それに伴って湿気を奪っていることが良く分かりますね。ちゃんと働いてくれています。
次の写真は台風が遠ざかるときに計測したものです。
台風が遠ざかるにしたがって気圧が上がっているのが分かると思います。
10時間ロガーにするともっと顕著に気圧の谷が分かりやすかったかもしれません。こうやって視覚的に見るとオモシロイですね・・・。
そんな感じで、いろいろと実験した結果、何とか複数のSPIデバイス中でSDカードを使うことが出来ましたので、その解説をしていこうと思います。
1.準備するもの
●ESPr Developer ( ESP-WROOM-02 開発ボード) スイッチサイエンス
Amazon.co.jp
当ブログで何度も紹介しているものです。
2.4GHzのWi-FiボードのESP8266を日本の電波法をクリアして技適認証取得したESP-WROOM-02 にUSBシリアル変換、電源レギュレーターなどをパッケージにしたボードです。
動作がとても安定していて、使いやすいボードでおすすめです。
これの使い方は以下のページをご覧ください。
ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介
●Adafruit OLED Breakout Board – 16-bit Color 1.5″ w/microSD holder
スイッチサイエンスさんウェブショップにあります。
https://www.switch-science.com/catalog/1754/
microSDカードスロット付きの有機EL ( OLED ) ボードです。チップはSSD1351です。
microSDカードは別売りです。
SPI接続で制御します。
16bitでカラー指定できるので、微妙な色設定が可能です。
電子工作用ディスプレイとしては高価ですが、microSDカードスロット付きということと、フルカラーというこで、これ一つあればかなりいろいろなことができますので、おすすめです。
●BME280搭載 温湿度・気圧センサモジュール ( スイッチサイエンス )
Amazon.co.jp
真ん中の小さい四角いシルバーの箱の中に温度・湿度・気圧センサーが入っているモジュールです。
電動工具で有名なBOSCH ( ボッシュ )製です。
SPI通信とI2C通信両対応ですが、ここではSPI通信を使用します。
これはピンヘッダが付属しているので、ハンダ付けしておいてください。
これについての詳細は以下のページをご覧ください。
BME280 搭載、温度・湿度・気圧センサーを SPI で動かしてみた( ESP-WROOM-02 ( ESP8266 )使用)
●microSDカード
Amazon.co.jp
温度・湿度・気圧データ記録用のmicroSDカードで、当方で動作確認したものはTDK のmicroSDHC 4GB です。
この他のものでも動作するとは思いますが、場合によっては動作しないものもありますのでご注意ください。特にメモリが大きいものや大手メーカー製以外のものは要注意です。
●インターネットに接続してあるWi-Fiルーター環境
今回はインターネット上のNTPサーバーに時刻を定時取得して、ESP-WROOM-02 ( ESP8266 )の内部時計を補正しますので、インターネットに接続できる2.4GHz帯のWi-Fi環境が必要です。
●その他、ブレッドボード、ジャンパーワイヤー、USBケーブル、パソコン等
2.接続する
接続は前回の記事とは異なりますのでご注意ください。
なぜかというと、OLEDに付属しているmicroSDカードスロットを使うときには、ライブラリのSD.hを使用しますが、それはSPI通信のピン配置が予め決められているために、それに合わせなくてはいけなくなったためです。
ESP-WROOM-02 のデータシートを見てみると、Table7 に下図の様にSPI通信のデフォルトのピン配置が掲載されていました。
これを見ると、上図のHSPIの段にピン配置があり、MISO、MOSI、CLK は前回の記事と同じですが、CS ( Chip Select )ピンがGPIO #15 でした。
ESP8266ボードのライブラリ SD.h を使用する場合、これに習った方が良いと思いましたので、SD の CS ピンは #15 にしました。
結果、下図の様に変えました。
Adafruit の OLED ボードでは、micro SD カードと OLED の MOSI、MISO、SCK ピンは共通ですが、CS ( Chip Select )ピンは別々です。
OLED のCSピンは OC 、SDカードのCSピンはSC になります。
つまり、OLEDデバイスと通信するときにはOCをLOWレベルにして他のデバイスのCSピンをHIGHレベルにし、SDカードと通信するときにはSCをLOWレベルにして、他のデバイスをHIGHレベルにすれば、MOSI, MISO, SCKピンは共通でも通信できるわけです。
3.micro SD カードにフォントファイルやデータファイルをセットする
micro SD カードには予めフォントファイルをパソコンからコピーしておかねばなりません。micro SD カードはTDKのものを購入すると、下図のように標準サイズのSDカードアダプターが付属しているので、それに下図の向きで差し込み、パソコンのSDカードスロットに挿入します。
パソコンにSDカードスロットが無い場合は、別途SDカードリーダーを購入してください。
パソコンがSDカードを認識するまで少々待ち、認識したら念のためプロパティでFATでフォーマットされているか確認してください。されていなければ、SDHCカードならばFAT32でフォーマットします。
次に、そのSDカードのルートに font という名前のフォルダを新規に作成します。
そのfontフォルダの中に以下の3つのファイルをコピーします。
Utf8Sjis.tbl (UTF-8文字コードをShift_JISに変換するテーブルファイル)
shnmk16.bdf (フリーの日本語漢字の全角フォント、東雲フォント)
shnm8x16r.bdf (半角の東雲フォント)
Utf8Sjis ファイルは当方自作のテーブルファイルです。
このファイルについては以下のページを参照してダウンロードしてください。
WROOMでUTF-8文字コードをShift_JIS変換して日本語漢字表示(半角カナ対応)してみました
東雲フォントについては以下のページを参照してダウンロードしてください。
OLED ( 有機EL ) SSD1306 に16×16ドットのフリーの日本語漢字、東雲フォントを表示させてみました
上記の3つのファイルをSDカードのfontフォルダにコピーしたら、忘れがちな大事なことをしなければいけません。
Arduino IDE のESP8266ボードのSD.hライブラリでは、SDカード内のファイル名(拡張子を除く)は半角8文字以内でなければ動作しません。
ですから、以下のファイル名を変更してください。
shnm8x16r.bdf → shnm8x16.bdf
“r” という文字だけ削除して名前を変更すればOKです。
これを忘れてしまうと、延々とエラーが続き、ハマリにハマって、とんでもない時間を過ごすことになります。(私はそうなりました・・・)
4.micro SD カードをOLEDモジュールのスロットにセットする
以上の接続ができたら、電源を入れる前(USBケーブルを挿す前)に、microSD カードをOLEDモジュールのスロットに挿入してください。
下図の様な向きで、カチッと音がするまで挿入してください。
キッチリ挿入するとこうなります。
5.Arduino IDE を設定する
2016/8/17現在では、Arduino IDE のバージョンは1.6.10 で問題なく動作しています。
このArduino IDE に ESP8266 ボードをインストールしておきます。
ESP8266ボードは現在は2.3.0です。
このボードのインストールとIDEの設定は以下の記事を参照してください。
Arduino IDE に Staging(Stable)版ESP8266 ボードをインストールする方法
6.Arduino IDE にTimeLibライブラリをインストールする
まず、Arduino IDE 標準のTimeLibライブラリをインストールします。
Arduino.ccページのこちらにあります。→http://playground.arduino.cc/code/time
このページを開いて下図のようなところをクリックすると
下図のように表示されますので、Githubリンクをクリックしてください。
そうしたら下図のようなところをクリックするとZIPファイルのダウンロードが開始されます。
次にダウンロードされたZIPファイルをArduino IDE にインストールする方法は以下のページを参照してください。
GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )
7.Arduino IDE に自作ライブラリをインストールする
当方で自作した、以下の4つのライブラリをインストールします。
●SD_UTF8toSJIS (Beta ver1.0.1)
UTF-8 から Shift_JISへ変換するライブラリ。
今回新たに作りました。
ダウンロードはGitHubのこちらのページ
●SD_ShinonomeFONTread (Beta ver1.0.1)
日本語漢字の東雲フォントをSDカードから読み込むライブラリ。
今回新たに作りました。
ダウンロードはGitHubのこちらのページ
●OLED_SSD1351 (Beta ver1.40)
Adafruit OLED SSD1351 用の自作ライブラリ
ダウンロードはGitHubのこちらのページ
※beta 1.53 では動きませんのでご注意ください。1.40は再アップしました
●BME280_SPI (Beta ver1.0)
スイッチサイエンス BME280 モジュールをSPI制御する自作ライブラリ
ダウンロードはGitHubのこちらのページ
ダウンロードしたZIPファイルのIDEへのインストール方法は以下のページを参照してください。
GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )
コメント