티스토리 뷰
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에서는 메시지를 수신받고 어떻게 처리할것인가에 대해 코드를 추가하시면 됩니다.
'HardWare > 아두이노' 카테고리의 다른 글
EEPROM+Serial을 이용한 Setting(AT) 만들기 (2) | 2017.01.10 |
---|---|
아두이노 - EEPROM과 Web Server를 이용한 Setting 만들기 (0) | 2016.12.15 |
Arduino IDE로 ESP8266 업로드 및 WIFI 예제 (5) | 2016.12.01 |
아두이노 - RGB LED(LS5050RGB, KY-009) 사용하기 (0) | 2016.10.11 |
아두이노 - 슬립 모드(Sleep Mode), 절전 모드, 저전력 모드 (7) | 2016.07.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바 입출력
- 카운터
- 유전
- LISTVIEW
- counter
- Service
- 안드로이드
- vim 설치
- java 파일 입출력
- Java Decompiler
- 알고리즘
- c언어
- 파일 입출력
- 포켓몬 Go
- 5582
- jad
- 서버
- 포켓몬 고
- java url
- Notification
- android
- java
- php
- 파일입출력
- 유전 알고리즘
- Res
- vim
- 인텐트
- 아두이노
- 테라펀딩 #투게더펀딩 #P2P투자 #부동산 소액 투자 #카카오 #토스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함