#!/usr/bin/env python #version : 2023.09.07 #language : en from maix import display from maix import image from maix import camera from maix import mjpg from maix import utils import base64 import time import requests import json from evdev import InputDevice, categorize, ecodes import os import sys sys.path.append("/root/") from CocoPi import BUTTON camera.camera.config(size=(320,240)) image.load_freetype("/root/preset/fonts/simhei.ttf") canvas = image.new(size = (320, 240)) try: # 获取键盘设备 keyboard = InputDevice('/dev/input/event1') # 替换成实际的键盘设备路径 except: keyboard = "" if keyboard=="": canvas.draw_string(0,12, "Keyboard not detected", scale = 1.3, color = (255,255,255) , thickness = 1) display.show(canvas) time.sleep(3) sys.exit() def v831_display_show_canvas(displayShow): global _canvas_y,_canvas_x CANVASSHOWIMGAGE = "" if ScreenOrientation: displayShowCanvas = image.new(size = (240, 320)) displayShowCanvas.draw_rectangle(0,0,240,320, color=(0,0,0), thickness=-1) displayShowCanvas.draw_image(displayShow,_canvas_x,_canvas_y,alpha=1) displayShowVER = displayShowCanvas.crop(0,0,240,320) displayShowVER = displayShowVER.rotate(-90, adjust=1) CANVASSHOWIMGAGE = displayShowVER display.show(displayShowVER) else: displayShowCanvas = image.new(size = (320, 240)) displayShowCanvas.draw_rectangle(0,0,320,240, color=(0,0,0), thickness=-1) displayShowCanvas.draw_image(displayShow,_canvas_x,_canvas_y,alpha=1) CANVASSHOWIMGAGE = displayShowCanvas display.show(displayShowCanvas) def get_post_chatgpt(datas): global list_num # 目标URL url = "https://gpt.cocorobo.cn/askForTopic" payload = json.dumps({"topic": datas}) headers={ "Content-Type":"application/json" } response=requests.request("POST", url, headers=headers, data=payload) # try: # keyboardStr[list_num] = "result" # except: # keyboardStr[list_num] = "fail" # pass if response.status_code == 200: # keyboardStr[list_num] = json.loads(response.text)["FunctionResponse"]["result"] result_num = len(json.loads(response.text)["FunctionResponse"]["result"])//20 for i in range(result_num+1): keyboardStr.append("") keyboardStr[list_num] = json.loads(response.text)["FunctionResponse"]["result"][i*20:(i+1)*20] list_num = list_num+1 else: keyboardStr[list_num] = "fail" ScreenOrientation = False _canvas_x = 0 _canvas_y = 0 keyboardStr = ["Enter here:",""] list_num = 1 # 判断是否联网 key_B = BUTTON(8) key_C = BUTTON(13) key_D = BUTTON(7) def wifi_is_content(): global getDateNum cmd = "ifconfig" res = os.popen(cmd).read() data = False if res.rfind("inet addr:")!=48: data = True return data if ScreenOrientation: CAMERAROTATE = +180 else: CAMERAROTATE = +90 ssidInfo = "" passwordInfo = "" checkConnectState = False connectText = "" startConnect=False wifiConnectState = False # PublicIp="" PrivateIP="" runConnectSig=True connectSuccessSig=False while True: if wifi_is_content(): break else: canvas = camera.capture() if ssidInfo!="" and passwordInfo!="": startConnect=True #connectText = "Waitting for Connection..." #canvas.draw_string(10,40, ssidInfo+" "+str(len(ssidInfo))+" "+str(type(ssidInfo)), scale = 1.5, color = (0,0,0), thickness = 1) canvas.draw_string(10,50, "Connecting to wifi...", scale = 1.5, color = (0,0,0), thickness = 1) display.show(canvas) if startConnect==True: canvas_1 = image.new(size = (320, 320), color = (255,255,255), mode = "RGB") canvas.draw_image(canvas_1,0,0, alpha=0.4) if wifiConnectState == True: if key_B.is_pressed(): while (key_B.is_pressed() == True): time.sleep(0.001) startConnect= False connectText = "" checkConnectState = False connectSuccessSig = False wifiConnectState = False runConnectSig== True ssidInfo="" passwordInfo="" if checkConnectState == True: if connectSuccessSig == False: # PublicIp=getPublicIp() connectSuccessSig = True connectText = "Wifi connection successfully!" # canvas.draw_string(10,80, "The WLAN PUBLIC IP:" + PublicIp, scale = 1.5, color = (0,0,0), thickness = 1) canvas.draw_string(10,110, "THE WLAN PRIVATE IP:" + PrivateIP, scale = 1.5, color = (0,0,0), thickness = 1) # canvas.draw_image((image.open("/root/preset/img/restart_ff0000_24x24.png")).rotate(0, adjust=0),8,216,alpha=1) ssidInfo="" passwordInfo="" canvas.clear() break else: pass else: if checkConnectState == False: os.system("wifi_disconnect_ap_test") os.system('wifi_connect_chinese_ap_test '+ssidInfo+' '+passwordInfo+'') checkConnectState = True if checkConnectState == True: if key_B.is_pressed(): while (key_B.is_pressed() == True): time.sleep(0.001) startConnect= False connectText = "" checkConnectState = False connectSuccessSig = False wifiConnectState = False runConnectSig== True passwordInfo = "" ssidInfo = "" else: if runConnectSig== True: connectText = "Connecting to wifi,please wait..." runConnectSig= False else: passwordInfo = "" ssidInfo = "" connectText = "Wifi connection failed!" canvas.draw_image((image.open("/root/preset/img/restart_ff0000_24x24.png")).rotate(0, adjust=0),8,216,alpha=1) canvas.draw_string(10,50, connectText, scale = 1.5, color = (0,0,0) , thickness = 1) else: mks = canvas.find_qrcodes() for mk in mks: #外框数据 X = mk['x'] Y = mk['y'] W = mk['w'] H = mk['h'] #二维码信息 string = mk['payload'] codeData = string.split(";") ssidInfo = codeData[0].split(":")[1] passwordInfo = codeData[1].split(":")[1] #画外框 canvas.draw_rectangle(X, Y, X + W, Y + H, color=(0, 0, 255), thickness = 2) #打印信息 canvas.draw_string(int(X) , int(Y - 45) , "wifi name:"+ssidInfo, scale = 1, color = (255, 0, 0), thickness = 2) #内框ID canvas.draw_string(int(X) , int(Y - 25) , "password:"+passwordInfo, scale = 1, color = (255, 0, 0), thickness = 2) #内框ID canvas.draw_image((image.open("/root/preset/img/exit_ff0000_24x24.png")).rotate(0, adjust=0),288,216,alpha=1) v831_display_show_canvas(canvas) # 键盘事件 canvas.draw_string(0,0, str("Enter here:"), scale = 1, color = (255,255,255) , thickness = 1) v831_display_show_canvas(canvas) for event in keyboard.read_loop(): if event.type == ecodes.EV_KEY: key_event = categorize(event) if key_event.keystate == key_event.key_down: # print(keyboardStr,key_event.keycode[4:].lower()) if key_event.keycode[4:] == "SPACE": keyboardStr[list_num] = keyboardStr[list_num] + " " elif key_event.keycode[4:] == "BACKSPACE": keyboardStr[list_num] = keyboardStr[list_num][:-1] if len(keyboardStr[list_num]) ==0 and list_num>1: list_num = list_num - 1 elif key_event.keycode[4:] == "ENTER": keyboardStr.append("") list_num = list_num + 1 get_post_chatgpt(keyboardStr[list_num-1]) else: keyboardStr[list_num] = keyboardStr[list_num] + key_event.keycode[4:].lower() # print(list_num,keyboardStr) if len(keyboardStr[list_num]) >40: keyboardStr.append("") list_num = list_num + 1 canvas.clear() if list_num>16: for i in range(list_num,list_num-16,-1): canvas.draw_string(0,15*(i-(list_num-15)), str(keyboardStr[i]), scale = 1, color = (255,255,255) , thickness = 1) else: for i in range(list_num+1): canvas.draw_string(0,15*i, str(keyboardStr[i]), scale = 1, color = (255,255,255) , thickness = 1) canvas.draw_string(0,0, str("Enter here:"), scale = 1, color = (255,255,255) , thickness = 1) v831_display_show_canvas(canvas)