저번에 라즈베리파이 자체에서 Publish와 Subscribe 테스트를 해봤으니
이제 ESP8266 아두이노 보드에서 Publish하고 라즈베리파이에서 Subscribe 테스트를 해볼 예정이다.
성공하면 이미 있는 안드로이드 MQTT앱을 통해 Subscribe 테스트까지...
NodeMCU 보드
https://lektion-von-erfolglosigkeit.tistory.com/107?category=976941
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가 출력되는 것을 볼 수 있다
'프로젝트 > SEDP' 카테고리의 다른 글
MQTT 테스트 애플리케이션 제작(3) - 백그라운드 서비스 (0) | 2021.07.12 |
---|---|
MQTT 테스트 애플리케이션 제작(2) - subscribe (0) | 2021.07.11 |
MQTT 테스트 애플리케이션 제작(1) - publish (2) | 2021.07.11 |
MQTT broker 테스트 (0) | 2021.05.31 |
SEDP 프로젝트 개요 (0) | 2021.05.22 |