Ollama + MCP + ESP32 2대를 제어하는 구조를 ChatGPT에 질문하여서
아래와 같은 답변을 받았다.
다음에구연해보자
1. 전체 아키텍처 (2대 ESP32)
[ 사용자 ]
↓ 자연어
[ Ollama ]
↓ MCP Tool Call
[ MCP Server (Python) ]
├─ HTTP/MQTT → ESP32_A (LED_A)
└─ HTTP/MQTT → ESP32_B (LED_B)핵심:
- Ollama는 “어느 장치 + 어떤 동작” 판단
- MCP 서버는 라우팅
- ESP32는 단순 실행
2. 장치 식별 전략 (중요)
가장 안정적인 방법
- 논리적 ID 사용
"거실 LED" → esp32_1
"침실 LED" → esp32_2
👉 IP 직접 노출 ❌
👉 MCP 서버에서 매핑 관리 ⭕
3. MCP Server (Python) – 2대 대응
3.1 ESP32 매핑 테이블
ESP32_MAP = {
"livingroom": "192.168.0.50",
"bedroom": "192.168.0.51",
}
3.2 MCP Tool 정의
from mcp.server import Server
import requests
server = Server("esp32-controller")
@server.tool()
def control_led(device: str, state: str):
"""
device: livingroom | bedroom
state: on | off
"""
if device not in ESP32_MAP:
return "unknown device"
if state not in ("on", "off"):
return "invalid state"
ip = ESP32_MAP[device]
r = requests.get(
f"http://{ip}/led",
params={"state": state},
timeout=3
)
return f"{device} led {state}"
4. Ollama MCP 설정
~/.ollama/config.yaml
mcp:
servers:
- name: esp32
command: python
args: ["mcp_server.py"]
5. Ollama 프롬프트 설계 (매우 중요)
System Prompt
너는 집안 IoT 제어 AI다.
장치 목록:
- livingroom: 거실 LED
- bedroom: 침실 LED
LED 제어는 반드시 control_led 도구를 사용한다.사용자 입력
거실 불 켜줘Ollama 내부 호출
control_led(device="livingroom", state="on")
6. ESP32 펌웨어 (공통, IP만 다름)
#include <WiFi.h>
#include <WebServer.h>
WebServer server(80);
const int LED_PIN = 2;
void handleLed() {
String state = server.arg("state");
digitalWrite(LED_PIN, state == "on" ? HIGH : LOW);
server.send(200, "text/plain", state);
}
void setup() {
pinMode(LED_PIN, OUTPUT);
WiFi.begin("SSID", "PASSWORD");
while (WiFi.status() != WL_CONNECTED) delay(500);
server.on("/led", handleLed);
server.begin();
}
void loop() {
server.handleClient();
}
ESP32_A → 192.168.0.50
ESP32_B → 192.168.0.51
7. 실제 사용 예시
| 사용자 말 | 실행 |
|---|---|
| 거실 불 켜줘 | ESP32_A LED ON |
| 침실 불 꺼줘 | ESP32_B LED OFF |
| 거실 불 꺼 | ESP32_A LED OFF |
728x90
'Hardware > ESP32' 카테고리의 다른 글
| ESP 기반 IoT (0) | 2026.01.30 |
|---|---|
| ESP32 WebSocket 연습 1 (0) | 2026.01.09 |
| ESP32 LittleFS 업로더 설치 (0) | 2026.01.09 |
| ESP32와 WS2812 RGB LED 2 - 12개 원형 모듈 (1) | 2026.01.08 |
| ESP32와 WS2812 RGB LED 1 - strip (0) | 2026.01.08 |
