コード例 #1
0
ファイル: web_server.py プロジェクト: AbdElhalim12/picar-x
 def __init__(self):
     self.gs_list = [0,0,0]
     self.sound_name = ['Weapon_Armor.wav', 'Emergency_Alarm.wav', 'Emergency_Truck_Honk.wav', 'Weapon_Continue_Shooting.wav', 'Weapon_Shell_Drop.wav']
     self.music_name = ["excitement.mp3", 'peace.mp3', 'power.mp3', 'spry.mp3']
     self.record_name = ['1.mp3', '2.mp3', '3.mp3', '4.mp3', '5.mp3']
     self.us = Ultrasonic(Pin('D0'), Pin('D1'))
     self.music_flag = True
     self.tts = TTS()
     self.current_music = -1
コード例 #2
0
import sys
sys.path.append(r'/opt/ezblock')
from ezblock import __reset_mcu__
import time
__reset_mcu__()
time.sleep(0.01)
from vilib import Vilib
from picarmini import dir_servo_angle_calibration
from picarmini import set_camera_servo2_angle
from ezblock import delay
from ezblock import TTS
from picarmini import camera_servo1_angle_calibration
from picarmini import camera_servo2_angle_calibration
from ezblock import WiFi

__tts__ = TTS()

Vilib.camera_start(True)
Vilib.human_detect_switch(True)
dir_servo_angle_calibration(0)
camera_servo1_angle_calibration(0)
camera_servo2_angle_calibration(0)
WiFi().write('DE', 'Projesh', 'Syepto17')


def forever():
    if (Vilib.human_detect_object(('number'))) >= 1:
        set_camera_servo1_angle(30)
        delay(150)
        set_camera_servo1_angle((-30))
        delay(150)
コード例 #3
0
import sys
sys.path.append(r'/opt/ezblock')
from ezblock import TTS
from Music import *

count = None
__tts__ = TTS("espeak")


def forever():
    global count
    __tts__.say('Ready')
    count = 3
    for count2 in range(3):
        __tts__.say(count)
        count = count - 1
    sound_effect_play('Weapon_Continue_Shooting.wav', 50)


if __name__ == "__main__":
    forever()
コード例 #4
0
ファイル: web_server.py プロジェクト: AbdElhalim12/picar-x
class Websocket():
    recv_dict = {
        'JA':[0,0],  #小车控制
        'JB':[0,0],  #云台控制
        'SS':['off',0,0.5], #喇叭播放音效
        'SM':['off',0,0.5], #喇叭播放音乐
        # 'SL':['off',0,0.5], #喇叭播放录音
        'TT':['off','you'],  #TTS
        'US':'off',  #超声波
        'GS':"off", #灰度开关
        'OA':'off',  #避障开关
        'TL':['off',950], #巡线开关
        'CD':['off',110], #悬崖开关
        'HT':'off', #人脸开关
        'HF':'off', #人脸跟踪
        'CT':'off', #颜色开关
        'CF':'off', #颜色跟踪
        'MS':['off',0,0], #车轮测试
        'DO':['off',0],  #方向舵机校准
        'PO':['off',0],  #云台左右舵机
        'TO':['off',0] , #云台上下舵机
        'CC':'blue', #颜色选择
        
    }

    send_dict = {
        'TP':'PiCar-X',
        'GS':[0,0,0],
        'US':20,
        'DO':0,  #方向舵机校准值
        'PO':0,  
        'TO':0,
        'CC':'blue',
        'AD':'http://' + ip + ':8888/mjpg',
        # 'FD':'http://' + ip + ':8000/records',
        'FF':'True'
    } 
    
    def __init__(self):
        self.gs_list = [0,0,0]
        self.sound_name = ['Weapon_Armor.wav', 'Emergency_Alarm.wav', 'Emergency_Truck_Honk.wav', 'Weapon_Continue_Shooting.wav', 'Weapon_Shell_Drop.wav']
        self.music_name = ["excitement.mp3", 'peace.mp3', 'power.mp3', 'spry.mp3']
        self.record_name = ['1.mp3', '2.mp3', '3.mp3', '4.mp3', '5.mp3']
        self.us = Ultrasonic(Pin('D0'), Pin('D1'))
        self.music_flag = True
        self.tts = TTS()
        self.current_music = -1
        
        
    async def recv_server_func(self, websocket):
        while 1:
            tmp = await websocket.recv()
            print(tmp)
            tmp = json.loads(tmp)
            
            for key in tmp:
                self.recv_dict[key] = tmp[key]
            print("recv_dict: %s"%self.recv_dict)
            self.remote_control(self.recv_dict['JA'])
            self.camera_contrl(self.recv_dict['JB'])
            # print(recv_dict)
            if self.recv_dict['MS'][0] =='on':
                car.set_motor_speed(int(self.recv_dict['MS'][1]), int(self.recv_dict['MS'][2]))
            if self.recv_dict['DO'][0] =='on':
                car.dir_servo_angle_calibration(int(self.recv_dict['DO'][1]))
            if self.recv_dict['PO'][0] =='on':
                car.camera_servo1_angle_calibration(-int(self.recv_dict['PO'][1]))
            if self.recv_dict['TO'][0] =='on':
                car.camera_servo2_angle_calibration(-int(self.recv_dict['TO'][1]))
            Vilib.detect_color_name(str(self.recv_dict['CC']))
    
    def map(self, value, inMin, inMax, outMin, outMax):
        return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin
            
    def remote_control(self, move):
        dr = int(move[0])
        dr_angle = self.map(dr, -100, 100, -45, 45)
        car.set_dir_servo_angle(dr_angle)
        # print("dr_angle:%s"%dr_angle)
        # time.sleep(0.1)
        pow = int(move[1])
        car.set_power(pow)
        
    
    def camera_contrl(self, value):
        val1 = int(value[0])
        val1 = self.map(val1, -100, 100, -90, 90)
        car.set_camera_servo1_angle(-val1)
        val2 = int(value[1])
        val2 = self.map(val2, -100, 100, -45, 45)
        car.set_camera_servo2_angle(-val2)
    

    async def send_server_func(self, websocket): 
        while 1:
           
            if self.recv_dict['US'] =='on':
                self.send_dict['US'] = self.us.read()
                # print(self.get_us_distance(int(self.recv_dict['US'][1])))
            
            if  self.recv_dict['GS'] =='on': 
                self.send_dict['GS'] = self.gs_list
            self.send_dict['DO'] = car.dir_cal_value
            self.send_dict['PO'] = car.cam_cal_value_1
            self.send_dict['TO'] = car.cam_cal_value_2
            self.send_dict['CC'] = Vilib.detect_obj_parameter['color_default'] 
            # print(self.send_dict)
           
            await websocket.send(json.dumps(self.send_dict))
            await asyncio.sleep(0.01)
    
    
        
    async def main_func(self):
        while 1:
            self.gs_list = car.get_adc_value()
            if self.recv_dict['CD'][0] == 'on':
                if self.is_on_edge(int(self.recv_dict['CD'][1]),self.gs_list):
                    car.backward(50)
                    time.sleep(0.5)
                    car.stop()

            if self.recv_dict['TL'][0] =='on':
                # print("line_follow on")
                car.ref = int(self.recv_dict['TL'][1])
                car.line_follow()

            if self.recv_dict['OA'] == 'on':
                # print("ultrasonic on")
                distance = self.us.read()
                if distance > 40 or distance == -2:
                    car.set_dir_servo_angle(0)
                    car.forward(50)
                elif distance < 10:
                    car.set_dir_servo_angle(-40)
                    car.backward(50)
                    time.sleep(0.5)
                elif distance < 30:
                    car.set_dir_servo_angle(40)
                    car.forward(50)
                    time.sleep(0.5)
                    
            
            if self.recv_dict['HT'] == 'on':
                Vilib.human_detect_switch(True)
            
            if self.recv_dict['HT'] == 'off':
                Vilib.human_detect_switch(False)
                
            if self.recv_dict['HF'] == 'on':
                car.human_follow()
            
            if self.recv_dict['CT'] == 'on':
                Vilib.color_detect_switch(True)
            
            if self.recv_dict['CT'] == 'off':
                Vilib.color_detect_switch(False)
            
            if self.recv_dict['CF'] == 'on':
                car.color_follow()
            
            if self.recv_dict['SS'][0] == 'on':
                music.sound_effect_threading(self.sound_name[int(self.recv_dict['SS'][1])], float(self.recv_dict['SS'][2]))
                self.recv_dict['SS'][0] = 'off' 
            
            if self.recv_dict['SM'][0] == 'on':
                temp = int(self.recv_dict['SM'][1])
                if self.current_music != temp:
                    music.music_stop()
                    self.music_flag = True
                    self.current_music = temp
                if self.music_flag:
                    try:
                        music_file = self.music_name[self.current_music]
                        volume = float(self.recv_dict['SM'][2])
                        music.background_music(music_file, volume=volume) 
                    except IndexError:
                        print("no such music file: ", int(self.recv_dict['SM'][1]) + 1)
                    self.music_flag = False
                # self.recv_dict['SM'][0] = 'off' 
            elif self.recv_dict['SM'][0] == 'off':
                if self.music_flag == False:
                    music.music_stop()
                    self.music_flag = True
            
            # if self.recv_dict['SL'][0] == 'on':
            #     if self.found_name(self.record_name[int(self.recv_dict['SL'][1])]):
            #         self.send_dict['FF'] = 'True'
            #         print("play")
            #         music.record_play(self.record_name[int(self.recv_dict['SL'][1])],volume = float(self.recv_dict['SL'][2]))
            #         self.recv_dict['SL'][0] = 'off'
            #     else:
            #         self.send_dict['FF'] = 'False'
                
                
            if self.recv_dict['TT'][0] == 'on':
                self.tts.say(self.recv_dict['TT'][1]) 
                self.recv_dict['TT'][0] = 'off'  
            
        
            await asyncio.sleep(0.01)
            
    def is_on_edge(self, ref, gs_list):
        ref = int(ref)
        if gs_list[2] <= ref or gs_list[1] <= ref or gs_list[0] <= ref:  
            return True
        else:
            return False 
    
    def found_name(self, name):
        if name in os.listdir("./records"):
            return True
        else:
            return False
        
    
     
    
        
    async def main_logic_1(self, websocket, path):
        while 1:
            await self.recv_server_func(websocket)

    async def main_logic_2(self, websocket, path):
        while 1:
            await self.send_server_func(websocket)
            
    def test(self):
        try:
            for _ in range(10):
                # ip = getIP()
                if ip:
                    print("IP Address: "+ ip)
                    # start_http_server()
                    break
                time.sleep(1)
            # ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
            # localhost_pem = pathlib.Path(__file__).with_name("server.pem")
            # ssl_context.load_cert_chain(localhost_pem)
            start_server_1 = websockets.serve(self.main_logic_1, ip, 8765)
            start_server_2 = websockets.serve(self.main_logic_2, ip, 8766)
            print('Start!')
            tasks = [self.main_func(),start_server_1,start_server_2]
            asyncio.get_event_loop().run_until_complete(asyncio.wait(tasks))
            asyncio.get_event_loop().run_forever()
 
        finally:
            print("Finished")
            car.stop()