livin' seberia

'smart DIY'에 해당되는 글 4건

  1. smart mirror project [day 6]
  2. smart mirror project [day 2] 5
  3. smart mirror project [day 1]
  4. smart mirror project [intro]

smart mirror project [day 6]

DIY IOT - smart mirror project

2월 24일 여섯째날

오늘의 목표 : 정말로 오늘만큼은 이 모든 것들을 기필코 한 화면에 모으고야 말겠다.


아 빌어먹을.

사실은 요 이틀째 이게 제일 골치였다.



보시다시피 나는 시계와 날씨와 뉴스를 모두 한 코드에 넣었는데, 돌리고 또 돌려봐도 자꾸만 저 시계만 뜨는 것이다 .

물론 어떤 경우에는 시계는 사라지고 맨 마지막에 넣은 날씨만 살아남기도 했다!! 그리고 어떻게 해도 뉴스만 남는 법은 없었다. 


사태를 해결하기 위해 장장 수 시간을 쏟았고, 그 결과 



드디어!!! 내가 원하는 바를 이루고야 말았음 ㅠㅠ 엄마 보고싶어요 ㅠㅠ 너무 신나서 창 이름도 good으로... 


... 자 이게 어떻게 된 일인지, 비록 밤 12시를 넘긴 이 시각에 나홀로 연구실에 남아있긴 하다만 조금 썰을 풀어보도록 하겠다. 

문제의 발단은 늘 그렇듯 tree에 있다. 각자 따로 띄우면 멀쩡하게 잘만 출력되던 것들이, 합치면 돌연 실종되는 사태가 벌어진다? 그러면 이 코드 전체의 구조에 문제가 숨어있는 것이다. 물론 나도 그 사실은 이미 일찌감치 눈치채고 있었다. 

허나 wxpython의 구조는 뭔가 python 그 자체와는 또 상당히 달랐다. 

wxpython 웹페이지 만든 인간은 (물론 그가 wxpython도 개발했겠지만) 만나기만 해봐라 혼내줄테다. 

http://www.wxpython.org/docs/api/trees.html

이 사이트에 들어가보면 이유를 알 수 있다. 내가 찾는 트리 구조를 말그대로 줄줄줄 '나열'해준 덕에 내가 찾는 정보를 찾아 헤매느라 시간이 오히려 더 많이 걸렸다. wxpython은 앞서 말했듯 쓰는 사람이 별로 없는지 어쩌는지 라이브러리도 별로 없어서... 꺼이꺼이....


결론부터 말하자면, class안에 def를 달아 기능(function)을 만드는 데 끝나는 게 아니다. 나같은 경우엔 시계는 text 그 자체로 받아왔고(이미 시계를 텍스트로 전환하는 툴이 있었으므로) 기사와 날씨는 텍스트그리기 기능(그림판에서 A라고 쓰인 버튼이 수행하는 텍스트그리기 기능을 생각하면 된다)을 가져다 그 안에 데이터를 문자로 변환해 넣는 식으로 코드를 짰다. 이 텍스트그리기 기능이 PaintDC라는 것인데, 이 'DC'라는 것이 class-object-그리고 그 다음에나 있는 꼬랑지같은 녀석이었다. 아주 멀리멀리 떨어져있는 객체 오브 객체, 아주 작은 클래스인 셈이다.


그러니 시계 vs. 기사랑날씨 - 이 두 개의 이를테면 꾸러미 자체가 다른거다. 맨 바탕에 시계를 그려놨다면, 기사랑날씨는 맨 바탕에 올려둔 박스 안에 담아둔 셈이니까. 더구나 시계는 panel이라는 녀석이 받고 있었다. (그냥 맨바닥에 쓰되 그 맨바닥을 panel이라고 define했던 거다)


이게 바로 내가 이 모든 툴을 완성하기 전까지 코드를 공개할 수 없는 이유다. (ㅋㅋㅋㅋㅋ)


여차저차 기사랑 날씨는 같은 박스 안에 담아두고, 시계판과 공존할 수 있도록 열심히 잘 짜봤다. 

하지만 위에서 보다시피 폰트의 통일성까지는 도저히 구현할 수 없었다. (언젠가는 누군가 이 포스트를 보고 알려주겠지...) 박스 안에 폰트를 지정할라 치면 function은 font를 적용하지 못하네 어쩌네 잔말이 많다. 현재의 이 보통 폰트도 그냥 봐줄만해서 일단은 뒀다. (하지만 거울이 커지고 멀리서 거울을 봐야하는 사태가 벌어지면 폰트도 커져야 하고 색채와 글꼴도 바뀌어야하겠지...)



두 번째 난관. 

날씨 데이터가 너무 많아서 고르고 또 고르고, 하려고 봤더니 세상에, 일일이 입력하지 않는이상 오존정보부터 바람세기까지 다 거울에 비춰줘야 할 지경인 것이었다. 그래도 프로그래밍이라는 게 아날로그는 좀 최소화해야하지 않나 싶어서 최대한 짱구를 굴려봤다. for i in xrange(10)을 2,4,6,8,10으로 점핑해서 보여주는 방법을 써볼까해도 forecast.io에서 뱉어내는 순서가 내가 원하는 그런 순서도 아니었고... 

고로 날씨는 깔끔하게 '오늘 날씨', '현재기온', '체감기온', '현재 날씨'로만 구성해 '쳐 넣었다'.

코드로 살짝 말씀드리자면,


>> def call_forecast():

       a = []

      if fio.has_daily() is True:

daily = FIODaily.FIODaily(fio)

a.append('Today: ' + unicode(daily.icon))

if fio.has_currently() is True:

currently = FIOCurrently.FIOCurrently(fio)

a.append('Temperature: ' + unicode(currently.temperature))

a.append('ApparentTemperature: ' + unicode(currently.apparentTemperature))

a.append('Now: ' + unicode(currently.summary))

return a

>> weatherlist = call_forecast()


이런 식이다. 일일이 어펜드하는 정말 초보 수준이지만 언젠가는 극복할 수 있으리라 본다. (아니 뭐 사실 내가 필요한 정보가 뭐 이만큼인걸....)


세 번째 난관... 까지는 아니고 잠시 헤맨 내용

알다시피 망할 시계가 계속 이상한 시간을 가리키고 있었다. 그 이유를 살펴보니 GMT_9로 돼있었던 건데, 누군가가 일본을 기준으로 wxpython을 쓸 땐 GMT_9로 해야한다고 해서 그걸 그대로 가져다 썼더니만...

이후에 EST도 써보고 이것저것 굴려봤으나, 역시 우리의 wxpython은 자신만의 단어들을 보유하고 있었다! 대단혀유. 

참고 :  http://wxpython.org/Phoenix/docs/html/TZ.enumeration.html

GMT9 로 써야한다. 난 GMT+9로도 고쳐봤었는데... 어쩐지 안 먹더라니...




열심히 살고 있다고 광고나 할겸 지금 이 순간 내 책상이나 사진으로 찍어 올려야겠다. 


(책상이 어지러우면 간식을 더 먹는다는 연구결과도 있는데....)

아이템 1.  코끼리 바탕화면 맥북과 사자 얼굴 바탕화면의 데탑 모니터. 언젠가는 데탑모니터가 맥북을 잡아먹는다는 뜻은 아니고 그냥 심란할 때 동물 사진을 보면 뭔가 기분이 좋아진다. 마침 맥 기본 배경화면에 요놈들이 있길래...

아이템 2. 입학하고 손목이 안 좋아져서(나이를 먹어서) 예전에 사뒀던 파워볼을 다시 꺼내들었다. 손목은 모르겠고 팔꿈치 아래 근육이 점점 커지는 듯...

아이템 3. 알라딘굿즈 사은품으로 얻어내고야 만 Don't Panic 컵. 별로 살 책도 없었는데 굳이 사서 이 컵을 얻은 이유는 그냥 저 문구가 그렇게 와닿... 으흑흘그흐ㅡ흐그흑

아이템 4. 자색고구마와 썬업과 물과 호두과자. 운동도 안 하는데 살이나 찌지 말자며 물 두 병을 비우고 간식 대신 자색고구마를 먹겠다고 사둔 뒤, 오렌지향이 나는 쥬스와 천안에서 사온 지 12시간 된 마른(그러나 바삭한) 고칼로리 호두과자를 대신 비웠다. 점점 위장만 늘어난다.

아이템 5. 연구실 불이 아무리 밝아도 나는 나만의 로맨틱한, 마치 하버드 도서관같은 느낌의 주홍빛깔 조명을 쓰고야 말겠다며 얼마 전에 산 녀석인데 눈이 좀 부시다. 

아이템 6. 라식한 지 3년 만에 왼쪽 눈만 시력이 절반 이하로 뚝 떨어져 급히 수혈 중인 점안액... 아무리봐도 수술이 잘못된 것 같다... 


아 이거 쓸 시간에 잠을 자면 눈이 좋아지려나...



아무튼 이제 내게 남은 일은 크게 두 가지다. 

1. 오늘의 날씨는 sunny, cloudy, rain, snow등 몇 개 안 되니까 아이콘을 찾아 매칭을 시켜보자. 이건 어쩌면 잘 할 수도 있을 것 같다. 것보다, 뉴스와 날씨를 시시때때로 업데이트 해줘야하는데.... 아.... 그게 남은 거구나 어쩐지 뭔가 좀 빨리 끝났다 했다.........

2. 거울을 찾아야 한다. 그리고 그에 맞는 작은 모니터를 찾으면 된다. 모니터는 사실 라즈베리파이용 모니터를 구해다 쓸까 싶다. 너무 작나... 거울은 아마 청계천을 한 바퀴 돌아야 할 듯... 이 두 가지만 구하면 사실 다 끝난 거다. (뒤에 붙이는 거야 뭐!) 



음... 아무래도 3월을 넘기게 생겼다....



며칠 전 들은 말 중에 오늘 유독 힘이 됐던 한 마디! 

"터미널에 뜨는 오류메시지만큼 코딩 실력도 는다!"

................정말이쥬? ... 




-----------------------------------------------

새벽 1시 43분 현재 여지껏 잠이 오지 않아서 결국 위 '남은 일' 가운데 하나를 해치우기로 마음을 먹었다. 

일단 '한 시간에 한 번씩은 api 콜을 할 수 있도록 하는' 라이브러리를 찾았다. 

참고 :   https://pypi.python.org/pypi/schedule

MIT연구진이 만든 모양인데 참으로 감사하다. 



'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 8]  (0) 2016.04.12
smart mirror project [day 7]  (0) 2016.03.28
smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19

smart mirror project [day 2]

DIY IOT - smart mirror project

2월 17일 둘째날

오늘의 목표. 책을 살펴보니 라즈베리파이로 소리 정도는 재생 해보고 싶고, 날씨API를 끌어다 쓸 적절한 코드를 짜고자 한다. (시각화는 내일쯤...)


오늘은 소리를 재생했다. 스피커 케이블을 찾을 길이 없어 고민하고 있는데 연구실 오빠가 "이어폰을 쓰면 됨"이라고 알려주었다. 역시 길은 어디에나 있다. 느려터진 랜선을 부둥켜 안고 good morning wav 파일을 검색해 다운을 받았다. 그리고 돌려봤는데...... "good bye"란다. (음....?) 음원이 이상하다.


이어 날씨api를 받아 파이썬으로 코드를 작성해보았다. 이곳 저곳 뒤져봤는데, 많은 이들은 open weather api를 쓴다. (구글 웨더 api도 있었지만, 2010년대 초반 이후로 서비스가 중단됐다고 한다)

하지만 내가 제일 좋아하는 사이트(앱으로 즐겨찾기도 해뒀더랬다)는 forecast.io 다. 물론 당연히 이곳도 api를 제공한다! 심지어 언어별로 라이브러리도 친절하게 잘 형성돼있다. 

나는 파이썬을 쓰므로, 파이썬에 맞는 라이브러리 두 개를 찾았다. 

깃헙의 https://github.com/ZeevG/python-forecast.io     이걸 참고할 수 있고, 
참고로 파이썬 켜기 전에 pip install python-forecastio 를 돌려줘야 forecastio를 import 할 수 있다. 
또 다른 하나는 https://github.com/dvdme/forecastiopy    다. 이 또한 pip install forecastiopy를 해줘야 한다. 
개인적으로는 후자가 매우 마음에 들었다. 

위와 같은 결과가 나오고(개인적으로 저 마이구미를 꼭 화면에 담고 싶었으므로 걍 나이브하게 사진을 찍어 올림.....) 

나는 저 데이터들 가운데 temperature min - max 와 humidity, summary 를 뽑아낼 예정이다. 더불어 icon을 가져다 실제 예쁜 아이콘들과 매칭해 출력할 것이다. 


내친김에 뉴스api도 좀 썼다. ap news나 reuter보단 nytimes에 좀 더 마음이 가서... (물론 한국어를 파싱할 수 있는 네이버 개발자 툴을 활용할 수도 있지만... 한글화 작업은 다음에 해보기로... 더구나 나는 외신을 더 많이 보므로...)


결과적으로 top stories의 제목만 용케 잘 뽑아 왔다. 욝 타임즈의 api는 여기를 참고하면 된다. 

http://developer.nytimes.com/docs/top_stories_api/

물론 스택오버플로에 올라온 것도 활용했다. http://stackoverflow.com/questions/16431120/nytimes-api-python

처음엔 섹션을 science만 설정했는데, 오늘자 top stories에 해당 분야가 없었는지 출력값이 [ ]로 나와버렸다. 맞춤형 콘텐츠를 실시간으로 받아보는 일은 결국 콘텐츠 생산자에게 달려있으니...


그러고보니 시계를 안 했다. (ㅋㅋㅋㅋㅋㅋㅋ 미러의 핵심인데...)

이 글에서 맨 마지막에 나온 코드로는 팝업으로 뜨는 디지털 시계만 나온다. 맨 마지막줄 root.mainloop()을 후에 잘 활용하면 될 듯. 
내 라즈베리파이가 영 이상한 시간을 가리키고 있어서 사진은 저리 나왔다. 음, 영 이상한 시간은 아니고 GMT 기준시다. 세계기준시인 타임티커에서 데이터를 가져온 것으로 보이고, 이걸로라면 날짜도 바로 따올 수 있을 것 같다(???!)



....늘 그렇듯 안 예쁜 건 예쁘게 만들면 된다. (아마도 그럴거다...) 그리고 마이구미는 몹시 귀엽다.



이제 시각화 작업을 하면 된다.

(그럼 이제 다시 js와 css를 펼쳐야 하는 것인가...?...)



'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 1]  (0) 2016.02.17
smart mirror project [intro]  (0) 2016.02.17

smart mirror project [day 1]

DIY IOT - smart mirror project

2월 16일 첫째날

에버노트에 끄적끄적한 뒤로 설날도 있고(새댁이라 바빴다) 신경쓸 여타 공부거리도 많아서 이제야 시작. (핑계...)

오늘의 소제목: 시작은 복잡하였으나 끝은 심플하리라.

 

오늘 결국 라즈베리파이 초보자용 키트를 질렀다가 연구실에 한가득 있는 것을 뒤늦게 발견하고는! 환불 버튼을 강하게 내려친 뒤 냅다 가져다 작업을 시작했다! 

일단 라즈베리파이의 곱디 고운 자태를 먼저 감상.

예쁘다. 저 한 가운데 저 라즈베리가 겁나 예쁘다. 난 원래 마이구미같이 생긴 저런 문양을 좋아한다. (참고로 연구실에 있던 것이 라즈베리파이 1 버전이어서, usb 포트가 두 개 뿐이다. 요즘은 더 잘 돌아가고 조금은 더 빠르며 usb 포트가 4개나 되는 라베2가 더 인기가 좋다고 한다) 

하지만 여기에 os를 설치하는 것부터가 난관이다. 망할 win32 disk imager에 sd카드가 안 떠서다. 용량이 모자라는 것도 아닌데. 

혹시 몰라 sd카드를 전용 포맷프로그램을 검색해 깔아가면서 굳이 완벽 포맷을 했고(그건 잘 한 일이다) 그럼에도 불구하고 raspbian OS imager에 f: 디스크가 안 뜬 고로, 나는 noobs lite 버전을 받았다.

'굳이 imager drive에 f:가 뜨지 않아도 걍 드래그 앤 드롭을 써도 무방하다는 사실'을 나중에야 깨달았다 ^ㅡ^


아 저 무언가 다 끼워줘야 할 것 같은 소켓(?)이 널린 자리에 케이블도 하나 둘 찾아 드렸다. 키보드와 마우스의 동글을 usb포트에 꼽고, 전원은 노트북에 연결했다. (그래도 된다) 모니터는 급한대로 데탑 HDMI로 연결했고, 랜선을 끌어다 포트에 꽂았다. 

그리고나서... 켰다! 켜졌다! 


책에 나오는 것처럼 온갖 옵션 화면은 뜨지 않았지만(그래서 비번이고 뭐고 입력할 일이 없었... 뭔가 좀 이상하지만 걍 진행하기로 했다) 아무튼 뭔가 자태 고운 라스베리가 나타났다! 유후!

맥 터미널이랑 리눅스랑 명령어가 비슷해 어렵지 않게 (따라)쓰긴 좋았다. 기본 세팅 완료. 

그리고 책에 나온대로 일단 GPIO까지 설치 완료.


처음 보는 라스베리파이 자태를 열심히 감상하고, 분주하게 돌아다니며 선을 끌어다 쓰고 어쩌고 하는 데 두 시간 남짓 걸렸다. 





근데 이거 어떻게 끄는 거지...




(sd카드 빼면 망한다고 한다. 걍 메뉴 들어가서 shut down을 누르면 된다.)





'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 2]  (5) 2016.02.17
smart mirror project [intro]  (0) 2016.02.17

smart mirror project [intro]

DIY IOT - smart mirror project

만들고 싶다고 생각한 것은 2월 2일 즈음이었다. 지금으로부터 어언 2주 전. 당시 에버노트에 올린 글은 다음과 같다. (참고로 나는 내 메모장으로 에버노트를 아주 잘 활용한다) 그리고 이 글은 결과론적으로 개발을 막 시작한 현재 '해 두길 잘 한 스크랩'이 됐다. (뭐 얼마나 효용이 있는 줄은 모르겠으나...) 



구글 안드로이드를 활용한 구글 엔지니어의 자기네 집 욕실 스마트 미러 만들기 
다음과 같은 UI를 활용. 예쁜듯… 예쁜듯!!!

꽂히었다.


라스베리파이를 이용해 iCal parser써서 만든 케이스도 있음. 여기가 코드도 더 상세하게 나온듯. 



일단 스마트한 거울을 만들려면 다음과 같은 것들이 필요하다.
40핀짜리 LCD 패널과 함께 움직일 TV LCD Controller Board (1920*1080) 
http://www.ebay.com/itm/360626141655   - 이게 벌써 3만원이 넘..


이 스마트한 화면을 껐다 켰다 할 수 있는 스위치도 있어야할테고 - 잌 2만원쯤



디스플레이 패널이 있어야하는데 엌 이건 뭐 모니터를 사야하나 - 여기서 20만원이… 다른 방법도 있을테지! 중국산도 많고, 음음, 일단 어디 누가 버리는 모니터 없나 봐야겠다.  (엌ㅋㅋㅋ그러고보니 오빠 놋북 모니터가ㅋㅋㅋㅋㅋ) 
잠깐, 걍 갤기어 가지고도 뭐 할 수 있지 않을까? =ㅅ= 엄마 안쓰는 것 같던데 어차피 1세대…흡… 



이걸 가지고 하는 방법은 다음과 같다고 한다. 

그리고 거울이 있어야 한다. two-way mirror 라는걸 사야 나도 비추고 반대편의 것도 비출 수 있다. 아아. 
10cm X 10cm = 2만원쯤 한다. http://www.twowaymirrors.com/glass/   여기 사이트에선 무려 diy 키트도 판다.
음 근데 two-way mirror도 좋지만 vanity vision도 나쁘지 않은 것 같다. 

…diy키트를 받아볼까…

… 아 없단다. 휴우 다행. (나는 누구나 그냥 손 안 대고 코 풀 수 있는 건 하기 싫다)

그리고 또 필요한 게 있다. 
케이스를 씌워야 얘네가 고정이 되겠지.


잊지말고 챙겨야 할 분들이 또 있다.
  • A Raspberry Pi
  • A HDMI Cable (to connect the Raspberry to the Monitor)
  • A USB to micro USB cable (to power the Raspberry Pi)
  • A power cable to power the monitor

ok? …. 



이러고 끝나면 누구나 다 한다.
하지만 준비물을 모두 갖춘 지금부터가 진짜 시작.

얘를 돌리려면 라스베리파이를 하드드라이브라고 생각하고, 그 안에 코드를 팍팍 심어준 다음에, 이걸 반대편 모니터에 연결하고 그 위에 거울을 붙이면 되는 식이다. 

그럼 라스베리파이를 잘 만져야한다는 뜻이다.


….음….
그러고보니 라스베리파이의 가격을 검색해보지 않았다. 
해외직구로 40파운드, 우리돈 8만원쯤 한다. 

고로 다 합쳐 약 한, 뭐… 한 40만원 짜리 거울을 만드는 셈이다. 핳핳핳


오오 그런데 위에 보면, Amazon fire tv stick 이라는, android apk를 받을 수 있는 기특한 놈이 있다고 한다. 

tv를 보기 위한 스틱이지만, UI를 운영하는 뭐 그런것도 있는 셈이다. 그러면 라스베리파이가 필요가 없다. 
(근데 이것도 직구를 해야한다 =ㅁ=)

거울에 바로 비춰도 좋을만한 것들이 뜬다. 
….?!!

돈이 조금 줄어들기도 했고... 어쨌든 해 볼 만은 하겠다. 




설 지나고 시작해볼까. 
아 나 바쁜데.
(바쁘긴 개뿔..)



'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 2]  (5) 2016.02.17
smart mirror project [day 1]  (0) 2016.02.17