๊ฐ์
PC 2๊ฐ๊ฐ ์๋ค.
ํ๋๋ User๊ฐ ์ ๋ฌด๋ฅผ ์์ฒญํ๊ณ , ๋๋จธ์ง ํ๋๋ Robot์ด ๊ทธ ์ ๋ฌด๋ฅผ ๋ฐ์์ ์ค์๊ฐ ์ํ๋ฅผ User๊ฐ ์ ์ ์๋๋ก ์ ๋ฐ์ดํธ๋ฅผ ํด์ค ๊ฒ์ด๋ค.
์ ํ๋ก์ ํธ์์๋ Robot์ด ํ๋ ๋ฟ์ด๋ผ์ socket์ผ๋ก ์ฐ๊ฒฐ์ ํ๋ค.
์ด๋ฒ์๋ Robot์ด ์ถ๊ฐ๋ก ๋ ๋์ด๋ ๊ฐ๋ฅ์ฑ์ ์ผ๋ํด์ MQTT๋ฅผ ํ์ฉํ๋ ค๊ณ ํ๋ค.
ํธํ PC, Robot์ด๋ผ๊ณ ์นญํ๊ฒ ๋ค.
- PC → Robot : ์ํํ ์์ (ํ ์คํธ ํ์) ์ ๋ฌ
- Robot → PC : ์์ ์ํ (์ค์๊ฐ ์ ๋ฐ์ดํธ) ์ ๋ฌ
๊ตฌ์กฐ
- PC๋ ์์ ์ง์๋ฅผ ๋ฐํํ๊ณ , ๋ก๋ด์ ์ด๋ฅผ ๊ตฌ๋
- ๋ก๋ด์ ์ํ๋ฅผ ๋ฐํํ๊ณ , PC๋ ์ด๋ฅผ ๊ตฌ๋ ํ์ฌ ์ค์๊ฐ์ผ๋ก ์ํ๋ฅผ ํ์ธ
Topic ์ค๊ณ
- PC → Robot: "robot/task"
- Robot → PC: "robot/status"
๊ฐ๋จํ ์ฝ๋ ๊ตฌํ
1. mqtt ์ค์น (๋ฒ์ 1.6.1)
pip3 install paho-mqtt==1.6.1
PC ์ธก ์ฝ๋
import paho.mqtt.client as mqtt
import threading
import time
broker_ip = "๋ธ๋ก์ปค_IP"
received_status = []
# ์ํ ๋ฉ์์ง ์์ ์ฝ๋ฐฑ
def on_message(client, userdata, msg):
status = msg.payload.decode()
print(f"[๋ก๋ด ์ํ ์
๋ฐ์ดํธ]: {status}")
received_status.append(status)
if "์์
์๋ฃ" in status:
print("๋ชจ๋ ์์
์๋ฃ! ํ๋ก๊ทธ๋จ ์ข
๋ฃ ...")
client.loop_stop()
client.disconnect()
# MQTT ํด๋ผ์ด์ธํธ ์ค์
client = mqtt.Client("PC_Client")
client.connect(broker_ip, 1883)
# ๋ก๋ด ์ํ ์
๋ฐ์ดํธ ์์ ๊ตฌ๋
client.subscribe("robot/status")
client.on_message = on_message
# MQTT ์์ ๋๊ธฐ ์์
client.loop_start()
# ๋ก๋ด์๊ฒ ์์
์ง์ ๋ณด๋ด๊ธฐ
task_message = "์์
์์: ์ฝ๋ผ ์ฎ๊ธฐ๊ธฐ"
print(f"[์์
์ ์ก]: {task_message}")
client.publish("robot/task", task_message)
# ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋์ง ์๋๋ก ๋๊ธฐ
while client.is_connected():
time.sleep(1)
๋ก๋ด ์ธก ์ฝ๋
(1) ์ํ ์ ์ก์ฉ ๋ชจ๋ (robot_status.py)
import paho.mqtt.client as mqtt
class RobotStatusUpdater:
def __init__(self, broker_ip, topic="robot/status"):
self.client = mqtt.Client("Robot_Status_Updater")
self.client.connect(broker_ip, 1883)
self.topic = topic
def send_status(self, message):
self.client.publish(self.topic, message)
print(f"[์ํ ์ ์ก๋จ]: {message}")
# ์ ์ญ์ ์ผ๋ก ํ๋๋ง ์์ฑ
status_updater = RobotStatusUpdater("๋ธ๋ก์ปค_IP")
def send_status(message):
status_updater.send_status(message)
(2) ์ค์ ๋ก๋ด ์ฝ๋ (robot.py)
- send_status ํธ์ถํ๋ ๋ฐฉ๋ฒ
import paho.mqtt.client as mqtt
import threading
import time
from robot_status import send_status
broker_ip = "๋ธ๋ก์ปค_IP"
# PC์์ ์์
์ง์ ๋ฐ๋ ์ฝ๋ฐฑ ํจ์
def on_message(client, userdata, msg):
task = msg.payload.decode()
print(f"[๋ฐ์ ์์
์ง์]: {task}")
execute_task(task)
# ์ค์ ๋ก๋ด์ ์์
์ํ ํจ์
def execute_task(task):
# ๊ธฐ์กด ๋ก๋ด ์ฝ๋์ ์์ (๋จ๊ณ๋ณ๋ก ์ํ ์ ์ก ์ถ๊ฐ)
time.sleep(1)
send_status("์ด๊ธฐํ ์๋ฃ")
time.sleep(1)
send_status("๋ชฉํ ์์น ๋์ฐฉ ์๋ฃ")
time.sleep(1)
send_status("๋ฌผ์ฒด ํฝ์
์ฑ๊ณต")
time.sleep(1)
send_status("๋ชฉํ ์์น ์ด๋ ์๋ฃ")
time.sleep(1)
send_status("๋ฌผ์ฒด ๋ด๋ ค๋๊ธฐ ์๋ฃ")
send_status("์ ์ฒด ์์
์๋ฃ")
# MQTT ํด๋ผ์ด์ธํธ ์ค์ (์์
์ง์ ๋ฐ๊ธฐ์ฉ)
client = mqtt.Client("Robot_Client")
client.connect(broker_ip, 1883)
client.subscribe("robot/task")
client.on_message = on_message
# MQTT ์์ ๋ฃจํ ์์
threading.Thread(target=client.loop_forever, daemon=True).start()
# ๋ก๋ด์ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋๊ธฐ ์ค...
while True:
time.sleep(1)
+ ๋ฉ์ธ์ง ๋ธ๋ก์ปค๋ PC ์ธก์์ ๋์ด์ ํ ์คํธํ๋ค. ์๋ง ๊ณ์ PC ์ธก์์ ๋์ด์ ์ฌ์ฉํ ๋ฏ ..?
์ค์ ํ ์คํธ (๋์์)
(1) MQTT Explorer : ๋ก์ปฌ mqtt ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ
(2) python3 robot.py : robot์ ๋๊ธฐ ์ํ์ ๋์ ์ํ ์ ์งํ๊ณ
(3) python3 pc.py : pc์์ task ์์ฒญ ๋ค์ด๊ฐ๋ฉด
(4) robot์์ ๋ฐ์์ task ์คํํ๋ฉฐ ์ค์๊ฐ status์ ๊ณต์ ํ๋ค (pc์ธก์์ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ ํ์ธ ๊ฐ๋ฅ)
'๐ฉ๐ปโ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MQTT] Mac mosquitto ์ค์น / ์คํ / ์ค์ง (0) | 2025.02.25 |
---|---|
์ฝ๋ ํ์ง ๊ด๋ฆฌ (0) | 2025.02.20 |
nginx์ mTLS ์ธ์ฆ์ ๋ฐ๊ธํ๊ณ ๊ฒ์ฆํ๊ธฐ (0) | 2024.08.16 |