123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #!/usr/bin/env python
- #version : 2024.08.08
- #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/")
- sys.path.append("/root/preset/drivers/pylib/")
- from CocoPi import BUTTON
- import os
- ScreenOrientation = False
- try:
- if os.path.exists("/etc/cameraSize.cfg"):
- cameraSize = True
- else:
- cameraSize = False
- except:
- cameraSize = False
- def getLcdRotation(cameraCapture):
- global cameraSize
- if cameraSize:
- return lcdRotationNew(cameraCapture)
- else:
- return lcdRotation(cameraCapture)
- def lcdRotationNew(inputImg):
- global cameraSize,ScreenOrientation
- imageRotationBuffer = inputImg.crop(0, 0, 320, 240)
- if ScreenOrientation:
- imgRotationAim = image.new(size = (240, 320))
- rotationAngle = 90
- GETROTATION = imageRotationBuffer.rotate(+rotationAngle, adjust=1)
- else:
- imgRotationAim = image.new(size = (320, 240))
- GETROTATION = imageRotationBuffer
- GETROTATION = imgRotationAim.draw_image(GETROTATION,0,0,alpha=1)
- return GETROTATION
- def lcdRotation(inputImg):
- global cameraSize,ScreenOrientation
- imageRotationBuffer = inputImg.crop(0, 0, 240, 320)
- if ScreenOrientation:
- imgRotationAim = image.new(size = (240, 320))
- rotationAngle = 180
- else:
- imgRotationAim = image.new(size = (320, 240))
- rotationAngle = 90
- GETROTATION = imageRotationBuffer.rotate(+rotationAngle, adjust=1)
- GETROTATION = imgRotationAim.draw_image(GETROTATION,0,0,alpha=1)
- return GETROTATION
-
- camera.camera.config(size=(240,320))
- 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"
- _canvas_x = 0
- _canvas_y = 0
- keyboardStr = ["Input:",""]
- 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
- ssidInfo = ""
- passwordInfo = ""
- checkConnectState = False
- connectText = ""
- startConnect=False
- wifiConnectState = False
- # PublicIp=""
- PrivateIP=""
- runConnectSig=True
- connectSuccessSig=False
- while True:
- if wifi_is_content():
- break
- else:
- canvas = getLcdRotation(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, "Connect 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, "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 = "Connect WIFI..."
- runConnectSig= False
- else:
- passwordInfo = ""
- ssidInfo = ""
- connectText = "WIFI Connect 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:"+ssidInfo, scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
- canvas.draw_string(int(X) , int(Y - 25) , "PSD:"+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("Input:"), 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("Input:"), scale = 1, color = (255,255,255) , thickness = 1)
- v831_display_show_canvas(canvas)
|