2017-03-05 200 views
0

因此,我相對較新的python腳本,我碰到這個代碼,應該配置Wi-Fi覆蓋覆盆子pi和智能設備之間的藍牙。不幸的是,我一直遇到標題中列出的錯誤。我希望有人可以複製並運行代碼,並啓發我爲什麼我一直遇到這個錯誤。所有幫助非常感謝!RPi 3 Python腳本 - 名稱錯誤:名稱'BluetoothSocket'未定義

#!/usr/bin/env python 

import os 

from bluetooth import * 

from wifi import Cell, Scheme 

import subprocess 

import time 




wpa_supplicant_conf = "/etc/wpa_supplicant/wpa_supplicant.conf" 

sudo_mode = "sudo " 


def wifi_connect(ssid, psk): 

    # write wifi config to file 
    f = open('wifi.conf', 'w') 
    f.write('country=GB\n') 
    f.write('ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\n') 
    f.write('update_config=1\n') 
    f.write('\n') 
    f.write('network={\n') 
    f.write(' ssid="' + ssid + '"\n') 
    f.write(' psk="' + psk + '"\n') 
    f.write('}\n') 
    f.close() 

    cmd = 'mv wifi.conf ' + wpa_supplicant_conf 
    cmd_result = "" 
    cmd_result = os.system(cmd) 
    print cmd + " - " + str(cmd_result) 


    # restart wifi adapter 
    cmd = sudo_mode + 'ifdown wlan0' 
    cmd_result = os.system(cmd) 
    print cmd + " - " + str(cmd_result) 

    time.sleep(2) 

    cmd = sudo_mode + 'ifup wlan0' 
    cmd_result = os.system(cmd) 
    print cmd + " - " + str(cmd_result) 

    time.sleep(10) 

    cmd = 'iwconfig wlan0' 
    cmd_result = os.system(cmd) 
    print cmd + " - " + str(cmd_result) 

    cmd = 'ifconfig wlan0' 
    cmd_result = os.system(cmd) 
    print cmd + " - " + str(cmd_result) 

    p = subprocess.Popen(['ifconfig', 'wlan0'], stdout=subprocess.PIPE, 
          stderr=subprocess.PIPE) 

    out, err = p.communicate() 

    ip_address = "<Not Set>" 

    for l in out.split('\n'): 
     if l.strip().startswith("inet addr:"): 
      ip_address = l.strip().split(' ')[1].split(':')[1] 

    return ip_address 



def ssid_discovered(): 

    Cells = Cell.all('wlan0') 

    wifi_info = 'Found ssid : \n' 

    for current in range(len(Cells)): 
     wifi_info += Cells[current].ssid + "\n" 


    wifi_info+="!" 

    print wifi_info 
    return wifi_info 


def handle_client(client_sock) : 

    # get ssid 
    client_sock.send(ssid_discovered()) 
    print "Waiting for SSID..." 


    ssid = client_sock.recv(1024) 
    if ssid == '' : 
     return 

    print "ssid received" 
    print ssid 

    # get psk 
    client_sock.send("waiting-psk!") 
    print "Waiting for PSK..." 


    psk = client_sock.recv(1024) 
    if psk == '' : 
     return 

    print "psk received" 

    print psk 

    ip_address = wifi_connect(ssid, psk) 

    print "ip address: " + ip_address 

    client_sock.send("ip-addres:" + ip_address + "!") 

    return 



try: 
    while True: 

     server_sock=BluetoothSocket(RFCOMM) 
     server_sock,bind(("",PORT_ANY)) 
     server_sock.listen(1) 

     port = server_sock.getsockname()[1] 

     uuid = "815425a5-bfac-47bf-9321-c5ff980b5e11" 

     advertise_service(server_sock, "RaspberryPiServer", 
          service_id = uuid, 
          service_classes = [ uuid, SERIAL_PORT_CLASS ], 
          profiles = [ SERIAL_PORT_PROFILE ], 
          protocols = [ OBEX_UUID ] 
          ) 

     print("Waiting for connection on RFCOMM channel %d" % port) 

     client_sock, client_info = server_sock.accept() 
     print "Accepted connection from ", client_info 

     handle_client(client_sock) 

     client_sock.close() 
     server_sock.close() 

     # finished config 
     print 'Finished configuration\n' 


except (KeyboardInterrupt, SystemExit): 

    print '\nExiting\n' 

此代碼輸出

Traceback (most recent call last): File "test.py", line 128, in <module> 
    server_sock=BluetoothSocket(RFCOMM) 

NameError: name 'BluetoothSocket' is not defined 
+0

感謝您的@克里斯,相當新本,所以我不知道如何將它正確格式。任何想法,爲什麼它會產生這個錯誤? – syrj2112

+0

對不起,沒有。我從來沒有做過藍牙編程。但標準庫中沒有'bluetooth'模塊。您可能應該編輯您的問題,並告訴我們您使用的是什麼庫,可能也是您的操作系統,因爲藍牙支持可能是針對操作系統的。 – Chris

+0

這是一個涉及Raspberry Pi 3的項目,它可以安裝藍牙庫。我不太清楚涉及這個項目的所有圖書館,但他們都被納入了腳本的頂部。 – syrj2112

回答

0

你能告訴我們你的Python版本?

只需鍵入:

$ python --version 

bluetooth lib中似乎存在。但是,並非BluetoothSocket:嘗試安裝的bluez和python-bluez的

$ sudo apt-get install bluez 
$ sudo apt-get install python-bluez