:::: MENU ::::
Posts tagged with: IOT

Resin.io 사용법

Resin.io의 홈페이지에는 다음과 같이 자신들의 서비스를 설명을 한다.

Resin.io brings the benefits of Linux containers to the IoT. Develop iteratively, deploy safely, and manage at scale.

Linux containers to the IoT… 리눅스 기반의 IoT 디바이스를 위한 도커같은 서비스 일 것 같다.

Resin.io 사용법

Account setup

resin.io 에 계정을 생성후 SSH 키 설정하여 resin에 저장을 하는데,  깃헙계정으로 로그인 할 경우 깃헙계정에 저장된 SSH 키 중 하나를 선택한다.

SSH 키 확인

ls -al ~/.ssh

SSH 키 생성

ssh-keygen -t rsa -b 4096 -C “[email protected]

SSH 키를 ssh-agent애 넣기

eval “$(ssh-agent -s)”

~/.ssh/config 파일을 다음과 같이 만든다.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa

ssh-add -K ~/.ssh/id_rsa

다음과 같이 SSH 키를 클립보드에 복사후 github 계정에 설정한다.

pbcopy < ~/.ssh/id_rsa.pub

Create Application & Add your first device

디바이스 타입에서 – 라즈베리파이 같은 보드를 선택
Add device를 클릭하고 위에서 선택한 라즈베리파이에 맞는 이미지를 다운로드 한다.

Provision your device

다운로드한 이미지를 Etcher로 SD로 굽는다.
라즈베리파이가 부팅이 끝나면 dashboard에서 확인이 가능하다.

Deploy code

코드를 하나 클론한다.

$ git clone https://github.com/resin-io-projects/simple-server-node.git

다음과 같이 remote endpoint를 추가한다. 주의) 여기서 USERNAME은 resin의 USERNAME이고, APPNAME은 위에서 생성한 Application 이름으로 대쉬보드에서 보인다.

$ cd simple-server-node
$ git remote add resin <USERNAME>@git.resin.io:<USERNAME>/<APPNAME>.git

다음과 같이 push를 하면 resin 서버에 코드가 업로드되고 기기에 코드가 적용이 된다.

$ git push resin master

대시보드의 모습

참고 – https://docs.resin.io/learn/getting-started/raspberrypi3/nodejs/



Iotivity에서 gerrit 설정

Iotivity에서 gerrit설정 및 git을 이용해 코드를 가져오는 방법

Step 1: linuxfoundation.org 에서 회원가입

Step 2: Create SSH keys

$ ssh-keygen -t rsa -C "Your name <your_email_address>"

~/.ssh의 위치에 id_rsa와 id_rsa.pub가 생성이 된다. 참고로 맥에서 숨김 파일을 보려면 SHIFT + CMD + .

Step 3: Setting up SSH

~/.ssh/config 파일을 다음과 같이 생성한다.

Host gerrit.iotivity.org
    Hostname "gerrit.iotivity.org"
    IdentityFile ~/.ssh/id_rsa
    User <Linux Foundation ID>
    Port 29418

Step 3: Upload SSH public key to Gerrit and Register personal info

IoTivity Gerrit에 로그인을 한후 Settings 메뉴에서 id_rsa.pub 파일의 내용 copy & paste 한다.

Step 4: Verify your SSH connection

$ ssh gerrit.iotivity.org

터미널에서 다음과 같은 메시지가 나오면 성공

****    Welcome to Gerrit Code Review    ****

Step 5: Clone code

$ git clone https://gerrit.iotivity.org/gerrit/iotivity
$ cd iotIvity
$ git clone https://github.com/intel/tinycbor.git extlibs/tinycbor/tinycbor -b v0.5.1
$ git clone https://github.com/ARMmbed/mbedtls.git extlibs/mbedtls/mbedtls -b mbedtls-2.4.2
$ sudo apt-get install autoconf libtool doxygen valgrind wget unzip libboost-dev libboost-program-options-dev libboost-thread-dev uuid-dev libexpat1-dev libglib2.0-dev libsqlite3-dev libcurl4-gnutls-dev

$ sudo apt-get install scons

참고 https://wiki.iotivity.org/how_to_use_gerrit


ESP32 개발 환경 설정 – Mac OS

Mac OS에서 ESP32 개발 환경 설정은 다음의 링크를 참고한다.

Tool chain 설정

pip와 pyserial을 설치- 이 과정중에 dependency가 있는 라이브러리 설치는 sudo easy_install xxx  형태로 설치한다.

sudo easy_install pip
sudo pip install pyserial

Toolchain을 다운로드하고, /esp 폴더에 압축을 푼다.

mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz

bash_profile에 다름 경로를 입력한다.

export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin

ESP-IDF(IoT Development Framework)

https://github.com/espressif/esp-idf.git 이걸 클론하고, IDF_PATH를 설정한다.

export IDF_PATH=~/esp/esp-idf

추후에 리모트 깃의 내용을 업데이트 하려면 다음과 같이 한다.

cd ~/esp/esp-idf
git pull
git submodule update --init --recursive

프로젝트 확인

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

설정

cd ~/esp/hello_world
make menuconfig

빌드 및 다운로드

make flash

Monitor

make monitor

To exit the monitor use shortcut Ctrl+]



IoT 킬러 앱?

IoT 분야는 한가지 킬러앱이  존재하지 않는다. 즉 특정한 고객의 특정한 분야의 특정한 문제를 해결해야 하며, 버티컬 마켓이다. 따라서

사용자의 니즈를 확실히 이해해서 가치를 제공해야 하며

IoT를 이용하여 “실시간 데이터를 수집, 처리해서 better, faster, cheaper 한 방법”으로 문제를 해결해야 한다.

참고: https://www.iotcentral.io/blog/why-there-s-no-killer-app-for-iot


삼성 Artik Edge-to-cloud Security

삼성 아틱의 보안은 Edge-to-cloud Security라고 설명을 한다. 즉 칩레벨에서 부터 클라우드까지 보안요소가 있다는 얘기.

Device Protection and Trusted Code Execution

Hardware의 경우 Device protection과 trusted code execution이 가장 중심이 되는 요소임.

  • Secure Boot
    타겟 디바이스에서 동작하는 코드의 신뢰성을 보장이 필요
    소프트웨어는 타겟장치에서 코드 실행을 허용하기 위해 소프트웨어 공급자가 서명해야함.
  • KMS infrastructure for code signing
    코드 서명을 쉽게하기위한 Key Management Service (KMS), ARTIK CodeSigner service, FIPS-certified hardware security modules (HSM)를 제공
  • Secure Element
    각 디바이스에 SmartThings cloud에 등록된 private/public key쌍이 저장이 되어서 출시됨.
  • Secure JTAG access
    JTAG을 사용시 패스워드 필요

Protected Communications

디바이스와 클라우드 사이의 통신 보안

  • Encryption
    Transport Layer Security (TLS) 또는 datagram transport layer security (DTLS)사용
    ARTIK modules also provide hardware acceleration (Crypto Engine) for AES and RSA encryption and decryption. Additionally, the ARTIK platform uses Elliptic Curve Diffie–Hellman (ECDH) for session encryption key generation, which provides a high level of protection with low power consumption.
  • Authentication
    Public Key Infrastructure (PKI) 사용
  • Easy secure onboarding
    Secure Device Registration (SDR): Mutual authentication between a gateway device and the cloud registration servers

Edge-to-cloud Security


이 한장의 그림으로 지금까지 설명된 내용이 나와있음.

참고


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 : 메시지는 한번만 전달된다. 메시지의 핸드셰이킹 과정을 추적한다. 높은 품질을 보장하지만 성능의 희생이 따른다.

참고


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 참고


Pages:123