辛淑玉の正体
チョイと変なものに頭を突っ込んだと思って後悔しています。
まぁ無線チップで550円てのに引っかかったんだけど、これが相当面倒で、まぁ何でこうなんだ?と思っています。
先ずもって、ソフトベタ写しでやっている人には驚きでしょうがLCD表示器AQM0802A-RN-GBWやAE-AQM1602AやAQM1602Y-RN-GBWはI2Cだけでなく、4ビット、8ビット命令で動くようになっています。
さて、それもそうなんですが、ESP8266は出来損ないチップで、電源回路の逆流する酷い構造です。
お陰でIOの0,2,15,16が使用不能です。
これらのピンがLOWポジションになると全体の電圧が下がり「リセット状態」になります。
通常IOと電源回路、送受信回路は別々の接続をするもので、ロジックと送受信は別々にしたり、各々のポートの電源が干渉しないように作るもので、それからすれば「学生が作った」程度のものです。
また、コードを追うと、わからないのが一杯あり、それも困っています。下図を御覧下さい。
これはESP-8266のピン配置図です。
これでは仕様不可能なピンにI2CやSPIの通信線が入っています。
これは多分、変えているのでしょう…と思ったけど、その前提が書かれていない。
大体Wire.begin()がESP8266 (ESP-WROOM-02) で I2C LCD 8桁2行 を制御する。
(https://qiita.com/exabugs/items/9d1b66aa1d22805afbc8)
に書かれております。
つまりWire.begin()=Wire.begin(4,5)のデフォルトなんですね。
さて、これが何処まで使えるのか?と言うとmacsbug(Just another WordPress.com site)の
「ESP8266 と I2C」(https://macsbug.wordpress.com/2015/10/23/esp8266-%E3%81%A8-i2c/)
に以下の表があります。
つまり、残っているポートは使えると言う事です。
また起動時・初期設定もちょっと分かり難いものです。
殆ど良い事は良いのですが、
トラ技のサンプルでは
Wire.write(0x39); // 拡張モード?
Wire.write(0x11); // バイアス選択1/4内部OSCfreq調整?
Wire.write(0x70); // コントラスト濃度下位ビット0000
Wire.write(0x56); // ICON電源オフ/昇圧on/コントラスト(上位バイト)10
Wire.write(0x6C); // 内部フォロワonV0発生器増幅比率100
Wire.write(0x38); // 通常モード?
Wire.write(0x0C); // ディスプレイ全体onカーソルオフ点滅オフ
ですが、ST-7032では
Wire.write(0x38); // 通常モード?
Wire.write(0x39); // 拡張モード?
Wire.write(0x11); // バイアス選択1/4内部OSCfreq調整?
Wire.write(0x70); // コントラスト濃度下位ビット0000
Wire.write(0x56); // ICON電源オフ/昇圧on/コントラスト(上位バイト)10
Wire.write(0x6C); // 内部フォロワonV0発生器増幅比率100
Wire.write(0x0C); // ディスプレイ全体onカーソルオフ点滅オフ
となっています。
問題は0x14と言うコマンドも乗っており、バイアス設定にも文字の右左を決めるコマンドとも同じになります。
この場合0x14のコマンドの出し方が重要なのでしょうが、その辺が分かりません。
その後のオペレーションは分かりますが、初期化には、色々分からない点があります。
上位ビットがコントロールコードであり、下位ビットが設定値なのでしょうが、その辺が分かりません。
まぁLCDやI2CのライブラリはGitでも3個ほど見ましたので、どれか気に合う奴を使うのも良いでしょう。
何れにしてもESP8266は色々と不完全です。