要通過 ??Unity3D?? 開發的手機 App 控制 ??電氣柜上面的柱燈,需要WIFI模塊作為橋梁,按照以下步驟實現:
??1. 硬件準備(硬件部分)??
??所需材料??
- ??ESP32開發板??(如ESP32-WROOM-32)
- ENC28J60模塊
- 西門子1511-T
- 柱燈(電氣柜)
- ??杜邦線?,網線?
- ??USB數據線??(供電+燒錄程序)
??ESP32 代碼(Arduino IDE)??
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <UIPEthernet.h> const char* ssid = "abc";
const char* password = "123456abc";WebServer server(80);
bool ledState = false;// ENC28J60 配置
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 177); // ENC28J60 靜態 IP
EthernetClient ethClient;const char* tcpServer = "192.168.0.150"; // 目標 TCP 服務器 IP
uint16_t tcpPort = 2000; // 目標 TCP 端口void setup() {Serial.begin(115200);pinMode(2, OUTPUT);// 初始化 WiFiWiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nWiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());// 初始化 ENC28J60Serial.println("\nInitializing ENC28J60...");Ethernet.begin(mac, ip);Serial.print("ENC28J60 IP: ");Serial.println(Ethernet.localIP());// HTTP 服務器路由server.on("/", HTTP_GET, []() {server.send(200, "text/plain", "ESP32 LED Control");});server.on("/on", HTTP_GET, []() {digitalWrite(2, HIGH);ledState = true;sendTcpData("1");server.send(200, "text/plain", "LED ON");});server.on("/off", HTTP_GET, []() {digitalWrite(2, LOW);ledState = false;sendTcpData("0");server.send(200, "text/plain", "LED OFF");});server.begin();Serial.println("HTTP server started");
}void loop() {server.handleClient();Ethernet.maintain(); // 維持 ENC28J60 連接
}// 通過 ENC28J60 發送 TCP 數據
void sendTcpData(const char* data) {if (ethClient.connect(tcpServer, tcpPort)) {ethClient.println(data);Serial.print("Sent: ");Serial.println(data);ethClient.stop();} else {Serial.println("TCP connection failed");}
}
??燒錄步驟??
- 用 ??Arduino IDE?? 或 ??PlatformIO?? 燒錄代碼到ESP32。
- 打開串口監視器(波特率115200),查看ESP32的IP地址(這里是
192.168.0.177
)。
??2. Unity3D 手機App開發??
??Unity 設置??
- ??新建 Unity 項目??(選擇 ??Mobile 2D/3D?? 模板)。
- ??UI 設計??:
- 創建兩個按鈕:
ON
?和?OFF
。 - 添加?
Text
?顯示狀態。
- 創建兩個按鈕:
??C# 腳本(控制ESP32)??
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;public class ESP32Controller : MonoBehaviour
{public string esp32IP = "192.168.121.190"; public Button onButton;public Button offButton;public Text statusText;void Start(){onButton.onClick.AddListener(TurnOnLED);offButton.onClick.AddListener(TurnOffLED);}void TurnOnLED(){StartCoroutine(SendRequest("http://" + esp32IP + "/on"));statusText.text = "LED ON";}void TurnOffLED(){StartCoroutine(SendRequest("http://" + esp32IP + "/off"));statusText.text = "LED OFF";}IEnumerator SendRequest(string url){using (UnityWebRequest request = UnityWebRequest.Get(url)){yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.Success){Debug.Log("Response: " + request.downloadHandler.text);}else{Debug.LogError("Error: " + request.error);}}}
}
??Unity 打包到手機??
- ??File → Build Settings → Android/iOS??。
- 連接手機,選擇 ??Build & Run??。
??3. 測試流程??
- ??確保手機和ESP32連接同一WiFi??。
- 在手機上運行Unity App,點擊按鈕控制LED。
- 打開博圖調用TCP功能塊,根據信號值實現柱燈狀態切換。
?
?
?