RPi 3 Python 脚本 - 名称错误:未定义名称'BluetoothSocket'



所以我对Python脚本相对较新,并且遇到了该代码,该代码应该在Raspberry Pi和Smart设备之间通过蓝牙配置WiFi。不幸的是,我一直遇到标题中列出的错误。我希望有人可以复制并运行代码并启发我为什么我会继续遇到这个错误。所有的帮助都非常感谢!

#!/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=GBn')
    f.write('ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevn')
    f.write('update_config=1n')
    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 configurationn'

except (KeyboardInterrupt, SystemExit):
    print 'nExitingn'

此代码输出

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

您可以向我们展示您的Python版本吗?

只是类型:

$ python --version

bluetooth lib似乎存在。但不是BluetoothSocket:尝试安装Bluez和Python-Bluez

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

最新更新