'분류 전체보기'에 해당되는 글 41건

IoT/News

https://forum.wiznet.io/


wiznet 포럼이 리뉴얼 되었습니다.


wiznet 제품의 질의 응답 및 wiznet에서 진행하는 contest 관련 질의 응답을 할 수 있습니다.

IoT Open House/ThingPlug


SK Telecom의 LoRa를 이용한 서비스의 개발은 아래와 같은 그림으로 구성됩니다.




App Server를 구현하기 위하기 위한 방법은 아래와 같습니다.


1. 프로토콜 선택

- HTTP

- MQTT


2. 데이터 수집 방법 선택

- Polling

-Subscription



데이터 수집 방식을 그림으로 표현하면 아래와 같습니다.








자세한 내용이 궁금하다면 강의에 참석해 보세요.


https://lora.sktiot.com/openhouse/introduction/academy.do



이번 달 강의는 4월 25일로 예정되어 있으며, 위 링크에서 신청하실 수 있습니다.

(강의 신청은 추후에 오픈될 예정입니다.)


IoT/News

LoRa를 이용해 IoT 제품을 개발하시려는 분들에게 무료 강의를 진행합니다.


SKT에서 서비스하는 LoRa 기술과 ThingPlug에 대한 강의 입니다.


아래 링크에서 강의를 신청하실 수 있습니다.

http://wiznetacademy.com/index.php?module=lecture&act=dispCourseInfo&course_seq=3178


LoRa 강의는 아래 SKT LoRa Potal 을 통해 강의 신청을 받기로 했습니다.

https://lora.sktiot.com/openhouse/main.do




이 외에도 '아두이노'와 'mbed' 기초 강의도 진행하고 있으며, 응용 강의로 '스마트팩토리', facebook으로 디바이스를 제어하는 'Javis' 강의도 준비되어 있습니다.



IoT/News



컨테스트 참가하기: http://wiznetian.com/


IoT 디바이스를 활용한 컨테스트 정보입니다. 여러분의 아이디어를 마음껏 발휘해 보세요!




참가하시면, 아래의 보드를 활용해 아이디어를 구현하시면 됩니다.


1. WizArduino: 아두이노 제로(M0+)와 이더넷 실드를 하나의 보드로 사용하실 수 있습니다.

2. WizArduino WiFi: 아두이노 메가와 WiFi 실드(WizFi310)가 하나의 보드에 구현되어 있습니다.

3. Security Shield: SSL/TLS를 지원하는 이더넷 실드입니다. 사용하시려면 별도의 MCU(아두이노)가 필요합니다.





IoT Open House/ThingPlug


ThingPlug Bridge는 위 LoRa 서비스에서 (A) 위치에 해당하는 툴이다.


원래는, (B)에 해당하는 서비스 App 서버가 ThingPlug와 연동해 LoRa 디바이스의 데이터를 가져가고, 제어명령을 내려야 한다.

하지만, 기존의 App 서버를 변경하지 않고 LoRa 서비스를 사용하고 싶은 경우 ThingPlug Bridge를 활용하면 가능해진다.


ThingPlug Bridge 본 글에 첨부되어 있다.


ThingPlug_Bridge (2).z01

ThingPlug_Bridge (2).z02

ThingPlug_Bridge (2).zip



ThingPlug Bridge 의 역할


ThingPlug Bridge는 ThingPlug의 subscription 기능을 활용해서 만들어졌다. ThingPlug 포털의 ID와 PWD로 로그인을 하게 되면 아래와 같이 User Key를 받아오게 된다.

(User Key는 App이 ThingPlug에 접근하기 위한 권한이다.)


이 User Key를 가지고 로그인한 계정에 있는 LoRa Device 리스트를 조회 할 수 있고, ThingPlug는 Device들의 데이터를 ThingPlug Bridge로 Push 해준다.


Bridge는 ThingPlug로 부터 Push 받은 데이터를 설정된 서버로 보내고, Log 파일로 남기는 역할을 하게 된다.




ThingPlug Bridge 사용방법


1. 로그인


로그인하기 전, 접속하고자 하는 ThingPlug 플랫폼의 주소와 Port 번호를 우선 입력한다.(테스트망, 상용망에 따라 이 주소가 다르다.)

그 후 ID와 PWD를 입력해 Login 버튼으로 User Key를 얻어온다.



2. 설정

APP EUI와 App Server 정보를 입력한다.

APP EUI: LoRa 서비스의 경우, SKT로부터 할당받게 되며, ThingPlug만 사용하는 경우 'ThingPlug' 그대로 두면 된다.

App Server: Push 받은 데이터를 다시 보낼 서버의 주소를 입력한다.



3. RUN

RUN!




4. 디바이스 리스트

ThingPlug 계정에 등록된 디바이스의 리스트를 확인할 수 있다.


5. 디바이스 제어

ThingPlug 디바이스를 제어할 수 있다. data 필드를 이용해 유저 데이터를 보낼 수 있는데, LoRa 디바이스는 extDevMgmt 명령에서만 가능하다.




6. App Server

위 설정에서 App Server로 설정된 서버로 실제 LoRa 디바이스가 보낸 데이터를 보내게 된다.(1234567890 x 4)





7. 데이터 로그

데이터의 Log는 'log\debug_log.txt'에서 확인할 수 있다.

Study/etc

OpenSSL에 대한 설명


https://ko.wikipedia.org/wiki/OpenSSL


OpenSSL은 SSL/TLS를 오픈소스로 구현한 것이다.



<SSL/TLS, HTTPS에 대한 설명 영상>



OpenSSL 사용하기


구글에서 검색해보면 OpenSSL 라이브러리로 공개하는 것과, 실제로 OpenSSL을 사용할 수 있는 컴파일 된 파일로 된 것들이 있다.


소스코드 레벨로 공개된 것들은

https://www.openssl.org/source/


컴파일 방법은 아래 Youtube를 따라하면 될 것이다.

<How to Compile OpenSSL on Windows10 x64 for Static Library>

위 방법으로 컴파일 시 필요 툴

- Perl 

- VC++




컴파일 된 파일로 SSL 사용하기

OpenSSL을 이용해 SSL/TLS를 사용하기 위해서는 이미 컴파일 된 파일로 다운로드 받는게 더 편하다.

https://indy.fulgan.com/SSL/



위 사이트에서 openssl-x.x.x-XXXXX-winxx.zip 형태의 파일을 다운 받는다. OpenSSL의 버전과 사용 PC의 환경(ex, windows 32bit, 64bit)로 파일을 선택한다.




본 예제에서는 openssl-1.0.2k-x64_86-win64.zip으로 진행했다.




다운로드 받은 파일을 적당한 이름으로 원하는 곳에 압축을 해제한다.(openssl-1.0.2k-x64_86-win64 -> OpenSSL)



환경 변수에 추가하기

압축을 해제한 후에는 해당 폴더를 '시스템 환경 변수'에 추가해야 한다.

'시스템 환경 변수'는 윈도우 어디에서든지 '시스템 환경 변수'에 있는 파일을 실행시킬 수 있도록 해주는 역할을 한다.

본 예제에서는 폴더 안에 'openssl.exe' 파일을 시스템 어디에서든지 사용할 수 있도록 하기 위해서 '시스템 환경 변수'에 추가해준다.



'시작'을 눌러 '환경' 이라고 검색하면 '시스템 환경 변수 편집'이 나온다. 여기서 '환경 변수(N)' 을 누르면 아래와 같은 화면이 나온다






'시스템 변수(S)'에서 'Path'를 편집하게 되면 오른쪽 화면이 나오게 되고, '새로 만들기(N)'으로 환경 변수를 추가할 수 있다.

이때 경로는 OpenSSL을 압축 해제한 경로를 설정한다.





실행해보기

실행되면 아래와 같이 프롬프트가 바뀐다.환경 변수가 추가 되었으면 명령 프롬프트에서 'openssl'을 실행시킬 수 있다.


OpenSSL>




OpenSSL 테스트

이제 OpenSSL을 사용해서 SSL/TLS를 쓸 수 있다.

한가지 예제로 www.google.com 에 접속하는 HTTPS Client 예제는 아래와 같다.


OpenSSL> s_client -connect www.google.com:443





IoT Open House/LoRa

 

LoRa의 Class, 서비스 형태에 따라 선택해야 한다.

LoRa 디바이스로 구성된 LoRa network에서 LoRa 디바이스는 통신을 위해 3가지 클래스로 동작한다.

이 클래스는 Down-Link 할 수 있는 타이밍에 따라 구분된다. LoRa 디바이스는 LoRa Gateway에 Join 하면서 사용할 클래스에 대한 정보를 Gateway와 공유하게 된다. 그리고 LoRa 디바이스의 클래스에 따라서 디바이스에게 데이터를 보내는 타이밍을 정한다.


Class를 선택하기 위해서는 LoRa 서비스의 형태와 LoRa 디바이스에 상시전원을 공급할 수 있는지 여부로 판단할 수 있다.

서비스의 형태는 LoRa 디바이스가 Up-Link 위주의 서비스인지, Down-Link도 포함하는지 여부이다.



A Class

LoRa 디바이스와 LoRa 게이트웨이 사이의 A Class 통신은, LoRa 디바이스가 게이트웨이에게 Up-Link 전송을 수행한 이후에 두 번에 걸쳐 Down-Link 수신할 수 있다.

LoRa 디바이스는 Tx를 하기 전에는 Tx와 Rx를 꺼두었다가 Tx 이후 정해진 시간에 잠깐 Rx 신호를 감지한다.


A Class를 사용하면 Rx를 수신하기 위해서 Tx를 사용해야 한다. 그렇기 때문에 Tx 위주의 서비스나, 상시전원을 사용하지 않고 배터리로 운영하는 경우에 사용한다.


아래 그림에서 (노란색)은 LoRa 디바이스가 Rx 할 수 있는 상태이다. Tx 1회당 2번의 Rx를 할 수 있는데, 첫 번째 Rx 타이밍에 수신한 데이터가 없을 때 두 번째 Rx를 시도 한다.



B Class

A Class가 Up-Link(Tx) 위부의 Class라면 B Class는 Down-Link(Rx)를 고려하고, A Class에 비해 낮은 지연시간의 Class 이다.

B Class는 일정 시간 간격마다 Rx를 수신할 수 있는 상태(노란색)가 되고, 해당 타이밍에 LoRa Gateway로 부터 데이터를 수신할 수 있다.


B Class는 A Class와 달리 Rx 위주의 서비스와, 배터리로 운영하는 경우 고려할 수 있다.

주로 A와 C를 사용한다.






C Class

C Class는 Rx 가능 상태를 유지하기 때문에 타 Class에 비해 최소 지연시간을 갖지만, 가장 많은 전력을 소비한다. 그래서 C Class를 사용하기 위해서는 충분한 전력이 공급되는 상황에서 고려해야 한다.


항상 Rx 가능 상태이기 때문


에 LoRa를 이용한 스마트 플러그, 원격 제어등 액츄에이터 구현에 적합한 Class이다.


Rx1, Rx2, Tx 등등 LoRa 기술 상 이슈로 아래 이미지에서는 노란색 중간중간 비워두었다.




IoT/WiFi

SKT ThingPlug 더 쉽게 시작하기 강의록입니다.


ThingPlug Device로는 Nucleo F411RE와 WizFi310(Embedded WiFi module)을 사용했습니다.


Application은 Python으로 작성한 대시보드를 사용했습니다.



ThingPlug 뿐만 아니라, Arduino, mbed, Embedded WiFi 관련 강의가 준비되어 있습니다.

http://wiznetacademy.com/



(강의록 로딩이 조금 오래 걸립니다.)


Study/Python

python에서 특정 함수를 일정 주기마다 실행하고 싶으면? threading.Timer를 사용해보자


기본 사용방법은 아래와 같다.


import threading

class AsyncTask:
def __init__(self):
pass

def TaskA(self):
print 'Process A'
threading.Timer(1,self.TaskA).start()

def TaskB(self):
print 'Process B'
threading.Timer(3, self.TaskB).start()

def main():
print 'Async Function'
at = AsyncTask()
at.TaskA()
at.TaskB()

if __name__ == '__main__':
main()

수행 결과, TaskA는 1초마다, TaskB는 3초마다 수행되고 있다.


Async Function

Process A

Process B

Process A

Process A

Process B

Process A

Process A

Process A

Process B


핵심은 아래 함수이다.

threading.Timer(1,self.TaskA).start()

함수의 의미는 1초 후에 TaskA를 start하라는 의미이다.

TaskA 함수안에서 threading.Timer를 사용한다면 TaskA는 정해진 시간마다 주기적으로 수행되는 함수가 될 것이다.



가장 중요한 점은, TaskA를 최초의 한번은 수행햐주어야 한다는 점이다.

def main():
print 'Async Function'
at = AsyncTask()
at.TaskA()
at.TaskB()




'Study > Python' 카테고리의 다른 글

python hex값을 hex string으로 변환하기, hexlify(), unhexlify()  (0) 2019.05.07
python Queue 사용방법  (0) 2017.01.25
Study/Python

Python에서 Queue의 기본적인 사용법은 아래와 같다.


import Queue

q = Queue.Queue()

items=list()

items.append('item1')
items.append('item2')
items.append('item3')
items.append('item4')
items.append('item5')

print 'start queue'

for i in items:
q.put(i)

while q.qsize():
print q.get()

print 'end queue'


put() 함수를 사용해서 q(queue)에  item1~item5 까지 put을 수행한다. get() 함수를 사용해서 q를 비운다.

위 코드를 수행하면 아래와 같은 결과가 나온다


item1

item2

item3

item4

item5

end queue


위 동작은 item1~item5 까지를 한번에 모두 Queue에 넣고 한꺼번에 get을 수행하기 때문에 전혀 문제가 없다.


그런데 여러 Thread 상에서 비동기적으로 Queue에 put과 get을 수행해야하는 상황이라면 문제가 생긴다.


put()과 get() 함수가 기본적으로 blocking 함수이기 때문이다.


흔히 발생할 수 있는 상황은, Queue에 데이터가 없는 상황에서 get() 함수를 수행한다면 데이터가 put() 될때까지 blocking 되기 때문에 해당 Thread에서 다른 동작을 수행할 수가 없다.


해결 방법은 get()과 put()을 non-blocking 함수로 바꿔야 하는데, 방법은 아래와 같다.


import Queue

q = Queue.Queue()

items=list()

items.append('item1')
items.append('item2')
items.append('item3')
items.append('item4')
items.append('item5')

print 'start queue'

for i in items:
q.put_nowait(i)

while q.qsize():
print q.get_nowait()

print 'end queue'



1 2 3 4 5
블로그 이미지

IoT 개발자 블로그이고 싶다.

1byte