#该程序由脸子姐编写版权独有 联系方式 QQ：2205963446
SSID = "小米手机"  #手机热点名称需要更改成自己手机的，打开手机热点再打开aap即可使用
PASW = "12345678"  #手机热点密码
ADDR =['192.168.43.125',56050]  #ip地址和端口号（端口号安卓端写死的56050不能更改）

#def enable_esp32():                          ###如果是Maixduino板使能该方法，将network_esp32.py发送到板子上
    #global ADDR
    #from network_esp32 import wifi
    #if True:
        #for i in range(5):
            #try:
                #wifi.reset(is_hard=True)
                #print('try AT connect wifi...')
                #wifi.connect(SSID, PASW)
                #if wifi.isconnected():
                    #ADDR[0]=wifi.ifconfig()[2]
                    #break
            #except Exception as e:
                #print(e)
    #print('network state:', wifi.isconnected(), wifi.ifconfig())

#enable_esp32() #连接安卓端的wifi

def enable_espat(): #连接手机端热点 如果是板子自带的8285需要提前将network_espat.py发送到板子上使用该方法连接
                    #WiFi连接的相关类和例程见 https://github.com/sipeed/MaixPy_scripts/tree/master/network
    global ADDR
    from network_espat import wifi
    if True:
        for i in range(5):
            try:
                wifi.reset()
                print('try AT connect wifi...')
                wifi.connect(SSID, PASW)
                if wifi.isconnected():
                    ADDR[0]=wifi.ifconfig()[2]
                    break
            except Exception as e:
                print(e)
    print('network state:', wifi.isconnected(), wifi.ifconfig())

enable_espat()


import socket,time,sensor

sock = socket.socket()#socket连接到安卓端的服务器

sock.connect(ADDR)
sock.settimeout(1)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
#sensor.set_windowing((224, 224))
sensor.skip_frames(time = 200)
sensor.set_hmirror(1) #开启水平镜像
sensor.set_vflip(1)  #开启垂直镜像

a=bytearray([0,0,0,0,0,0,1,255,1,255]) #图片帧尾每发送一张图片就会发送一次该数组，数组后四位是固定的不能更改，安卓端接收到这四位
                                       #判断一帧结束，前六位用来存放传感的测量数据或识别的标志位，安卓端可以解析出来进行相应的显示
                                       #如果只是用来图传默认为0就行了
while True:
    img = sensor.snapshot()         #摄像头采集一张图片
    img = img.compress(quality=30)  #压缩图片提升传输速率，想要图像更清晰将quality调大一些（quality范围在0~100）
    img_bytes = img.to_bytes()      #将图片转成字节数组

    try:                              #esp32寄存器大小有限 将图片分段发送可以避免通过esp32发送出现数据丢失的问题
        block = int(len(img_bytes)/2048)
        for i in range(block):
            send_len = sock.send(img_bytes[i*2048:(i+1)*2048])
            time.sleep_ms(1)
        send_len2 = sock.send(img_bytes[block*2048:])
        time.sleep_ms(1)
        sock.send(a)                  #发送完图片发送一次帧结尾数组
    except OSError as e:
        if e.args[0] == 128:
            print("connection closed")
            sock.connect(ADDR)        #socket意外断开时进行重新连接
            continue
    except Exception as e:
        print("send fail:", e)
        time.sleep(1)
        sock.connect(ADDR)            #socket意外断开时进行重新连接
        continue
    time.sleep_us(1)
