:::: MENU ::::
Browsing posts in: 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/


키보드, 모니터 없이 라즈베리파이 개발 환경 설정

라즈베리파리(RPI) 핀맵

1. 라즈베리파이 기본 설정

– RPI 이미지 다운로드: https://www.raspberrypi.org/downloads/
Etcher 같은 image writing 툴로 다운로드 받은 이미지를 SD에 writing
– RPI에 SD를 넣고, 시리얼 포트를 연결하고 맥의 터미널에서 115200으로 연결한다.

screen /dev/tty.SLAB_USBtoUART 115200

– pi/raspberry로 로그인 한다.
sudo raspi-config로 wifi 설정 및 SSH 설정후 재부팅
– 다시 로그인하면 ifconfig로 할당 받은 ip 확인
– 맥의 터미널에서 ssh [email protected]로 접속

2. GPIO 프로그래밍

Package들의 최신버전 체크 및 설치

sudo apt-get install update
sudo apt-ge tinstall upgrade

Git설치

sudo apt-get install git-core

wiringPi설치

git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

gpio readall하면 다음과 같이 RPI의 핀맵을 알 수 있다.


Physical : PCB상의 물리적인 GPIO pin number
wPi : wiringPi 라이브러리 GPIO number
BCM : python에서의 GPIO number (브로드컴 칩에 의해 정의된 번호체계)

3. 파이썬3 설치

sudo apt-get install python3
sudo apt-get update
sudo apt-get upgrade python3
python3 -V

4. VIM 설치

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vim

5. VIM 설정

vi ~/.vimrc하여 다음과 같이 설정한다.

set hlsearch ” 검색어 하이라이팅
set nu ” 줄번호
set autoindent ” 자동 들여쓰기
set scrolloff=2
set wildmode=longest,list
set ts=4 “tag select
set sts=4 “st select
set sw=1 ” 스크롤바 너비
set autowrite ” 다른 파일로 넘어갈 때 자동 저장
set autoread ” 작업 중인 파일 외부에서 변경됬을 경우 자동으로 불러옴
set cindent ” C언어 자동 들여쓰기
set bs=eol,start,indent
set history=256
set laststatus=2 ” 상태바 표시 항상
“set paste ” 붙여넣기 계단현상 없애기
set shiftwidth=4 ” 자동 들여쓰기 너비 설정
set showmatch ” 일치하는 괄호 하이라이팅
set smartcase ” 검색시 대소문자 구별
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
set ruler ” 현재 커서 위치 표시
set incsearch
set statusline=\ %<%l:%v\ [%P]%=%a\ %h%m%r\ %F\
” 구문 강조 사용
if has(“syntax”)
syntax on
endif



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에 OLED 연결하기

SSD1306 OLED display는 다음과 같이 I2C로 연결을 한다. 참고로 ESP32 모듈의 핀맵은 Datasheet를 참고해야 한다.

그리고 ESP32 SSD1306 아두이노 라이브러리를 설치를 하고, 같이 설치되는 예제프로그램에서 하드웨어 핀에 맞게 코드를 수정하면 된다.

// Initialize the OLED display using Wire library
SSD1306 display(0x3c, 21, 22);

참고문서:


ESP32 개발 환경 설정 – Mac OS

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

Tool chain 설정

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

sudo easy_install pip
brew install cmake ninja dfu-util

다음은 툴체인을 다운로드하고, 설치를 하는 과정임

mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh

환경설정

. $HOME/esp/esp-idf/export.sh

다음의 내용을  .bash_profile에 추가한 다음에 esp 개발시 터미널에서 get_idf를 실행하면 된다.

alias get_idf=’. $HOME/esp/esp-idf/export.sh’

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

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
idf.py set-target esp32
idf.py menuconfig

빌드 및 다운로드

idf.py build
idf.py -p PORT flash monitor. // 빌드와 모니터링을 동시에

Monitor

make monitor

To exit the monitor use shortcut Ctrl+]


엣지 컴퓨팅, 포그 컴퓨팅, 클라우드렛

엣지 컴퓨팅은 IoT기기들이 생성한 데이터를 데이터센터나 클라우드까지의 기나긴 경로를 통해서 송신하는 대신 데이터가 생성된 위치에서 더 가까운 곳에서 처리될 수 있도록 함으로써 중요한 데이터를 준 실시간으로 처리가 가능하게 한다.

의미

중요한 데이터를 지역에서 처리하거나 저장하고, 수신된 모든 데이터를 중앙 데이터센터나 클라우드 스토리지 리포지토리로 보내는 약 10평방미터 이하 규모의 마이크로 데이터센터들로 구성된 메시 네트워크(Mesh Network) – IDC의 정의

  • 엣지 컴퓨팅은 클라우드 컴퓨팅과 대조되는 기술
  • 클라우드 컴퓨팅이 ‘중앙 데이터센터와 직접 소통(communicate)하는’ 방식이라면 엣지 컴퓨팅은 기기 가까이 위치한 일명 ‘엣지 데이터센터’와 주로 소통하며 2차 작업(과 그 결과물의 저장)을 중앙 클라우드에 맡기는 방식
  • 따라서 클라우드에 걸리는 데이터 부하(負荷)가 대폭 줄어 대역폭 상으론 문제가 많았던 부분이 크게 개선될 수 있음.
  • 결국은 클라우드 컴퓨팅 방식을 보다 정교하게 만든 형태

응용

  • IoT기기등으로 인해 데이터양의 증가
  • 접속 환경이 열악해서 IoT 기기들이 중앙 클라우드에 끊임없이 연결하는 것이 비효율적인 경우
  • 지연에 민감한 정보 처리의 경우 – 데이터가 처리를 위해 데이터센터나 클라우드까지 이동할 필요가 없기 때문에 지연시간이 줄어듬. 이는 금융 서비스나 제조처럼 ms 단위의 지연시간에도 민감한 상황에서 이상적임.
  • 많은 양의 데이터를 만들어 내고 있지만 데이터의 대부분은 중요하지 않은 경우.  예를 들면 수천 개의 센서를 가지고 있는 바다 한 가운데 있는 석유 시추시설. <= 데이터 그 자체가 시스템이 정상적으로 작동하고 있다는 사실을 보여주는 것이기 때문.
  • 통신업체의 차세대 5G 네트워크 확장 – 5G를 구축하면서 5G 송수신 타워 자체에 마이크로 데이터센터를 추가. 기업 고객들은 에지 컴퓨팅을 하기 위해 이런 마이크로 데이터센터를 소유하거나 임대하게 되면, 통신 업체가 보유하고 있는 더 방대한 네트워크로의 게이트웨이에 직접 액세스할 수 있고, 그렇게 되면 퍼블릭 IaaS 클라우드 공급업체에 연결할 수 있게 됨.

    클라우드 컴퓨팅 아키텍트(architect)로 잘 알려진 재너카이럼(Janakiram MSV)은 “엣지 컴퓨팅 환경에선 세 개의 층, 즉 1) 데이터 소스(data source) 2)인텔리전스 레이어(intelligence layer) 3)실천 가능한 인사이트(actionable insight)가 서로 맞물리며 상호작용한다”라고 주장

    엣지 컴퓨팅에서 머신 러닝은 엣지와 클라우드 간 파트너십을 규정한다. 클라우드는 대용량 데이터 세트와 복잡한 알고리즘에 기초해 머신 러닝 모델을 창출, 엣지 플랫폼에 넘겨준다. 그러면 엣지 플랫폼은 해당 모델을 이용, 실시간으로 데이터 세트를 처리하게 된다. 이 과정에서 엣지 층(layer)과 클라우드 층을 연결해주는 게 바로 인텔리전스 레이어, 곧 엣지 컴퓨팅 체계의 두 번째 차원이다.

    엣지 컴퓨팅 시스템 사용자(이를테면 기업의 정책 결정자)는 인텔리전스 레이어가 제공한 분석에 기초해 정확한 판단을 내릴 수 있다. 이게 바로 엣지 컴퓨팅의 세 번째 요소, 곧 실천 가능한 인사이트다. 요컨대 엣지 컴퓨팅은 머신 러닝의 지원에 따라 과거 인간 전유물로 간주됐던 창의적 인사이트를 기계로 창출, 인간에게 제공하는 시스템이다. 이 같은 작동 기제는 곧 엣지 컴퓨팅이 ‘가장 바람직한 행동을 위한 판단’을 도출해낼 수 있는 근거이기도 하다.

    엣지 컴퓨팅은 ‘클라우드-엣지-디바이스’라는 (물리적 차원의) 3중 구조를 띤다. 동시에 ‘데이터 소스-인텔리전스 레이어-실천 가능한 인사이트’라는 (형이상학적) 3중 구조를 취하고 있기도 하다. 말하자면 ‘2중적 3중 구조’인 셈.

    포그 컴퓨팅

    에지 기기들과 클라우드 간의 네트워크 연결을 가리킨다. 반면에, 에지 컴퓨팅은 에지 기기 가까이에서 수행되는 컴퓨팅 과정을 좀 더 구체적으로 가리킨다. 그렇기 때문에, 포그 컴퓨팅은 에지 컴퓨팅을 포함하면서, 처리된 데이터를 최종 목적지까지 보내기 위해 필요한 네트워크도 포함하고 있다.

    관련 용어

    • 에지 기기(Edge Device) : 데이터를 생성하는 모든 기기가 될 수 있다. 에지 기기는 데이터를 생성 또는 수집하는 센서, 산업용 머신 또는 따른 기기들이 될 수 있다.
    • 에지(Edge) : 에지가 무엇인가는 용도에 따라 달라진다. 통신 분야에서 에지는 아마도 휴대 전화기 또는 송수신 타워가 될 수 있다. 자동차 시나리오에서는 정비소 바닥의 장비가 되고 기업 IT에서는 노트북이 에지가 될 수 있다.
    • 에지 게이트웨이(Edge Gateway) : 게이트웨이는 에지 컴퓨팅 처리가 수행되는 곳과 더 폭넓은 포그 네트워크 사이의 버퍼이다. 게이트웨이는 네트워크 에지를 넘어서는 더 큰 환경으로의 창구이다.
    • 팻 클라이언트(Fat Client) : 에지 기기에서 어느 정도의 데이터 처리를 할 수 있는 소프트웨어. 단순하게 데이터를 전송하기만 하는 씬 클라이언트(Thin Client)와 상대가 되는 용어이다.
    • 에지 컴퓨팅 장비(Edge Computing Equipment) : 에지 컴퓨팅은 다양한 기존 장비와 신규 장비를 사용한다. 여러 가지 기기, 센서 그리고 머신들을 인터넷 액세스 가능하게 만들기만 하면 에지 컴퓨팅 환경에서 작동하게 할 수 있다. 시스코를 비롯한 다른 하드웨어 공급업체들은 현장 환경에서 사용할 목적으로 외장이 강화된 견고한 네트워크 장비 라인을 보유하고 있다. 다양한 컴퓨트 서버, 컨버지드 시스템 그리고 심지어는 AWS 스노우볼(Snowball) 같은 스토리지 기반 하드웨어 시스템까지도 에지 컴퓨팅 배치에 사용될 수 있다.
    • 모바일 에지 컴퓨팅(Mobile Edge Computing) : 통신 시스템 특히, 5G 시나리오에서 에지 컴퓨팅의 확장을 가리킨다

    참고


실내 측위 – BLE Tag, AoA, AoD

기존 비콘의 한계

  • Beacons only work with smartphones, not tags, which limits how they can be used
  • They are able to locate objects in best case within 3-4 meters, which is fine for determining a general location, but is not refined enough to meet the requirements for many of today’s applications
  • Beacons are battery-operated, which impacts their ability to deliver real-time location; frequent transmissions drain the device’s battery, meaning frequent replacements are necessary

AoA, AoD의 사용

AoA(신호의 수신 각도): 기기가 수신기 안테나 배열로 부터 오는 정확한 방향을 기반으로 한다. AoA를 사용하면 신호를 측정하기 위해 동일한 장치 내에서 여러 개의 안테나가 사용된다. 이렇게하면 안테나가 미터가 아닌 10-20 센티미터의 정확도로 태그 또는 스마트 폰을 찾을 수 있다.

AoD (신호의 출발 각도): 이 접근법에서 위치 정보는 모바일 장치로 다시 이동한다. AoD 접근법은 “실내 GPS”와 같이 작동하는데 고정 인프라 장치 (Locators라고도 함)는 GPS 위성 작동 방식과 마찬가지로 수신 장치를 브로드캐스트하고 인식하지 못한다. 즉, 무제한의 장치를 찾을 수 있고 개인 정보 문제는 없다.

참고



System Workbench for STM32

System Workbench for STM32를 설치하는 방법은 2가지이다. 인스톨 프로그램으로 설치하는 방법과 기존에 설치되어 있는 이클립스에 설치하는 방법이 있다.

인스톨 프로그램

  • System Workbench for STM32를 링크에서 다운로드 한다.
  • 다운로드 받은 바이너리 파일의  퍼미션을 수정후 파일을 실행한다.

chmod 755 install_sw4stm32.run then ./install_sw4stm32.run

문제는 이렇게 설치를 하다가 다음과 같은 에러메시지가 나오고 더 이상 진행이 되지 않는다.

이클립스에서 추가하는 방법

  • 이클립스에서“Help >> Install New Software”를 선택
  • http://ac6-tools.com/Eclipse-updates/org.openstm32.system-workbench.update-site-v2를 입력하고, 이름은 System Workbench for STM32 – Bare Machine edition으로 한다.

  • 인스톨 전에 다음과 같이 맥의 게이트키퍼를 disable후 설치를 하고, 설치후 enable한다.

#To disable
sudo spctl –master-disable
#To enable
sudo spctl –master-enable

시작하기

  • File -> New -> Project… -> C/C++ -> C Project
  • 프로젝트 이름을 정하고, 프로젝트 타입은 AC6 STM32 MCU project를 선택한다.

  • 다음 스텝에서 프로그래밍을 할 보드를 선택한다.
  •  StdPeriph 또는 Cube Hal을 사용할 수 있다.

기타

참고