오드로이드H2 LCD 모듈 사용하기

category 서버/리눅스 서버 2018.11.30 00:11

안녕하세요? 


공식 가이드에 오류가 조금 있어서 헤맸습니다. 라즈베리파이 같은 싱글보드에서만 해보다가.. 


그럼.. 시작합니다.


공식 가이드는 요기  ㅎㅎ


https://wiki.odroid.com/odroid-h2/application_note/i2c_20x4_lcd





1. 모듈 활성화


자 그럼 일단 i2c-dev 모듈이 기본적으로 활성화가 안되어 있기 때문에 아래의 명령으로 활성화 합니다.


모듈 활성화가 되어 있지 않은 경우 /dev/i2c-* 가 아예 잡히지 않습니다.


root@djjproject:~# modprobe i2c-dev

root@djjproject:~# nano /etc/modules


# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
i2c-i801





2. 결선 정보


오드로이드 홈페이지에서 퍼왔습니다.






3. 장치 확인


오드로이드 가이드에는 5번과 6번 둘중에 하나라고 했지만.. 이게 저는 2번으로 되어 있습니다. ㅎㅎ


root@djjproject:~# ls /dev | grep i2c

i2c-0

i2c-1

i2c-2

i2c-3

i2c-4

i2c-5

i2c-6

i2c-7

i2c-8


# 예제 코드가 파이썬입니다. 툴을 같이 설치합니다.
root@djjproject:~# apt install i2c-tools git python3-dev libi2c-dev python3-smbus


디텍트 작업을 돌려봅니다. 5번 6번이 아니라 2번임이 들통났습니다.


root@djjproject:~# i2cdetect -y -r 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 2

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 3

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 4

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 5

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 6

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# i2cdetect -y -r 7

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --                         

root@djjproject:~# 





4. 샘플 코드 받고 돌려보자!


root@djjproject:~# git clone https://github.com/hardkernel/i2c_20x4_lcd.git

fatal: destination path 'i2c_20x4_lcd' already exists and is not an empty directory.



# i2c 번호 수정

root@djjproject:~/i2c_20x4_lcd# nano lcddriver.py


import i2c_lib

from time import sleep


# LCD Address

#ADDRESS = 0x3F

ADDRESS = 0x27


# I2C bus

BUS = 2


# 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



# 샘플 코드 실행

root@djjproject:~/i2c_20x4_lcd# python3 hello_world.py 





5. 사진



10분 코딩 결과물입니다. 좀 이뻐지면 깃허브에 ㅎㅎㅎ


import lcddriver as lcd

import os

import psutil as ps

from time import time

from time import sleep

from datetime import datetime


def get_bytes(t, iface='enp2s0'):

    with open('/sys/class/net/' + iface + '/statistics/' + t + '_bytes', 'r') as f:

        data = f.read();

        return int(data)



lcd = lcd.lcd()


#lcd.display_string("11111111111111111111222222222222222222223333333333333333333344444444444444444444", 1)


hostname=str(os.popen('hostname').readline())[:-1]




while True:

#  cpuUsage=str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))

#  tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])

#  percentMem=str(round(used_m/tot_m))



  lcd.display_string("DJJPROJECT ODROID-H2", 1)

  lcd.display_string("",2)

  lcd.display_string("CPU:"+str(ps.cpu_percent())+"%"+"  "+"MEM:"+str(ps.virtual_memory()[2])+"%", 2)


#  dateString = datetime.now().strftime('%b %d %y')

#  timeString = datetime.now().strftime('%H:%M:%S')



  tx1 = get_bytes('tx')

  rx1 = get_bytes('rx')


  sleep(1)


  tx2 = get_bytes('tx')

  rx2 = get_bytes('rx')


  tx_speed = round((tx2 - tx1)/1000000.0)

  rx_speed = round((rx2 - rx1)/1000000.0)


  lcd.display_string("TX: "+str(tx_speed*8).zfill(3)+" RX: "+str(rx_speed*8).zfill(3)+" mbps", 3)

  lcd.display_string("TEMP:"+os.popen('sensors | grep "temp1:" | cut -d+ -f2 | cut -c1-2').read()[:-1]+"C", 4)

  sleep(1)



영상으로 봅시다!!





댓글을 달아 주세요