Build a cloud-ready temperature sensor with the Arduino Uno and the IBM Watson IoT Platform

Part 2: Write the sketch and connect to the IBM Watson IoT Platform

by Kyle Brown



Overview

In Part 1 of this four-part tutorial series, I discussed the design of a project for monitoring temperatures in my wiring closet, built by using the Arduino Uno and the Virtuabotix DHT11 temperature sensor. I showed the construction of the circuit for the project and walked you through the installation of the Arduino IDE and how to test out each of the individual components of the project with different Arduino sample sketches. You’re now ready to see the design of the sketch that ties the IoT project into the cloud and the steps to enable monitoring of realtime temperature and humidity data remotely. However, first I need to discuss the protocol that you’ll use to communicate with the IBM IoT Foundation: MQTT.

What is MQTT?

MQTT (formerly Message Queueing Telemetry Transport) is a lightweight, fast communications protocol designed for the Internet of Things. It has its origins at IBM (where it was originally developed by Andy Stanford-Clark), and it has since been submitted to Organization for the Advancement of Structured Information Standards (OASIS) for standardization, where the current version of the protocol standard is version 3.1. The MQTT V3.1 Protocol Specification specification states that its purpose is to be a “lightweight broker-based publish/subscribe messaging protocol designed to be open, simple, lightweight and easy to implement.” In the time since its introduction, the “easy to implement” part has certainly proven to be true, as several different libraries implementing MQTT clients have been developed. You can find links to nearly all of them at the Eclipse Paho project page.

MQTT is perfect for use in embedded devices because it:

  • Is asynchronous, with multiple different levels of quality of service, which is important in cases where Internet connections are unreliable.
  • Sends short, tight messages that make it handy for low-bandwidth situations.
  • Doesn’t require much software to implement a client, which makes it great for devices like the Arduino with limited memory.

MQTT is the protocol that the IBM IoT Foundation QuickStart is designed to take input on.

Resources

Learn
MQTT V3.1 Protocol Specification: Read the latest version of the MQTT specification.
IBM Internet of Things Foundation: Try out the IBM IoT Foundation and sign up for the beta program.
Arduino: Visit the Arduino website.
“Bluemix and the Internet of Things” (Ryan Baxter, developerWorks, July 2014): Find out how IBM Bluemix and the IBM IoT Foundation can work together.

Get products and technologies
MQTT client for Arduino: Click the GutHub link to download the client.
Mosquitto: Download the Mosquitto broker.
Eclipse Paho Project: Download MQTT clients.

Learn more

Goto Original
Goto Part1

저작자 표시 동일 조건 변경 허락
신고
Creative Commons License
블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

MQTT Sever - Mosquitto

MQTT 2015.01.30 08:30

MQTT Server(Broker) - Mosquitto

MQTT Server는 아래와 같이 성능과 기능별로 아주 많다.

  • HiveMQ
  • IbmMQ
  • RabbitMQ
  • vert.X
  • Mosquitto

아래 사이트는 각 서버들에 대한 지원사항과 한계등을 아주 자세히 비교 설명하였다. 참고하기 바란다.
https://github.com/mqtt/mqtt.github.io/wiki/server-support#capabilities

Mosquitto

대부분 상용서비스를 제공하고 있지만, Mosqutto는 오픈 소스로도 제공되고 있으며, 기타 상용 제품에 비해 성능이 떨어지지 않고, Linux 뿐만 아니라 Mac, Windows 설치 파일도 함께 제공하여 간단한 test나 IOT with MQTT client를 개발하고 디버깅하기에는 아주 훌륭하다고 생각된다.

Mosquitto for Windows

  • 윈도우용 Mosquitto downlaod 하기
    http://mosquitto.org/download/ 에서 mosquitto-1.3.5-install-win32.exe 설치파일을 다운로드한 후 원 하는 디렉토리에 설치한다.

    설치 디렉토리내에 아래와 같은 실행파일을 확인한다.

    • mosquitto.exe : Mosquitto Server/Broker
    • mosquitto_sub.exe : Mosquitto client for subscribe
    • mosquitto_put.exe : Mosquitto client for publish
  • test.mosquitto.org 서버를 이용한 Subscribe 해보기
    mosquitto는 친절하게도 간단한 test를 위한 서버를 운용하고 있다. Test 서버를 활용하여 Mosquitto가 제대로 설치 되었는지 확인해 보자. (http://test.mosquitto.org/ 참조)
    Dos prompt를 실행하고 설치 경로로 이동한 후 아래 명령을 수행한다. 그림과 같이 topic 출력을 확인한다.

    mosquitto_sub -h test.mosquitto.org -t "#" -v

Moquitto Server 설정

Windows version을 설치하였을 경우 Windows service로 Window 시작과 함께 데몬 서비스가 시작된다. Moquitto 서비스 설정을 아래와 같이 수동으로 변경하고 중지시킨다. 이는 데몬이 동작하고 있을 경우 필자의 경우 직접 실행시킨 서버가 제대로 동작하지 않았다.
[제어판][관리도구][서비스]를 순차적으로 실행하고 Mosquitto를 찾아 서비스 중지 및 수동으로 변경한다.

Mosquitto Server 실행

mosquitto -v

Server는 반드시 관리자 모드로 실행하자. (참고로 관리자모드는 ctrl+alt+enter)

그림처럼 IPv6와 IPv4 두얼스택 1884 Port로 서버가 실행되기 하는 것을 볼 수 있다.

Mosquitto for Subscribe (mosquitto_sub)

mosquitto_sub -t "#" -p 1883

Mosquitto for Publish (mosquitto_pub)

mosquitto_pub -t wiznet -m "hello wiznet"

Moquitto client 실행 화면

 

저작자 표시 동일 조건 변경 허락
신고
Creative Commons License
블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

MQTT 란 무엇인가?

MQTT 2015.01.30 08:20

MQTT (MQ Telemetry Transport)

IBM에서 최초로 개발한 MQTT는 텔레메트리 장치, 모바일 기기에 최적화된 라이트 메시징 프로토콜로서 더 다양한 앱과 서비스의 등장으로 HTTP등의 기존 프로토콜만으로는 커뮤니케이션의 다양한 요구사항을 수용할 수 없게 되었고, 제한된 통신 환경을 고려하여 디자인된 MQTT 프로토콜은 모바일 영역의 진화에 따라 최적의 프로토콜로 주목받고 있다.

MQTT 프로토콜 설계의 의도

  • 프로토콜이 차지하는 모든 면의 리소스 점유(footprint)를 최소화
  • 느리고 품질이 낮은 네트워크의 장애와 단절에 대비
  • 클라이언트 애플리케이션 동작에 자원 활용이 극히 제한적임을 고려
  • 다수의 클라이언트 연결에 접합한 Publish/Subscribe 네트워크 채용
  • 신뢰성 있는 메시징을 위한 QoS(Quality of Service) 옵션 제공.
  • 개방형 표준메시징프로토콜 - 3rd Party 기기 제조업체와 소프트웨어 개발업체의 용이한 도입, 적용을 유도

주요 특징

  • IBM과 Eurotech(Arcom)에 의해 1999년 최초 개발
  • 센서/장치 + 모바일 기기들의 연결을 위한 프로토콜
  • MQTT 프로토콜 오픈소스로 공개 (http://www.mqtt.org)
  • 단순하고 미니멀한 Pub/Sub 메시징 체제
    • 기업 경계 박의 Edge 네트워크 장치와 기업 내의 백엔드 애플리케이션 간 메시지 교환에 접합
    • 간편한 메시징을 위한 직관적 verb set(connect/disconnect publish/subscribe) 제공
    • 오버헤드를 최소화
    • 가장 작은 메시지 사이즈는 2byte: 가변길이 MQTT헤더 + 애플리케이션 Payload
    • Payload 데이터에 중립적: 별도의 다른 애플리케이션 헤더 불필요
    • 클라이언트 라이브러리: C버전은 30KB, Java 버전은 100KB 내외
  • Pub/Sub에 있어서 세가지 메시징 신뢰성을 위한 QoS(Quality of Service) 레벨 제공
    • 0 메시지가 최대 1번 전달, 유실 가능성 있음
    • 1 메시지가 최소 1번 전달, 중복 전달 가능성 있음
    • 2 메시지가 단한번, 정당성 있게 전달
  • 클라이언트와 서버간의 연결을 잃었을때 이를 보정하기 위한 자체 기능
    • Last will and testament
      클라이언트가 예고 없이 연결을 잃을 경우 이벤트가 서버에서 발생, 서버 측에서 연결의 유실 여부 인지
    • Durable subscription
      서버에 클라이언트의 구독(subscription)정보 저장됨, 세션 종료 후 재접속 시에도 재작업 없이 Pub/Sub유지
    • Clean session 기능
      연결 해제 후 다시 연결되었을 때의 이전 세션 유지/삭제 선택

이외 특징

  • FB 메신져가 이걸 사용. 국내 통신사 PUSH 서버도 이걸 사용함
  • 일단 FB가 쓰니, 동남아권 Telco에서 패킷 걸리는 문제는 없을듯
  • Qos 0,1,2로 해서, 2 의 경우 message delivery를 gurantee함
  • 저전력!! 이게 중요
  • XMPP에 비해서 훨씬 경량. (XMPP는 XML, MQTT는 byte로 보내는데, 2바이트부터 시작)
  • MQTT 서버를 라즈베리와 같은 임베디드 서버에도 넣을 수 있음. IOT용!! 즉 Things가 서버가 될 수 있다!!
  • 대부분 사용자 인증만 제공 (user id/password 방식) 이것도 대부분 서버들이 파일에 저장한다. (IDM이나 KEY 시스템과 연계 필요)
  • TLS/SSL은 지원. X.509 인증서를 이용한 양방향 인증도 지원

원문보기

저작자 표시 동일 조건 변경 허락
신고
Creative Commons License
블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Tag mqtt

티스토리 툴바