You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSON Utility将浏览器中树莓派CPU温度数据导入Unity(Vuforia)?

当然可以实现!我来一步步给你讲清楚怎么把树莓派的CPU温度实时同步到带Vuforia的Unity AR项目里,附上完整的代码示例~

实现方案概述

你只需要做两件核心事情:1)修改PHP脚本输出JSON格式的温度数据;2)在Unity里写一个脚本,定时请求这个PHP接口并解析数据,实现实时更新。Vuforia环境下完全兼容,不需要额外配置,只要保证Unity和树莓派在同一局域网就行。

第一步:修改PHP脚本输出JSON

原来的脚本输出纯数值,现在改成标准JSON结构,方便Unity解析。替换你的PHP代码为下面这段:

<?php
// 获取树莓派CPU温度的逻辑(保留你原有的获取逻辑也可以)
$temp = shell_exec('vcgencmd measure_temp');
$temp = preg_replace('/[^0-9\.]/', '', $temp); // 提取纯数值部分

// 输出标准JSON格式
header('Content-Type: application/json');
echo json_encode([
    'cpu_temperature' => floatval($temp)
]);
?>

现在访问这个PHP脚本,浏览器会输出类似 {"cpu_temperature":56.7} 的内容,比纯数值更容易被Unity处理。

第二步:Unity端代码实现(带实时更新)

在Unity里创建一个C#脚本,用UnityWebRequest请求树莓派的PHP接口,然后定时刷新数据。你可以把这个脚本挂在ARCamera或者任何UI文本对象上(用来显示温度)。

代码示例:

using UnityEngine;
using UnityEngine.Networking;
using TMPro; // 用TextMeshPro显示的话需要这个,用Unity自带UI.Text就换成using UnityEngine.UI;

public class RPiTempSync : MonoBehaviour
{
    // 替换成你的树莓派局域网IP和PHP脚本路径,比如http://192.168.1.102/get_temp.php
    [SerializeField] private string phpApiUrl = "http://你的树莓派IP/脚本路径.php";
    // 可选:用来显示温度的UI文本组件
    [SerializeField] private TextMeshProUGUI tempDisplayText;
    // 刷新间隔(单位:秒,比如1秒刷新一次)
    [SerializeField] private float updateInterval = 1f;

    // 存储当前CPU温度,供你的AR逻辑使用
    private float currentCPUTemp;

    void Start()
    {
        // 启动定时刷新:0秒后第一次请求,之后每隔updateInterval秒请求一次
        InvokeRepeating(nameof(FetchLatestTemp), 0f, updateInterval);
    }

    private void FetchLatestTemp()
    {
        // 用协程处理网络请求,避免阻塞主线程
        StartCoroutine(GetTemperatureCoroutine());
    }

    private IEnumerator GetTemperatureCoroutine()
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(phpApiUrl))
        {
            // 发送请求并等待响应
            yield return webRequest.SendWebRequest();

            switch (webRequest.result)
            {
                case UnityWebRequest.Result.Success:
                    // 解析JSON数据到自定义类
                    TempData tempData = JsonUtility.FromJson<TempData>(webRequest.downloadHandler.text);
                    currentCPUTemp = tempData.cpu_temperature;

                    // 更新UI显示(如果绑定了文本组件)
                    if (tempDisplayText != null)
                    {
                        tempDisplayText.text = $"CPU温度: {currentCPUTemp:F1}°C";
                    }

                    // 这里可以添加你的AR逻辑,比如根据温度改变3D模型颜色、显示提示等
                    Debug.Log($"同步到最新CPU温度:{currentCPUTemp}°C");
                    break;
                default:
                    Debug.LogError($"请求失败:{webRequest.error}");
                    break;
            }
        }
    }

    // 用来映射JSON数据的序列化类,字段名必须和PHP输出的键完全一致
    [System.Serializable]
    private class TempData
    {
        public float cpu_temperature;
    }
}

使用说明:

  1. 将脚本挂到Unity场景中的任意对象(比如ARCamera)
  2. 在Inspector面板中:
    • 填入树莓派的局域网IP和PHP脚本的完整URL
    • (可选)拖入一个TextMeshPro(或UI Text)组件到tempDisplayText字段,用来直观显示温度
    • 设置updateInterval为你想要的刷新频率(比如1秒,数值越小更新越实时)

关于实时更新的说明

Unity中的数值会实时跟随浏览器中的数值变化,因为我们用了InvokeRepeating定时发起请求,每次请求都会获取树莓派的最新温度数据。只要PHP脚本能实时输出最新温度,Unity这边就能同步更新。

注意事项

  • 确保Unity编辑器/打包后的程序和树莓派在同一局域网内
  • 如果请求失败,检查树莓派的防火墙设置,确保80端口(HTTP)是开放的
  • 树莓派的PHP脚本要确保有执行vcgencmd的权限(一般默认权限足够)

内容的提问来源于stack exchange,提问作者raspberry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:45