:::: MENU ::::

MQTT 란?

MQTT?

MQ Telemetry Transport 약자

It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks.

MQTT 사용하는가?

IoT(Internet of Thing): Thing Internet에 연결을 하려면 Ethernet, WiFi, Cellular 등이 필요하다. 이런 connectivity가 대부분 무선으로 가고 있는데, 무선이라 함은 이동성이 보장되야 하므로 밧데리가 필요하고 파워소모는 중요한 요소이다. 파워를 적게 사용하기 위해서는 빨리 연결을 하고, 데이터를 보내고 빨리 연결을 끊어야 한다. 특히 데이터에 오버헤드가 없어야 한다. 셀룰라에서 데이터는 돈이니

HTTP?

HTTP stateless 이므로 데이터를 보내기 위해서는 매 데이터 전송 연결을 해야한다. 따라서 HTTP는 웹페이지 같은 대용량의 데이터를 보내기에는 적합하지만 가볍지 않고, 빠르지 않다또다른 문제는 HTTP pull only이다. 즉 디바이스는 서버에 데이터를 보낼수 있지만, 서버에서 데이터를 받야하 하는 경우는 지속적으로 서버에 물어봐야 한다. 이런 pull update는 시간이 많이 걸리고 데이터도 많이 소비된다.

MQTT

이에비해 MQTT 아주 간단하고 가볍다. 서버에 연결시 단지 80바이트만 필요하다. 계속 연결이 되며(MQTT Broker 연결을 유지하기 위해 Keep alive packet 주기적으로 보내야 ), 데이터 publication(디바이스가 데이터를 서버에 보내는 ) subscription(서버가 디바이스로 데이터를 보내는 ) 20바이트 정도이다. MQTT 메쉬네트웍이나 TCP/IP, Bluetooth위에서 동작가능하다.

Topic

Pub Sub는 토픽을 기준으로 작동한다. 토픽은 슬래시(/)를 이용해서 계층적으로 구성할 수 있어서 대량의 센서 기기들을 효율적으로 관리 할 수 있다

Port Number: 1883, 8883

TCP/IP port 1883 is reserved with IANA for use with MQTT. TCP/IP port 8883 is also registered, for using MQTT over SSL.

QoS

MQTT 3단계의 QoS(Quality of service) 제공한다.

  • 0 : 메시지는 한번만 전달하며, 전달여부를 확인하지 않는다. Fire and Forget 타입이다.
  • 1 : 메시지는 반드시 한번 이상 전달된다. 하지만 메시지의 핸드셰이킹 과정을 엄밀하게 추적하지 않기 때문에, 중복전송될 수도 있다.
  • 2 : 메시지는 한번만 전달된다. 메시지의 핸드셰이킹 과정을 추적한다. 높은 품질을 보장하지만 성능의 희생이 따른다.

참고


스텝모터 – Stepper Motor

스텝모터

스텝 모터는 일반적으로 스텝 사이즈 규격 (예 : 1.8 ° 또는 200 회전당)을 가진다. 즉 360도, 한바퀴 회전시 2000 스텝이 필요하니, 한 스텝당 1.8 °가 움직인다.

마이트로 스텝핑

스텝모터 드라이버의 기능중 마이트로 스텝핑기능은 이 스텝을 분주를 해서 더 정밀하게 모터를 회전시킨다. 예를 들면 A4988 드라이버의 경우 다음과 같이 1/16까지 가능하니, 한 스텝당 0.1125 °(1.8 °/16)까지 제어가 가능하다. 반면 TMC2130드라이버의 경우 1/256까지 가능하므로 1스텝당 0.007°(1.8°/256)까지 가능하다.

참고


IoT 관련 단상

IoT의 핵심요소

  • Connectivity: 이건 당연하고, 여기에 security가 필요
  • Interoperation: 이건 가능하면 좋겠지만, IoT응용이 vertical market이라서 대기업이 아니고는 큰 의미가 없을 듯.
  • Intelligence: 이건 조만간 반드시 있어야 서비스에 차별화가 될 듯

Blynk 사용법

Blynk는 IoT응용을 쉽게만들어 주는 앱이다.  동작 방식은 아래 그림과 같이 앱이 서버를 거쳐서 디바이스에 접근을 하고, 디바이스역시 서버를 거쳐서 앱과 통신을 한다. 단 디바이스에는 Blynk에서 제공하는 라이브러리를 설치를 해야한다.

디바이스

현재 지원하는 디바이스는 아두이노, ESP8266, 라즈베리파이… 등 다양하며(지원하는 하드웨어), Bluetooth, WiFi등의 connectivity가 없는 경우에도 PC를 통해서 동작이 가능하다. 아두이노에서는 스케치 > 라이브러리 포함하기 > 라이브러리 관리…를 선택해서 Blynk로 검색을 하면 라이브러리 및 예제의 설치가 가능하다. 그리고 펌웨어에서는 앱을 통해 받은 토큰을 코드에 넣어서 서버와 통신을 한다.

다운로드 받은 앱에서는 사용자 등록을 하고 디바이스와 연결될 위젯을 선택하고 이 위젯에 연결할 물리적 핀을 할당한다. 즉 버튼을 추가하고, 이 버튼을 PIN13에 연결을 하면 앱에서 버튼을 누를때 마다 보드의 PIN13이 On/Off된다. 재미있는 것은 물리적인 핀뿐 아니라 Vitrual Pin을 지정해서 아무런 값이나 파라미터로 전달이 가능하다는 것.  BLYNK_WRITE 함수는 서버에서 virtual pin값을 쓰면 실행되는 함수, BLYNK_READ 함수는 디바이스에서  virtual pin에 값을 쓰면 서버에 반영이 되는 함수이다. 즉 read / write는 서버의 관점.

BLYNK_WRITE(vPIN)

BLYNK_WRITE defines a function that is called when device receives an update of Virtual Pin value from the server:

BLYNK_WRITE(V0)
{   
  int value = param.asInt(); // Get value as integer

  // The param can contain multiple values, in such case:
  int x = param[0].asInt();
  int y = param[1].asInt();
}

BLYNK_READ(vPIN)

BLYNK_READ defines a function that is called when device is requested to send it’s current value of Virtual Pin to the server. Normally, this function should contain some Blynk.virtualWrite calls.

BLYNK_READ(V0)
{
  Blynk.virtualWrite(V0, newValue);
}

예제

구체적인 것은 이 문서의 설명과 예제를 따라가면 쉽게 이해가 간다.

기타

Blynk Doc 참고


AC 전원

교류용 전선(3선)의 극성

접지선(EARTH) 

중립선(NEUTRAL) –

전력선(LIVE)        +

퓨즈는 전력선(LIVE)에 연결한다.

Hi-link사의 AC/DC 컨버터 모듈

데이터 시트에 AC연결이 어떻게 되는지 안나와 있는데, 위쪽이 N(Neutral)이고 아래핀이 L(Live)이다.

어떤 블로거의 이 모듈과 관련해서 테스트한 자료1 – Conducted emission fail 됨. 그래서 이후에 테스트한 자료 <= 결론은 싼 중국 파워제품을 무턱대로 사용하면 인증에서 골치아픔. 🙁

 




구글 스크립트

구글 캘린더에서 다음주 1주일의 일정을 불러와서 출력을 해주는 스크립트.

여기서 캘린더 ID는 구글 캘린더의 설정에 들어가서 원하는 캘린더의 세부설정 항목의 캘린더 주소 항목에서 찾을 수 있으며 다음과 같은 형태이거나 자신의 구글 계정정보이다.

[email protected]

위 코드는 Google Apps Scripts 에서 작성을 한다.


중국산 FTDI 보드 개조

Silab기반의 Serial to USB보드는 문제가 있어서 FTDI 기반의 보드를 구매하려다 보니, Sparkfun사의 보드는 18,000원이나 한다. 그래서 디바이스 마트에서 구매한 4,000원 짜리 중국산 보드.   뒷면에 점퍼로 3.3V로 변환이 가능하다고 해서, 당연히 TXD 시그널도 3.3V 라고 생각을 했는데, 5V 레벨이다. ㅠㅠ

그냥 USB로부터 5V 입력을 VDDIO(#4)에 같이 연결하고 3V3OUT(#17)를 출력에 연결을 해놨는데, 칩을 떼고 VDDIO에 연결된 5V패턴을 자르고 3V3OUT을 연결하면 시그널 레벨들도 3.3V가 된다.



Pages:1234567...46