<HiLetgo 1602 LCD>


格安の1602 LCD とIIC/I2C/TWI/SPI モジュールを購入しました。
1.HiLetgo DC 5V HD44780 1602 LCD ディスプレイモジュール 16×2キャラクタ LCDブルーブラックライト 
2.HiLetgo IIC/I2C/TWI/SPI シリアル インタフェース ボード モジュール Arduino 1602 LCD ディスプレイ 

簡易包装で、1つの取説もない本体だけが入っていました。                       左が1602 LCD 右がIIC/I2C/TWI/SPI モジュール
 

上が1602 LCD 下がIIC/I2C/TWI/SPI モジュール                                それぞれの裏面
 

たまたま、アマゾンを覗いていてこの格安1602 LCD(送料込み190円)を知り購入しました。
また、このLCD用のIIC/I2C/TWI/SPI シリアル インタフェース ボード モジュールも価格の安さ(送料込み190円)に
思わず購入しました。Raspberry Piのi2cで動くのでは???と思い(ーー;)

どちらも、中国製(HiLetgo店)のようです、納期は注文から7〜15日ですが今回は8日でポスト投函されていました。
ネットをぐぐってもほとんど情報がありませんので使えるかどうかは自信もありません(~o~)

取り合えず1602 LCDの動作確認をして見ます。本体のピン(16本)を見ると、VSS,VDD,VOなど、過去購入した1つのSD1602 HUOB-XAと
同じです。ピン配置は少し違いますが・・・
それで、このSD1602 HUOB-XAで文字表示させる回路基板(PIC使用)を製作していたので、この回路基板に取り付けてみました。

16ピンソケットを取り付けます。                                              16ピンソケットを取り付け後                                               
 

バックライト無し                                                            バックライト有り(2.4K)
 

上記画像のとおり、無事表示しました。バックライトは、付けたほうが文字は断然見やすいので付けたほうがいいですね。

今度は、IIC/I2C/TWI/SPI モジュールを使ってRaspberry Piのi2cで表示出来るかやってみます。

このIIC/I2C/TWI/SPI モジュールのピン名称が書かれていないので???そこで、ネットをぐぐるとやっとこさで
ここでピン名称が分かりました。

何と、1602 LCDと同じです。これならIIC/I2C/TWI/SPI モジュールを1602 LCDに差込めば簡単に使えそうです。


ピンNo  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
------------------------------------------------------
名      G  V  V  R  R  C  D  D  D  D  D  D  D  D  A  K
称      N  C  O  S  W  S  B  B  B  B  B  B  B  B
        D  C              0  1  2  3  4  5  6  7

しかし差込んで半田付けすると、万が一取り外さなければならない時に困るので
下の画像のようにワイヤーで接続しました。


Raspberry Piと接続します。(LCDは5Vに、IIC/I2C/TWI/SPI モジュールは3.3Vに)


i2cdetect -y 1 アドレス(3f)が確認出来ました。


期待をこめて、コマンドラインから下を入力するが、表示しない???(ーー;)
i2cset -y 1 0x3f 0x00 0x38 0x39 0x14 0x70 0x56 0x6c i #初期化1/2
i2cset -y 1 0x3f 0x00 0x38 0x0C 0x01 i                #初期化2/2
i2cset -y 1 0x3f 0x40 0x41 i                          #Aの表示

i2csetの記述はAQM0802でOKだったが、このIIC/I2C/TWI/SPI モジュールと1602 LCDでは
出来ないのか・・・???ジャンク箱行きか???(ーー;)

ここで、このIIC/I2C/TWI/SPI モジュールを1602 LCDのピンに差込んで眺めていたら
この商品をセットで、ヤフーで違う商品名で購入していることを思い出しました。

1年以上前ですが、Raspberry PiでLCDを使いたくて購入したのですが使い方・手続きが
私にはハードルが高かったので(別途、LCD制御用ライブラリがいる、その他、など)
取説どおりにして遊んだ後パーツ箱の隅に放置していたのを、すっかり忘れていました(ーー;)。

 

当時の記憶を元に、下画像のように文字を表示させることが出来ました。


<方法>

*pythonプログラムを使います。(python3で確認)
*i2c_lib.pyとlcddriver.pyをダウン(テキストコピー)し、/home/piに置きます。
 i2c_lib.pyとlcddriver.pyはこのサイトです。

i2c_lib.py
-----------------------------------------------------------
import smbus
from time import *

class i2c_device:
   def __init__(self, addr, port=1):
      self.addr = addr
      self.bus = smbus.SMBus(port)

# Write a single command
   def write_cmd(self, cmd):
      self.bus.write_byte(self.addr, cmd)
      sleep(0.0001)

# Write a command and argument
   def write_cmd_arg(self, cmd, data):
      self.bus.write_byte_data(self.addr, cmd, data)
      sleep(0.0001)

# Write a block of data
   def write_block_data(self, cmd, data):
      self.bus.write_block_data(self.addr, cmd, data)
      sleep(0.0001)

# Read a single byte
   def read(self):
      return self.bus.read_byte(self.addr)

# Read
   def read_data(self, cmd):
      return self.bus.read_byte_data(self.addr, cmd)

# Read a block of data
   def read_block_data(self, cmd):
      return self.bus.read_block_data(self.addr, cmd)
-----------------------------------------------------------

lcddriver.py
---------------------------------------------------------------------
import i2c_lib
from time import *

# LCD Address
ADDRESS = 0x3f                                                       #このアドレスをi2cdetect -y 1で確認して書き換える

# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80

# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00

# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00

# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00

# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00

En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit

class lcd:
   #initializes objects and lcd
   def __init__(self):
      self.lcd_device = i2c_lib.i2c_device(ADDRESS)

      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x02)

      self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
      self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
      sleep(0.2)

   # clocks EN to latch command
   def lcd_strobe(self, data):
      self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
      sleep(.0005)
      self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
      sleep(.0001)

   def lcd_write_four_bits(self, data):
      self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
      self.lcd_strobe(data)

   # write a command to lcd
   def lcd_write(self, cmd, mode=0):
      self.lcd_write_four_bits(mode | (cmd & 0xF0))
      self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))         #ここの<<を半角にする

   # put string function
   def lcd_display_string(self, string, line):
      if line == 1:
         self.lcd_write(0x80)
      if line == 2:
         self.lcd_write(0xC0)
      if line == 3:
         self.lcd_write(0x94)
      if line == 4:
         self.lcd_write(0xD4)

      for char in string:
         self.lcd_write(ord(char), Rs)

   # clear lcd and set to home
   def lcd_clear(self):
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_RETURNHOME)
---------------------------------------------------------------------

プログラムの例として1行目に、HiLetgo DC 5V 2行目にHD44780 1602 LCDを表示させる。
右画像がプログラム例で、dsp1.pyのファイル名です。実行すれば、LCDに表示されます。
 

次にターミナルから実行するには下の画像のようにします。(ログインはroot)


また、左画像のように#!/usr/bin/pythonを記述すれば右画像のようにpythonの記述が省略行出来ます。