Wednesday, June 6, 2018

Intel Galileo Gen II 그리고 mqtt

회사 동료로부터 얻게 된 Intel Galileo Gen II 보드.

그간 Arduino의 성공적인 인기에 목이 탔을까. 인텔에서 IoT에 힘써보겠다고 자신들의 프로세서 제작 기술을 앞세워 IoT 세계에 발을 디뎠다.

그러나 IoT 세계에는 인텔의 공룡급 기술이 어울리지는 않는 것 같다. 마치, 마차가 다닐듯 한 한적한 시골 길에 람보르기니 스포츠카를 끌고 오는 모습이랄까. 그것도 람보르기니에 달린 타이어는 모두 빼고, 리어카의 바퀴를 억지로 달아놓고, "보이지?   이차는 여기에 딱이야!" 라고 떠들어 대는 모습이다.

Intel Galileo Gen II는 Arduino에 비하면 메인프레임 급이다.  Arduino가 16Mhz에 32kb flash, 2kb ram이 달려있는데 반해, galileo는 400Mhz SoC에 8Mb flash, 256Mb ram이 장착되어 있다. 그런데 도데체 왜 이런 성능의 시스템이 IoT에 필요한걸까?  그리고 Arduino를 의식했는지 gpio pinmap을 Arduino Uno와 동일하게 해놓았다.   Arduino Uno shield들을 호환하여 사용할 수 있도록 배려한 것이리라.  그런데 Uno는 핀 수가 적은 편이다. 핀 수 때문에 LCD 붙이고 센서 붙이면 더 이상 연결할 GPIO도 없다. 이것 때문에, Arduino Mega나 Due같이 Pin수가 충분한 보드를 사기도 한다. galileo는 그렇담 왜 uno를 호환하려 했을까. 사용자 층이 가장 폭 넓은 Uno 쪽을 흡수하고 싶었나보다. 그런데, galileo 정도의 시스템을 uno처럼 활용할 사람들은 아마 없을 것 같다. 가격차이만 봐도 uno는 6천원(클론보드) 내외로 구매할 수 있지만, galileo는 10만원 대다.   Uno에서 할 수 있는 것을 구지 galileo에서 할 필요가 없을 것이다.  그렇다면 사용자 타겟팅이 잘못된 것이라고 밖에 볼 수 없다. MCU가 이정도 수준이면, GPIO를 mega 급 이상으로 지원하던지, 전문 IoT용으로 소개를 하는것이 나을 뻔 했다.

Intel은 uno와 rasberry pi 처럼 명확한 포지셔닝을 해야 한다. 단, 저 둘과는 분명히 다른 쪽으로.(그 사이에 끼지말고)  동시에 SW부분도 uno의 철학을 참고할 필요가 있다.

잡설은 그만두자.  Galileo가 흥미로운 부분은 embedded os를 굴릴 수 있다는 점이다!   성능이 어찌나 좋은지(?)  Linux가 돌아간다.

다음 인텔싸이트에서 Galileo에 Linux를 설치할 수 있는 가이드를 제시하고 있다: https://software.intel.com/en-us/get-started-galileo-linux-step1

운영체제는 Yocto로써 나도 이번에 처음 알게 되었다.

Yocto 이미지를 SDCard에 설치하고 부팅하면...부팅된다.  화면은 없으므로 FTDI를 이용하여 putty로 Galileo 보드와 연결하여 화면을 볼 수 있다. 본인은 이 과정에서 삽질 좀 하였다.

FTDI의 rx, tx, gnd를 galileo와 잘 연결하면 부팅 후 login을 기다리는 화면을 보게 될 것이다. FTDI로 연결 시, 3.3V로 맞추어야 한다. Galileo가 3.3V로 운영된다. 5V를 rx로 보내도 되는지는 모르겠다. 궁금하시면 Galileo 스펙을 확인하고 해보기 바란다.(고장날 수도 있다.)  그리고, Baudrate는 115200이니 참고바란다.

혹은, FTDI가 없다면, Ethernet 케이블을 연결하면 자동으로 IPv4 설정이 된다. 단, 화면이 안보이는 상황이면 어떤 IP가 설정되었는지 알 수가 없는데, 같은 gateway에 물려있는 PC에서 arp -a 해보자.

자신의 PC와 유사한 IP 중 4번째 자리가 평소에 못보던 것이 있으면 아마도 그게 방금 연결된 galileo일 것이다.  putty로 ssh로 연결해보자. login 화면이 나오면 성공한 것이다.

default로 id는 root이며 passwd는 없다. 그러니 들어가서 얼른 passwd를 설정하도록 한다.


20161113_222017비로서 난 GUI도 없는 아주 심플한 linux 서버를 하나 얻게 되었다. 이걸로 무엇을 할까?  우선 linux상에서 gpio를 테스트 해보았다. 잘 되었다. 그러나, gpio 와 pin map이 일치하지 않아 자료를 찾아야 했다.

이에 관해서는 다음 기사가 도움이 될 것이다:

http://www.malinov.com/Home/sergey-s-blog/intelgalileo-programminggpiofromlinux

그런데 사실 이렇게 수동으로 gpio를 알아내고 사용할 필요는 없다. 역시, 누군가 이를 위해 잘 만들어 놓은것이 있다:

MRAA (https://github.com/intel-iot-devkit/mraa)

Linux Library for low speed IO Communication in C with bindings for C++, Python, Node.js & Java. Supports generic io platforms, as well as Intel Edison, Intel Joule, Raspberry Pi and many more.


mraa를 사용하면 우리가 아는 pinmap으로 사용할 수 있다. 그리고 linux에서 gpio를 사용하기 위한 귀찮은 과정을 생략할 수 있다. 무엇보다 보드에 따라 핀번호가 바뀌어서 헤매는 일은 없을 것이다.

MRAA 설명글에 있듯이, 이 라이브러리를 사용하여 native c/c++ 혹은 python등 다양한 언어를 사용할 수 있다.

Python에서 mraa를 사용하여 LED를 blinking 하는 예제: https://communities.intel.com/thread/98922

물론, python이 설치되어 있어야 한다.


자, 인텔에서는 Arduino의 그것과 같이, IDE도 제공하고 있다.

짜잔~!   Intel XDK!!

Galileo가 있다면 어서 Intel XDK를 설치하고 실행해보자.

intelxdk

위와 같은 화면이 뜬다. (물론 그냥 뜨지 않는다. 가입해야 한다.)

Galileo가 연결되어 있고 드라이버문제가 없다면 IoT device에 자동으로 잡힐 것이다. (필자는 드라이버 문제가 해결되지 않아 수동으로 잡았다.)

생김새는 여느 IDE와 비슷하다. 다만, editor는 Bracket이라는 code editor(오픈소스)를 사용하였는데, 따로 받아서 사용해보니 훌륭하다. 웹 프로젝트를 개발 할 때 도움이 되는 기능들을 많이 가지고 있다. MS에서 이와 유사한 Code를 제공하고 있고, 또 다른 오픈소스인 Atom도 있으나 이들은 너무 무겁다. 시작이 엄청 느리다.   MS의 그것은 아직 정식버전이 아니라서 그런지 업데이트도 매우 잦다.  (또 다른 Sublime이라는 프로젝트는 오픈소스는 아니지만 code editor로써는 훌륭하다.   시간이 나면 PSEditor라는것도 사용해보기 바란다.  PSEditor는 code-v 문법을 유일하게 지원해서 사용해봄)



아무튼, XDK를 사용하여 Linux가 운영중인 상황에서도 아두이노처럼 sketch들을 돌려볼 수 있다. 어짜피 Linux상에서 실행되는 또 다른 프로세스일 뿐이다. 위의 예는, node.js로 구현된 blinking 예제이다.

지금까지 galileo를 이래저래 사용해 보았다. 그리고 이제 뭘할지 고민하였다. 아직 딱히 할 게 없더라. 고성능 IoT라 가정하면, 무언가 복잡한 연산이 필요한 IoT가 될 것 같다.(근데 핀수가 적어서...)  실제로 그런 아이디어가 나올 때 까지는 얘는 그냥 리눅스 서버다.



전에 IoT 메세징 서비스를 소개하면서 MQTT를 소개한 적이 있다.

MQTT는 브로커 서버가 필요한데, 필자의 NAS를 사용하려고 했었으나 알 수 없는 오류로 보류한 상태이다. 그래서 무료로 mqtt 브로커 서비스를 제공해주는 cloudmqtt.com을 사용하고 있었다.

이제 전기세 부담 안되는(?) 미니 서버가 탄생하였으니 이것을 mqtt broker로 사용해보고자 한다.

mqtt 브로커로는 mosquitto를 사용하였다.

Intel에서 Edison보드에 mosquitto를 설치하는 글을 올렸으나 당연히 Galileo에서도 잘 된다: https://software.intel.com/en-us/blogs/2015/02/20/building-and-running-mosquitto-mqtt-on-intel-edison

글에서와 같이 설치하고 나면 mosquitto 브로커를 실행시킨다.

그리고 휴대폰에서 mqtt client 아무거나 설치하고 접속해본다.

mosq1.png

위와 같이 New client로 접속한 것이 보인다.  그러면 또 다른 터미널을 열어서 publish 해보자.

mqtt3

/broadcast라는 주제로 "Hi, there!" 라는 메세지를 날렸다.

그러면, 다음과 같이 Subscribe한 mqtt client에도 메세지가 도착한다.



mqtt2이 메세징은 양방향이며, 다중 subscriber가 존재할 수 있다. Facebook은 mqtt를 사용하여 chatting 서비스를 구현하였다고 한다.

이제 galileo에서는 mqtt 브로커 만이 아니라, mqtt subscriber를 구현하여, 전달 되는 메세지에 대해 어떤 기능을 수행하면 될 것이다. 메세징은 양방향이므로 galileo가 센서가 되어, 필요 시 메세징을 해주면 mqtt client들은 모두 메세지를 받게 될 것이다.

mqtt는 양방향 메세징이 되는것이 매우 유용하다. 그리고 다른 서비스들과 달리 표준이므로 앞으로 계속 발전하며 다양한 응용 가능성을 보이게 될 것이다.












No comments:

Post a Comment