리눅스(Ubuntu)에서 파이썬을 이용해 MQTT를 이용하여 각종 IoT가 접목된 기기들을 컨트롤하고자 한다. 그러면 어떻게 파이썬으로 이를 사용할 수 있을까?
해당 글은 파이썬 3.10 기준으로 작성했습니다.
1. MQTT 라이브러리(paho mqtt) 설치하기
우선 MQTT 라이브러리를 설치해야 이 기능을 사용할 수 있으므로 설치를 합니다.
pip install paho-mqtt
저는 1.6.1 버전으로 설치했습니다.
2. 코드 작성(Publish)
import paho.mqtt.client as mqtt
def pub(topic_str, message_str):
mqtt_client = mqtt.Client()
mqtt_client.connect("서버 아이피 혹은 주소", 1883) # 1번
mqtt_client.loop_start()
topic_name = topic_str # 2번
message = message_str
mqtt_client.publish(topic = topic_name, payload = message) # 3번
mqtt_client.loop_stop()
위 코드는 해당 함수를 실행 시킬 경우 연결부터 전송까지 한번에 이뤄지는 코드입니다.
1번. 서버주소입니다.
mqtt 서버에 연결하려면 우선 서버의 주소(ip주소 혹은 도메인)가 필요합니다. 구조는 아래와 같습니다.
ex) "192.168.0.1"
2번. 토픽, 메세지 매게변수 입니다.
통신하고자 하는 토픽, 메세지를 작성하면 됩니다.
topic_str = 토픽
message_str = 메세지
3번. 메시지 발행(서버로 전송)입니다.
발행을 하기 위해서는 publish란 메서드를 사용하며 인자는 아래와 같습니다.
토픽, 메시지
토픽은 2번에서 설정한 토픽으로 지정하시면 됩니다.
2-1. 코드 작성(Subscribe)
import paho.mqtt.client as mqtt
def on_message(client, user_data, msg):
print('message : ' + str(msg.payload.decode('utf-8')))
mqttClient = mqtt.Client()
client.connect('서버 아이피 혹은 주소') # 1번
client.on_message = on_message # 2번
client.loop_forever() # 3번
위 코드는 실행 시킬 경우 종료되지 않고 계속 실행되며, 구독중인 해당 토픽에 온 메세지를 표시합니다.
1번. 서버주소입니다.
mqtt 서버에 연결하려면 우선 서버의 주소(ip주소 혹은 도메인)가 필요합니다. 구조는 아래와 같습니다.
ex) "192.168.0.1"
2번. 메세지 함수 지정 입니다.
구독 중인 토픽으로 온 메세지를 받아서 처리하는 함수를 지정합니다.
3번. 구독 상태 유지
구독 중인 토픽으로 오는 메세지를 계속 받기 위해 루프를 무한으로 실행시킵니다.
3. 기타
아래는 위 내용과 관련 궁금할 내용들입니다.
● 해당 코드 똑같이 했는데 연결부터 안됩니다.
· 위 코드들을 작동하기 위해서는 MQTT 서버가 존재해야 합니다. 리눅스 서버에 MQTT 서버 구축하는 법은 아래 링크를 참고 바랍니다.
● 해당 코드들은 리눅스에서만 작동하나요?
· 윈도우에서도 작동합니다. 개발 할때 원하시는 환경에서 하시고 완성본만 리눅스 서버에 실행시켜도 됩니다.
'홈 IoT > 서버' 카테고리의 다른 글
MQTT 중계 프로그램 제작 - 2부 (0) | 2023.05.08 |
---|---|
MQTT 중계 프로그램 제작 - 1부 (0) | 2023.05.04 |
Ubuntu 18.04.5 LTS Server에 MQTT(Mosquitto) 설치 및 활용 (0) | 2021.04.06 |