123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- #!/usr/bin/env python
- #version : 2024.08.08
- #language : en
- #hardware : pi
- import time
- from maix import *
- import gc
- import os,sys
- import sys
- sys.path.append('/root/')
- from CocoPi import BUTTON
- from CocoPi import stm8s
- from CocoPi import multiFuncGpio
- from CocoPi import singleRgb
- from CocoPi import LED
- gc.enable()
- gc.collect()
- iic_slaver=stm8s()
- iic_slaver.clear()
- PIXEL_LED1= multiFuncGpio(0,7)
- PIXEL_LED2= multiFuncGpio(1,7)
- PIXEL_LED1.pixelInit_()
- time.sleep(0.1)
- PIXEL_LED2.pixelInit_()
- time.sleep(0.1)
- L1=singleRgb()
- L1.setColor(0,0,0)
- L1.show()
- time.sleep(0.1)
- L2=LED()
- L2.out(0)
- del iic_slaver
- del PIXEL_LED1
- del PIXEL_LED2
- del L1
- del L2
- count = 0
- def gc_log():
- global count
- gc.collect()
- count = count + 1
- splash_theme_color = (15,21,46)
- btn_selected = (255,255,255)
- btn_unselected = (76,86,127)
- txt_selected = (255,255,255)
- txt_unselected = (76,86,127)
- color_splash_theme = (15,21,46)
- color_blue = (31,61,185)
- color_blue_lighter = (60,131,211)
- color_white = (255,255,255)
- color_gray = (60,73,126)
- color_orange = (255,165,0)
- color_red = (255,0,0)
- btn_width = 134
- btn_height = 52
- btn_y_base = 5
- btn_col = (btn_y_base, btn_y_base+btn_width, btn_y_base+152)
- btn_row = 180
- main_title = (
- "Run",
- "Latest code",
- "Open",
- "Demo list",
- "B",
- "A"
- )
- splash_text = (
- "Version: 2024-08-08 ",
- "System version: N/A",
- "2. After loading the code,press ",
- " KEY-A for 2s to back to start ",
- " interface.",
- "Running Latest Code...",
- "Error: code not found.",
- "Error: invalid syntax",
- "Opening Demo Menu...",
- "Demo menu not found.",
- "Run",
- "Loading...",
- "Back",
- "Press KEY-C To Back",
- "Press KEY-D To Reboot",
- "Press KEY-B To Poweroff",
- "1. Press KEY-A for 5s to shut down",
- " the CocoPi or reboot the CocoPi.",
- " ",
- "CocoPi V6",
- "/ Linux / AIot /Python /",
- "/Graphical programming /",
- "------- BASIC -------",
- "-------- AI ---------",
- "-------- IoT --------",
- )
- title_logo_text = image.open("/root/preset/img/cocorobo_text.jpg")
- iconUpNp = image.open("/root/preset/img/arrow_up_filled.jpg")
- iconUpP = image.open("/root/preset/img/arrow_up_pressed.jpg")
- iconDownNp = image.open("/root/preset/img/arrow_down_filled.jpg")
- iconDownP = image.open("/root/preset/img/arrow_down_pressed.jpg")
- frostedGlass = image.open("/root/preset/img/frostedglass_.jpg")
- #backUp = image.open("/root/preset/img/backup_48x48.png")
- #powerOff = image.open("/root/preset/img/poweroff_48x48.png")
- #reBoot = image.open("/root/preset/img/reboot_48x48.png")
- run_user_code_path='/root/user_latest_code.py'
- key_A = BUTTON(14)
- key_B = BUTTON(8)
- key_C = BUTTON(13)
- key_D = BUTTON(7)
- splash = image.new(size=(320, 240),mode = "RGB")
- img_drop=image.new(size=(320,240),mode="RGB")
- demo_i=0
- demo_j=0
- demo_m=0
- demo_n=0
- pressTime=0
- systemRunNum=0
- image.load_freetype("/root/preset/fonts/CascadiaCodePL-Italic.ttf")
- def screenFirstPage():
- from maix import display,image,camera
- global splash,title_logo_text,btn_col,btn_row,splash_text,txt_unselected,txt_selected,btn_selected,btn_unselected,\
- splash_theme_color,btn_height,btn_width,main_title,menuSelect,gc_log,demo_i,demo_j,demo_m,demo_n,screenShow,img_drop,\
- frostedGlass
- gc_log()
-
- splash.clear()
- splash.draw_rectangle(0,0,320,320,color=splash_theme_color,thickness=-1)
- splash.draw_image(title_logo_text, btn_col[0]+16, 10)
- x, y = image.get_string_size(splash_text[0], 1)
-
- splash.draw_string(btn_col[0]+16, 40, splash_text[19]+" "+splash_text[0], color=(0,255,255), thickness = 1)
- # splash.draw_string(btn_col[0], 60, splash_text[20], color=(0,255,255), thickness = 1)
- # splash.draw_string(btn_col[0], 80, splash_text[21], color=(0,255,255), thickness = 1)
- # splash.draw_string(btn_col[0], 60, splash_text[0], color=(0,255,255), thickness = 1)
- splash.draw_string(btn_col[0]+16, btn_row-105, splash_text[16], color=txt_unselected, thickness = 1)
- splash.draw_string(btn_col[0]+16, btn_row-85, splash_text[17], color=txt_unselected, thickness = 1)
- #splash.draw_string(btn_col[0], btn_row-105, splash_text[18], color=txt_unselected, thickness = 1)
- splash.draw_string(btn_col[0]+16, btn_row-65, splash_text[2], color=txt_unselected, thickness = 1)
- splash.draw_string(btn_col[0]+16, btn_row-45, splash_text[3], color=txt_unselected, thickness = 1)
- splash.draw_string(btn_col[0]+16, btn_row-25, splash_text[4], color=txt_unselected, thickness = 1)
- if menuSelect==0:
- splash.draw_rectangle(btn_col[1]+40, btn_row, btn_col[1]+btn_width+42, btn_row+btn_height, color=btn_selected, thickness=1)
- splash.draw_string(btn_col[1]+52, btn_row+7, main_title[2], color=txt_selected, thickness = 1)
- splash.draw_string(btn_col[1]+52, btn_row+27, main_title[3], color=txt_selected, thickness = 1)
- splash.draw_string(btn_col[1]+157, btn_row+27, main_title[5], color=txt_unselected, thickness = 1)
- splash.draw_rectangle(btn_col[0], btn_row, btn_col[0]+btn_width, btn_row+btn_height, color=btn_selected, thickness=1)
- splash.draw_string(btn_col[0]+96, btn_row+7, main_title[0], color=txt_selected, thickness = 1)
- splash.draw_string(btn_col[0]+26, btn_row+27, main_title[1], color=txt_selected, thickness = 1)
- splash.draw_string(btn_col[0]+7, btn_row+27, main_title[4], color=txt_unselected, thickness = 1)
- if menuSelect==1:
- splash.draw_rectangle(btn_col[0], btn_row, btn_col[0]+btn_width, btn_row+btn_height, color=btn_unselected, thickness=1)
- splash.draw_string(btn_col[0]+7, btn_row+7, main_title[0], color=txt_unselected, thickness = 1)
- splash.draw_string(btn_col[0]+7, btn_row+27, main_title[1], color=txt_unselected, thickness = 1)
- splash.draw_rectangle(btn_col[1], btn_row, btn_col[1]+btn_width, btn_row+btn_height, color=btn_selected, thickness=1)
- splash.draw_string(btn_col[1]+7, btn_row+7, main_title[2], color=txt_selected, thickness = 1)
- splash.draw_string(btn_col[1]+7, btn_row+27, main_title[3], color=txt_selected, thickness = 1)
- splash.draw_image(frostedGlass, 0, 0,alpha=0.2)
- #screenShow()
- display.show(splash)
- def screenSecondPage():
- from maix import display, image,camera
- global splash,title_logo_text,btn_col,btn_row,splash_text,txt_unselected,txt_selected,btn_selected,btn_unselected,\
- splash_theme_color,btn_height,btn_width,main_title,demoSelect,gc_log,color_splash_theme,color_blue,color_blue_lighter,\
- color_white,color_gray,color_orange,color_red,iconUpNp,iconUpP,iconDownNp,iconDownP,demoListText,screenShow,img_drop,\
- frostedGlass
- gc_log()
- splash.clear()
- splash.draw_rectangle(0,0,320,240,color=splash_theme_color,thickness=-1)
- splash.draw_rectangle(0,0,320,32,color=color_blue,thickness=-1)
- splash.draw_image(iconUpNp, 3, 3)
- splash.draw_image(iconDownNp, 287, 3)
-
- splash.draw_rectangle(0,214,50,240,color=color_blue,thickness=-1)
- splash.draw_rectangle(270,214,320,240,color=color_blue,thickness=-1)
- splash.draw_string(12, 218, splash_text[10], color=(255,255,255), thickness = 1)
- splash.draw_string(282, 218, splash_text[12], color=(255,255,255), thickness = 1)
-
- demo_i=int(demoSelect/6)
- demo_j=demoSelect%6
- demo_m=int(demoNum/6)
- demo_n=demoNum%6
- for j in range(6):
- if demo_i==demo_m:
- if j>=demo_n:
- pass
- else:
- if j==demo_j:
- pass
- else:
- splash.draw_rectangle(0,33+30*j,319,33+30*(j+1),color=color_gray,thickness=1)
- splash.draw_string(8, 39+30*j,demoListText[j+demo_i*6] , color=color_gray, thickness = 1)
- else:
- if j==demo_j:
- pass
- else:
- splash.draw_rectangle(0,33+30*j,319,33+30*(j+1),color=color_gray,thickness=1)
- splash.draw_string(8, 39+30*j,demoListText[j+demo_i*6] , color=color_gray, thickness = 1)
- if demoSelect<13:
- splash.draw_string(72, 10, splash_text[22], color=(255,255,255), thickness = 1)
- elif demoSelect<31:
- splash.draw_string(72, 10, splash_text[23], color=(255,255,255), thickness = 1)
- else:
- splash.draw_string(72, 10, splash_text[24], color=(255,255,255), thickness = 1)
- splash.draw_rectangle(0,33+30*demo_j,319,33+30*(demo_j+1),color=color_white,thickness=1)
- splash.draw_string(8, 39+30*demo_j,demoListText[demoSelect] , color=color_white, thickness = 1)
- splash.draw_string(146, 218, str(demoSelect+1), color=(255,255,255), thickness = 1)
- splash.draw_string(160, 218, "/"+str(demoNum), color=(255,255,255), thickness = 1)
- splash.draw_image(frostedGlass, 0, 0,alpha=0.2)
- #screenShow()
- display.show(splash)
- def systemPage():
- from maix import display, image,camera
- import time
- global splash,title_logo_text,btn_col,btn_row,splash_text,txt_unselected,txt_selected,btn_selected,btn_unselected,\
- splash_theme_color,btn_height,btn_width,main_title,demoSelect,gc_log,color_splash_theme,color_blue,color_blue_lighter,\
- color_white,color_gray,color_orange,color_red,iconUpNp,iconUpP,iconDownNp,iconDownP,demoListText,screenShow,img_drop,\
- frostedGlass
- for i in range(10):
- splash.draw_image(frostedGlass, 0, 0,alpha=0.2)
- #screenShow()
- display.show(splash)
- splash.draw_string(80, 68, splash_text[13], 1,color=(0,255,0), thickness = 1)
- splash.draw_string(80, 118, splash_text[14], 1,color=(255,255,0), thickness = 1)
- splash.draw_string(80, 168, splash_text[15], 1,color=(255,0,0), thickness = 1)
- #splash.draw_image(backUp, 20, 140)
- #screenShow()
- splash.draw_image((image.open("/root/preset/img/backup_00ff00_32x32.png")).rotate(0, adjust=0),40,60,alpha=1)
- splash.draw_image((image.open("/root/preset/img/reboot_ffff00_32x32.png")).rotate(0, adjust=0),40,110,alpha=1)
- splash.draw_image((image.open("/root/preset/img/poweroff_ff0000_32x32.png")).rotate(0, adjust=0),40,160,alpha=1)
-
- display.show(splash)
- pageVal=0
- menuSelect=0
- demoSelect=0
- execVal=0
- demoListText=(
- "Camera",
- "Photo Viewer",
- "Color Detection",
- "Audio Recorder",
- "Audio Player",
- "Play Music",
- "Play Video",
- "Time Counter",
- "Local Time Clock",
- "Servo Control",
- "Motor Control",
- "Picture Loop Play",
- "QR Code Scanner",
- "Human Detection",
- "Face Recognition",
- "Face Comparison",
- "Object Recognition",
- "Edge Detection",
- "Handwritten Digit Recognition",
- "Car License Plate Recognition",
- "Mask Detection",
- "Gesture Recognition",
- "Finger Guessing",
- "Wi-Fi QR Code Scanner",
- "About CocoPi",
- "Internet Camera",
- "Internet Weather Prediction",
- "Internet Time Clock",
- "Environment Detection",
- "Model Training:Data Collect",
- "Model Training:Deploy Model",
- "Mnist Model Training",
- "Mnist Camera Test",
- "CocoGPT",
- "CocoTerminal",
- "Picture Analysis",
- "Speech To Image",
- "Jumpbot",
- "Gluttonous Snake",
- "Sound Loudness Analysis",
- "Sound Spectrum Analysis",
- "checkout",
- "pull",
- "reset",
- )
- demoNameList=(
- "01_camera",
- "02_photoViewer",
- "03_colorDetection",
- "04_recorder",
- "05_audioPlayer",
- "06_musicPlayer",
- "07_videoPlayer",
- "08_timeCounter",
- "09_localTimeClock",
- "10_servoControl",
- "11_motorControl",
- "12_pictureLoopPlay",
- "13_qrCodeScanner",
- "14_humanDetection",
- "15_faceDetection",
- "16_faceComparison",
- "17_objectRecognition",
- "18_edgeDetection",
- "19_handWrittenDigiRecognition",
- "20_carLicensePlateRecognition",
- "21_maskDetection",
- "22_gestureRecognition",
- "23_fingerGuessing",
- "24_connectWiFi",
- "25_aboutCocoPi",
- "26_internetCamera",
- "27_internetWeatherPrediction",
- "28_internetTimeClock",
- "29_environmentDetection",
- "30_training_data_collect",
- "31_training_deploy_model",
- "32_mnistModelTraining",
- "33_mnistCameraTest",
- "34_CocoGPT",
- "35_CocoTerminal",
- "36_pictureAnalysis",
- "37_speechToImageSynthesis",
- "38_jumpbot",
- "39_gluttonousSnake",
- "40_soundLoudnessAnalysis",
- "41_soundSpectrumAnalysis",
- "checkout",
- "pull",
- "reset",
- )
- demoNum=len(demoListText)
- pageSig=1
- selectSig=1
- ###需要查询的文件夹目录及文件格式后缀###
- def getAimFileList(filePath="/root/",selectFile=".REC"):
- import os
- FileList=[]
- aimFilePath=filePath
- aimFile=selectFile
- aimFileLenth=len(selectFile)*(-1)
- for root,dirs,files in os.walk(aimFilePath):
- for name in files:
- if str(name)[aimFileLenth:]==aimFile:
- FileList.append(name)
- return FileList
- def buttonDectect():
- from maix import display, image,camera
- import time
- import os
- global key_A,key_B,key_C,key_D,pageVal,menuSelect,execVal,demoNum,demoSelect,splash,iconUpP,iconDownP,screenShow,img_drop,systemRunNum,pageSig,selectSig
- if(pageVal==0):
- if(key_A.is_pressed()):
- pressTime=time.perf_counter()
- while key_A.is_pressed()==1:
- if(time.perf_counter()-pressTime)<5:
- time.sleep(0.001)
- pageVal=1
- else:
- pageVal=2
- break
- execVal=0
- elif(key_B.is_pressed()):
- while key_B.is_pressed()==1:
- time.sleep(0.001)
- execVal=1
- # elif (key_B.is_pressed()):
- # while key_B.is_pressed()==1:
- # time.sleep(0.001)
- # pageVal=1
- else:
- pass
- elif(pageVal==1):
- if execVal==0:
- if(key_D.is_pressed()):
- splash.draw_image(iconUpP, 3, 3)
- #screenShow()
- display.show(splash)
- while key_D.is_pressed()==1:
- time.sleep(0.001)
- demoSelect=demoSelect-1
- if(demoSelect==-1):
- demoSelect=demoNum-1
- elif (key_C.is_pressed()):
- splash.draw_image(iconDownP, 287, 3)
- #screenShow()
- display.show(splash)
- while key_C.is_pressed()==1:
- time.sleep(0.001)
- demoSelect=demoSelect+1
- if(demoSelect==demoNum):
- demoSelect=0
- elif (key_B.is_pressed()):
- while key_B.is_pressed()==1:
- time.sleep(0.001)
- execVal=2+demoSelect
- elif (key_A.is_pressed()):
- while key_A.is_pressed()==1:
- time.sleep(0.001)
- menuSelect=0
- pageVal=0
- demoSelect=0
- execVal=0
- try:
- with open( '/tmp/page.txt', 'w' ) as f:
- f.write(str(pageVal))
- except:
- pass
- try:
- with open( '/tmp/menu.txt', 'w' ) as f:
- f.write(str(demoSelect))
- except:
- pass
- pageSig=1
- selectSig=1
- else:
- pass
- else:
- if (key_A.is_pressed()):
- while key_A.is_pressed()==1:
- time.sleep(0.001)
- menuSelect=0
- pageVal=0
- demoSelect=0
- execVal=0
- systemRunNum=0
- elif pageVal==2:
- if(key_C.is_pressed()):
- pageVal=0
- menuSelect=0
- pageVal=0
- demoSelect=0
- execVal=0
- systemRunNum=0
- elif key_B.is_pressed():
- os.system("poweroff")
- elif key_D.is_pressed():
- os.system("reboot")
- else:
- pass
- def running():
- from maix import display, image,camera
- global splash,title_logo_text,btn_col,btn_row,splash_text,txt_unselected,txt_selected,btn_selected,btn_unselected,\
- splash_theme_color,btn_height,btn_width,main_title,menuSelect,pageVal,execVal,screenFirstPage,screenSecondPage,\
- color_splash_theme,color_blue,color_blue_lighter,color_white,color_gray,color_orange,color_red,demo_i,demo_j,\
- demo_m,demo_n,screenShow,img_drop,systemRunNum,systemPage,demoNameList,pageSig,selectSig,demoSelect
- if pageSig==1:
- try:
- with open( '/tmp/page.txt', 'r' ) as f:
- pageVal=int(f.read())
- print(pageVal)
- pageSig=0
- except:
- pass
- if selectSig==1:
- try:
- with open( '/tmp/menu.txt', 'r' ) as f:
- demoSelect=int(f.read())
- print(demoSelect)
- selectSig=0
- except:
- pass
-
- if(pageVal==0):
- screenFirstPage()
- if(execVal==0):
- pass
- #splash.draw_rectangle(btn_col[0], btn_row-26,btn_col[0]+220,26, color=splash_theme_color, thickness=1)
- #screenShow()
- #display.show(splash)
- else:
- try:
- splash.draw_string(btn_col[0], btn_row-25, splash_text[5], color=(0,255,255),thickness = 1)
- #screenShow()
- display.show(splash)
- time.sleep(0.5)
- os.system("ln -sf %s /tmp/event && touch /tmp/start" % "/root/user_latest_code.py")
- except BaseException as e:
- execVal=0
- print(str(e))
- splash.draw_rectangle(btn_col[0], btn_row-26,btn_col[0]+220,26, color=splash_theme_color, thickness=1)
- splash.draw_string(btn_col[0], btn_row-85, splash_text[9], color=(255,0,0), thickness = 1)
- #screenShow()
- display.show(splash)
- elif(pageVal==1):
- if(execVal==0):
- screenSecondPage()
- #print("show(demoSelect)")
- else:
- demo_i=int(demoSelect/6)
- demo_j=demoSelect%6
- demo_m=int(demoNum/6)
- demo_n=demoNum%6
- splash.draw_rectangle(0,33+30*demo_j,319,33+30*(demo_j+1),color=color_orange,thickness=-1)
- splash.draw_rectangle(0,33+30*demo_j,319,33+30*(demo_j+1),color=color_white,thickness=1)
- splash.draw_string(8, 39+30*demo_j,splash_text[11] , color=color_white, thickness = 1)
- #screenShow()
- display.show(splash)
- time.sleep(0.5)
- app_path_1='ln -sf /root/preset/app/'
- app_path_2='.py /tmp/event && touch /tmp/start'
- app_path=app_path_1+demoNameList[execVal-2]+app_path_2
- #print(app_path)
- try:
- with open( '/tmp/page.txt', 'w' ) as f:
- f.write(str(pageVal))
- except:
- pass
- try:
- with open( '/tmp/menu.txt', 'w' ) as f:
- f.write(str(demoSelect))
- except:
- pass
- pageSig=1
- selectSig=1
- os.system(app_path)
- else:
- if systemRunNum==0:
- systemPage()
- systemRunNum=systemRunNum+1
- else:
- pass
- def screenShow():
- from maix import image,display,camera
- global img_drop
- screenCapture=splash.crop(0,0,240,320)
- img_drop.draw_image((screenCapture.rotate(0,adjust=1)),0,0)
- #img_drop.draw_image((screenCapture.rotate(-90,adjust=1)),0,0)
- display.show(img_drop)
- try:
- aimFileShow=getAimFileList()
- aimFileNum=len(aimFileShow)
-
- if aimFileNum>0:
- #os.system("rm /root/"+aimFileShow[0])
- os.system("rm /root/*.REC")
- #print("del rec action!")
- #aimFileShow=getAimFileList()
- #aimFileNum=len(aimFileShow)
- #print(aimFileShow)
- except:
- pass
- try:
- os.system("touch /etc/wifi/test")
- except:
- os.system("{ wpa_supplicant -i wlan0 -D nl80211 -c /etc/wifi/wpa_supplicant.conf -O /etc/wifi/sockets -B ; } ; \
- { [ -f /etc/wifi/wpa_supplicant.conf.tmp ] && rm /etc/wifi/wpa_supplicant.conf.tmp && rm /etc/wifi/wpa_supplicant.conf && echo "" \
- > /etc/wifi/wpa_supplicant.conf; sync; } ; { echo "" > /etc/wifi/fileCfgTest && echo "" > /root/fileCfgTest && echo "" > \
- /home/fileCfgTest && echo "" > /tmp/fileCfgTest; } || { sync; fsck.ext4 -y /dev/root; fsck.ext4 -y /dev/mmcblk0p4; \
- (mount -o remount,rw -n /dev/root / ; mount -o remount,rw -n /dev/mmcblk0p4 / ; mount -o remount,rw -n /dev/mmcblk0p4 /mnt/UDISK ;\
- mount -o remount,rw -n / / ; mount -o remount,rw -n /root / ; ) ; fsck.ext4 -y /dev/root; fsck.ext4 -y /dev/mmcblk0p4; sync ; }")
- finally:
- os.system("rm /etc/wifi/test")
- try:
- os.popen("cd /root/preset/server/ && python wirelessServer.py &")
- except:
- pass
- while True:
- buttonDectect()
- running()
- del key_A
- del key_B
- del key_C
- del key_D
|