:::: MENU ::::

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


NXP MCUXpresso 사용법

MCU 벤더들에서 제공하는 무료툴들은 대부분 이클립스 기반의 툴을 수정해서 제공을 한다. 그래서 하나의 툴에 익숙하면 다른 툴도 쉽게 쓸 수 있지만 다른 기능들은 메뉴얼을 보면서 익혀야 한다. NXP사의 MCUXpresso도 약간 특이한 점이 있어서 정리.

1. 먼저 회원가입을 하고, https://mcuxpresso.nxp.com/en/dashboard 에서 보드나 칩을 선택해서 설정을 한후 SDK파일을 다운로드 받는다.

2. MCUXpress에서 Installed SDKs에 이 파일을 Drag & Drop한 후 좌측의 Import SDK examples를 클릭한다.

3. 보드, 칩을 선택하고 Next 버튼을 클릭

4. 원하는 예제를 선택하면 관련 코드가 import된다.

참고로 MCUXPresso Config Tools도 내장이 되어 있어서 pin, clock설정이 가능하다.

관련 메뉴얼 – Getting Started with MCUXpresso SDK


가장 작은 MCU

응용에 따라서 작은 MCU가 필요할 때가 있다. 검색을 해보니 Top 5 Smallest Microcontrollers 기사가 있다.

  • ATtiny20 – 3 x 3
  • PSoC 4000 – 1.45 x 1.56
  • KL02 – 2 x 1.61
  • PIC12LF1552 – 2 x 3
  • C8051T606 – 3 x 3

이중에서 4번째, 5번째는 각각 PIC, 8051 코어라서 패스, ATtiny는 그냥 평범한 작은 AVR. 따라서 가장 작은 PSoC4000과 KL02이 선택의 대상이 된다. 가격은 PSoC4000이 1K에 1,451원 KL02가 1,741원 정도이고 PSoC4000이 리드 타임도 더 좋다. 하지만 칩의 스펙은 KL02가 Clock 48Mhz(16Mhz *괄호안은 PSoC4000), Flash 32KB(16KB), SRAM 4KB(2KB), ADC, SPI, UART, Timer2개로 훨씬 더 좋다. 단 PSoC4000은 동작 전압이 1.71 V to 5.5 V로 KL02(3.3V)대비 더 넓고,  Capacitive Sensing 기능이 있다.

이 다음 더 고려할 사항은 주변 회로가 얼마나 줄어드는지, 개발환경은 어떤지 여부이다.


ESP32에 OLED 연결하기

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

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

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

참고문서:


DC 모터의 돌입전류를 제한하는 방법

NCT 써미스터를 사용하며, 용량은 다음과 같이 계산한다.

  • Inrush Current – 전류의 3-4배 (ex: 0.25A 일 경우, 1A)
  • NTC써미스터가 흡수해야할 에너지계산(E = V x I x Time) – 24V x 1A x 0.2 sec = 4.8 Jouls
  • Rmin  계산 (입력전압/원하는 최대 전류)  – 24V/0.5A = 48 ohm <= 48ohm 보다 큰 값의 부품을 찾는다.

이렇게 해서 전체 리스트에서 부품을 찾는다.

참고: https://www.ametherm.com/blog/inrush-current/dc-motor-inrush-current


V-USB

V-USB is a software-only implementation of a low-speed USB device for Atmel’s AVR® microcontrollers, making it possible to build USB hardware with almost any AVR® microcontroller, not requiring any additional chip.

위 설명처럼USB하드웨어가 없는 AVR에서 USB를 소프트웨어로 구현하는 코드. V는 Virtual 인듯

https://cortexprog.com/ 이런 프로젝트도 있다.


임베디드 시스템 개발 방법의 변화

아두이노가 기존의 전통적인 하드웨어 개발을 바꾸어 놓았고, 이후에 Raspberry Pi와 저가의 ESP8266가 오픈소스하드웨어 시장의 3축으로 자리를 잡았다. 최근의 추세는 Adafruit의 제품이 이 시장을 주도하고 있는 느낌이다.

Feather 보드의 폼펙터가 디펙토스텐다드화되고 있으며, Javascript를 사용하는 Espruino, Python을 사용하는 CircuitPython 보드처럼 스크립트 프로그래밍 언어가 임베디드 개발에 사용되고 있다. 이런 보드들은 스트립트 언어를 사용하기 때문에 개발툴을 따로 설치할 필요가 없고, 보드를 컴퓨터의 USB 포트연결하면 외장 메모리도 잡히므로 파일하나만 수정해서 copy해서 넣으면 동작을 한다.

참고 자료