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

+ Recent posts