json - 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();
}
}
解决方案
推荐阅读
- python - 如何从 HTML 表单中获取 json 并保持输入类型
- flutter - 您如何在 Flutter FutureBuilder 中使用 Firebase RTDB 排序和过滤
- python - 如何将视频保存到我从 POST 请求方法获得的文件中?
- java - 为什么这段代码在 java 11 中编译得很好?
- c++ - 扫描 C++ DLL 中的模式时的 EXCEPTION_ACCESS_VIOLATION
- php - Docker-compose WordPress 与 PHP 扩展
- python - AttributeError:“KerasRegressor”对象没有属性“模型”
- mongodb - 必须在操作上设置数据库字段
- python - Openpyxl 合并很慢
- paypal - 电子商务应用的Paypal钱包创建api