날짜 : 2021.01.28 목요일 / 제목 : LCD 추가 성공 ! / 날씨 : ⛅🌀
안녕하세요 ! 전자과_공대생입니다 ~ (⌐■_■)
오늘 하늘은 이쁜데 바람이 많이 부네요 ㅠㅠ
올라오는데 날라갈뻔 했습니다 ㅎㅎ
서울은 눈이 온다던데 저희는 안 오네요 ㅎ,,,저도 눈 좋아하는데,,,
잡담 그만하고 바로 미니 프로젝트에 LCD를 추가해보도록 하겠습니다 !
LCD는 전에 시도하다가 오류가 발생해서 일단 스탑해둔 부품입니다.
하지만 중간점검한 결과 LCD 코딩을 다시 찾아서 사용해보자는 의견이 나왔습니다.
따라서 다시 구글링을 하여 LCD를 시도해볼 생각입니다 !
우선 근로를 다녀와서 진행하도록 하겠습니다 !
{근로 중....}
근로를 마치고 왔습니다 !
오늘 근로는 약간 하드코어였네요..
힘이 많이 쓰면서 일해서 체력이 별로 안 남았습니다 ㅠ
하지만 그래도 할 건 해야죠 !
한번 구글링을 통하여 새로운 LCD 코딩을 찾아보겠습니다 ~
{찾는 중....}
드디어 찾았습니다 !!!
www.youtube.com/watch?v=bWmVzWO0JqU
위에 영상을 참고하면서 했습니다 !
아래 영상을 참고하여 파일들을 다운받고 참고 글만 사용하였습니다 !
import I2C_LCD_driver
mylcd = I2C_LCD_driver.lcd()
mylcd.lcd_clear()
mylcd.lcd_display_string("HUM:%d%s"%(hum, strPer), 1)
mylcd.lcd_display_string("STATUS:%s"%strCur, 2)
코드만 추가했습니다 !
이렇게 보면 헷갈리죠??ㅎㅎ
그래서 일단 LCD 추가를 시킨 최종본 코딩을 보여드리겠습니다 !
import RPi.GPIO as GPIO
import I2C_LCD_driver
import time
import spidev
IN1 = 5
IN2 = 6
R = 16
G = 20
B = 21
#set %
HUM_THRESHOLD=20
#water sensor output first value
HUM_MAX=0
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(R, GPIO.OUT)
GPIO.setup(G, GPIO.OUT)
GPIO.setup(B, GPIO.OUT)
#motor driver first setting
spi=spidev.SpiDev()
#open(bus, device) / my raspberrypi server opens (0,0), (0,1)
spi.open(0,0)
#motor speed
spi.max_speed_hz=500000
#get adc value function
def read_spi_adc(adcChannel):
adcValue = 0
#xfer2([value])
buff = spi.xfer2([1,(8+adcChannel)<<4,0])
adcValue = ((buff[1]&3)<<8)+buff[2]
return adcValue
#map function = convert the percentage (%)
def map(value, min_adc, max_adc, min_hum, max_hum):
adc_range = max_adc-min_adc
hum_range = max_hum-min_hum
scale_factor = float(adc_range)/float(hum_range)
return min_hum+((value-min_adc)/scale_factor)
try:
strPer="%"
mylcd = I2C_LCD_driver.lcd()
adcChannel=0
strCur=""
while True:
adcValue = read_spi_adc(adcChannel)
#convert imported data to %
#high humidity = low value
#so 100-value then, high humidity = high value
hum = 100-int(map(adcValue,HUM_MAX,1023,0,100))
if hum < HUM_THRESHOLD:
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(R, GPIO.HIGH)
GPIO.output(G, GPIO.LOW)
GPIO.output(B, GPIO.LOW)
print 'yes'
strCur="Warning"
else:
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(R, GPIO.LOW)
GPIO.output(G, GPIO.HIGH)
GPIO.output(B, GPIO.LOW)
print 'no'
strCur="Normal"
mylcd.lcd_clear()
mylcd.lcd_display_string("HUM:%d%s"%(hum, strPer), 1)
mylcd.lcd_display_string("STATUS:%s"%strCur, 2)
time.sleep(0.5)
finally:
GPIO.cleanup()
spi.close()
제가 업로드 해드린 영상을 따라하다보면 라이브러리 문제때문에 막힐 수도 있습니다.
제가 만든 miniproject.py(위에 코딩)은 home에 있지만 영상에서 다운받은 기본 자료는 LCD1602_i2c_Python 파일에 저장되어있습니다 !
더군다나 LCD_i2c_Python 파일 안에 있는 파일을 삭제, 수정, 추가가 전혀 안되도록 제한이 걸려있습니다.
따라서 실행을 시키기 위해서는 두가지의 방법이 있습니다 !
우선 첫 번째 방법은 sudo를 사용하여 lcd.py 내용을 위에 코딩으로 수정하는 것입니다 !
sudo가 만능키 인것을 다들 알고계시죠??ㅎㅎ
sudo는 모든 것을 할 수 있는 권한을 가지고 있습니다.
따라서 sudo nano lcd.py을 하여 내용을 수정하면 됩니다.
두 번째 방법은 강제로 home에 있던 miniproject.py를 LCD1602_i2c_Python 안에 넣는 것입니다 !
사실 이 방법은 같이 공부하는 형이 해주셨습니다 !
만약 이 방법을 따라하고싶으시다면 아래 링크에서 도움을 받으시길 바랍니다 !
이제 동작 영상을 보여드리도록 하겠습니다 !
LCD, RGB LED, 모터 모두 잘 돌아가는 것을 확인할 수 있습니다 !
제가 설정해둔 20%가 넘으면 초록 불과 Normal 멘트가 뜨고 모터가 스탑합니다.
반대로 20% 밑으로 떨어지면 빨간 불과 Warning 멘트가 뜨고 모터가 작동합니다.
오늘의 미니 프로젝트 글은 여기까지입니다 !
LCD 작동에 성공하면서 하루를 마무리해서 매우 기분이 좋네요 ㅎㅎ
내일은 한번 스위치를 이용해서 전원 버튼을 만들어보겠습니다 !
같이 공부하는 형 말로는 쉽지 않을 거라고 얘기해줬습니다.
하지만 그래도 도전해봐야하겠습니다 !
그럼 다음 미니 프로젝트 글로 찾아뵙겠습니다 !
이상 전자과_공대생이었습니다 ~ ! (⌐■_■)
감사합니다 !
라즈베리파이 미니 프로젝트 Final ! [포맷과 재설정 및 마무리 !] (0) | 2021.01.31 |
---|---|
라즈베리파이 미니 프로젝트 12탄 ! [기능 추가와 초기화..] (0) | 2021.01.29 |
라즈베리파이 미니 프로젝트 10탄 ! [미니 프로젝트 중간점검 !] (0) | 2021.01.27 |
라즈베리파이 미니 프로젝트 9탄 ! [구글에도 없는 오류 해결법..] (0) | 2021.01.23 |
라즈베리파이 미니 프로젝트 8탄 ! [오류 잡기 성공 ! + 새로운 기능, 오류] (0) | 2021.01.22 |