秋月電子通商の BME680使用 温湿度・気圧・ガスセンサモジュールキットで計測した温度・湿度・気圧をaitendoの 3.5インチ液晶モジュール(320x480)[M035C9486LB3] に表示させました。この液晶モジュールはタッチスクリーンはなく少し高価です。しかし、aitendoの3.2インチTFT液晶モジュール[SX032QVGA008] より表示画像が綺麗で視野角も広いです。
ケースはタカチ電機工業(TAKACHI)のSS-125W(W80×H32×D125)です。
回路図を以下に示します。
電源電圧は3.3V(ACアダプター)です。PIC32MX270F256B-50I/SPのクロックは20MHzの水晶発振器(3.3Vで働くもの)です。PICから液晶モジュールへのデータ転送はパラレル・マスタポート(PMP)で行います(8ビットパラレルデータ、1ビットアドレス)。PICの10番ピンはPMPのPMA0(アドレス指定ピン)として使用するので、水晶発振子は使用できません。
注意:PIC32MX270F256B-50I/SPはメモリ容量が少ないので液晶画面全体を一気に描画することは不可能です。特に、マイクロチップ社のグラフィック・ライブラリー(Legato)を使用するには力不足です。ただ、今回のように英数字を表示するだけなら、DIPパッケージのこのPICで十分です。
BME680の通信インターフェースはI2Cです。PICのI2C用のSCLピンとSDAピンは、それぞれ17番ピンと18番ピンですが、17番ピンと18番ピンは、液晶モジュール用に、それぞれPMPのPMD4ピンとPMD3ピンとしても使用する必要があります。そこで、アナログスイッチ用のIC(TC74HC4066AP:双方向スイッチを4つ内蔵)で、17番ピンと18番ピンをI2C用(BME680用)にするかPMP用(液晶モジュール用)にするかを選択します。PICの14番ピンをH、12番ピンをLにするとI2C用になり、14番ピンをL、12番ピンをHにするとPMP用になります。
液晶モジュールを除く回路基板の表と裏の写真を以下に示します。液晶モジュールとの接続は、2列(8ピン/列)と1列5ピンのピンヘッダーで行っています。なお、写真中の数字(1、8、15、19)は接続する液晶モジュールのピン番号を示唆しています。
次図は、BME680と液晶モジュールとの接続のためにHarmonyで設定したPIC32MX270F256B-50I/SPのピン配置です。
また以下の表は、PIC32MX270F256B-50I/SPと液晶モジュールとの接続を示しています。なお、液晶モジュールの信号モードはデフォルト設定のままでパラレル8ビットモード、そして電源電圧もデフォルト設定のままで3.3Vです。
PIC32MX270F256B-50I/SP | 液晶M035C9486LB3 | 備考 |
PMD0(PIN#4) | DB0(PIN#21) | |
PMD1(PIN#5) | DB1(PIN#22) | |
PMD2(PIN#6) | DB2(PIN#23) | |
PMD3(PIN# 18) | DB3(PIN#24) | 4066を経由 |
PMD4(PIN# 17) | DB4(PIN#25) | 4066を経由 |
PMD5(PIN#16) | DB5(PIN#26) | |
PMD6(PIN#3) | DB6(PIN#27) | |
PMD7(PIN#2) | DB7(PIN#28) | |
PMA0(PIN#10) | RS(PIN#4) | |
PMWR(PIN#7) | WR(PIN#5) | |
PMRD(PIN#24) | RD(PIN#6) | |
CS(PIN#26)GPIO_OUT | CS(PIN#15) | |
RST(PIN#11)GPIO_OUT | RESET(PIN#17) | |
GND(PIN#1) | 回路アースへ接続 | |
VCC_IN(PIN#2) | 3.3V電源に接続 | |
LED_A(PIN#19) | 3.3V電源に接続 |
1.グラフィック・ライブラリーであるUTFTを使います。M035C9486LB3の液晶コントローラチップはILI9486Lです。UTFTはこのチップをサポートしています。UTFTはRinky-Dink Electronics社が公開しているグラフィック・ライブラリーです。今回はファームウェアに組み込んであるのでダウンロードの必要はありませんが、興味があればUTFT.zipをダウンロードします。
2.もしMHC環境を整えていなければ、整えておきます。
3.PICに書き込むファームウェアはBME680_M035.zipです。このzipファイルを解凍するとフォルダーが出てきますので、そのフォルダーをまるごと、必ずHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。
4.ファームウェアをPICに書き込み、実行します。1秒ごとに、温度・湿度・気圧の値が液晶画面に繰り返し表示されます。繰り返しの時間間隔を変えるにはapp.cの386行目の CORETIMER_DelayMs(1000)関数の引数(msec単位)を変えます。
なお、使用したフォントのデータはファイルDefaultFonts.cに格納してあります。元々のデータはUTFT FontsにあるSevenSegNumFontPlusPlusMinusUserとGrotesk24x48です。ただし、前者の数字 1 はその位置が右寄りなので、中央付近になるように編集しました。また、℃ の ° を表すために後者の英小文字oを使ったのですが、縦長なので丸に近づくように編集しました。
注意:BME680の各レジスタ値は符号付き整数か符号無し整数です。どのレジスタ値が符号付き整数で、どのレジスタ値が符号無し整数なのかについて、マニアルには明記されていないようです。そこで、Bosch社がGithubにて提供しているファームウェアを参照して符号付きか符号無しかを判断しました。この判断は間違っているかも知れませんので注意願います。