Raspberry Pi로 작업하는 동안의 주요 문제는 일부 SSH 또는 파일 전송 클라이언트를 사용하여 로그인하는 데 필요한 Raspberry Pi의 IP 주소를 아는 것입니다. 그래서 오늘 우리는 네트워크에서 Raspberry Pi의 로컬 IP 주소를 찾고 16x2 LCD 화면에 표시하는 몇 가지 Python 스크립트를 공유 합니다. 또한 Crontab에 스크립트를 추가하여 10 분마다 실행할 수 있고 매번 업데이트 된 IP 주소를 갖게됩니다.
16x2 LCD와 Raspberry Pi의 인터페이스:
Raspberry PI의 IP 주소를 찾기 전에 먼저 16x2 LCD를 Raspberry Pi와 인터페이스 해야합니다. 이 프로젝트에서는 16x2 LCD를 Raspberry Pi와 인터페이스하기 위해 외부 Adafruit 라이브러리를 사용했습니다.이를 사용하면 LCD를 구동하기 위해 여러 줄의 코드를 작성할 필요가 없으며 한 줄만 사용하여 LCD에 직접 인쇄 할 수 있습니다. 암호. 그러나이 라이브러리는 Adafruit에 의해 생성되었지만 HD44780 컨트롤러가있는 모든 LCD 모듈에 사용할 수 있습니다.
Adafruit Library를 사용하려면 먼저 아래 명령을 사용하여 설치 해야 합니다. 첫 번째 명령은 Raspberry Pi의 CharLCD 저장소 (Adafruit에 의해)를 복제하고 두 번째 명령은 다운로드 한 디렉터리로 이동하며 마지막으로 Adafruit_Python_CharLCD 디렉터리에있는 setup.py 스크립트 를 실행 하여 라이브러리를 설치해야합니다.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git cd./Adafruit_Python_CharLCD sudo python setup.py install
이제 16x2 LCD 용 라이브러리가 설치되었으며 아래 줄을 사용하여 Python 프로그램에서이 라이브러리를 가져 오면 해당 기능을 사용할 수 있습니다.
Adafruit_CharLCD를 LCD로 가져 오기
라이브러리 폴더 (Adafruit_Python_CharLCD)에 있는 'examples' 폴더 안에 몇 가지 예제 스크립트가 있습니다. char_lcd.py 예제 스크립트 를 실행하여 설정을 테스트 할 수 있습니다. 그러나 그 전에 다음 섹션의 회로도에 나와있는대로 LCD 핀을 Raspberry Pi와 연결해야합니다.
LCD를 Raspberry Pi의 다른 GPIO 핀과 연결할 수도 있습니다. 아래와 같이 Python 프로그램에서 올바른 인터페이스 핀을 언급해야합니다. 여기에서 Raspberry Pi GPIO 핀에 대해 자세히 알아보십시오.
# 라즈베리 파이 핀 설정 lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2
이제 Adafruit Library에서 제공 하는 기능을 직접 사용 하여 LCD를 제어 할 수 있습니다. 일부 기능은 다음과 같습니다. 예제 스크립트에서 더 많은 것을 찾을 수 있습니다:
- lcd.message (message) = LCD에 텍스트를 인쇄합니다.
- lcd.clear () = LCD를 지우려면.
- set_cursor (col, row) = 열과 행의 아무 위치로 커서를 이동합니다.
- lcd.blink (True) = 커서 깜박임 (True 또는 False)
- lcd.move_left () = 커서를 왼쪽으로 한 위치 이동합니다.
- lcd.move_right () = 커서를 오른쪽으로 한 위치 이동합니다.
외부 라이브러리를 사용하지 않고 LCD를 연결하려면 16x2 LCD에 대한 모든 기능을 작성한 이전 튜토리얼을 확인할 수 있습니다. 8 비트 모드에서 LCD와 인터페이스하려면이 항목을 선택하고 4 비트 모드에서 LCD와 인터페이스하려면이 항목을 선택하십시오.
회로도:
LCD에 Raspberry Pi의 IP 주소 표시:
16x2 LCD와 Raspberry Pi를 연결 한 후 이제 Raspberry Pi의 IP 주소를 가져와 Python Script를 사용하여 LCD에 인쇄해야합니다. Raspberry Pi의 로컬 IP 주소를 얻는 방법에는 여러 가지가 있습니다. 여기서는 IP 주소를 가져 오는 3 개의 Python 스크립트를 설명하고 있습니다.
Linux 명령 사용:
터미널에서 hostname –I 명령 을 사용하여 쉽게 IP 주소를 얻을 수 있으므로 파이썬에서 linux 명령을 실행할 수 있으면 IP 주소를 얻을 수 있습니다. 그래서 파이썬에서 리눅스 명령을 실행 우리는 라이브러리 이름을 가져와야합니다 , 명령을 전체 프로그램은 아래와 같이 할 수 있도록:
import time import Adafruit_CharLCD as LCD import 명령 # Raspberry Pi 핀 설정 lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # 16x2 LCD의 LCD 열 및 행 크기를 정의하십시오. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) lcd.message ('로컬 IP 주소: \ n') lcd.message (commands.getoutput ('hostname -I')) time.sleep (10.0) # 5 초간 기다립니다 lcd.clear ()
보다 안정적인 ifconfig 명령 을 사용하여 IP 주소를 얻으려면 프로그램 의 hostname –I 명령을 아래 명령으로 바꿀 수도 있습니다.
lcd.message (commands.getoutput ('ifconfig wlan0-grep "inet \ addr"-cut -d: -f2-cut -d ""-f1'))
소켓 프로그래밍 사용:
이 프로그램에서 우리는 AF_INET 계열의 소켓을 만들고 다음 줄을 사용하여 SOCK_DGRAM을 입력합니다: s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) 그런 다음 8.8과 같은 호스트 이름 또는 IP 주소를 사용하여 소켓을 통해 연결을 만듭니다..8.8, 다른 웹 사이트를 사용하여 gmail.com과 같은 소켓에 연결할 수도 있습니다. 따라서 Raspberry Pi와 더미 IP 주소 간의 통신을 위해 생성 된 소켓에서 RPi의 로컬 IP 주소를 가져올 수 있습니다. 다음은 전체 프로그램입니다.
import time import Adafruit_CharLCD as LCD import socket # Raspberry Pi 핀 설정 lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # 16x2 LCD의 LCD 열 및 행 크기를 정의하십시오. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) def get_ip_address (): ip_address = ''; s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.connect (("8.8.8.8", 80)) ip_address = s.getsockname () s.close () return ip_address lcd.message ('Local IP Address: \ n ') lcd.message (get_ip_address ()) # 5 초간 기다립니다.sleep (10.0) lcd.clear ()
여기에서 Python의 소켓 프로그래밍에 대해 자세히 알아보세요.
'fcntl'모듈 사용:
이 모듈은 파일 설명자에 대한 파일 제어 및 I / O 제어를 수행합니다. 여기서는 네트워크 파일에서 IP 주소를 추출하는 데 사용됩니다. 다음은 전체 Python 코드입니다.
import time import Adafruit_CharLCD as LCD import socket import fcntl import struct # Raspberry Pi pin setup lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # 16x2 LCD에 대한 LCD 열 및 행 크기를 정의합니다. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) def get_interface_ipaddress (network): sOCK_D = socket.socket (socket.AF_GRAM) return socket.inet_ntoa (fcntl.ioctl (s.fileno (), 0x8915, # SIOCGIFADDR struct.pack ('256s', network))) lcd.message ('Local IP Address: \ n') lcd.message (get_interface_ipaddress ('wlan0')) # 5 초간 기다립니다.sleep (10.0) lcd.clear ()
여기에서 'fcnfl'모듈 사용에 대해 자세히 알아보세요.
'crontab'을 사용하여 주기적으로 스크립트 실행:
마지막 단계는 매 15 분마다 주기적으로이 스크립트를 실행하기위한 항목을 추가하여 매번 업데이트 된 IP를 얻을 수 있도록하는 것입니다. 이렇게하려면 아래 명령을 사용하여 cron 파일을 편집해야합니다.
crontab –e
그런 다음 cron 파일 하단에 아래 줄을 입력하고 CTRL + X, Y를 사용하여 저장 한 다음 입력합니다.
* / 15 * * * * sudo python /home/pi/ip_address_lcd.py
Python 스크립트 파일의 위치에 따라 주소를 변경할 수 있으며 업데이트 된 IP를 얻기 위해 스크립트를 반복적으로 실행하려는 기간을 변경할 수도 있습니다.