首页 > 解决方案 > Unity 未从 Arduino(ESP32)通过蓝牙串行获取 JSON 数据

问题描述

在我的项目中,我需要通过蓝牙 serail 从 ESP32 读取 JSON 数据。我在这方面取得了部分成功。这意味着我的 JSON 数据输出应该是这样的。

{“数据”:[48.75,2.3]}{“数据”:[48.75,2.3]}

但我得到的是这个

}{“数据”:[48.75,2.3]}{“数据”:[48.75, 2.3]

下面如何解决这个问题是我的 Arduino 代码和 C# 脚本。

Arduino代码

#include "BluetoothSerial.h"
#include "ArduinoJson.h"



BluetoothSerial SerialBT;

void setup() {
  Serial.begin(9600);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
  
}

void loop() {
  
  if(Serial.read()=='j')
  {
 //=================Json   
  StaticJsonDocument<400> doc;
  JsonArray data = doc.createNestedArray("data");
  data.add(48.756080);
  data.add(2.302038);

  String str(data);
  serializeJson(doc, Serial);
  serializeJsonPretty(doc, Serial);
   //=====================
  }
  
 
  if(SerialBT.read()=='j')
  {
    //=================Json   
 StaticJsonDocument<400> doc;
  JsonArray data = doc.createNestedArray("data");
  data.add(48.75);
  data.add(2.3);

  String str(data);
  serializeJson(doc, SerialBT);
  serializeJsonPretty(doc, SerialBT);
   //=====================
  }
}

C# 脚本

using System.Collections;
using System.Collections.Generic;
using ArduinoBluetoothAPI;
using UnityEngine.UI;
using UnityEngine;
using System;

public class BTSentAndRecv : MonoBehaviour
{
    public Text debugtext;
    private BluetoothHelper BTHelper;
    String readRecv;
    string receivedData;
    // Start is called before the first frame update
    void Start()
    {
        try{
            BTHelper = BluetoothHelper.GetInstance("ESP32test");
            BTHelper.OnConnected+= OnConnected;
            BTHelper.OnConnectionFailed += OnConnectionFailed;
            BTHelper.setTerminatorBasedStream("\n");

            if(BTHelper.isDevicePaired())
            {
                BTHelper.Connect();
            }
            }
        catch(Exception ex)
            {
                print(ex.ToString());
            }

    }

    // Update is called once per frame
    void Update()
    {
        BTHelper.OnDataReceived += () => 
        {
            OnDataReceived();
                    //this is called when you receive data FROM your arduino
                    // string receivedData;
                    // receivedData = BTHelper.Read(); // returns a string
                    // if(receivedData!="")
                    //     {print(receivedData);}               
        };
    }
    void OnDataReceived()
    {   
        receivedData += BTHelper.Read(); // returns a string
        if(receivedData!="")
        {
            print(receivedData);
            debugtext.text=receivedData;
        } 
    }
    public void OnConnected()
    {
        receivedData = "";
        BTHelper.StartListening();
        BTHelper.SendData("j");
    }
    void OnConnectionFailed()
    {

    }
    void Disconnect()
    {
        BTHelper.Disconnect();
    }
    
}

标签: jsonunity3darduinobluetoothserial-port

解决方案


推荐阅读