Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RPI3 Python脚本-NameError:name';蓝牙插座';没有定义_Python_Nameerror_Bluetooth Socket - Fatal编程技术网

RPI3 Python脚本-NameError:name';蓝牙插座';没有定义

RPI3 Python脚本-NameError:name';蓝牙插座';没有定义,python,nameerror,bluetooth-socket,Python,Nameerror,Bluetooth Socket,因此,我对python脚本编写还比较陌生,我遇到了这段代码,该代码旨在通过蓝牙在raspberry pi和智能设备之间配置wifi。不幸的是,我一直遇到标题中列出的错误。我希望有人能复制并运行代码,并告诉我为什么我一直遇到这个错误。非常感谢您的帮助 #!/usr/bin/env python import os from bluetooth import * from wifi import Cell, Scheme import subprocess import time

因此,我对python脚本编写还比较陌生,我遇到了这段代码,该代码旨在通过蓝牙在raspberry pi和智能设备之间配置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=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'
#/usr/bin/env python
导入操作系统
从蓝牙导入*
从wifi导入小区,方案
导入子流程
导入时间
wpa_suplicant_conf=“/etc/wpa_suplicant/wpa_suplicant.conf”
sudo_mode=“sudo”
def wifi_连接(ssid、psk):
#将wifi配置写入文件
f=打开('wifi.conf','w')
f、 写入('country=GB\n')
f、 写入('ctrl\u interface=DIR=/var/run/wpa\u requlicant GROUP=netdev\n')
f、 写入('update\u config=1\n')
f、 写入('\n')
f、 写入('network={\n')
f、 写入('ssid=“”+ssid+“\n”)
f、 写入('psk=“”+psk+“\n”)
f、 写入('}\n')
f、 关闭()
cmd='mv wifi.conf'+wpa\u requiciant\u conf
cmd_result=“”
cmd_result=os.system(cmd)
打印cmd+“-”+str(cmd\u结果)
#重新启动wifi适配器
cmd=sudo_模式+ifdown wlan0
cmd_result=os.system(cmd)
打印cmd+“-”+str(cmd\u结果)
时间。睡眠(2)
cmd=sudo_模式+ifup wlan0
cmd_result=os.system(cmd)
打印cmd+“-”+str(cmd\u结果)
时间。睡眠(10)
cmd='iwconfig wlan0'
cmd_result=os.system(cmd)
打印cmd+“-”+str(cmd\u结果)
cmd='ifconfig wlan0'
cmd_result=os.system(cmd)
打印cmd+“-”+str(cmd\u结果)
p=subprocess.Popen(['ifconfig','wlan0'],stdout=subprocess.PIPE,
stderr=子流程(管道)
out,err=p.communicate()
ip_地址=“”
对于l in out.split('\n'):
如果l.strip().startswith(“inet addr:”):
ip_address=l.strip().split(“”)[1]。split(“:”)[1]
返回ip地址
def ssid_discovered():
Cells=Cell.all('wlan0')
wifi_info='找到ssid:\n'
对于范围内的电流(透镜(单元)):
wifi_info+=小区[当前].ssid+“\n”
wifi_信息+=“!”
打印wifi\u信息
返回wifi\u信息
def句柄_客户端(客户端_sock):
#获取ssid
客户端\u sock.send(ssid\u discovered())
打印“等待SSID…”
ssid=客户端\u sock.recv(1024)
如果ssid='':
回来
打印“收到ssid”
打印ssid
#获得psk
客户端_sock.send(“等待psk!”)
打印“等待PSK…”
psk=客户端\u sock.recv(1024)
如果psk='':
回来
打印“收到psk”
打印psk
ip地址=wifi连接(ssid、psk)
打印“ip地址:”+ip\U地址
客户端发送(“ip地址:+ip地址+”!)
回来
尝试:
尽管如此:
服务器\u sock=BluetoothSocket(RFCOMM)
服务器\端口,绑定(“”,端口\任何))
服务器\u sock.listen(1)
port=server\u sock.getsockname()[1]
uuid=“815425a5-bfac-47bf-9321-c5ff980b5e11”
广告服务(服务器插座,“树莓服务器”,
服务\u id=uuid,
服务类=[uuid,串行端口类],
配置文件=[串行端口配置文件],
协议=[OBEX_UUID]
)
打印(“正在等待RFCOMM通道%d”%port上的连接)
client\u sock,client\u info=server\u sock.accept()
打印“已接受的连接自”,客户端信息
handle_client(客户端_sock)
客户端_sock.close()
服务器\u sock.close()
#完成配置
打印“已完成配置\n”
除了(键盘中断、系统退出):
打印“\n正在打印\n”
此代码输出

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

NameError: name 'BluetoothSocket' is not defined
Traceback(最近一次调用last):文件“test.py”,第128行,在
服务器\u sock=BluetoothSocket(RFCOMM)
NameError:未定义名称“BluetoothSocket”

你能给我们看看你的python版本吗

仅键入:

$ python --version
bluetooth
lib似乎存在。但不是
BluetoothSocket
:尝试安装bluez和python bluez

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

谢谢@Chris,这是一个新概念,所以我不知道如何正确格式化。知道它为什么会产生那个错误吗?对不起,没有。我从来没有做过蓝牙编程。但是标准库中没有
蓝牙
模块。您可能需要回答您的问题,并告诉我们您使用的是什么库,也可能是您的操作系统,因为蓝牙支持可能是特定于操作系统的。这是一个涉及Raspberry Pi 3的项目,该项目具有可安装的蓝牙库。我不太清楚这个项目涉及到的所有库,但它们都包含在脚本的顶部。您可以在脚本的顶部导入它们。但是,从蓝牙导入*
和从wifi导入单元导入
,Scheme将无法在Python中立即运行。必须安装其他一些库,在不知道它们是什么的情况下,这个问题很难回答。我以为我安装了项目所需的所有库,但我将安装环顾四周并安装更多库,希望它能解决我的问题。