라즈베리파이 MQTT 설치 및 자동 실행 설정
프로젝트에 대해서 회의를 해 본 결과, 데이터를 측정한 다음을 어떻게 할 것인지 회의를 했다.
그 과정에서, MQTT를 Python으로 주고받자고 결론을 낼까 했는데.. C언어로 하는 것이 더 좋을 수 있다고 하는 의견에 좀 더 생각해보았다.
근데 어차피 라즈베리파이에 다운로드도 내가 할 거고, 설정도 내가 할 건데.. 그리고 제일 중요한 건
라즈베리파이에서 데이터를 측정한 것을 그대로 코드에서 이어서 보내면 더 좋을 것 같은데? 라는 생각에 (반은 설득 당했다)
C언어를 기반으로 MQTT 서비스를 통해 송수신을 구현하기로 했다.
그러면 일단 MQTT 서비스를 다운로드 해야하니, 이 다운로드 하는 방법을 찾아보겠다!
https://velog.io/@imkkuk/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4-MQTT
<IOT> 라즈베리파이 MQTT
이 내용을 수행하기 위해서는 ... 라즈베리파이에 운영체제가 설치되어 있어야 합니다. 아래 내용은 ssh 연결을 통해서 라즈베리파이 모니터를 사용하지 않습니다. ssh 연결을 할 수 있어야 하고,
velog.io
이번 포스팅은 위 블로그 + GPT를 참고를 좀 했습니다.
우선 통신 방법은 publisher가 브로커에게 정보를 전달하고, 이를 subscriber가 받는 방식이라고 한다.
그런데 그 중간에 브로커가 존재하여, 브로커를 통해 전달하는 방식이다.
즉 [라즈베리파이 (Publisher)] → (MQTT 브로커) → [??? (Subscriber)] 와 같이 구성되어있다는 것!
굳이 브로커를 쓰는 이유는? 반대로 생각하면 이해하기 쉽다.
브로커가 없다면?
- 모든 장치가 서로 직접 연결해야 함 → 복잡하고 관리 어려움
- 네트워크가 불안정하면 데이터 손실 발생 가능
그래서, 여러 장치가 동시에 연결하고자 한다는 것이 일반적인 IoT 시스템에선 이런 MQTT 통신 방식을 쓴다고 한다.
이런 브로커는 가상의 SW 서버로, 이 장치는 어디가 될 지 모르지만.. 아마 이번에는 높은 확률로 프론트와 백앤드를 맡고있는 http://gallerist.tistory.com 에서 담당해주지 않을까? 생각중이다.
그래도 혹시 모르니, MQTT를 활용하기 위한 것들은 다 다운로드 해볼 예정!
다운로드 전, 우선 내 라즈베리파이의 버전 확인 및 업데이트를 진행한다.
sudo apt-get update
sudo apt-get upgrade
서명 키 받기 - 오픈 소스인 Mosquitto 활용을 할 예정이기에, 그리고 Debian OS에서 작동시킬 예정이기에 블로그에서 소개한 방식대로 wget을 사용한 다운로드를 진행해야 한다고 한다.
cd ~
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/source.list.d/
명령을 치면
raspi.list
이런게 있는 것을 볼 수 있는데, 이는 기본 패키지 저장소를 관리하는 파일이다.
sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
를 하면 이제 Mosquitto 공식 저장소에서 패키지를 받을 준비를 하는 것이고,
이를 통해 update를 통해 패키지 업데이트가 가능하게 된다.
--2025-03-13 16:48:09-- http://repo.mosquitto.org/debian/mosquitto-stretch.list
Resolving repo.mosquitto.org (repo.mosquitto.org)... 85.119.83.194, 2001:ba8:1f1:f271::2
Connecting to repo.mosquitto.org (repo.mosquitto.org)|85.119.83.194|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://repo.mosquitto.org/debian/mosquitto-stretch.list [following]
--2025-03-13 16:48:12-- https://repo.mosquitto.org/debian/mosquitto-stretch.list
Connecting to repo.mosquitto.org (repo.mosquitto.org)|85.119.83.194|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2025-03-13 16:48:13 ERROR 404: Not Found.
위와 같은 에러가 나왔다.
아마.. mosquitto-stretch.list가 사라진 듯 하다..
그런데, 아래 명령어를 이어서 사용하니, mosquitto가 다운로드 가능했다.
sudo apt-get install mosquitto mosquitto-clients
이 명령어로, mosquitto-clients (모스키토 브로커, 테스트용 도구)를 다운로드 한다.
cd /etc/mosquitto
ls
이 명령어를 써서, 성공적으로 다운로드가 되었는지 확인하길 권장한다.
우리가 사용하고자 하는 것은 이 라즈베리파이의 외부 정보 접근 및 송수신이기에, 포트포워딩을 할 필요가 있다.
그래서, 다음 명령어를 사용한다.
(블로그에선 vi 편집기를 사용하자고 하는데, 개인적으로 nano가 더 편한 것 같다)
sudo nano mosquitto.conf # nano -> 편집기 실행
bind_address 0.0.0.0 # 모든 IP 허용
allow_anonymous true # 외부인에 대한 권한 허용
이렇게 작성하고, mqtt를 실행해보겠다.
sudo /etc/init.d/mosquitto start
로 가능하며, 개인적으로는 다음 명령어가 익숙하다.
sudo systemctl start mosquitto # 실행 명령어
sudo systemctl status mosquitto # 상태 확인 명령어
sudo systemctl stop mosquitto # 중단 명령어
참고로, 실행중인지 확인을 원한다면 status를 한 뒤 나오는 것을 잘 살펴보면 된다.
특히,
mosquitto.service - Mosquitto MQTT Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-03-13 17:12:15 KST; 40s ago
Docs: man:mosquitto.conf(5)
...
에서 active(running)인 지 확인하면 된다.
그리고 추가로, 부팅시 자동 실행 설정을 변경 하려면 다음 명령어를 사용한다.
sudo systemctl enable mosquitto # 시스템 실행 시 자동 실행
sudo systemctl disable mosquitto # 시스템 실행 시 자동 실행
이렇게까지, 간단히 설치 및 실행을 설정하였다. 원래 내가 할 게 아니라고 생각했는데, 하다보니 내가 해야하는 게 맞는 것 같다고 생각중이다.. 오히려 IoT를 하려면 모르면 안 되는 느낌? ㅎ