- MQTT 프로토콜이란 무엇입니까?
- MQTT는 어떻게 작동합니까?
- Eclipse Mosquitto 브로커
- 필요한 구성 요소
- Eclipse MQTT 테스트 회로-회로도
- 브로커와의 통신을 설정하기 위해 ESP8266 프로그래밍
- Arduino를 사용하여 ESP8266으로 MQTT 테스트
지난 몇 년 동안 IoT (사물 인터넷) 장치는 일상 생활에서 구별 할 수없는 부분이되었습니다. 스마트 홈, 스마트 전구에서 스마트 기기까지; 제작자와 개발자는이 기술을 통합하여 우리의 일상 생활을 좀 더 흥미롭게 만드는 연결된 장치 네트워크를 만들고 있습니다. 이 모든 것은 의사 소통의 용이성 때문에 가능했습니다. 장치간에 통신 할 수있는 방법은 여러 가지가 있지만 상용 및 취미 제품에서 일반적으로 사용되는 단일 프로토콜은 MQTT (Message Queuing Telemetry Transport) 입니다. 이전에 Arduino 및 Google Assistant를 사용하여 MQTT를 사용하여 NodeMCU 보드와 통신하는 음성 제어 FM 라디오를 구축했습니다. 그것이 당신에게 흥미로울 것 같으면 그것을 확인하십시오.
이 프로젝트에서는 인기있는 무료 Eclipse MQTT 브로커 를 사용하고 IoT 장치 (여기서는 NodeMCU 모듈)를 MQTT 브로커에 연결하고 MQTT 브로커와 NodeMCU 간에 데이터를 전송하는 방법 을 배웁니다.
MQTT 프로토콜이란 무엇입니까?
더 진행하기 전에 MQTT (Message Queuing Telemetry Transport) 프로토콜에 대한 명확한 아이디어를 갖는 것이 좋습니다. 발행 / 구독 방법을 사용하고 여러 장치간에 메시지를 변환하는 경량 메시징 프로토콜입니다. MQTT 프로토콜을 사용하면 데이터를 송수신하고 센서 데이터 읽기 등 다양한 출력 장치를 제어 할 수 있습니다. TCP를 기반으로 개발 되었기 때문에 HTTP와 같은 유사한 프로토콜보다 빠릅니다. 그 외에도 매우 가벼운 것과 같은 다른 프로토콜에 비해 다른 많은 장점이 있으므로 과도한 메모리를 소비하지 않으며 매우 적은 네트워크 대역폭으로 작동 할 수 있으며 강력한 보안 프로토콜이 내장되어 있습니다. 이러한 기능은 많은 응용 분야에 적합합니다.
MQTT는 어떻게 작동합니까?
MQTT 프로토콜의 작동을 이해하려면 세 가지 기본 사항 만 이해하면됩니다. 위의 다이어그램은이를 보여줍니다. 또한 아래 기사에서 설명했습니다.
MQTT 클라이언트:
MQTT 클라이언트는 임의의 장치가 알려져있다 중앙 서버로 MQTT 기능과 연통 실행 (이것은 마이크로 컨트롤러 또는 서버 일 수있다)은 " 브로커." 브로커는 연결된 클라이언트 간의 데이터 통신을 처리합니다.
MQTT 게시자:
클라이언트가 정보를 보내려고 할 때 클라이언트를 "게시자"라고합니다. 게시자는 특정 주제에 대한 정보를 게시합니다. " 주제 "는 메시지를 게시 / 구독 할 수있는 경로입니다. 그런 다음 브로커는 사용자가 게시 한 정보 를 해당 특정 주제를 구독 한 클라이언트 (Subscriber 라고도 함)로 보냅니다.
MQTT 가입자:
MQTT 구독자 온 주제에 가입 MQTT의 브로커가 보낸 메시지를 읽을 수 브로커.
Eclipse Mosquitto 브로커
Eclipse Mosquitto 는 가볍고 통신을 위해 IoT 장치에서 사용하기에 적합한 오픈 소스 MQTT 브로커입니다. MQTT 프로토콜은 A가 publish / subscribe 모델을 사용하여 정보를 전송하는 경량 방법을 제공한다. 주제에 대해 자세히 알아 보려면 공식 모기 웹 사이트를 방문하세요.
Eclipse Mosquitto 브로커 설정:
브로커와 통신을 설정하려면 먼저 설정해야합니다. 이 프로젝트에서는 Android 애플리케이션을 사용 하여 브로커를 통해 정보 를 게시 하고 구독 합니다. 다음 단계는 설정 프로세스에 대한 더 나은 아이디어를 제공합니다.
1 단계:
먼저 Google Play Store / App Store에서 사용할 수있는 "MQTT 클라이언트"애플리케이션을 다운로드하여 설치합니다. 이 프로젝트에서는 아래 이미지와 같은 "MQTT client" 라는 이름의 애플리케이션 이 사용됩니다.
2 단계:
"+"기호를 클릭하여 새 브로커를 추가 할 응용 프로그램의 추가 옵션을 나열합니다. 버튼을 클릭하면 아래와 같은 새로운 화면이 나타납니다.
3 단계:
그 후에는 필수 필드에 브로커의 세부 정보를 입력해야합니다. 먼저 응용 프로그램에 표시된 "사용"옵션을 클릭합니다. 이 프로젝트에서는 Eclipse MQTT 브로커 를 사용하며, 채워야 할 세부 사항은 다음과 같습니다.
닉네임: 선호하는 이름 제공
호스트: mqtt.eclipse.org
포트: 1883
클라이언트 ID: 선호하는 ID 제공
위의 세부 정보는 해당 필드에 입력해야합니다. 다른 모든 필드는 필요하지 않으며 비워 둘 수 있습니다. 성공적으로 완료되면 저장 버튼을 클릭하여 브로커 세부 정보를 저장합니다.
완료되면 Android 애플리케이션 설정 프로세스가 끝났으며 이제 하드웨어 측면으로 이동할 수 있습니다.
필요한 구성 요소
필요한 부품의 전체 목록은 아래에 설명되어 있습니다. 이 회로는 간단하기 때문에 지역 취미 용품점에서 필요한 모든 부품을 찾을 수 있습니다.
- NodeMCU
- LED
- 브레드 보드
- 전선 연결
- 프로그래밍 케이블
Eclipse MQTT 테스트 회로-회로도
Basic MQTT 프로젝트의 회로도는 다음과 같습니다.
브로커와의 통신을 설정하기 위해 ESP8266 프로그래밍
간단한 Arduino 코드 는 MQTT 브로커와 NodeMCU 사이에 필요한 모든 통신을 처리합니다. 이 섹션에서는이 기능이 어떻게 작동하는지 자세히 알아 봅니다.
Arduino IDE를 설정하고 코드를 업로드합니다.
NodeMCU 에 처음으로 코드를 업로드하는 경우 먼저 Arduino IDE 를 설정해야합니다. 그렇게하려면 아래에 주어진 간단한 지침을 따르십시오.
먼저 Arduino IDE를 열고 File–> Preferences–> Settings 로 이동 합니다 .
다음으로 아래 URL을 복사하여 '추가 게시판 관리자 URL '필드에 붙여넣고 '확인'을 클릭합니다. 아래 이미지를 확인하여 우리가 어떻게했는지 알 수 있습니다.
링크:
다음으로 도구> 게시판> 게시판 관리자 로 이동합니다. Board 's Manager 창 에서 검색 상자에 ESP 8266 을 입력하고 Enter 키를 누릅니다. 그런 다음 드롭 다운에서 최신 버전을 선택하고 설치를 클릭합니다. 아래 이미지는 명확한 아이디어를 제공합니다.
마지막으로 설치가 완료되면 도구-> 보드-> 로 이동하여 NodeMCU 1.0 (ESP-12E 모듈)을 선택합니다. 이제 Arduino IDE로 NodeMCU를 프로그래밍 할 수 있습니다. Arduino IDE 설정을 완료 했으므로 이제 전체 코드를 업로드 할 수 있습니다. 그러나 먼저 전체 코드에 대한 빠른 설명을 읽으십시오.
먼저 ESP8266 사용을위한 “ESP8266WiFi.h” 와 MQTT를위한 “PubSubClient.h” 를 포함했습니다.
Arduino 라이브러리 내에 사전 빌드 된 ESP8266 라이브러리를 찾을 수 있지만 연결된 GitHub 저장소에서 PubSubClient 라이브러리를 다운로드해야합니다.
#포함
그런 다음 Wi-Fi 사용자 이름 및 암호와 같은 네트워크 자격 증명을 정의합니다. 각각 "admin"및 "12345678"대신 자격 증명을 바꿉니다.
const char * ssid = "관리자"; const char * 암호 = "12345678";
다음으로 MQTT 서버 를 구성해야 합니다. 이 프로젝트에는 Eclipse MQTT 서버를 사용했기 때문에 서버 주소가 “mqtt.eclipse.org” 로 지정되었습니다 . 그러나 Mosquitto, Adafruit와 같은 다른 서버를 사용하려는 경우 특정 서버 주소 및 포트 번호로 바꿀 수 있습니다.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
다음으로 프로그램 전체에서 사용될 WiFiClient 및 PubSubClient 클래스에 대한 인스턴스가 생성 됩니다.
WiFiClient espClient; PubSubClient 클라이언트 (espClient);
에서 설정 () 섹션, 우리는 전화 WiFi.begin ()를 원하는 핫스팟에 ESP를 연결합니다이 메서드를 호출, 첫번째.
WiFi.begin (ssid, 암호);
다음으로 WiFi.status () 메서드를 사용하여 성공적인 네트워크 연결을 확인합니다 . 성공적으로 연결되면 연결된 네트워크의 SSID와 함께 메시지가 직렬 모니터에 인쇄됩니다.
while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.println ("WiFi에 연결 중.."); } Serial.print ("WiFi에 연결됨:"); Serial.println (WiFi.SSID ());
이제 브로커를 만들어야합니다. 이를 위해 setServer 메소드를 사용했습니다. 이 메서드는 이전에 미리 정의한 두 개의 인수를 사용합니다. 이제 서버에서 메시지를 수신하려면 콜백 함수 를 생성해야 합니다. 이를 위해 setCallback (callback) 메서드를 사용합니다.
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
이제 connect (clientID) 기능을 사용하여 ESP8266 클라이언트에 연결했습니다. 여기서 clientID 는 클라이언트의 이름이며 고유해야합니다. 연결되면 직렬 모니터 내부에 성공 메시지가 표시 될 수 있습니다.
if (client.connect ("ESP8266")) {Serial.println ("connected"); } else {Serial.print ("실패한 상태") Serial.println (client.state ()); 지연 (2000); }
다음으로, 우리는 전화 ) (client.subscribe을 , 내장 된 특정 주제에 가입하는 데 사용됩니다 MQTT 기능. 이 프로젝트에서는 구독자 이름으로 " esp / test "를 사용했습니다.
client.subscribe ("esp / test");
이제 업데이트 된 정보를 사용할 수 있는지 여부를 확인하기 위해 MQTTcallback 함수가 호출됩니다. 새 데이터를 사용할 수있는 경우이 기능은 수신 된 데이터를 처리하고 메시지가 수신 된 원래 메시지 및 주제 이름과 함께 직렬 모니터에 메시지를 인쇄합니다.
다음으로 메시지를 문자열로 변환하여 트리거 작업을 비교하고 확인할 수 있습니다. 이 프로젝트에서는 아래 코드와 같이 MQTT 명령을 사용하여 LED를 켜거나 끕니다.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (메시지); if (message == "on") {digitalWrite (LED, HIGH); }
마지막으로 주제에 대한 정보를 게시합니다. client.publish () 함수가 사용된다. 이 프로젝트에서는 푸시 버튼 상태를 확인하고 버튼을 누르면 아래와 같이 토픽 " esp / test1 "에 메시지가 게시 됩니다.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } 그렇지 않으면; client.loop ();
Arduino를 사용하여 ESP8266으로 MQTT 테스트
최종 테스트를 위해 이전에 설정 한 Android 애플리케이션을 사용할 것입니다.
MQTT 클라이언트 애플리케이션을 열고 모바일에 활성 인터넷 연결이 있는지 확인하십시오. 또한 NodeMCU가 연결된 핫스팟에는 활성 인터넷 연결이 있어야합니다. 모든 것이 인터넷에 연결되면 ESP 모듈에서 "Hello from ESP8266" 문자열을 보내어 Android 앱에 반영하고 알림을받습니다. 다음으로 Android 앱에서 문자열을 보내면 ESP8266 노드 MCU 보드에 연결된 LED가 켜집니다.
1 단계: (주제 구독):
이전에 구성한 앱에서 저장된 MQTT 옵션을 클릭합니다. "Subscribe to a Topic"이라는 메시지가 표시되는 화면이 나타납니다 . 이전에 주제를 " esp / test1 " 로 구성했습니다. 따라서 Android 앱에서 " esp / test1 "을 작성합니다. 구독을 클릭하면 아래와 같은 화면이 나타나며 특정 주제에서 "메시지가 수신되지 않았습니다"라는 메시지가 표시됩니다.
이제 nodeMCU에 연결된 'Connected'버튼을 클릭합니다. 이제 코드에 따라“ Hello from ESP8266 ” 메시지 가 주제에 게시되고 아래와 같이 수신 된 메시지와 함께 화면에 알림이 표시됩니다.
2 단계: 주제에 게시:
이제 Topic에 게시하기 위해 Application의 위쪽 화살표 버튼을 클릭하면 아래와 같은 화면이 열립니다.
이제 Topic 필드에 " esp / test "를 쓰고 메시지 필드에 " on "또는 " off "를 써서 각각 LED를 켜고 끕니다. 예를 들어 "on"이 토픽에 게시되면 LED가 켜지고 "off"가 토픽에 게시되면 LED가 꺼집니다.
기사를 좋아하고 새로운 것을 배웠기를 바랍니다. 이 기사와 관련하여 질문이 있으시면 아래에 의견을 남겨 주시거나 대신 포럼을 사용할 수 있습니다.