ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

예산이 한정되어 있다고 해서 반드시 고급 DIY 프로젝트를 수행할 수 없다는 의미는 아닙니다. IoT 프로젝트를 확장하기 위해 작고 저렴하며 편리한 WiFi 모듈을 찾고 있다면 ESP-01 모듈이 탁월한 선택입니다. 그러나 이러한 모듈을 MQTT와 같은 경량 프로토콜과 통합하는 것은 특히 IoT 개발이 처음인 경우 까다로울 수 있습니다.

ESP-01 보드 단독 프로그래밍은 ESP8266 시리즈의 다른 모듈에 비해 어려울 수 있습니다. 그러나 간단하고 절차적인 방식으로 MQTT를 설정하는 방법뿐만 아니라 모듈 사용을 시작하는 데 필요한 모든 하드웨어 및 소프트웨어 설정의 기본 사항을 살펴보겠습니다.

이사회 알아보기

ESP8266 ESP-01은 IoT 애플리케이션을 위해 설계된 고집적 SoC인 ESP8266EX 칩과 함께 제공되는 작고 컴팩트한 WiFi 모듈입니다.

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

이 모듈에는 TCP/IP 프로토콜 스택이 있는 단일 칩 무선 마이크로컨트롤러가 포함되어 있으며 무선 네트워크에 연결하거나 액세스 포인트 역할을 할 수 있습니다. ESP-01 모듈에는 GPIO 핀, 전원 및 접지, UART 인터페이스에 대한 액세스를 제공하는 2x4 핀 헤더도 있습니다.

하드웨어 설정

이 모듈은 전혀 브레드보드 친화적이지 않습니다. 편의를 위해 사전 제작된 확장 보드를 구입하거나 점퍼 와이어와 브레드보드를 ​​사용하는 구식 방식을 사용할 수 있습니다.

프로그래밍 경험을 쉽게 할 수 있는 전용 프로그래머인 ESP8266 직렬 모듈 보드가 있습니다. 이 방법을 선호하는 경우 DIYHOBI 에서 프로그래머(USB to TTL CH340G 변환기 모듈 어댑터 포함)를 사용하여 ESP-01 모듈에 프로그램을 플래시하는 방법에 대한 편리한 자습서를 제공합니다.

그러나 여전히 Arduino 보드를 사용하여 모듈을 프로그래밍할 수 있습니다. 아래 회로도를 참조하십시오.

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

매력적으로 보일 수 있지만 일반적으로 모듈을 Arduino의 3.3v 핀에 직접 연결하는 것은 핀이 제공하는 것보다 더 많은 전류가 필요하기 때문에 권장하지 않습니다. 대신 Arduino 5V를 LM1117/LD117과 같은 3.3V 전압 조정기에 연결한 다음 조정기에서 WiFi 모듈에 전원을 공급하십시오.

ESP의 VCCCH_PD 핀을 Arduino의 5V 핀에 연결하지 마십시오 . 모듈을 5V 전원에 연결하면 모듈이 손상될 수 있습니다.

모든 커패시터는 10uF 이고 저항은 1K 저항입니다.

소프트웨어 요구 사항

ESP-01 모듈은 일반적으로 Arduino 플랫폼과 함께 사용됩니다. 따라서 소프트웨어 설정은 특히 Arduino C에 익숙한 경우 매우 간단합니다. 그러나 Raspberry에 더 익숙한 경우 시도할 수 있는 Raspberry Pi IoT 프로젝트가 많이 있습니다.

기본 요구 사항은 다음과 같습니다.

  • MQTT 브로커 또는 서버(예: Mosquitto 또는 CloudMQTT).
  • ESP8266 코어 라이브러리가 있는 Arduino IDE.
  • Arduino용 PubSubClient 라이브러리입니다.

자체 MQTT 서버가 로컬에 있으면 프로젝트 내에서 유연성이 제공된다는 점을 기억해야 합니다.

필요한 라이브러리 설치

먼저 컴퓨터에 Arduino IDE를 다운로드하여 설치합니다. 설치가 완료되면 Arduino IDE를 열고 File > Preferences 로 이동합니다 .

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

추가 보드 관리자 URL 필드 에 다음 URL을 입력합니다.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

확인을 클릭하여 기본 설정 창을 닫습니다.

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

그런 다음 도구 > 보드 > 보드 관리자 로 이동합니다 .

그런 다음 esp8266을 검색 하고 esp8266 보드 패키지를 설치합니다. 여기에는 ESP-01 모듈에 필요한 모든 라이브러리가 포함되어 있습니다.

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

PubSubClient 라이브러리를 설치하려면 Sketch > 라이브러리 포함 > 라이브러리 관리 로 이동합니다 .

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

PubSubClient 를 검색 하고 라이브러리를 클릭하여 설치합니다.

ESP-01을 MQTT와 함께 사용: IoT 장치를 연결하고 제어하는 ​​방법

필요한 라이브러리를 모두 설치했으면 ESP-01 모듈 프로그래밍을 시작할 수 있습니다. 한 가지 유의할 점은 라이브러리에 포함된 Wifi.h를 사용하거나 ESPWifi.h 라이브러리를 다운로드하여 스케치에 포함할 수 있다는 것입니다.

ESP-01과 MQTT 브로커 간의 연결 설정

MQTT 브로커는 MQTT 클라이언트 간의 중개자 역할을 하는 서버입니다. 이를 통해 클라이언트는 게시-구독 모델을 통해 서로 메시지를 주고받을 수 있습니다.

ESP-01 모듈을 MQTT 브로커에 연결하려면 코드에 브로커의 IP 주소와 포트 번호를 지정해야 합니다. 또한 브로커에 ESP-01 모듈을 식별하는 고유한 클라이���트 ID를 제공해야 합니다.

먼저 스케치 상단에 필요한 라이브러리를 포함합니다.

#include ESP8266WiFi.h> #include PubSubClient.h>

다음으로 WiFi 및 MQTT 연결 세부 정보를 정의합니다.

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

자리 표시자를 자신의 WiFi 및 MQTT 연결 세부 정보로 바꾸는 것을 잊지 마십시오.

그런 다음 WiFi 클라이언트를 만들고 로컬 WiFi 네트워크에 연결합니다.

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

이 함수는 스케치의 setup() 함수 에서 호출해야 합니다 .

다음으로 MQTT 클라이언트를 만들고 MQTT 브로커에 연결해야 합니다.

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

MQTT 브로커에 연결하면 주제 게시 및 구독을 시작할 수 있습니다.

ESP-01에서 MQTT 브로커로 데이터 게시

이제 ESP01 모듈을 MQTT 브로커에 성공적으로 연결했으므로 ESP-01에서 브로커로 데이터를 게시하는 방법을 살펴보겠습니다.

데이터를 발행하려면 client.publish() 함수를 사용하여 inTopic 주제 에 메시지를 발행하십시오 .

client.publish("inTopic", "Hello from ESP-01");

이렇게 하면 "Hello from ESP-01" 메시지가 inTopic 주제에 게시됩니다.

ESP-01에서 브로커로 센서 데이터를 게시할 수도 있습니다. 예를 들어 ESP-01에 온도 센서가 연결되어 있는 경우 아래와 같이 브로커에 온도 데이터를 게시할 수 있습니다.

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

이렇게 하면 Temp 항목 에 온도 데이터가 게시됩니다 .

데이터는 프로젝트 요구 사항에 따라 반복적으로 또는 정기적으로 게시할 수 있습니다. 너무 많은 데이터로 브로커를 넘치게 만들지 않고 적절한 간격으로 게시하고 있는지 확인하십시오.

ESP-01에서 MQTT 주제 구독 및 데이터 수신

주제를 구독하려면 client.subscribe() 함수를 사용하십시오. 아래 사례에서 클라이언트는 outTopic 주제를 구독합니다.

client.subscribe("outTopic");

주제를 구독하면 아래 스케치의 loop () 함수 에서 client.loop() 함수를 사용하여 해당 주제에 게시된 메시지를 수신할 수 있습니다.

void loop() {   if (!client.connected()) {     reconnect();   }   client.loop(); }

이것은 지속적으로 새 메시지를 확인하고 새 메시지가 수신되면 콜백 기능을 실행합니다.

수신된 메시지를 처리하려면 아래와 같은 콜백 함수를 정의하십시오.

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

이 함수는 구독한 주제에 대한 새 메시지가 수신될 때 호출됩니다. 수신된 메시지를 직렬 모니터에 인쇄합니다.

QoS(서비스 품질) 수준 및 보안 기능 사용

요청 처리에 사용되는 가장 중요한 기술 중 하나는 MQTT 메시지에 QoS(Quality of Service) 수준을 사용하는 것입니다. QoS 레벨은 브로커와 구독자가 메시지를 처리하는 방법을 정의합니다. QoS에는 0, 1, 2의 세 가지 수준이 있습니다.

QoS 레벨 0은 메시지가 한 번만 전송되고 가입자에게 전달되는 것이 보장되지 않으므로 가장 신뢰도가 낮습니다. QoS 레벨 1은 메시지가 한 번 이상 전송되고 가입자에게 한 번 이상 전달되도록 보장되므로 더 안정적입니다. QoS 레벨 2는 메시지가 정확히 한 번만 전송되고 가입자에게 정확히 한 번만 전달되도록 보장되므로 가장 안정적입니다. 장치가 통신하는 방식은 다른 일반적인 사물 인터넷(IoT) 보안 문제 및 최신 상태를 유지하려는 수정 사항 과 일치합니다 .

QoS 수준을 사용하려면 client.publish() 함수를 사용하여 메시지를 게시할 때 원하는 수준을 지정할 수 있습니다 .

client.publish("topic", "Hello, world!", 1);

그러면 Hello, world! 메시지가 게시됩니다. QoS 레벨 1 의 주제 주제 로 .

또 다른 고급 기술은 LWT(Last Will and Testament) 메시지를 사용하는 것입니다. LWT 메시지는 클라이언트가 예기치 않게 연결이 끊어졌을 때 브로커가 보내는 메시지입니다. 이는 오프라인 장치를 감지하거나 장치 연결이 끊어졌을 때 작업을 트리거하는 데 중요하다고 생각합니다.

LWT 메시지를 사용하려면 client.setWill() 함수 를 사용하여 브로커에 연결할 때 LWT 메시지를 지정할 수 있습니다 .

client.setWill("status", "offline", 1, true);

이렇게 하면 QoS 레벨 1 및 보유 플래그가 true 로 설정된 상태 항목 에서 LWT 메시지가 오프라인 으로 설정됩니다 .

다음 IoT 프로젝트를 위한 준비

ESP-01 모듈은 IoT 프로젝트를 위한 저렴하고 컴팩트한 솔루션이며 MQTT와 함께 사용하면 프로젝트를 한 단계 더 높일 수 있습니다. 초기 설정이 어려울 수 있지만 가벼운 통신 및 높은 확장성과 같은 MQTT의 이점은 투자 가치가 있습니다.