如何用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; } }
使用说明:
- 将脚本挂到Unity场景中的任意对象(比如ARCamera)
- 在Inspector面板中:
- 填入树莓派的局域网IP和PHP脚本的完整URL
- (可选)拖入一个TextMeshPro(或UI Text)组件到
tempDisplayText字段,用来直观显示温度 - 设置
updateInterval为你想要的刷新频率(比如1秒,数值越小更新越实时)
关于实时更新的说明
Unity中的数值会实时跟随浏览器中的数值变化,因为我们用了InvokeRepeating定时发起请求,每次请求都会获取树莓派的最新温度数据。只要PHP脚本能实时输出最新温度,Unity这边就能同步更新。
注意事项
- 确保Unity编辑器/打包后的程序和树莓派在同一局域网内
- 如果请求失败,检查树莓派的防火墙设置,确保80端口(HTTP)是开放的
- 树莓派的PHP脚本要确保有执行
vcgencmd的权限(一般默认权限足够)
内容的提问来源于stack exchange,提问作者raspberry
相关产品推荐
相关产品推荐

