728x90
반응형

저번에 라즈베리파이 자체에서 Publish와 Subscribe 테스트를 해봤으니

이제 ESP8266 아두이노 보드에서 Publish하고 라즈베리파이에서 Subscribe 테스트를 해볼 예정이다.

성공하면 이미 있는 안드로이드 MQTT앱을 통해 Subscribe 테스트까지...

 

NodeMCU 보드

https://lektion-von-erfolglosigkeit.tistory.com/107?category=976941 

 

Esp8266 NodeMCU WiFi 시리얼 와이파이 모듈

학교 프로젝트를 위해 wifi 모듈이 필요해서 ESP8266 NodeMCU를 구매했다 이 보드를 사용하기 위해서는 따로 보드매니저에서 추가를 해주어야 한다 개발환경 세팅 파일 - 환경설정 - 추가적인 보드 매

lektion-von-erfolglosigkeit.tistory.com

 

Arduino MQTT 라이브러리 설치

Arudino IDE를 실행하고 스케치 -> 라이브러리 포함하기 -> 라이브러리 관리 클릭

 

PubSubClient 검색

 

PubSubClient 라이브러리 설치

 

예제 실행

파일 -> 예제 -> PubSubClient -> mqtt_esp8266 클릭

 

보드가 ESP8266계열이 아니면 ESP8266Wifi.h를 찾을 수 없다고 오류가 뜬다

 

툴 -> 보드 -> ESP8266 Boards -> NodeMCU 1.0 (ESP-12E Module) 선택

이후 컴파일을 해보면 오류 없이 잘 된다.

 

이제 ssid에는 Wifi의 이름을, password에는 비밀번호를, mqtt_server에는 라즈베리파이의 ip를 각각 입력해준다

 

void loop()에서 확인할 수 있듯이 이 예제는 지속적으로 hello world #num를 Publish한다

outTopic은 Topic을 따로 설정하지 않았을 때 나오는 기본적인 Topic인듯 하다

 

 

Subscribe 테스트

위 예제를 NodeMCU 보드에 업로드하고 시리얼 모니터를 킨 뒤 리셋을 한번 해주자

그리고 라즈베리파이에서 mqtt broker를 시작시킨다

sudo /etc/init.d/mosquitto start

 

흠...

MQTT 연결이 실패했다고 뜬다

와이파이는 연결이 잘 됐는데...

 

코드상에서 보면 client.state()가 -2가 뜨고 있다

state가 -2인 것을 떠나서 그냥 MQTT Broker와의 연결이 되지 않는 것 같다

 

찾아보니 위 예제는 익명으로 MQTT Broker에 접속하기 때문에 익명접속을 허용해줘야 한다고 한다

 

아래 명령어를 통해 config 파일을 연다

sudo nano /etc/mosquitto/mosquitto.conf
또는
sudo vim /etc/mosquitto/mosquitto.conf

 

그 다음 아래 두 개를 맨 마지막줄에 추가한다

allow_anonymous true
bind_address 0.0.0.0

각각 익명접속 허용, 모든 ip 접속 허용이다

 

이후 아래 명령어를 통해 MQTT Broker를 재시작한다

sudo /etc/init.d/mosquitto restart

 

아두이노 시리얼모니터를 확인해보면 연결에 성공하고 메세지를 publish하고 있다

 

마지막으로 라즈베리파이에서 위 publish 메세지를 확인해보자

mosquitto_sub -d -t "outTopic"

 

MQTT 앱 테스트

구글플레이스토어에서 MQTT Client를 설치한다

실행 후 +버튼 클릭

Enabled 체크

Nickname과 Client ID를 적당히 입력하고 Host에는 라즈베리파이 IP를 입력한다

 

저장하고 클릭한 다음 outTopic를 구독하면 hello world가 출력되는 것을 볼 수 있다