ESP32를 MQTT 브로커로 사용해 보았습니다.

소개



Mongoose 라는 web server용의 라이브러리를 사용해 ESP32를 브로커로 해 보았으므로, 그 정보 공유입니다. ※ESP-IDF로 개발하고 있습니다

앞으로 설명하는 절차는 궁극적으로 아래 그림과 같이 동작을 확인합니다.



ESP32( ESPr® Developer 32 사용)를 브로커로 실행하고 MQTT Box(PC 응용 프로그램)에서 보낸 {'hello':'world'}라는 문자열을 ESP32를 통해 다시 MQTT Box에서 받는 간단한 구성과 내용입니다.

※ESP32는 STA 모드로 동작시키고 있습니다
 
 
이 동작 확인에서는 MQTT Box를 Publisher(데이터 송신하는 사람)와 Subscriber(데이터를 수신하는 사람)로서 사용하고 있습니다만, 실제로는 ESP32를 Publisher나 Subscriber로 할 수 있습니다.

즉, ESP32만으로 MQTT 통신을 할 수 있다는 것입니다. 오, 뭐야?

사용한 것


  • ESPr® Developer 32
  • ESP32의 소프트웨어 개발에 사용한 OS : Ubuntu18.04 (Windows7 Pro 64bit를 호스트 OS로하는 VirtualBox에 설치)
  • PC (MQTTBox 설치) OS : Windows7 Pro 64bit

  • 절차



    전제



    이전에 작성한 mongoose 샘플 프로젝트 의 환경을 그대로 사용하는 것으로 합니다
    이번은 그 프로젝트의 이하의 2파일(★)을 변경하는 것만으로 실현할 수 있습니다.
    mongoose_example
    ┣ main
    ┃ ┗ main.c ★
    ┃ 
    ┣ components
    ┃ ┗ mongoose
    ┃   ┗ mongoose.h ★
    :
    

    1. main.c를 MQTT 브로커 코드로 변경



    main.c를 이 코드 (github)의 내용으로 바꿉니다.

    ※다만, 코드중의 이하의 ①과 ②는 자신의 환경에 맞추어 변경할 필요가 있습니다.

    ①사용 환경의 WiFi 정보
    #define WIFI_SSID "xxxxx"
    #define WIFI_PASS "xxxxx"
    

    ②액세스처(ESP32)의 IP주소
    IP4_ADDR(&ipInfo.ip, 192,168,99,3);
    IP4_ADDR(&ipInfo.gw, 192,168,99,1);
    

    2. mongoose 라이브러리에서 MQTT 브로커 활성화 (mongoose.h)



    mongoose.h에서 다음과 같이 MG_ENABLE_MQTT_BROKER를 활성화 (1)합니다.
    #ifndef MG_ENABLE_MQTT_BROKER
    #define MG_ENABLE_MQTT_BROKER 1
    #endif
    

    3. 동작을 확인한다



    프로그램을 빌드하고 ESP32에 쓰기 및 모니터 시작
    $ make
    $ make flash
    $ make monitor
    

    그런 다음 MQTT Box를 시작하고 ESP32에 연결한 후 Publish하면 데이터를 받을 수 있습니다.

    MQTT Box의 구체적인 작동:
    ①MQTT의 설정※을 실시한 후에 「Connect」한다
    ② Subscribe
    ③Topic과 Payload 입력
    ④Publish하기
    ⑤ 보낸 데이터와 받은 데이터가 표시된다



    ※MQTT Box의 설정 내용:


    한편, ESP32의 모니터상에서는 다음과 같은 표시가 나옵니다.
    MQTT Box 조작에 따라 MG_EV_MQTT_XXX가 표시됩니다.


    끝에



    ESP32를 브로커로 만드는 것은 어렵다고 생각하면 Mongoose라는 라이브러리 덕분에 의외로 쉽게 실현할 수있었습니다.

    그리고, 이 순서로 브로커로서 동작시키고 있는 ESP32는 STA 모드로 동작하고 있기 때문에, 지금 그대로는 무선 라우터가 필요하기 때문에, 조금 열심히 AP 모드로 하고 싶은 곳입니다. (필요하게 다가오지 않으면 아마 하지 않는 느낌이 든다)

    보고 주셔서 감사합니다.
    tnejk чoμ_〆(・ω・。)

    업데이트 내역


  • 2019-05-29 : 신규 작성
  • 좋은 웹페이지 즐겨찾기