pubsubclient
pubsubclient
📌 Overview
PubSubClient는 Arduino 및 Arduino-호환 보드에서 MQTT (메시지 발행/구독) 통신을 구현할 수 있는 클라이언트 라이브러리입니다.
즉, Arduino 장치가 MQTT 브로커와 연결해 메시지를 보내고 받을 수 있게 해주는 코드 모음이에요.
📌 Features
- 간단한 MQTT Publish/Subscribe API 제공: 임베디드에서 필요한 최소 기능 중심으로 구성(“simple publish/subscribe messaging”).
- 광범위한 하드웨어 호환성(Arduino Client API 기반): Ethernet/WiFi 등 “Arduino Ethernet Client API”를 구현한 다양한 보드/쉴드에서 동작하도록 설계.
- MQTT 3.1.1 기본 지원 + 구버전(3.1) 선택 가능: 현행 MQTT 호환을 기본으로 유지하면서 레거시 선택도 가능.
- 설정 가능한 버퍼/Keepalive: 기본 최대 패킷(헤더 포함) 256B, keepalive 15s 등 제약을 명시하고 설정 변경 가능.
- 명확한 제약(한계) 공개: Publish는 QoS 0만, Subscribe는 QoS 0/1 등 제약을 문서로 명확히 제공(실무에서 “가능/불가” 판단이 빠름).
📌 System Architecture
+-------------------+
| Sensor / MCU |
| (Arduino/ESP/RP) |
+---------+---------+
|
| TCP/IP (Ethernet / WiFi)
v
+-------------------+
| MQTT Broker |
| (Mosquitto etc.) |
+---------+---------+
|
|
v
+-------------------+
| Application |
| (PC / Server / |
| Cloud Service) |
+-------------------+Edge Device
- MCU (Arduino, ESP32 등)
- PubSubClient 기반 MQTT 클라이언트
- 센서 데이터 Publish
- 제어 명령 Subscribe
MQTT Broker
- 메시지 중계 서버 (예: Mosquitto)
- Topic 기반 메시지 라우팅
Application / Server
- 데이터 수집 및 저장
- 모니터링 및 제어 명령 전송
📌 Role and Application of the WIZnet's Chip
사용된 WIZnet 칩 : W5100 (Arduino Ethernet Shield)
네트워크에서의 역할 (TCP/UDP/HTTP/MQTT 등)
- W5100은 하드웨어 TCP/IP 스택을 제공하는 이더넷 컨트롤러로, MCU는 SPI로 칩을 제어해 TCP/UDP 소켓 통신을 사용합니다.
- PubSubClient는 이 TCP 연결 위에서 MQTT 프로토콜을 처리합니다(즉, “WIZnet 칩=소켓/TCP/IP”, “PubSubClient=MQTT 레벨”).
📌 Market & Application Value
(by ChatGPT)
적용 산업/시장
- 공장/빌딩/설비 모니터링(유선 이더넷 기반 센서 노드), 원격 제어, 에너지/환경 데이터 수집 등 경량 메시징 + 중앙 브로커 구조가 유리한 영역
- Wi-Fi 대비 유선이 선호되는 현장(노이즈/보안 정책/설치 환경)에서 특히 유용
제품화/서비스 확장 가능성
- MQTT는 브로커를 중심으로 확장이 쉬워서, 초기에는 소수 노드로 시작해도 토픽 설계만 유지하면 규모 확장이 비교적 단순
- PubSubClient는 제약(QoS, 버퍼 크기 등)이 명확해 엔트리/프로토타입→양산 검토 단계에서 요구사항 매칭이 빠름
📌 External Indicators
GitHub 지표
- Stars: 4k, Forks: 1.5k, Issues: 499, PR: 67, Commits: 206, Contributors: 34
Arduino 생태계 내 등재
- Arduino Libraries 인덱스에 등재되어 있으며, MQTT 3.1.1 지원/다양한 하드웨어 호환을 명시 (Link)
- Arduino 공식 문서에서도 PubSubClient 라이브러리 페이지가 존재(라이브러리 정보 제공) (Link)
📌 Summary
PubSubClient는 Arduino 환경에서 MQTT 클라이언트 기능을 간단히 제공하는 대표 라이브러리이며, GitHub/Arduino 생태계 지표에서 광범위한 채택이 확인됩니다.
WIZnet W5100/W5500 기반 이더넷 쉴드는 하드웨어 TCP/IP 소켓을 제공해, PubSubClient가 MQTT에 집중할 수 있는 구조를 만듭니다.
📌FAQ
Q1. PubSubClient 라이브러리는 무엇인가요?
A: PubSubClient는 Arduino 및 임베디드 장치에서 MQTT 프로토콜을 사용하기 위한 경량 MQTT 클라이언트 라이브러리입니다.
특히 Arduino Ethernet Shield(W5100), WiFi 모듈 등 다양한 네트워크 인터페이스와 함께 사용할 수 있으며, MQTT 브로커와의 Publish/Subscribe 통신을 구현하는 데 사용됩니다.
Q2. W5100 기반 Arduino에서 MQTT를 사용하는 기본 구조는 무엇인가요?
A: 기본 구조는 다음과 같습니다:
- W5100을 통한 Ethernet 연결 설정
- MQTT 브로커 주소 및 포트 설정
- MQTT 클라이언트 생성
- 브로커 연결(connect)
- 메시지 발행(publish) 또는 구독(subscribe)
- loop() 함수에서 지속적인 연결 유지
W5100은 TCP 세션을 처리하고, PubSubClient는 MQTT 프로토콜 계층을 처리합니다.
Q3. PubSubClient와 W5100 사용 시 최대 메시지 크기는 얼마인가요?
A: 기본 설정에서 MQTT 메시지 최대 크기는 256바이트입니다. 이 값은 MQTT_MAX_PACKET_SIZE 매크로를 수정하여 변경할 수 있습니다. 단, W5100은 내부 버퍼가 제한적이므로(총 16KB), 메시지 크기를 증가시킬 경우 메모리 사용량을 고려해야 합니다.
Q4. W5100에서 MQTT 연결이 자주 끊어지는 이유는 무엇인가요?
A: 주요 원인은 다음과 같습니다:
- keepalive 설정 문제
- loop() 함수 미호출
- 네트워크 지연 또는 브로커 응답 지연
- W5100 소켓 리소스 부족
- 전원 불안정
해결 방법:
client.loop()를 주기적으로 호출- keepalive 시간 조정
- 안정적인 전원 공급
- 재연결 로직 구현

