def __init__(self, scan_addr=0, sec=3): self.found = False print("Start scanning.") self.service = BeaconService("hci0") self.devices = self.service.scan(sec) self.print_device(scan_addr) print("Done scanning.")
def __init__(self, sec=5): self.my_uuid = "11111111-2222-3333-4444-555555555555" self.my_major = 1 self.my_minor = 1 self.my_txpower = 1 self.my_interval = 200 self.service = BeaconService("hci0") self.advertise(sec)
class MyAdvertising(object): '''Beacon advertising class''' def __init__(self, sec=5): self.my_uuid = "11111111-2222-3333-4444-555555555555" self.my_major = 1 self.my_minor = 1 self.my_txpower = 1 self.my_interval = 200 self.service = BeaconService("hci0") self.advertise(sec) def advertise(self, sec=5): print("start Advertising.") self.service.start_advertising(self.my_uuid, self.my_major, self.my_minor, self.my_txpower, self.my_interval) #service.start_advertising("11111111-2222-3333-4444-555555555555",1,1,1,200) time.sleep(sec) self.service.stop_advertising() print("Done Advertising.")
class MyScanning(object): '''Beacon Scanning class''' def __init__(self, scan_addr=0, sec=3): self.found = False print("Start scanning.") self.service = BeaconService("hci0") self.devices = self.service.scan(sec) self.print_device(scan_addr) print("Done scanning.") def __str__(self): ret = "No" if (self.found == True): ret = "Yes" return ret def print_device(self, scan_addr): print("Result") # for address,name in list(self.devices.items()): # print ("name:{}, address:{}".format(name,address)) for addr, data in list(self.devices.items()): my_addr = addr my_uuid = data[0] my_major = data[1] my_minor = data[2] my_power = data[3] my_rssi = data[4] print ("Beacon: Addr={ADDR} uuid={UUID} ver={MAJOR}.{MINOR} txpower={PWR} rssi={RSSI}"\ .format(ADDR=my_addr,UUID=my_uuid,MAJOR=my_major,MINOR=my_minor,PWR=my_power,RSSI=my_rssi) ) if (scan_addr != 0 and scan_addr == my_addr): self.found = True
def main(): ser = serial.Serial('/dev/ttyACM0', 9600) server_sock = BluetoothSocket(RFCOMM) server_sock.bind(("", PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" advertise_service( server_sock, "AquaPiServer", 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) client_sock.send("connect") client_sock.setblocking(0) client_sock.settimeout(0.5) command = "" cnt = 0 loglist = [] data = "" flag = 0 while True: try: data = client_sock.recv(512) data = data.decode() except: if flag == 0: print("time out") continue print(data) if flag == 0: flag = 1 if data == "start": print("GGGG") service = BeaconService("hci0") devices = service.scan(2) for address, beacon_data in list(devices.items()): b = Beacon(beacon_data, address) if len(loglist) < 3: loglist.append(b._rssi) cnt += 1 else: loglist[cnt % 3] = b._rssi cnt += 1 x = sum(loglist) / 3 RSSI = 0.9 * x + 0.1 * b._rssi #print(RSSI,'rssi') calculate = RSSI #calculate = (sum(loglist)-max(loglist)-min(loglist))/8 #print('rssi',calculate) command = "g" if RSSI < -80 and command == "g": command = "g" #print(command) ser.writelines('g') if b._rssi > -75: command = "s" #print(command) ser.writelines('s') else: command = "s" #print(command) elif data == "l": print('l') data = "start" ser.writelines('l') elif data == "r": print('r') ser.writelines('r') data = "start" elif data == "end": print('end') flag = 0 client_sock.close() server_sock.close() break ## only turn when close #print('s',loglist) #ser.writelines(command) #print(command,loglist) #else : ser.writelines('g') #print ("send [%s]" % tempchar) #else : #except IOError: #pass #client_sock.close() #server_sock.close() print("all done")
# Copyright (C) 2014, Oscar Acena <*****@*****.**> # This software is under the terms of Apache License v2 or later. from gattlib import BeaconService class Beacon(object): def __init__(self, data, address): self._uuid = data[0] self._major = data[1] self._minor = data[2] self._power = data[3] self._rssi = data[4] self._address = address def __str__(self): ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\ " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\ .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major, MINOR=self._minor, POWER=self._power, RSSI=self._rssi) return ret service = BeaconService("hci0") devices = service.scan(2) for address, data in list(devices.items()): b = Beacon(data, address) print(b) print("Done.")
ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\ " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\ .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major, MINOR=self._minor, POWER=self._power, RSSI=self._rssi) return ret #service = BeaconService("hci0") #devices = service.scan(2) loglist = [] cnt = 0 RSSI = 0 w = 0.9 while True: service = BeaconService("hci0") devices = service.scan(2) for address, data in list(devices.items()): #b = Beacon(data, address) b = Beacon(data, address) #l = math.log(abs(b._rssi)) print(b._address, b._rssi) #print("Done.") #print(b._address, b._rssi) #command = raw_input("command \n") if len(loglist) < 3: loglist.append(b._rssi) cnt += 1
#!/usr/bin/python # -*- mode: python; coding: utf-8 -*- # Copyright (C) 2014, Oscar Acena <*****@*****.**> # This software is under the terms of Apache License v2 or later. from gattlib import BeaconService import time service = BeaconService("hci0") service.start_advertising("11111111-2222-3333-4444-555555555555", 1, 1, 1, 200) time.sleep(5) service.stop_advertising() print("Done.")
from gattlib import DiscoveryService, BeaconService service = DiscoveryService("Automatic Lights") devices = service.discover(1) for addr, name in devices.items(): print("name: {}, addr : {}".format(name, addr)) print(devices) service = BeaconService() x = service.scan(15) print(x)
class Beacon(object): def __init__(self, data, address): self._uuid = data[0] self._major = data[1] self._minor = data[2] self._power = data[3] self._rssi = data[4] self._address = address def __str__(self): ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\ " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\ .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major, MINOR=self._minor, POWER=self._power, RSSI=self._rssi) return ret service = BeaconService("hci0") def scan(): devices = service.scan(1) for address, data in list(devices.items()): b = Beacon(data, address) print(b) while True: scan()
#!/usr/bin/python3 # -*- mode: python; coding: utf-8 -*- # Copyright (C) 2014, Oscar Acena <*****@*****.**> # This software is under the terms of Apache License v2 or later. from gattlib import BeaconService import time service = BeaconService("hci0") service.start_advertising("11111111-2222-3333-4444-555555555555", 1, 1, 1, 200) time.sleep(5) service.stop_advertising() print("Done.")
def main(): server_sock = BluetoothSocket(RFCOMM) server_sock.bind(("", PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] global camera camera = picamera.PiCamera() uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" advertise_service( server_sock, "AquaPiServer", 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) command = "" cnt = 0 loglist = [] data = "" flag = 0 prev_data = "" while True: try: data = client_sock.recv(1024) data = data.decode() print(data, "AAAAAAAAA") except: ser.flushInput() read_serial = ser.readline() uu_dist = read_serial[:-2] try: u_dist = float(uu_dist) except: u_dist = 800.0 if flag == 0: print("time out") continue # print(data, type(data)) if flag == 0: flag = 1 if data == "cam": client_sock.setblocking(2) # client_sock.settimeout(0) print('running') prev_data = "cam" data_machine = machine() myfile = open('cam.jpg', 'rb') sbytes = myfile.read() file_size = str(len(sbytes)) client_sock.send(file_size) client_sock.sendall(sbytes) # client_sock.send(b'end') client_sock.send(data_machine) # print("data:", data) print(data, "BBBBBBBBB") if data == "start": prev_data = "start" client_sock.setblocking(0) client_sock.settimeout(0.1) if (flag == 0 or flag == 1): ser.flushInput() read_serial = ser.readline() uu_dist = read_serial[:-2] try: u_dist = float(uu_dist) except: u_dist = 800.0 flag = 2 command = "g" ser.writelines('g') service = BeaconService("hci0") try: for i in range(10): devices = service.scan(2) if devices != {}: break prev_devices = devices except: devices = prev_devices for address, beacon_data in list(devices.items()): b = Beacon(beacon_data, address) print("prev : ", command) if command == "g": if u_dist < 600: command = "s" ser.writelines('s') else: if b._rssi < -75 and u_dist >= 600: command = "g" ser.writelines('g') print(b._rssi, u_dist, command) elif data == "l" and prev_data == "start": print('left') data = "start" ser.writelines('l') elif data == "r" and prev_data == "start": print('right') ser.writelines('r') data = "start" elif data == "end": print('end') flag = 0 ser.writelines('s') break else: data = "start" print("disconnected") client_sock.close() server_sock.close() print("all done")