Arduino Nano I2C LCD 128x64 ST7567S

I'm trying out 128x64 dot matrix LCD, I'm thinking to use 128x64 LCD as remote control menu instead of 16x2 character LCD, bigger LCD is nicer 😁 and can display more text row πŸ˜‰.

By the way, I killed my 16x2 LCD 😑. I wanted to reduce the module total height. The I2C (PCF8574T) module is soldered to the LCD module via 16 pins and its thicker than I want. I was trying to separate the module but it was more difficult than expected. The hot air broke the LCD 😭 while the soldered pin is not even melt yet. I probably better if I use Dremel tool to mechanically cut the connection then use solder to pull the pin one by one. Conclusion get those unsolder part instead, save you the trouble, you have more flexibility where you want to put the module.

Anyway, get my self 128x64 monochrome dot matrix LCD ST7567S with I2C interface. There was a sale at Shopee, I bought it for S$3.89, normal price at other shop S$5.55 😍. The 16x2 LCD is S$2.87, only about S$1 different.

Objective: 

  1. Print some text on 128x64 LCD
  2. Draw something
What you need:
  1. Arduino Nano
  2. I2C 128x64 LCD with ST7567S (S$3.89)
  3. 2x 4.7K ohm resistor

Connect Arduino Nano to 128x64 LCD as sheen below


I do read people complaining on the net that it does not work. In fact mine also did not work initially and the recommendation was to remove D1 and D2. Some hobbyist found out that the diode reduce the rise time slew rate and effecting the I2C communication.

I have different approach, the D1 and D2 is used to clamp SDA, SCL voltage to 3.3V within the LCD driver input operating voltage. The ST7567S is not 5V input tolerance. Removing the diode might kill the LCD driver. Instead, I'm using 4.7K ohm pull up resistor which in my opinion better since some people may not have the necessary equipment to remove component from PCBA

I use the "lcd_st7567s.h" library (https://github.com/luetee/ST7567S_128X64_I2C), below is simple code to write something to LCD:

    #include "lcd_st7567s.h"

    lcd_st7567s LCD;

    void setup() {
        LCD.Init();  
    }

    void loop() {

        LCD.Cursor(0, 0);
        LCD.Display("ABCDEFGHIJKLMNOPQR");
        LCD.Cursor(0, 1);
        LCD.Display("123456789+-*/<>=$@");
        LCD.Cursor(0, 2);
        LCD.Display("%^&(){}:;'|?,.~\\[]");
        LCD.Cursor(0, 3);
        LCD.Display("ABCDEFGHIJKLMNOPQR");
        LCD.Cursor(0, 4);
        LCD.Display("123456789+-*/<>=$@");
        LCD.Cursor(0, 5);
        LCD.Display("%^&(){}:;'|?,.~\\[]");
        LCD.Cursor(0, 6);
        LCD.Display("ABCDEFGHIJKLMNOPQR");
        LCD.Cursor(0, 7);
        LCD.Display("123456789+-*/<>=$@");
        delay(5000);
        LCD.Clear(false);

    }

Comments

Popular posts from this blog

Building RC Plane Under 250 grams (Part 1)

Arduino Nano clone (fake FT232RL)

A2212/5T 2450KV