Raspberry Piを使用する際の主な問題は、Raspberry PiのIPアドレスを知ることです。これは、SSHまたはファイル転送クライアントを使用してログインするために必要になります。そこで本日、いくつかのPythonスクリプトを共有して、ネットワーク上のRaspberry PiのローカルIPアドレスを見つけ、16x2LCD画面に表示します。また、スクリプトをCrontabに追加して、10分ごとに実行できるようにし、毎回更新されたIPアドレスを取得します。
16x2LCDとRaspberryPiのインターフェース:
Raspberry PIのIPアドレスを見つける前に、まず16x2LCDをRaspberryPiとインターフェースする必要があります。このプロジェクトでは、外部Adafruitライブラリを使用して16x2LCDをRaspberryPiとインターフェイスしました。これを使用すると、LCDを駆動するために多くのコード行を記述する必要がなく、コード。ただし、このライブラリはAdafruitによって作成されていますが、HD44780コントローラーを備えたすべてのLCDモジュールに使用できます。
Adafruitライブラリを使用するには、最初に以下のコマンドを使用してライブラリをインストールする必要があります。最初のコマンドはRaspberryPiに(Adafruitによる)CharLCDリポジトリを複製し、2番目のコマンドはダウンロードしたディレクトリ内に移動します。最後にAdafruit_Python_CharLCDディレクトリ内にある setup.py スクリプトを実行して、ライブラリをインストールする必要があります。
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git cd./Adafruit_Python_CharLCD sudo python setup.py install
これで16x2LCDのライブラリがインストールされ、次の行を使用してこのライブラリをPythonプログラムにインポートするだけでその機能を使用できます。
Adafruit_CharLCDをLCDとしてインポートします
ライブラリフォルダー(Adafruit_Python_CharLCD)にある 'examples' フォルダー内にいくつかのサンプルスクリプトがあります。char_lcd.pyサンプルスクリプトを実行して、セットアップをテストできます。ただし、その前に、次のセクションの回路図で以下に示すように、LCDピンをRaspberryPiに接続する必要があります。
LCDをRaspberryPiの他のGPIOピンに接続することもできます。以下のように、Pythonプログラムで正しいインターフェイスピンについて言及する必要があります。Raspberry Pi GPIOピンの詳細については、こちらをご覧ください。
#RaspberryPiピンのセットアップlcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2
これで、AdafruitLibraryが提供する機能を直接使用してLCDを制御できます。いくつかの機能を以下に示します。スクリプトの例で詳細を確認できます。
- lcd.message(message) = LCDにテキストを印刷します。
- lcd.clear() = LCDをクリアします。
- set_cursor(col、row) =カーソルを列と行の任意の位置に移動します。
- lcd.blink(True) =カーソルを点滅させる(TrueまたはFalse)
- lcd.move_left() =カーソルを1つ左に移動します。
- lcd.move_right() =カーソルを1つ右に移動します。
外部ライブラリを使用せずにLCDを接続する場合は、16x2LCDのすべての関数を記述した前のチュートリアルを確認できます。これをチェックしてLCDを8ビットモードでインターフェースし、これをチェックしてLCDを4ビットモードでインターフェースします。
回路図:
LCDにRaspberryPiのIPアドレスを表示します。
16x2LCDをRaspberryPiとインターフェースした後、Raspberry PiのIPアドレスを取得し、Pythonスクリプトを使用してLCDに印刷する必要があります。Raspberry PiのローカルIPアドレスを取得する方法はたくさんあります。ここでは、IPアドレスを取得するための3つのPythonスクリプトについて説明します。これらは、どれでも使用できます。
Linuxコマンドの使用:
ターミナルでは、 hostname –I コマンドを使用してIPアドレスを簡単に取得できるため、Pythonからlinuxコマンドを実行できれば、IPアドレスを取得できます。したがって、PythonからLinuxコマンドを実行するには 、commands という名前のライブラリをインポートする必要があるため、完全なプログラムは次のようになります。
import time import Adafruit_CharLCD as LCD import command#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#16x2LCDの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 ( '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、他のWebサイトを使用して、gmail.comなどのソケットに接続することもできます。したがって、RaspberryPiとダミーIPアドレス間の通信用に作成されたソケットからRPiのローカル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#16x2LCDの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( 'ローカルIPアドレス:\ n ')lcd.message(get_ip_address())#5秒待つtime.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#16x2LCDの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.so 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秒待つtime.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を取得する期間を変更することもできます。