Python, Raspberry Pi

讓樹莓派自動顯示自己的IP

在樹莓派連接上顯示器的情況下,當然可以透過各種Linux上的指令以取得自己的IP位址,但是,在大部份的時間,樹莓派並不會被連接上顯示器,也沒有鍵盤和滑鼠可以使用,因此,讓樹莓派能在一開機的時候就可以回報自己的IP位址,以備我們透過其它的電腦以SSH或VNC的方式連線,是一個很有用的設計。

在這裡,我們使用LCM1602來做這件事。以下是運作中的外觀:

左側是樹莓派(加上了VGA擴充板),右側就是這次的主角LCM1602。LCM1602使用IIC介面和樹莓派進行連線,上面共有4支接腳,分別是GND、VCC、SDA、SCL,這4支接腳分別對應到樹莓派上(請參考網路上的樹莓派pinout)的第6腳(GND)、第4腳(+5V)、第3腳(SDA)、第5腳(SCL)。由於前2個接腳屬於電源線,請千萬留意勿接反,此外,在進行任何連線的時候,也請務必移除樹莓派本身的電源。

連接完成之後,接上樹莓派電源應會立即看到LCM1602上的燈光亮了起來,就表示至少電源是被正確連接了。

下一步,開啟樹莓派,在終端機中執行 sudo raspi-config,進入系統控制畫面,選取Interface Options:

然後選取P5 I2C選項:

再選擇「Yes」按鈕再按下Enter按鍵:

回到主選單再按下Finish完成,再重新開機即可。接著請在終端機下利用pip安裝以下3個模組,前2個模組是給LCM1602用的,後面那個模組是為了要查詢IP用的:

$ pip install RPLCD
$ pip install smbus2
$ pip install netifaces

之後如果在執行程式上有出現找不到模組的情況,請再重新利用sudo執行一次安裝的作業:

$ sudo pip install RPLCD
$ sudo pip install smbus2
$ sudo pip install netifaces

接著,為了讓樹莓派可以連接到LCM1602,需先找到這個裝置的位置,請利用以下這個指令完成:

$ i2cdetect -y 1

執行結果如下:

以這個例子來看,它的位址就是0x27。以下的程式即可查詢自己的IP(假設是透過Wi-Fi取得的網路):

import sys
import time
import smbus2
import netifaces as ni

sys.modules['smbus'] = smbus2
from RPLCD.i2c import CharLCD
ip = ""
while ip == "":
    try:
        ip = ni.ifaddresses('wlan1')[ni.AF_INET][0]['addr']
    except:
        ip = ""
lcd = CharLCD('PCF8574', address=0x27, port=1, backlight_enabled=True)
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string("My IP")
lcd.cursor_pos = (1, 0)
lcd.write_string(ip)

把此程式儲存成lcd.py,利用以下的指令即可順利執行,執行結果如本文一開始的圖片所示:

$ python lcd.py

假設我們把這個程式放在/home/pi/lcd目錄下,則它的絕對路徑位置為:

/home/pi/lcd/lcd.py

為了讓樹莓派一開始執行的時候可以在LCD上顯示出正確的IP位址,請把以下這行指令附加到/etc/profile檔案中的最後一行:

sudo python /home/pi/lcd/lcd.py

接著再執行一次 sudo raspi-config,這次選擇1. System Options,如下:

然後選擇S5 Boot / Auto Login,如下:

再選擇B2 Console Autologin選項,之後再重新啟動即可。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s