نمایش IP برد Raspberry Pi در LCD کاراکتری

یکی از مشکلات اساسی در هنگام کار با Raspberry Pi، دانستن آدرس IP برد است که برای ورود به سیستم با استفاده  از SSH یا سرویس گیرنده انتقال فایل لازم است. بنابراین ما می خواهیم برنامه ای را به زبان برنامه نویسی پایتون بنویسیم تا آدرس IP محلی Raspberry Pi شما را در شبکه پیدا کرده و در صفحه LCD 16×2 نمایش دهد. همچنین برنامه را در قسمت Crontab اضافه خواهیم کرد تا هر ۱۰ دقیقه قابل اجرا باشد و هر بار آدرس IP به روز شده داشته باشیم.

 

 LCD 16×2 کاراکتری و Raspberry Pi:

قبل از اینکه آدرس IP Raspberry PI را پیدا کنیم ، ابتدا باید LCD 16×2 را راه اندازی نماییم.  در این پروژه ما از یک کتابخانه Adafruit برای ارتباط LCD با ابعاد ۱۶×۲ با Raspberry Pi استفاده کرده ایم که با این کتابخانه نیازی به نوشتن خطوط کد زیادی برای راه اندازی LCD ندارید و می توانید مستقیماً با استفاده از یک خط کد این کار را انجام دهید. دقت نمایید که این کتابخانه توسط Adafruit ایجاد شده است و می تواند برای هر ماژول LCD که دارای کنترل کننده HD44780 است استفاده شود.

برای استفاده از کتابخانه Adafruit ، ابتدا باید آن را با استفاده از دستورات زیر نصب کنیم.

git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
cd ./Adafruit_Python_CharLCD
sudo python setup.py install

اکنون کتابخانه برای LCD 16×2 نصب شده است و می توانید با وارد کردن این کتابخانه در برنامه پایتون خود  از توابع آن استفاده کنید:

import Adafruit_CharLCD as LCD
چند اسکریپت نمونه در داخل پوشه “example” وجود دارد و با اجرای اسکریپت مثال char_lcd.py می توانید تنظیمات را امتحان کنید. اما قبل از آن، شما باید پایه های LCD را با Raspberry Pi وصل کنید همانطور که در زیر در نمودار مدار بخش بعدی آورده شده است. همچنین می توانید LCD را با برخی دیگر از پین های GPIO Raspberry Pi متصل کنید.
# 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
اکنون می توانید از توابع ارائه شده توسط Adafruit Library برای کنترل LCD استفاده کنید. برخی از توابع برای نمونه در ادامه آورده شده است.

lcd.message  = برای نمایش متن روی LCD.
lcd.clear  = برای پاک کردن LCD.
set_cursor = مکان نما را به هر موقعیتی در ستون و ردیف منتقل کنید.
lcd.blink  = برای چشمک زدن مکان نما
lcd.move_left= حرکت cursor به سمت چپ
lcd.move_right =حرکت cursor به سمت راست

نمایش IP در ال سی دی  Raspberry Pi :

پس از ارتباط LCD 16×2 با Raspberry Pi، حالا باید IP آدرس برد را دریافت کرده و با استفاده از برنامه Python آن را روی LCD نمایش دهیم . روش های زیادی برای دریافت آدرس IP محلی Raspberry Pi وجود دارد، در این آموزش ما سه اسکریپت Python را برای بدست آوردن آدرس IP اجرا می کنیم، می توانید از هر یک از آنها استفاده کنید.

با استفاده از دستورات Linux:

در ترمینال ، ما می توانیم با استفاده از دستور hostname –I به راحتی آدرس IP را دریافت کنیم، پس اگر بتوانیم دستور linux را از پایتون اجرا کنیم، می توانیم آدرس IP را بدست آوریم. برای اجرای دستورات لینوکس از پایتون باید یک کتابخانه به نام Commands وارد کنیم، برنامه کامل مانند زیر است:

import time
import Adafruit_CharLCD as LCD
import commands

# 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

# Define LCD column and row size for 16x2 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('Local IP Address:\n')
lcd.message(commands.getoutput('hostname -I'))

time.sleep(10.0)  # Wait 5 seconds
lcd.clear()

اگر می خواهید با استفاده از دستور ifconfig آدرس IP را دریافت کنید، می توانید دستور hostname –I را در برنامه جایگزین کنید.

 

lcd.message(commands.getoutput(‘ifconfig wlan0 | grep “inet\ addr” | cut -d: -f2 | cut -d” ” -f1’))

 

نکته: اگر Raspberry Pi شما روی Ethernet است، “wlan0” را با “eth0” جایگزین کنید.

 

با استفاده از برنامه نویسی Socket:

در این برنامه یک سوکت از خانواده AF_INET ایجاد می کنیم و SOCK_DGRAM را با استفاده از این خط تایپ می کنیم:

s = socket.socket (socket.AF_INET، socket.SOCK_DGRAM)
سپس با استفاده از نام سرور یا آدرس ip مانند .۸.۸.۸.۸ اتصال را از طریق سوکت ایجاد خواهیم کرد. همچنین می توانید از وب سایت دیگری برای اتصال به سوکت مانند gmail.com استفاده کنید. می توانیم آدرس IP محلی برد رزبری پای را از سوکت ایجاد شده برای ایجاد ارتباط بین برد و آدرس IP ساختگی بدست آوریم. برنامه کامل در این قسمت آورده شده است :
import time
import Adafruit_CharLCD as LCD
import socket

# 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

# Define LCD column and row size for 16x2 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()[0]
 s.close()
 return ip_address
 
lcd.message('Local IP Address:\n') 
lcd.message(get_ip_address())
# Wait 5 seconds
time.sleep(10.0)
lcd.clear()


نکته: استفاده از “socket.gethostbyname (socket.gethostname ())” همیشه آدرس IP Localhost را به شما می دهد (۱۲۷.۰.۰.۱.۱)
و برنامه سوم

با استفاده از ماژول ‘fcntl’:

این ماژول اجرا کننده فایل کنترل I/O را بر فایل description است. در اینجا برای بدست آوردن آدرس IP از فایل های شبکه استفاده می شود.

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

# Define LCD column and row size for 16x2 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):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', network[:15])
    )[۲۰:۲۴])

lcd.message('Local IP Address:\n') 
lcd.message(get_interface_ipaddress('wlan0'))
# Wait 5 seconds
time.sleep(10.0)
lcd.clear()
نکته: اگر Raspberry Pi شما روی Ethernet است، “wlan0” را با “eth0” جایگزین کنید.
اجرای کد به صورت دوره ای
مرحله نهایی اجرای این اسکریپت به صورت دوره ای هر ۱۵ دقیقه است تا بتوانیم هر بار IP به روز شده دریافت کنیم. برای این کار باید فایل cron را با استفاده از دستور زیر ویرایش کنیم:
crontab –e
و سپس خط زیر را در پایین پرونده cron وارد کنید و آن را با استفاده از CTRL + X و سپس Y ذخیره کنید ، سپس وارد کنید.
*/۱۵ * * * * sudo python /home/pi/ip_address_lcd.py
می توانید آدرس را با توجه به مکان فایل Python خود تغییر دهید و همچنین می توانید مدت زمانی را که می خواهید اسکریپت را بارها اجرا کنید تغییر دهید تا همیشه IP به روز شده دریافت شود.
اگر نمی خواهید IP برد شما تغییر کند می توانید از IP اتاتیک استفاده کنید در صورتیکه نحوه راه اندازی IP استاتیک را در برد Raspberry Pi نمی دانید نگران نباشید ما نحوه راه اندازی را برای آموزش شما آماده کرده ایم.

محمد صداقتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *