ストロベリーリナックスさんで販売しているI2C液晶にArduinoから出力してみる実験です。
注意!! I2C液晶は2.7-3.6Vでの動作が保証されています。Arduinoの5V出力での使用は仕様外です。
実験の様子です。
出力の様子です。
ArduinoにはWireというi2cライブラリが用意されているので、i2cの部分は簡単に実現できます。ストロベリーリナックスさんで公開しているソースの一部をArduinoに移植しました。移植していないのはアイコンの表示です。
ArduinoのメニューTools→Copy as HTMLを使うと上のようなsketch風のソースを貼ることができます。
5Vなので、コントラストはむちゃくちゃ濃いです。コントラストは0から63まで指定できますが、7くらいでちょうどでした。
便利なライブラリがあるおかげで結構短く書けたと思います。
ライブラリにまとめることができれば、かっこいいんですが、ライブラリの作り方が分かっていません。
注意!! I2C液晶は2.7-3.6Vでの動作が保証されています。Arduinoの5V出力での使用は仕様外です。
実験の様子です。
出力の様子です。
ArduinoにはWireというi2cライブラリが用意されているので、i2cの部分は簡単に実現できます。ストロベリーリナックスさんで公開しているソースの一部をArduinoに移植しました。移植していないのはアイコンの表示です。
#include <Wire.h> // Arduino i2c-lcd // Dig 2 ----- 1pin rst (pull-up 10k ohm) // Ana 5 ----- 2pin scl (pull-up 2.2k ohm) // Ana 4 ----- 3pin sda (pull-up 2.2k ohm) // GND ------- 4pin // 5V -------- 5pin int ledPin = 13; int resetPin = 2; int sdaPin = 18; // analog pin 4 int sclPin = 19; // analog pin 5 int i2cadr = 0x3e; byte contrast = 7; // 0-63 5V系だとかなり少なくする void lcd_cmd(byte x) { Wire.beginTransmission(i2cadr); Wire.send(0x00); Wire.send(x); Wire.endTransmission(); } void lcd_data(byte x) { Wire.beginTransmission(i2cadr); Wire.send(0x40); Wire.send(x); Wire.endTransmission(); } void lcd_puts(const char *s) { while(*s) lcd_data(*s++); } void lcd_init() { // reset delay(500); pinMode(resetPin, OUTPUT); digitalWrite(resetPin, LOW); delay(1); digitalWrite(resetPin, HIGH); delay(10); // LCD initialize delay(40); Wire.begin(); lcd_cmd(0x38); // function set lcd_cmd(0x39); // function set lcd_cmd(0x14); // interval osc lcd_cmd(0x70 | (contrast & 15)); // contrast low lcd_cmd(0x5c | (contrast >> 4 & 3)); // contrast high / icon / power lcd_cmd(0x6c); // follower control delay(300); lcd_cmd(0x38); // function set lcd_cmd(0x0c); // display on lcd_cmd(0x01); // clear display delay(2); } void lcd_move(byte pos){ lcd_cmd(0x80 | pos); } void setup() { lcd_init(); lcd_puts("Hello, Arduino!"); lcd_move(0x40); lcd_puts("i2c LCD module"); pinMode(ledPin, OUTPUT); // Lチカ } void loop() { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(500); }
ArduinoのメニューTools→Copy as HTMLを使うと上のようなsketch風のソースを貼ることができます。
5Vなので、コントラストはむちゃくちゃ濃いです。コントラストは0から63まで指定できますが、7くらいでちょうどでした。
便利なライブラリがあるおかげで結構短く書けたと思います。
ライブラリにまとめることができれば、かっこいいんですが、ライブラリの作り方が分かっていません。
こちらのBlogにたどり着きました。
始めたばかりですので、上のスケッチは非常に参考になりました。
これから「どこをどういじればどうなるか?」を試したいと思います。
ありがとうございました!
nancha.mine.nu
お役に立てたようでよかったです。
他人の書いたものを試したりいじったりするのが一番勉強になりますね。
これからもよろしくお願いします。
ストロベリーリナックスの小さい方のI2Cのモジュールを使ってみたのですが、同じST7032iなので参考にさせてもらいました。ありがとうございました。
MIDAS - MCCOG21605D6W-SPTLYI
とありますが、5V環境で使うのならば、倍圧回路を無効にすれば良いのでは?
要するに、0x5cの代わりに0x58を入れれば改善するのでは?