یکی از مشکلات اساسی در هنگام کار با 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
# 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
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 را با استفاده از این خط تایپ می کنیم:
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()
با استفاده از ماژول ‘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()
crontab –e
*/۱۵ * * * * sudo python /home/pi/ip_address_lcd.py
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳
- پروتکل SNMP - شهریور ۱۵, ۱۴۰۳