树莓派WiFi广播脚本问题



我遇到了一个问题,由于我对Python了解不多,我将非常感谢其他人的帮助,帮助我了解我的问题是什么。

我正在建造一个便携式无线收音机。树莓派利用钢琴吧去潘多拉服务器,登录到我的帐户,得到我的电台,然后开始播放第一个。

我遵循官方Adafruit指南:https://learn.adafruit.com/pi-wifi-radio/overview

我一直遵循指南直到钢琴吧工作。我能够从命令行运行"pianobar"。它连接并开始播放音乐在不到10秒。

然而,当我开始脚本,允许16x2液晶键盘与钢琴吧接口,它不工作。

更具体地说,它贯穿了脚本的前半部分。LCD显示IP地址并显示"检索站列表…"。10秒后,脚本退出,并显示所有这些内容。

pi@pandora ~/Python-WiFi-Radio $ sudo python PiPhi.py
Spawning pianobar...
Receiving station list...
Traceback (most recent call last):
  File "PiPhi.py", line 288, in <module>
    stationList, stationIDs = getStations()
  File "PiPhi.py", line 190, in getStations
    pianobar.expect('Select station: ', timeout=10)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1311, in expect
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1325, in expect_list
    return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
  File "/usr/local/lib/python2.7/dist-packages/pexpect.py", line 1409, in expect_loop
    raise TIMEOUT (str(e) + 'n' + str(self))
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
<pexpect.spawn object at 0xb6b305b0>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/sudo
args: ['/usr/bin/sudo', '-u', 'pi', 'pianobar']
searcher: searcher_re:
    0: re.compile("Select station: ")
TIME: -03:35/03:43
TIME: -03:35/03:43
after: <class 'pexpect.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 2315
child_fd: 5
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
pi@pandora ~/Python-WiFi-Radio $ 

http://pastebin.com/6Lm3dTwx -这是我试图运行的脚本

根据我的基本知识,检索站点列表所花费的时间似乎比超时时间要长。请帮帮我,我完全迷路了。谢谢!

我也有同样的问题,为了一个低技术的修复,我只是在启动脚本中ping google 10次。这给了系统足够的时间来稳定网络连接。

我发现用户id "pi"在PiPhi.py中是硬编码的!改变第33行(PICKLEFILE),第286行。Spawn ('sudo -u pi…解决了我的问题…

希望这对你有帮助。

这里可能存在两个问题。我在生成过程中遇到了困难。这表现为钢琴杆上的EOF误差。除了"Get stations…Ok.rn"。要查看发生了什么,处理EOF异常并打印piano . bar.before:

# Launch pianobar as pi user (to use same config data, etc.) in background:
print('Spawning pianobar...')
pianobar = pexpect.spawn('sudo -u pi /home/pi/pianobar/pianobar', timeout=60)
print('Receiving station list...')
expectIdx = pianobar.expect(['Get stations... Ok.rn', pexpect.EOF, pexpect.TIMEOUT])
if expectIdx == 0:
    stationList, stationIDs = getStations()
    try:    # Use station name from last session
        stationNum = stationList.index(defaultStation)
    except: # Use first station in list
        stationNum = 0
    print 'Selecting station ' + stationIDs[stationNum]
    pianobar.sendline(stationIDs[stationNum])
elif expectIdx == 1: # EOF
    print 'pianobar.expect EOF error'
    print pianobar.before # shows response from pianobar spawn
    pianobar.kill(0)
elif expectIdx == 2: # TIMEOUT
    print 'pianobar.expect TIMEOUT error'
    pianobar.kill(0)

我通过指定pianobar的完整路径(如上所示)修复了这个问题。

第二个问题可能是因为在您的钢琴吧配置中有一个有效的默认站点。如果是这种情况,则在启动时不显示选择站列表,您需要请求它。这个错误出现在钢琴架上。getStations()中的expect。如果初始请求超时,我通过请求电台列表来解决这个问题:

    expectIdx = pianobar.expect(['Select station: ', pexpect.EOF, pexpect.TIMEOUT], timeout=10)
    if expectIdx == 1: # EOF
        print 'pianobar.expect EOF error at getStations'
        print pianobar.before # shows response from pianobar spawn
        pianobar.kill(0)
    elif expectIdx == 2: # TIMEOUT
        # try requesting the station list
        pianobar.send('s')
        pianobar.expect('Select station', timeout=10)

我知道这是旧的,但我刚刚遇到了自己的问题。我发现发出以下命令:

pianobar.send('s')

之前
pianobar.expect('Select station: ', timeout=20)

强制钢琴酒吧更新电台列表

相关内容

  • 没有找到相关文章

最新更新