Arduino json使用后数据接收延迟严重-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2281|回复: 1

[未解决] Arduino json使用后数据接收延迟严重

[复制链接]
发表于 2021-8-11 11:25 | 显示全部楼层 |阅读模式
本帖最后由 lllllll2b 于 2021-8-11 11:27 编辑

我用OpenMV通过串口发送json格式的数据,在Arduino端也用json接收,但是数据接收延迟有三秒左右。换成串口直接接收就没有问题。有没有大神了解的?
附下代码:
1,OpenMV端的
  1. import sensor, image, time, json
  2. from pid import PID
  3. from pyb import Servo , LED , UART


  4. uart = UART(3, 115200)

  5. green=LED(2)
  6. green.on()
  7. time.sleep(1)
  8. green.off()

  9. red_threshold  =(36, 56, 28, 80, 16, 79)


  10. sensor.reset() # Initialize the camera sensor.
  11. sensor.set_pixformat(sensor.RGB565) # use RGB565.
  12. sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
  13. sensor.skip_frames(10) # Let new settings take affect.
  14. sensor.set_auto_whitebal(False) # turn this off.
  15. clock = time.clock() # Tracks FPS.

  16. def find_max(blobs):
  17.     max_size=0
  18.     for blob in blobs:
  19.         if blob[2]*blob[3] > max_size:
  20.             max_blob=blob
  21.             max_size = blob[2]*blob[3]
  22.     return max_blob


  23. while(True):

  24.     #if (uart.any()):
  25.     #   print(uart.read())

  26.     clock.tick() # Track elapsed milliseconds between snapshots().
  27.     img = sensor.snapshot() # Take a picture and return the image.

  28.     blobs = img.find_blobs([red_threshold])
  29.     if blobs:
  30.         max_blob = find_max(blobs)
  31.         img.draw_rectangle(max_blob.rect()) # rect
  32.         img.draw_cross(max_blob.cx(), max_blob.cy()) # cx, cy
  33.         time.sleep_ms(500)

  34.         data={
  35.         "cx":max_blob.cx(),
  36.         "cy":max_blob.cy(),
  37.         "size":max_blob.w() * max_blob.h()
  38.         }
  39.         data_out=json.dumps(data)
  40.         uart.write(data_out + '\n')
  41.         print('you_send:',data_out)
  42.     else:
  43.         print('not found!')

复制代码
2,Arduino端的
  1. #include <ArduinoJson.h>
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial softSerial(10, 11); // RX, TX

  4. char c=0;
  5. String json="";

  6. void setup(){
  7.   Serial.begin(115200);
  8.   softSerial.begin(115200);
  9. }

  10. void loop(){
  11.   if (softSerial.available() > 0) {
  12.     c = char(softSerial.read());
  13.     json = String(json) + String(c);
  14.     if (c == '}') {
  15.       DynamicJsonDocument doc(200); //声明一个JsonDocument对象
  16.       deserializeJson(doc, json);
  17.       JsonObject obj = doc.as<JsonObject>();
  18.       int cx = doc["cx"];
  19.       int cy = doc["cy"];
  20.       if (cx!=0 && cy!=0)
  21.       {
  22.         Serial.print("cx = ");
  23.         Serial.print(cx);
  24.         Serial.print("  cy = ");
  25.         Serial.println(cy);
  26.         }
  27.       json = "";
  28.       }
  29.   }
  30. }
复制代码
这个程序接收数据很慢
WX20210811-112002.png

3,下面的程序是Arduino直接用串口读取的
  1. #include <ArduinoJson.h>
  2. #include <SoftwareSerial.h>

  3. SoftwareSerial mySerial(10, 11); // RX, TX

  4. void setup() {
  5.   Serial.begin(115200);
  6.   mySerial.begin(115200);
  7. }

  8. void loop() { // run over and over
  9.   if (mySerial.available()) {
  10.     Serial.write(mySerial.read());
  11.   }
  12.   if (Serial.available()) {
  13.     mySerial.write(Serial.read());
  14.   }
  15. }
复制代码
这个串口读取就很快,但是会有乱码,而且读取速度也没有想象中的快
WX20210811-112252.png
各位大神有了解的吗?
发表于 2021-8-11 15:38 | 显示全部楼层
波特率有点高,软串口跑 115200 看样子有误码。

建议降低波特率再试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 01:50 , Processed in 0.079520 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表