• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 如何通过向OpenMV发送不同的命令获取距离或者是图片?



    • 如何通过向OpenMV发送不同的命令获取距离或者是图片?

      import sensor, image, time, network, usocket, sys, json
      
      from machine import I2C
      from vl53l1x import VL53L1X
      import time
      import gc
      gc.enable()
      
      i2c = I2C(2)
      distance = VL53L1X(i2c)
      
      SSID ='HSAuto'     # Network SSID
      KEY  ='Aa123456'     # Network key
      HOST =' 10.119.96.163'     # Use first available interface
      PORT = 8082  # Arbitrary non-privileged port
      dic = {'Fn':0,'Q':1,'T':2,'L':3,'Space':4,'Up':5,'Down':6,'N':7}
      
      sensor.reset()                      # Reset and initialize the sensor.
      sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
      sensor.set_framesize(sensor.VGA)    # Set frame size to QVGA (320x240)
      sensor.skip_frames(time = 2000)
      sensor.set_auto_whitebal(True)
      sensor.set_auto_gain(True)
      #srnsor.set_
      #sensor.set_hmirror(True) #水平方向翻转
      #sensor.set_vflip(True) #垂直方向翻转
      # 二维码的识别img = sensor.snapshot()
      img_w = 640
      img_h = 480
      
      #OV5640 VGA 的像素大小
      f_x = (2.8 / 3.6736) * img_w # 默认值
      f_y = (2.8 / 2.7384) * img_h # 默认值
      #图像的中心位置 分辨率的一半
      c_x = img_w * 0.5 # 默认值(image.w * 0.5)
      c_y = img_h * 0.5 # 默认值(image.h * 0.5)
      
      # Init wlan module and connect to network
      print("Trying to connect... (may take a while)...")
      wlan = network.WINC()
      wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK)
      # We should have a valid IP now via DHCP
      print(wlan.ifconfig())
      # Create server socket
      s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
      # Bind and listen
      print(HOST)
      s.bind([HOST, PORT])
      s.listen(5)
      print(s)
      
      s.setblocking(True)
      def start_streaming(s):
          try:
              print ('Waiting for connections..')
              client, addr = s.accept()
              img_w = 640 * 0.5
              img_h = 480 * 0.5
              client.settimeout(2.0)
              print ('Connected to ' + addr[0] + ':' + str(addr[1]))
              data = client.recv(32)
              recv_data = str(data,'utf-8')
              print(recv_data)
              clock = time.clock()
              img = sensor.snapshot().lens_corr(0.9)
              if recv_data == "GetDistance":
                   Camera_Distance = int(distance.read()) - 11
                   print(Camera_Distance)
                   client.send(str(Camera_Distance)) # +"mm \r\n"
              elif "GetImage" in recv_data:
      
                  clock = time.clock()
                  frame = sensor.snapshot()
                  cframe = frame.compressed(quality=35)
                  client.send("HTTP/1.1 200 OK\r\n" \
                              "Server: OpenMV\r\n" \
                              "Content-Type: image/jpeg\r\n\r\n" )
      
                  print(len(cframe))
                  client.send(cframe)
                  client.send("END")
      #            client.close()
      #            cframe = img.compressed(quality=40)
      #            client.write(cframe)
                  client.close()
              client.close()
              gc.collect()
              print(gc.mem_free())
          except OSError as e:
              print(e)
      
      while (True):
          try:
              start_streaming(s)
          except OSError as e:
              print("socket error: ", e)
              sys.print_exception(e)
      
      
      
      


    • recv_data是http的请求头,里面可以看到url。如果你访问的是192.168.1.1:8080/distance或者192.168.1.1:8080/image,recv_data是可以看到的。



    • @kidswong999 不是用Http请求的,是用的Socket通信 TCP 请求的,发完参数,如何返回图片呢,直接 client.send()吗?这个可以实现吗