天天看點

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

讓樹莓派“說”出自己的IP位址,

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

樹莓派實驗室之前已經介紹了多種方法,來獲得樹莓派的IP位址。有的利用區域網路工具或登入路由器查詢、有的通過OLED小螢幕自動顯示、還有的利用DDNS做域名解析。下面我們再來多介紹一種,讓樹莓派在啟動之後“說”出自己的IP位址。

這裡用到了下面這些東西:

樹莓派主機闆

USB 聲霸卡

音箱或耳機一副

mplayer 播放器

數字語音包,含一組錄制好了的 MP3 音頻

Python 主程式

注意,USB聲霸卡不是必須的,但因無法忍受樹莓派闆載3.5MM的電流聲,這裡加裝了一個USB聲霸卡。軟體部分是在 GitHub @ma6174 的開源項目基礎上修改而來。

https://github.com/spoonysonny/speak_raspi_ip

一、下載下傳主程式和軟體

運作下面的指令。

cd ~

sudo git clone https://github.com/spoonysonny/speak_raspi_ip.git

sudo apt-get install mplayer

sudo apt-get install -y mpg123

二、設定輸出聲霸卡

如果你使用樹莓派闆載的聲霸卡,那麼可以跳過這一步。下面的介紹用于在使用其他聲霸卡的情況下參考(以USB聲霸卡為例)。

筆者所用的這個USB聲霸卡免驅,即插即用。是以直接進行切換聲霸卡的設定就行。

運作 alsamixer 指令進入 alsamixer 畫面。

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

按 F2 檢視系統資訊,選擇 /proc/asound/cards 檢視可用的聲霸卡裝置。

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

可以看到裝置名和對應的編号,記下USB聲霸卡的編号(為1)下面會用到。

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

alsamixer 的其他功能如果有興趣可以順便試試,這裡暫不深入。如果隻需要列出聲霸卡資訊,還可以使用 aplay -l 指令。

編輯檔案 /etc/asound.conf。

sudo nano /etc/asound.conf

填入如下内容,請先確定這個檔案之前是空白的再填入:

pcm.!default {

type hw card 1

}

ctl.!default {

type hw card 1

}

上面的數字 1 代表聲霸卡的裝置編号。

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

按下 Ctrl+O 儲存,按下 Ctrl+X 退出。并重新開機系統。

sudo reboot

三、測試運作

首先需要确認一下聲霸卡和 mplayer 是否正常工作。

cd ~/speak_raspi_ip

sudo mplayer voice/1.mp3

如果順利的話,接上音箱會聽到報數“一”。

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

下面就可以測試主程式了。

sudo python speak_ip.py

現在樹莓派應該會“說”出IP位址。

四、設定開機運作

編輯 rc.local 檔案。

sudo nano /etc/rc.local

在 exit 0 之前添加一行:

sudo /usr/bin/python /home/pi/speak_raspi_ip/speak_ip.py &

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,

按下 Ctrl+O 儲存,按下 Ctrl+X 退出。

完成之後,下次重新開機的時候就可以聽到樹莓派的IP位址了。

最後,附上主程式代碼

#!/usr/bin/env python

# coding=utf-8

import os

import sys

import time

import socket

import subprocess

voice_path = os.path.join(sys.path[0], 'voice')

player = ["mplayer"]

def getLocalIP():

ip = None

try:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.connect(('114.114.114.114', 0))

ip = s.getsockname()[0]

except:

name = socket.gethostname()

ip = socket.gethostbyname(name)

if ip.startswith("127."):

cmd = '''/sbin/ifconfig | grep "inet " | cut -d: -f2 | awk '{print $1}' | grep -v "^127."'''

a = subprocess.Popen(

cmd,

shell=True,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

a.wait()

out = a.communicate()

ip = out[0].strip().split("\n") # 所有的清單

if len(ip) == 1 and ip[0] == "" or len(ip) == 0:

return False

ip = "over".join(ip)

return ip

def getFilePath(filename):

return os.path.join(voice_path, "%s.mp3" % filename)

def play(voice):

for i in player:

cmd = "%s %s" % (i, getFilePath(voice))

a = subprocess.Popen(

cmd,

shell=True,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

a.wait()

if a.returncode == 0:

break

def speak(ip):

for i in ip:

if i == ".":

play("dot")

else:

play(i)

play("over")

if __name__ == '__main__':

count = 0

while True:

ip = getLocalIP()

print ip

if ip == False:

play("fetching")

else:

count += 1

speak(ip)

if count == 10:

break

time.sleep(1)

文章标題:讓樹莓派“說”出自己的IP位址 - 樹莓派實驗室

固定連結:https://shumeipai.nxez.com/2019/05/29/make-the-raspberry-pi-speak-its-own-ip-address.html

Linux查找樹莓派ip位址,讓樹莓派“說”出自己的IP位址,