• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 大佬,MV3串口样才能完整读取以回车换行符结尾的字符串呀?



    • 大佬,MV3串口样才能完整读取以回车换行符结尾的字符串呀?我想用MV三发送一个指令,然后单片机接到指令就把GPS定位信息返回给MV3。现在MV3给单片机的指令能正确发送,单片机也能正确识别,但是MV3总是接收不了完整的GPS数据,试了read和readline都不行,只能偶尔接收到完整的数据



    • 你把GPS,的数据发一下。
      和openmv的程序也发一下。



    • 0_1519966800402_a7a482b7-0042-43c5-b9d5-02ecdf5463ff-image.png

      源代码:

      import sensor, image, time, os      # 包含设置、图像处理和时间模块
      import pyb
      from pyb import UART, Timer         # 从 pyb 中包含串口类
      from pyb import I2C                 # 从 pyb 中包含I2C类
      from pyb import Pin, ADC            # 从 pyb 中包含引脚及ADC模块
      
      sensor.reset()                      # 重置和初始化传感器
      sensor.set_pixformat(sensor.RGB565) # 设置像素格式为 RGB565 (or GRAYSCALE)
      sensor.set_framesize(sensor.QQVGA)  # 设置帧大小为 QQVGA (160*120)
      sensor.skip_frames(time = 2000)     # 等待设置生效
      clock = time.clock()                # 创建一个时钟对象来跟踪 FPS.
      
      DATA_PATH    = ".\\data\\"          # 数据文件路径
      PICTURE_PATH = ".\\picture\\"       # 图片文件路径
      VIDEO_PATH   = ".\\video\\"         # 视频文件路径
      
      uart1 = UART(1,115200)               # 串口1,连接单片机串口4,波特率38400,用于发送运动控制信息
      #uart3 = UART(3, 9600)               # 串口3,暂时没用
      StrEnd = "\n"                     # 字符串结束标志,串口发送时使用,确保数据传输的准确
      
      adc = ADC(Pin('P6'))                # 设置ADC引脚,值在0-4095,值越大光线越暗,电源必须3.3V
      
      pwmout = Pin('P9')                  # 设置PWM输出引脚
      tim = Timer(4,freq=1000)            # 配置定时器
      pwm = tim.channel(1,Timer.PWM,pin=pwmout)   # 配置PWM
      pwm.pulse_width_percent(50)         # PEM输出占空比设置,占空比50%
      
      #i2c = I2C(2,I2C.MASTER,baudrate=100000) # 选择I2C脚 2:SCL P4,SDA P5; 4:SCL P7,SDA P8
      #mpu = i2c.scan()                    # 返回一个I2C从设备的地址列表
      #i2c = I2C(2)
      
      
      while(True):
          clock.tick()                    # 更新FPS时钟
          img = sensor.snapshot()         # 拍照并返回图像
      
          uart1.write("$GET"+StrEnd)
          print(uart1.any())
          print(uart1.read())
      #        print(uart1.read(uart1.any()))
          time.sleep(1000)
      #    print(clock.fps())              # 打印帧率
      #    light = adc.read()             #读取ADC的值
      
      #    print(str(light))
      

      GPS数据:
      b'$GNRMC,120341.600,V,0000.0000,N,00000.0000,E,000.0,000.0,280606,,,N*61\r\r\n'

      如截图所示是成功接收到一次完整的GPS数据,我希望是发送一个“$GET”指令后,单片机就凡湖GPS数据,MV3立即接收,但接收时总会有几个‘b'\r\n’,不知道为什么



    • 单片机发送是需要时间的,在OpenMV上发送之后,你需要延时几毫秒,然后readline()

      while(True):
          clock.tick()                    # 更新FPS时钟
          img = sensor.snapshot()         # 拍照并返回图像
      
          uart1.write("$GET"+StrEnd)
          time.sleep(10)
          if(uart1.any()){
              print(uart1.readline())
          }
          time.sleep(1000)
      #    print(clock.fps())              # 打印帧率
      #    light = adc.read()             #读取ADC的值
      
      #    print(str(light))
      


    • 还是不行

      延迟100ms也是偶尔正确接收:
      while(True):
      clock.tick() # 更新FPS时钟
      fram = sensor.snapshot() # 拍照并返回图像
      TOP_PART_IMG = fram.get_statistics(roi = TOP_PART_ROI) #获取上半部分
      UNDER_PART_IMG = fram.get_statistics(roi = UNDER_PART_ROI) #获取下半部分

      fram.draw_line(MIDDLE_LINE_ROI, color=RGB_ROI[0]) #绘制中间横线,红色

      UNDER_PART_IMG.rgb_to_grayscale()

      uart1.write("$GET"+StrEnd)
      time.sleep(10)
      if(uart1.any()):
          print(uart1.readline())
      

      print(uart1.any())

      print(uart1.read())

      print(uart1.read(uart1.any()))

      time.sleep(1000)
      print(clock.fps())              # 打印帧率
      

      light = adc.read() #读取ADC的值

      print(str(light))

      返回结果为:
      using channel 5
      b'\r\n'
      0.9615384
      b'\r\n'
      0.9629272
      b'\r\n'
      0.965251
      b'\r\n'
      0.965251
      b'$GNRMC,115953.400,V,0000.0000,N,00000.0000,E,000.0,000.0,280606,,,N*6C\r\r\n'
      0.962464
      b'\r\n'
      0.9596929
      b'\r\n'
      0.9643202
      b'\r\n'
      0.9647854
      b'\r\n'

      注:0.9多的是帧率,不用管



    • 我猜应该是GPS收到"$GET"+StrEnd之后,需要一些时间来获取信号,这个时间你有计算过吗?

      你应该用示波器/逻辑分析仪,准确的看一下GPS的信号数据。

      另外,你看一下这个https://forum.singtown.com/topic/57/玩转星瞳论坛
      把代码排版改一下,太丑了。😂