Category Archives: AVR / Embedded

무선 온습도계

STM8S003F3 / NRF24L01 / AM2303 / ESP8266를  이용하여 무선 온습도계를 만들었다.

전원 정보
STM8S003F3  –  2.95 V to 5.5 V operating voltage / Running 5mA, halt 70µA
NRF24L01 – 1.9 to 3.6V  / Transmit 11.3mA (max), Receive 12.3mA(max), power down 900nA
AM2303 – 3.3V to 5.5V / Dormancy 15µA, Measuring 500µA
ESP8266 – 접속프로토콜에 따라 상이, 아래의 테이블 참조

ESP8266모듈은 값을 송신받아 WiFi망을 통해 웹서버로 올리는 게이트웨이 역할을 한다.

아래는 완성품

송신기 ( STM8S003F3, NRF24L01, AM2303)
송신기는 두개를 만들어서 각각 실내, 실외를 측정할 수 있게 하였다. 5분마다 1회 측정하여 전송하며 이외의 시간은 HALT 명령어 수행.
5vto3.3v 구간을 없애기 위해 레귤레이터 제거하고 다이오드 연결, 배터리 완충시 NRF24에 걸리는 전압이 데이터시트의 MAX보다 0.3v정도 높은데 다행히 정상작동.
600mAh 배터리 사용했는데 배터리 소모가 자연방전되는 수준(2달간 0.2v 하락)
처음에 DHT11을 사용했는데 이건 오차, 편차가 심해도 너무심한수준… 그냥AM2303오는동안 연습용으로 사용함…
로직아날라이저로 값읽어오는거 만드느라 고생좀 했음….

수신기, 게이트웨이 (ESP-12e, NRF24L01, 전원보드)
송신기로부터 데이터를 수신하여 WiFi를 통해 웹서버로 전달.
얘는 전력소모가 상당한수준, 900mAh 배터리 사용하였으나 반나절 조금 더 버팀. WiFi 연결유지에 많은 전력이 소모되는듯..

디스플레이
mysql과 php로 highcharts.js 사용하여 출력

결론
뭔가 잘못했는지 몰라도 송수신거리가 5M도 안됨…(원래그런건가.. 벽하나 못뚫음, LNA는 비활성 )
STM8말고 아두이노 쓰자…. 저전력이긴한데 코드작성하기 너무힘들다.
좀 오래 두고두고 쓸려고 심혈을 기울여 작업했는데 게이트웨이쪽 배터리가 너무 빨리닳아서 ㅈㅈ…

Hantek DSO5202P 구매

몇년전부터 사고싶어하던 오실로스코프를 드디어 구매하였다.
구매를 진행하다보니 해외에서 구매하게되면 생각보다 저렴하게 구매할 수 있다는점과 스펙에 대해 고려해야될 부분이 굉장히 많다는것에 대해 놀랐다.

내가 구매한 오실로스코프는 중국 Hantek사의 DSO5202P이다. (생긴게 학부시절 실습할때 사용한 텍트로닉스사의 제품과 매우 흡사하다, 심지어 컬러 아이덴티티까지…)
스펙은 200MHz 대역폭을 가지고있고 1Ch에 1Gsa/s샘플링이 가능하다. (2채널은 반으로…)
40K개의 샘플을 USB를 통해 저장할 수 있다.
알리익스프레스를 이용하여 배송비포함 250$의 가격에 e-EMS를 통하여(일요일 주문 금요일 도착) 5일만에 받아볼 수 있었다.
구매전  DSO52xxP시리즈는 동일한 부품을 사용해서 펌웨어 해킹을 통해 스펙을 업그레이드 시킬수 있다는 글을 보았지만 하위제품과 가격차이가 20$도 나지않아 그냥 상위버전을 주문하였다.
처음엔 RIGOL  DS1102E이나 OWON의 SDS7102V를 사고싶었으나 비슷한 가격에 대역폭도 좋고 영문지원도 되는 Hantek을 결정하게 되었다.
SDS7102V는 해외판이고 EDS102CV가 같은모델 내수버전인데 영문을 지원하지 않는다고 한다. 현재 해외판은 구매가 안되는것으로 확인된다.
AS는 조금 걱정되긴 하나 고장안나도록 조심조심 쓰는게 좋을것 같고 혹시라도 고장나면 EMS로 AS처리하면 될것같다.
구매할때 도움이 되었던 블로그 : http://blog.naver.com/just4u78/220880895694

주문하고 아쉬웠던점은 전면에 SAVE TO USB라는 버튼이 있는데 이 버튼은 화면 캡쳐 버튼이었다는거 … (샘플을 저장하는게 아니라 현재 스크린샷만 저장해준다)
이렇게 말이지…
샘플을 UTILITY메뉴를 통해 저장할 수 있는데 버튼을 좀 많이 눌러야된다는것…
이유는 모르겠지만 가끔 재부팅이 된다는점… (PC소프트웨어를 사용하다가 보니 재부팅이 되더라…)

USB를 이용하여 윈도우에서 사용가능한 소프트웨어를 제공한다.
OpenHantek프로젝트가 있어서 리눅스에서도 USB를 이용하여 기기를 조작하고 샘플을 수집할 수 있다고 한다. 하지만 내껀 기기 인식이 잘 안된다(PID와 VID가 조금 다른듯..)
http://cafe.naver.com/openiot/203

누군가가 프로토콜을 리버싱해서 공개를 한것으로 보인다.
PC로 바로 샘플을 땡겨올 수 있을거같은데…
http://elinux.org/Das_Oszi_Protocol
https://www.mikrocontroller.net/articles/Hantek_Protokoll#cite_note-2

https://github.com/procule/hantek-dso

내가 받은건 소프트웨어 버전이 170505이다.(홈페이지는 170318이 최신)

SAVE/RECALL 메뉴를 통해서 CSV형태로 저장할 수 있다. 저장된 데이터는 다음과같이 WaveDataXXX.csv로 저장된다.

#timebase=1345294336(ps)
,#voltbase=1000(uV)
#size=40064
5.00000E-05,-0.280
1.00000E-04,-0.280
1.50000E-04,0.040
2.00000E-04,0.280
2.50000E-04,0.160
3.00000E-04,0.360
3.50000E-04,0.360
4.00000E-04,0.280

아래는 백업용 자료들
DSO5000P_Datasheet
DSO5000P_Driver (버전은 모르겠고 윈도드라이버 서명된거)
DSO5000P_Manual (ver 1.1)
DSO5000P_Software (V2.0.0.7_20141216)
DSO5202P_Firmware (dso5kp_func_dso5202p20170318.up)

 

KT_WLAN WiFi default password

부제 : 공개되고 고정된 정보로부터 유도되는 패스워드

최근 수많은 Wireless Router 들이 기본적으로 WPA2 패스워드가 설정되어 출시되고 있다.
하지만 사용된 패스워드를 보면 고정적인 패스워드(1234567890 라던가…)를 사용한다.
몇몇 제품은 제품마다 다른패스워드를 부여하고 이를 본체나 매뉴얼에 표시해두는 방법을 사용하는데 살짝만 봐도 패턴이 보이는 아쉬움이 존재한다.
하나의 타겟(KM04-112H)을 잡아 기본 패스워드 유도과정을 살펴보았다.

이글(지워졌다ㅠ)에서 이미 대략적인 부분을 분석? 유추? 가 되어있다.
디바이스의 MAC 주소를 기반으로 SSID와 passphrase를 생성하는것을 알 수있다.
타겟모델인 머큐리 KM04-112H 부분을 보면 MAC이 00:27:1C:2D:85:7F인 경우 뒤의 3개 옥텟만 사용되는것을 확인할 수 있다.
좀더 확실히 하기위해서 타겟의 펌웨어를 확인해보면 cfghandler에서 기본 SSID 와 passphrase를 생성한다.


SSID는 “KT_WLAN_%1X%1X%1X%1X” 또는 “KT_WLAN_%1X%1X%1X%1X_5GHz” 포맷과$t4[0x10],$t4[0x11]$t4[0x12]를 이용하여 4자리의 ASCII를 만들어 넣는다. (t4는 1번째 인자값이다.)
t4레지스터를 구성하는 부분은 생략하고 마지막 MAC의 3옥텟이 들어있다고 가정하면
$t4[0x10] = 2D
$t4[0x11] = 85
$t4[0x12] = 7F 가 된다. 따라서 포맷의 결과는 “KT_WLAN_2D57_5GHz” 이 된다.

바로 아랫부분에 패스워드 생성하는 부분이 존재한다.
패스워드 생성부분도 SSID생성부분과 비슷하다.
“000000%02x%02x”의 포맷을 가지고 $v1[0x11], $v1[0x12]와 값을 생성한다.( v1은 1번째 인자값이다.)
$v1[0x11] = 85
$v1[0x11] = 7F 라고 보면 “000000857f” 가 패스워드가 되는것이다.
패스워드를 유추하기위한 MAC 주소는 공유기 뒷부분의 라벨에 친절하게 패스워드와 함께 쓰여있다. 따라서 물리적으로 접근이 안되면 안전하다.

passphrase의 바뀌는 부분이 2바이트이고, SSID를 통해서 1바이트를 알아낼 수 있으니 255번이내에 성공하므로 패스워드로써의 가치는 없다.
또한 타겟의 MAC 주소를 얻을 수 있는방법은 너무나도 많다.
(확인가능한 MAC은 무선랜인터페이스에 대한 MAC이다, SSID, passphrase 생성시에는 WAN 인터페이스의 MAC이 사용된다)

제조사가 달라도 패턴이 일치하는것을 봤을때 KT가 잘못했네.
나중에 심심하면 다른것은 어떻게 만드는지 확인해 보는것도 재밌을것같다.

ESP-12 NodeMcu ESP8266

저렴한(2~3$)가격에 구매할 수 있는 2.4G wifi 모듈
저렴한 가격, UART만으로 프로그래밍이 가능한 덕에 커뮤니티 활성도도 매우 높은편
GPIO도 적당히 많고, 지원하는 외부장치도 많아서 센싱네트웍 게이트웨이로 적합하다.

NodeMCU 롬은 lua 스크립트를 지원한다.
esp8266 arduino는 arduino를 이용하여 프로그래밍, 플래싱을 지원한다.
그외 수많은 서드파티들이 존재

리셋할때 아래와 같이 핀설정을 해주면 부트모드를 바꿀 수 있다.

                                  | GPIO 0 | GPIO 2 | GPIO 15
----------------------------------|--------|--------|---------
Flash Startup (Normal)            |   1    |   1    |   0
UART Download Mode (Programming)  |   0    |   1    |   0
SD-Card Boot                      |   0    |   0    |   1

https://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf
http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family#esp-12
http://robertoostenveld.nl/esp-12-bootloader-modes/

 

DHT11 / DHT22

온습도 센서로 DHT11을 구매하여 사용중이었으나 제품별 편차, 성능상의 오차가 데이터시트 이상 뿐만 아니라 상상을 초월하여 조금더 정밀한 DHT22를 구매하였다.

여기 에서 좀더 자세한 설명을 하고있다.
차이점은 위 그림과 같은데 실온사용 목적이면 오차가 줄어드는거 외에는 신경쓸 부분이 없다.
실제 느낀 DHT11의 온도 오차는 최대 5℃ 정도이며 값을 읽어올때마다 1~2℃단위로 편차가 발생하였다. 습도 오차는 15%에 달하며 그냥 의미없는 값처럼 느껴졌다. (실내 습도가 40%인데 25%를 기록한다던지..)
DHT22는 샘플링레이트는 반토막이 났지만 제품 편차도 적고 온도오차 1℃ 내외, 습도 5% 내외로 그나마 신뢰할만한 데이터를 가져올 수 있었다.
다만 가격차이는 DHT11이 1천원내외 DHT22가 3천원내외로 3배 차이 …(국내 판매가격은 저기서 2배를하면..)

물론 더 좋고 더 정밀하고 더 비싼 센서들도 많겠지만 값을 읽어오는 연습용이면 DHT11, 그 값에 의미를 두기 위한 용도면 DHT22이상의 센서를 사용하는것이 좋을것 같다.