티스토리 뷰

728x90

1. 개요

  

  아두이노 또는 ESP8266 제품을 이용하여 MQTT에 접속 및 Publish, Subscribe를 해보도록 합니다.



2. 준비

  

  우선 기본 MQTT에 개념에 대해 잘 모르신다면 이전 게시물(http://twinw.tistory.com/158)을 확인하시기 바랍니다. 또한 ESP8266 제품을 이용하시는 분들은 ESP8266 보드를 추가하는 작업(http://twinw.tistory.com/175)을 해주시기 바랍니다.


먼저 스케치 -> 라이브러리 포함하기 -> 라이브러리 관리...로 들어갑니다.


그리고 PubSubClient를 검색한 후 다운받습니다.



3. Source Code

  

  라이브러리를 추가하는 부분에서 어떤 WIFI 제품을 쓰는지에 따라 필요없는 헤더를 지워주시기 바랍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <WiFi.h>         //WIFI shield
//#include <ESP8266WiFi.h>  //ESP8266
#include <PubSubClient.h>
 
char ssid[] = "SSID";
char password[] = "pswd";
const char* mqtt_server = "192.168.0.1"; //mqtt_server_IP
 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    for(int i = 0; i<500; i++){
      delay(1);
    }
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
 
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ClientID")) { //change to ClientID
      Serial.println("connected");
       
      // ... and resubscribe
      client.subscribe("Topic");
 
      // Once connected, publish an announcement...
      client.publish("Topic", "test msg");
       
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
    }
  }
}
 
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  String msg = "";
  for (int i = 0; i < length; i++) {
    msg +=(char)payload[i];
  }
  Serial.print(msg);
  Serial.println();
}
 
void setup() {
  Serial.begin(9600);       //Arduino
  //Serial.begin(115200);   //ESP8266
  setup_wifi();                   // Connect to wifi
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
   
}
 
void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
   
}

 위 코드에서 개인적으로 변경해야할 부분은 아래와 같습니다.
함수 reconnect에서는 어떤 ClientID로 접속할 것인지 변경하시면 됩니다.  또한 어떤 토픽을 읽을 것인지에 따라 client.subscribe(토픽); 커맨드를 사용해 줍니다. client.publish(토픽,메세지); 커맨드 역시 필요에 따라 변경하시면 됩니다.
함수 callback에서는 메시지를 수신받고 어떻게 처리할것인가에 대해 코드를 추가하시면 됩니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함