HAKKO FX-888과 디지털의 만남! <FX-888D(70W)>

안녕하세요. 아이씨뱅큐 공구 담당자 DAISY 입니다!!!

 

 

혹시 지난 번에 소개해드린 스마트 인두기, WELLER WX1010을 기억하시나요?

최신 기술을 두루 탑재한 인두기답게 여러분의 관심을 아주 뜨~겁게 달궜는데요.

그 기세를 몰아! 이번에 소개해드릴 제품은 인두기계의 영원한 스테디셀러, HAKKO사의 FX-888D 입니다.

 

인두기계의 명품, 인두기계의 벤츠로 유명한 일본 HAKKO사의 제품은 백 마디 말이 필요없죠?

일단, 그냥 한 번 써보시면 압니다.

그럼 오늘의 포스팅은 여기서 마치겠습니다. 감사합니다^_^*

 

.

.

.

.

.

.

 

 

 

 

 

 

 

 

 

 

~~ 건방지게 포스팅을 마치고 싶지만, 그럴수는 없겠죠. 왜냐? 자랑하고 싶으니까!

 

 

저번에도 말씀드린 것처럼 저가 인두기로도 솔더링은 가능할지 모릅니다. 하지만 저가 상품과 비교할 수 없는 작업의 능률성, 제품의 내구성을 생각한다면 그 값어치는 충분하다고 생각합니다. HAKKO FX-888D 같은 경우는 작고 귀여운 외형 (100*200) 덕분인지 꼭 작업용이 아니더라도 RC카 정비나 PCB기판DIY, 등에 사용하시는 분들도 많더라구요. 그만큼 정교한 작업에도 무리없는 훌륭한 제품이라는 뜻이겠죠?

 

 

그렇다면 이제 본격적으로 FX-888D의 자랑거리를 늘어놓도록 하겠습니다.

FX-888D가 뭐지?

 

 

 

 

예전 FX-888이 아날로그 형식이었다면 FX-888D 디지털 형식의 본체를 가진 제품인데요.

과연 본체만 디지털로 바꼈느냐? 아니죠~ 기존 제품보다 출력을 30%나 향상한 대단한 제품입니다.

 

, 열전도가 우수한 T18 시리즈의 인두팁으로 우수한 열 회복은 물론! 더 낮은 온도에서 납땜이 가능하며, 부품의 열 영향이나 인두팁의 산화까지 줄일 수 있습니다.

 

게다가 UP / ENTER 단 두 가지 버튼으로 기계를 작동할 수 있으니 작동 자체가 얼마나 편리할지 상상이 되실 겁니다.

 

 

 

 뭐가 그렇게 편리한데?

 

 

 

 

바로 이 인두거치대!

인두거치대의 스펀지 수납부의 날카로운 부분을 제거해서 인두 수납 시, 손이 부딪치지 않게 설계했습니다.

인두 삽입구에 프로텍트 캡을 사용해 인두 거치시 발생하는 소음 역시 최소화 했구요.

 

, 한 개의 거치대에서 3가지 클리닝 방법이 가능하다는 것 역시 FX-888D의 크나큰 장점입니다.

 

 

 

 

 

 

 

그래도 가장 중요한 건 온도 아니겠니?

 

아직도 FX-888D의 작고 귀여운 외형이 믿음직스럽지 못한 분들 계신가요?

그렇다면 그런 걱정은 저~멀리 날려버리시길 바랍니다!

기본 탑재된 인두팁의 성능마저 대단한 FX-888D답게 아주 빠른 시간 안에 인두팁이 뜨겁게 가열되며,

15초만 기다려 주시면 300도를 돌파~ 최고 480도까지 올라가니, 무연납도 문제없이 땜질할 수 있습니다.

, 빠르게 납이 녹으니 산화도 덜 되고 인두기의 떨어진 온도가 바로바로 회복되니 모양도 예쁘게 잡힌다는 점!

 

 

 

 

 

 

 

다음으로 여태까지 이 글을 읽어준 여러분들에 대한 보답으로 한 가지 비밀을 알려드리도록 하겠습니다.

바로 이 제품을 가장 저렴하게 살 수 있고, 또 인두팁까지 공짜로 얻을 수 있는 곳인데요!

이게 바로 인터넷 최저가를 검색하면 나오는 페이지구요.

살펴보시면 해외 구매대행/ 해외 직구까지도 135,600원에 올라온 걸 보실 수 있죠.

 

 

 

 

 

 

 

 

. . .  짜잔!

 

 

 

 

 

 

 

 

저희 아이씨뱅큐에 오시면 135000이라는 파격적인 가격에!

 

 

 

 

 

 

바로 이 교체용 인투팁 T18 시리즈 중 PLATO T18-K / PLATO T18-3.5K 칼팁까지 무료로 증정한다는 사실!

아무도 모르셨죠?

 

 , 그럼 이제 이런 꿀팁까지 공유했으니 저의 임무는 다한 것 같네요.

그럼 오늘 저의 꿀팁 인두팁 포스팅은 여기서 마쳐야 할 것 같습니다.

다음 주에도 흥미롭고 알찬 내용으로 돌아오길 약속하며 안녕!~

 

 

**칼팁 무료 증정** HAKKO FX-888D(70W) :  http://www.icbanq.com/P005688453

**칼팁 할인 행사** HAKKO FX-951(75W) :  http://www.icbanq.com/P005688454 

 

 

 

신고

골라보는 재미가 있다: ICbanQ 커뮤니티/SNS 파헤쳐보기

안녕하세요, 아이씨뱅큐 마케팅 담당자 ALICIA 입니다.

 

오늘은 지난 번에 제가 언급했던 대로 아이씨뱅큐의 다양한 커뮤니티와 SNS에 대해 소개하고자 합니다. 담당하고 있는 저희도 여러가지 채널을 운영하고 있는지라 저희도 머리가 아픈데............ 이용하시는 고객 분들도 머리가 아프실 것 같아 ㅋㅋ 준비해 보았습니다. 진행되는 오프라인/온라인 행사나 ICbanQ 소식들은 모든 곳에 고루고루 전달해 드리지만 채널별로 차이가 미~~~~~~세하게 있으므로 필요한 정보를 찾아 골라보시면 더욱 효율적으로 전자관련 정보를 얻어가실 수 있으리라 생각됩니다.

 

 

 

 

NAVER BLOG [아이씨뱅큐 공식 네이버 블로그] http://blog.naver.com/icbanq

 

 

 

 

 

가장 먼저 소개해 드릴 커뮤니티는 바로 네이버 블로그 입니다. 대한민국인으로서 인터넷을 사용해 보신 분이라면 정말 이용해보지 않은 분들이 없을 정도로 많이 이용하시는 사이트이시죠?! 본래 DAUM TISTORY에 가장 먼저 블로그를 운영하기 시작했으나 더 많은 분들에게 저희를 알리고자 작년 가을부터 운영을 시작하게 되었습니다 :)  

 

네이버 블로그에서는 최근에 아이씨뱅큐에서 진행되었던 온라인 세미나들을 다시 시청하실 수 있습니다. 정기적으로 세미나를 진행 중인 인터그래텍 (Alitum Designer), LTC의 세미나들을 분리된 카테고리에서 찾으실 수 있으시며 기타 세미나도 다시보기를 시청하실 수 있습니다. 이 곳에서 찾기가 힘들다! 꼭 여기서 봐야하나??? 유튜브 채널도 없냐! 하시는 분들은 아이씨뱅큐 유튜브로 오시지요........ ㅎㅎㅎㅎ https://www.youtube.com/user/ICbanQ

 

또한 3D프린터와 관련된 각종 뉴스자료, 제품정보, 리뷰 빛 관련 영상들 시청 가능하시며 오픈소스하드웨어에 대한 정보는 따따블!

(NAVER CAFE에서 별도로 운영되던 마스보드 관련 자료들을 카페 폐쇄와 함께 옮겨왔으므로 마스보드에 관심이 있으신 분들이라면 더욱 환영! 합니다 :) 

 

 

 

 

 NAVER CAFE [전자/DIY/로봇/키트무상체험단] http://cafe.naver.com/icbanq

 

 

 

다음으로 소개해 드릴 커뮤니티는 NAVER CAFE 로 운영 중인 무상체험단 및 온/오프라인 교육관련 정보 카페 입니다! 다양한 제품들을 경험해 보고 싶으신데 주머니 사정이 여의치 않으시거나............. 어째나 저째나 공짜는 좋지 않습니까?! ( 제품을 무료로 드리는 대신 저희는 체험단 분들에게 포스팅을 원합니다!!! ) 체험단 모집을 시작하게 되면 가장 먼저 이 곳에 알려드리니 가입하시고 새로운 소식들을 기다려 보시는 것도 좋으실듯 합니다 :) 꽤 핫한 아이템들로 체험단을 진행하니 한번 확인 GOGO! 선정 팁을 드리자면 "계획" 부분을 구체적으로 쓰셔야 합니다 하핫. 카페에 들어가시는게 너~~~~~~~~~무너무 귀찮다! 하시는 분들은 페이스북에서도 즉각적으로 관련 공지들을 확인하실 수 있습니다 (페이스북 무상체험단 그룹: https://www.facebook.com/groups/1474174942848966/)

 

체험단 이외에도 현재 아이씨뱅큐에서 활발히 진행하려 하는 다양한 교육과정들을 만나보실 수 있습니다. 지난 번 진행했던 딤플주노 님의 아두이노 생초보 교육이 많은 관심을 가져주셔서 앞으로 이러한 교육을 많~~~~~~~~이 진행하려고 하니 얼른 즐겨찾기 추가하시지요.

 

 

 

 

DAUM TISTORY [아이씨뱅큐 다음 티스토리 블로그] http://icbanq.tistory.com/

 

 

 

 

모든 정보 총망라! 말이 필요 없습니다 ㅎㅎ 아이씨뱅큐에서 가장 오래 운영된 커뮤니티 입니다. 전자관련 유익한 정보들 총망라!

 

 

 

FACEBOOK [아이씨뱅큐 페이지] https://www.facebook.com/icbanq

 

 

 

 

 

 

 

페이스북을 이용하시는 분들이라면 다들 아실 거에요.... 페이지 좋아요! 누르시면 관련 정보들을 그 페이지에 들어가지 않아도 뉴스피드에서 늘 확인하실 수 있다는 사실! 관련 이벤트, 전자뉴스, 블로그에 올라오는 제품정보 등도 함께 확인이 가능합니다. 글읽는거 귀찮으신 분들은 요 페이지가 더 유용하시리라 짐작됩니다.

 

 

 

 

 

이거 썼다고 힘드네요 (ㅋㅋ). 취향별, 컨테츠별 원하는 커뮤니티에 참여하셔서 많은 정보 얻어가시길 바랍니다 :) 그럼이만!

관련문의사항은 alicia@icbanq.com 으로 보내주세요 -

 

신고

아이씨뱅큐 신사옥 안내! 이사완료~

 

안녕하세요, 아이씨뱅큐 입니다 :)

 

 

드디어 설레고도 고된 이사가 마무리 되었습니다.

금/토요일 ( 8월 28일과 29일 ) 정말 열심히 이사를 하였는데요...

특히나 힘들었던 부분은 재고들이었습니다 ^^;;

 

그래도 새로운 곳에서 일을 시작하니 한껏 산뜻하고 처음 일을 시작하는 느낌이 마구마구 들었습니다 :)

특히나 이번 아이씨뱅큐 신사옥은 탁 트인 멋진 풍경을 가지고 있습니다.

밖만 바라봐도 스트레스 해소가 될 것 같은 이 느낌!

 

 

먼저 주소먼저 확인해 주세요 :)

(이제 방문수령 고객 분들께서는 이쪽으로 가셔야겠죠?! )

 

 

 

 

A동은 스타벅스가 1층에 위치한 건물입니다 :)

고층용 엘리베이터를 이용해서 23층으로 가신 후 내리시면 바로 아이씨뱅큐가 보입니다 ~

(아직 현판을 달지 않은 관계로....................)  

 

 

 

 

 

유리문을 밀어서 들어오시면

 

 

바로 왼편에 리셉션!이 위치해 있습니다.

문의 후 방문 수령, 또는 담당자를 요청 해주세요 ~ :)

 

 

식물들도 데려오고~ 

 

 

 

 

무엇보다도 손꼽히는 것은 아이씨뱅큐 사옥의 경치! 입니다.

대한민국 3면이 바다로 둘러쌓여 있다면,

아이씨뱅큐는 멋진 전경이 3면으로 둘러쌓여 있습니다. 

 

 

 

 

 

 

이 곳은 대 회의실 입니다!

평소에는 사진과 같이 오픈된 공간으로 두고 조용한 회의 환경이 필요할 시에는

접혀있는 벽(?) 을 밀어 폐쇄된 공감으로 이용할 수 있습니다.

 

 

어때유? 멋있쮸?

 

 

또 하나의 자랑!

클라이밍 wall!!

저도 몇 번 해보았는데요.. ㅎㅎ

보기보다 힘이..ㅡㅡ;;;

한 번와서 해보고 가세요 :)

 

 

 

앞으로 방문 하시게 되면 멋진 전망, 놓치지 마세요!

더욱 노력하는 아이씨뱅큐가 되도록 하겠습니다!

감사합니다

신고

라즈베이파이로 텔레그램 봇 만들기[5] - 텔레그램 CLI(lua)와 sqlite3 연동

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

사용한 품목


1) 라즈베리파이B+ 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005607887&LType=R

 

들어가면서


 지난 포스팅까지는 간단한 텔레그램 CLI를 이용하여 간단한 봇을 만들어봤다. 이제는 텔레그램을 이용한 메모장을 만들어보려한다. 나처럼 여러 장소에 메모를 적어서 관리를 잘 못하는 사람에게 도움이 될 거라 생각한다. 그리고 텔레그램 CLI의 사진 보내기 기능을 함께 쓰면 짤방저장소로 사용할 수 있어서 재밌을 것 같다.

luarocks


 

  lua에서 사용하는 module들을 관리하기 위해서 사용하는 패키지가 luarocks다. 리눅스 환경에서 apt-get install과 같은 느낌을 받았다. 그러므로 쉽게 설치하기 위해 luaroacks를 설치하도록 하자. 공식 홈페이지는 아래와 같다.

https://luarocks.org

 아래와 같은 순서대로 luarocks를 설치하도록 하자. 복사 하기 쉽도록 아래와 같이 명령어를 놔뒀다.

1
2
3
4
5
wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz
tar zxpf luarocks-2.2.2.tar.gz
cd luarocks-2.2.2
./configure; sudo make bootstrap
sudo luarocks install luasocket
cs


아래 사진은 직접 위의 명령어를 입력하면서 나오는 결과를 함께 보여준다. 익숙하지 않는 환경을 설치하는 데 도움을 줄 수 있을 거라 믿는다.

 

 

그 다음에는 lua와 sqlite와 연동하는데 필요한 프로그램을 apt-get install로 하나, luarocks로 2개를 설치한다. 솔직히 이 중에서 어떤 것이 정말 필요한 것이고 쓸모 없는 것인지 판단이 안서지만, 모두 설치해서 환경설정에 관한 스트레스를 받지 않도록 하자.

1
2
3
apt-get install libsqlite3-dev
luarocks install luasql-sqlite3
luarocks  install lsqlite3 
cs

 

 

 

 

lsqlite3 사용, 그리고 기본적 문법


 관련 모듈을 설치했으면 이제 직접 lua와 sqlite3을 연동하도록 하자. 먼저 lua와 sqlite3를 연동하는 것을 성공하고 난 뒤에 텔레그램 CLI에 붙이도록 하자. 바로 소스에 넣으려고 했다가 문제가 발생할 수 있으니 하나하나 만들고 붙이는 방법을 택하여 알 수 없는 오류에 처하는 상황을 최대한 줄인다.

아래 코드와 같은 소스를 하나 만든다. 간단하게 설명하도록 하겠다.

sqlite3 = require("lsqlite3")

    • lsqlite3모듈을 불러와서 해당 인스턴스를 sqlite3에 저장한다.

local db = sqlite3.open('test3.db")

    • sqlite3는 test3.db라는 파일을 불러와서 연결 인스턴스를 db라는 변수에 저장한다.

db:exec[[

CREATE TABLE test(id, content);

INSERT INTO test VALUES (1, "Hello World');

INSERT INTO test VALUES (2, "Hello world');

]]

    • test3.db에 id,와 content 열을 만든다.


for row in db:nrows("SELECT * FROM test") do

    print(row.id, row.content)

end

    • [1, hello world], [2, hello world]를 출력한다.

db:close() 

      • 데이터베이스 연결을 끊는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sqlite3 = require("lsqlite3")
local db = sqlite3.open('test3.db')
 
db:exec[[
  CREATE TABLE test(id, content);
  INSERT INTO test VALUES (1'Hello World');
  INSERT INTO test VALUES (2'Hello World');
]]
 
for row in db:nrows("SELECT * FROM test"do
  print(row.id, row.content)
end
 
db:close()
cs

 

 위 코드를 만들고 lua 파일명.lua를 실행하면 아래와 같은 결과가 나온다. 이는 test3.db에 테이블을 만들고 데이터를 입력하고 출력하는 작업을 보여준다. 

 

 

 


마치면서


 이번 포스팅에서 텔레그램 CLI와 sqlite3을 연동하기 위한 방법을 봤다. 텔레그램 CLI는 lua로 이루어져 있으므로 lua와 sqlite3 연동하기 위해 모듈을 쉽게 설치하도록 도와주는 luarocks를 설치했다. 이를 이용하여 설치 완료했고 간단하게 lua와 sqlite3를 연동하는 코드를 봤다. 다음 포스팅에서는 본격적으로 텔레그램에서 메시지를 받아서 sqlite3에 데이터를 넣고(insert) 빼고(delete) 보여주는(select)하는 것에 대해 알아보도록 하겠다.

관련 상품


라즈베리파이2 보드: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005652343

라즈베리파이2 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005655515

손톱두이노: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005668577

라즈베리파이 전용 방열판 (소): 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002110427

 

 

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] MPD를 사용하여 곡 정보 CLCD에 표현하기

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로아이씨뱅큐의 지원을 받아 작성되었습니다]


[ 사용한 품목 ]

 

라즈베리파이 B+, 로터리 엔코더 


 

[ CONTENTS ]


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[ Hardware ]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

LCD ================ GPIO

VSS (pin 1) —————- GND

VDD (pin 2)—————- +5V (pin 2)

D7   (pin 14)—————— GPIO14 (pin 8) [previously GPIO18]

D6   (pin 13) —————— GPIO23 (pin 16)

D5    (pin 12)—————— GPIO24 (pin 18)

D4    (pin 11)—————— GPIO25 (pin 22)

E      (pin 6) ——————– GPIO08 (pin 24)

RS    (pin 4)—————— GPIO07 (pin 26)

RW    (pin 5)—————— GND


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[ Software ]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


1. GPIO설치
sudo dpkg -i python-rpi.gpio_0.5.11-1_armhf.deb

2. MPD설치
sudo apt-get install python-mpd

2.1 CharLCD.py

[참고]  Adafruit_CharLCD.py를 이용하여 만들었다. (라이브러리로 활용)

  sudo nano CharLCD.py
  아래내용 복사-붙여넣기
  Ctrl + X선택 후 y 선택 후 Enter


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/usr/bin/python
 
#
# based on code from lrvick and LiquidCrystal
#
 
from time import sleep
 
class CharLCD(object):
 
    # commands
    LCD_CLEARDISPLAY        = 0x01
    LCD_RETURNHOME          = 0x02
    LCD_ENTRYMODESET        = 0x04
    LCD_DISPLAYCONTROL      = 0x08
    LCD_CURSORSHIFT         = 0x10
    LCD_FUNCTIONSET         = 0x20
    LCD_SETCGRAMADDR        = 0x40
    LCD_SETDDRAMADDR        = 0x80
 
    # flags for display entry mode
    LCD_ENTRYRIGHT          = 0x00
    LCD_ENTRYLEFT           = 0x02
    LCD_ENTRYSHIFTINCREMENT = 0x01
    LCD_ENTRYSHIFTDECREMENT = 0x00
 
    # flags for display on/off control
    LCD_DISPLAYON           = 0x04
    LCD_DISPLAYOFF          = 0x00
    LCD_CURSORON            = 0x02
    LCD_CURSOROFF           = 0x00
    LCD_BLINKON             = 0x01
    LCD_BLINKOFF            = 0x00
 
    # flags for display/cursor shift
    LCD_DISPLAYMOVE         = 0x08
    LCD_CURSORMOVE          = 0x00
 
    # flags for display/cursor shift
    LCD_DISPLAYMOVE         = 0x08
    LCD_CURSORMOVE          = 0x00
    LCD_MOVERIGHT           = 0x04
    LCD_MOVELEFT            = 0x00
 
    # flags for function set
    LCD_8BITMODE            = 0x10
    LCD_4BITMODE            = 0x00
    LCD_2LINE               = 0x08
    LCD_1LINE               = 0x00
    LCD_5x10DOTS            = 0x04
    LCD_5x8DOTS             = 0x00
 
    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25242314], GPIO=None):
        # Emulate the old behavior of using RPi.GPIO if we haven't been given
        # an explicit GPIO interface to use
        if not GPIO:
            import RPi.GPIO as GPIO
            GPIO.setwarnings(False)
        self.GPIO = GPIO
        self.pin_rs = pin_rs
        self.pin_e = pin_e
        self.pins_db = pins_db
 
        self.GPIO.setmode(GPIO.BCM)
        self.GPIO.setup(self.pin_e, GPIO.OUT)
        self.GPIO.setup(self.pin_rs, GPIO.OUT)
 
        for pin in self.pins_db:
            self.GPIO.setup(pin, GPIO.OUT)
 
        self.write4bits(0x33)  # initialization
        self.write4bits(0x32)  # initialization
        self.write4bits(0x28)  # 2 line 5x7 matrix
        self.write4bits(0x0C)  # turn cursor off 0x0E to enable cursor
        self.write4bits(0x06)  # shift cursor right
 
        self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF
 
        self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS
        self.displayfunction |= self.LCD_2LINE
 
        # Initialize to default text direction (for romance languages)
        self.displaymode = self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT
        self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)  # set the entry mode
 
        self.clear()
 
    def begin(self, cols, lines):
        if (lines > 1):
            self.numlines = lines
            self.displayfunction |= self.LCD_2LINE
 
    def home(self):
        self.write4bits(self.LCD_RETURNHOME)  # set cursor position to zero
        self.delayMicroseconds(3000)  # this command takes a long time!
 
    def clear(self):
        self.write4bits(self.LCD_CLEARDISPLAY)  # command to clear display
        self.delayMicroseconds(3000)  # 3000 microsecond sleep, clearing the display takes a long time
 
    def setCursor(self, col, row):
        self.row_offsets = [0x000x400x140x54]
        if row > self.numlines:
            row = self.numlines - 1  # we count rows starting w/0
        self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))
 
    def noDisplay(self):
        """ Turn the display off (quickly) """
        self.displaycontrol &= ~self.LCD_DISPLAYON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def display(self):
        """ Turn the display on (quickly) """
        self.displaycontrol |= self.LCD_DISPLAYON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def noCursor(self):
        """ Turns the underline cursor off """
        self.displaycontrol &= ~self.LCD_CURSORON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def cursor(self):
        """ Turns the underline cursor on """
        self.displaycontrol |= self.LCD_CURSORON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def noBlink(self):
        """ Turn the blinking cursor off """
        self.displaycontrol &= ~self.LCD_BLINKON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def blink(self):
        """ Turn the blinking cursor on """
        self.displaycontrol |= self.LCD_BLINKON
        self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
    def DisplayLeft(self):
        """ These commands scroll the display without changing the RAM """
        self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)
 
    def scrollDisplayRight(self):
        """ These commands scroll the display without changing the RAM """
        self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT)
 
    def leftToRight(self):
        """ This is for text that flows Left to Right """
        self.displaymode |= self.LCD_ENTRYLEFT
        self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
    def rightToLeft(self):
        """ This is for text that flows Right to Left """
        self.displaymode &= ~self.LCD_ENTRYLEFT
        self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
    def autoscroll(self):
        """ This will 'right justify' text from the cursor """
        self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT
        self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
    def noAutoscroll(self):
        """ This will 'left justify' text from the cursor """
        self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT
        self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
    def write4bits(self, bits, char_mode=False):
        """ Send command to LCD """
        self.delayMicroseconds(1000)  # 1000 microsecond sleep
        bits = bin(bits)[2:].zfill(8)
        self.GPIO.output(self.pin_rs, char_mode)
        for pin in self.pins_db:
            self.GPIO.output(pin, False)
        for i in range(4):
            if bits[i] == "1":
                self.GPIO.output(self.pins_db[::-1][i], True)
        self.pulseEnable()
        for pin in self.pins_db:
            self.GPIO.output(pin, False)
        for i in range(48):
            if bits[i] == "1":
                self.GPIO.output(self.pins_db[::-1][i-4], True)
        self.pulseEnable()
 
    def delayMicroseconds(self, microseconds):
        seconds = microseconds / float(1000000)  # divide microseconds by 1 million for seconds
        sleep(seconds)
 
    def pulseEnable(self):
        self.GPIO.output(self.pin_e, False)
        self.delayMicroseconds(1)       # 1 microsecond pause - enable pulse must be > 450ns
        self.GPIO.output(self.pin_e, True)
        self.delayMicroseconds(1)       # 1 microsecond pause - enable pulse must be > 450ns
        self.GPIO.output(self.pin_e, False)
        self.delayMicroseconds(1)       # commands need > 37us to settle
 
    def message(self, text):
        """ Send string to LCD. Newline wraps to second line"""
        for char in text:
            if char == '\n':
                self.write4bits(0xC0)  # next line
            else:
                self.write4bits(ord(char), True)
 
 
if __name__ == '__main__':
    lcd = CharLCD()
    lcd.clear()
    lcd.message("  CLCD 16x2\n  Standard LCD")
 
cs




2.2 CLCD 출력 테스트 

아래 명령어를 입력

sudo python CharLCD.py
++++++++++++++++++   출력화면 ++++++++++++++++++++++++

    lcd.clear()
    lcd.message("  CLCD 16x2\n  Standard LCD")

+++++++++++++++++++++++++++++++++++++++++++++++++++

위헤 해당된 글이 CLCD에 출력이 되어야 한다.



2.3 곡정보 표시를 위한 clcd_test.py 만들기

  sudo nano clcd_test.py
  아래내용 복사-붙여넣기
  Ctrl + X선택 후 y 선택 후 Enter
  그리고 아래를 실행하여 확인
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
#!/usr/bin/python
 
from CharLCD import CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime
 
from mpd import MPDClient
client = MPDClient()               # create client object
client.timeout = 10                # network timeout in seconds (floats allowed), default: None
client.idletimeout = None          # timeout for fetching the result of the idle command is handled seperately, default:$
client.connect("localhost"6600)  # connect to localhost:6600
 
 
lcd = CharLCD()
 
 
lcd.begin(16,2)
 
 
while 1:
    
    title = client.currentsong()['title']
    last_status = client.status()['state']
    volume = client.status()['volume']
    id = client.currentsong()['id']
    currentsong = client.currentsong()['file']
    status = client.status()['state']
    
    lcd.clear()
    
    try:
        if status == "play":
            lcd.message( "[" + id + "] " + title + "\n" + "PLAY     VOL:" + volume)
            
        elif status == "pause":
            lcd.message( "[" + id + "] " + title + "\n" + "PAUSED   VOL:" + volume)
            
        else:
            lcd.message( "[" + id + "] " + title + "\n" + "STOPED   VOL:" + volume)
                
        last_status = client.status()['state']
            
    except:
        pass
        
        
    sleep(2)
 
cs


2.4 Music Player Daemon (MPD) 정보 스크립트 만들기 
mpd데몬이 설치가 되어있다면 다음 파일을 만들어 보자

  sudo nano mpd_info.py
  아래내용 복사-붙여넣기
  Ctrl + X선택 후 y 선택 후 Enter
  그리고 아래를 실행하여 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#!/usr/bin/env python 
from mpd import MPDClient
client = MPDClient()               # create client object
client.timeout = 10                # network timeout in seconds (floats allowed), default: None
client.idletimeout = None          # timeout for fetching the result of the idle command is handled seperately, default:$
client.connect("localhost"6600)  # connect to localhost:6600
currentsong = client.currentsong()
print ""
print 'CURRENT----------------------------------------------------------------'
if len(currentsong) > 0:
   for text in currentsong:
      print text + ": " + str(currentsong.get(text))
   current_id = int(currentsong.get("pos")) + 1
else:
   print "No current song (empty playlist)"
print ""
print 'STATUS-----------------------------------------------------------------'
status = client.status()
for text in status:
   print text + ": " + str(status.get(text))
print ""
print 'STATS------------------------------------------------------------------'
stats = client.stats()
for text in stats:
   print text + ": " + str(stats.get(text))
client.close()                     # send the close command
client.disconnect()                # disconnect from the server
 
cs

2.5 위의 파일 실행 및 확인

 아래 명령을 실행하면 화면에 다양한 정보를 볼 수 있다. 저 정보를 사용하여 위의 clcd_test.py를 꾸미면 된다.

sudo python mpd_info.py



3. 실행 및 확인 

sudo python clcd_test.py
위와 같이 실행하면 아래와 같이 곡아이디, 곡명, 플레이상태, 볼륨정보등을 확인할 수 있다. 



 

4. 동영상 확인


 
5. 관련상품

신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] Volumio 로터리엔코더( GPIO )를 이용하여 음량제어하기

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 


[ 사용한 품목 ]

 

라즈베리파이 B+, 로터리 엔코더 


 

[ CONTENTS ]

 

[참고]

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[ Hardware ]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::[ Software ]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


1. GPIO설치
sudo dpkg -i python-rpi.gpio_0.5.11-1_armhf.deb

2. Rotary Class
  아래의 2.1과 2.2모두 /home/volumio/에 위치한다.

2.1 rotary_class.py

[참고]  Bob Rathbone source: http://www.bobrathbone.com/raspberrypi_rotary.htm 

  sudo nano rotary_class.py
  아래내용 복사-붙여넣기
  Ctrl + X선택 후 y 선택 후 Enter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
#!/usr/bin/env python
#
# Raspberry Pi Rotary Encoder Class
# $Id: rotary_class.py,v 1.2 2014/01/31 13:34:48 bob Exp $
#
# Author : Bob Rathbone
#
# This class uses standard rotary encoder with push switch
#
 
import RPi.GPIO as GPIO
 
class RotaryEncoder:
 
    CLOCKWISE=1
    ANTICLOCKWISE=2
    BUTTONDOWN=3
    BUTTONUP=4
 
    rotary_a = 0
    rotary_b = 0
    rotary_c = 0
    last_state = 0
    direction = 0
 
    # Initialise rotary encoder object
    def __init__(self,pinA,pinB,button,callback):
        self.pinA = pinA
        self.pinB = pinB
        self.button = button
        self.callback = callback
 
        GPIO.setmode(GPIO.BCM)
        
        # The following lines enable the internal pull-up resistors
        # on version 2 (latest) boards
        GPIO.setwarnings(False)
        GPIO.setup(self.pinA, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        GPIO.setup(self.pinB, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        GPIO.setup(self.button, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 
        # For version 1 (old) boards comment out the above four lines
        # and un-comment the following 3 lines
        #GPIO.setup(self.pinA, GPIO.IN)
        #GPIO.setup(self.pinB, GPIO.IN)
        #GPIO.setup(self.button, GPIO.IN)
 
        # Add event detection to the GPIO inputs
        GPIO.add_event_detect(self.pinA, GPIO.FALLING, callback=self.switch_event)
        GPIO.add_event_detect(self.pinB, GPIO.FALLING, callback=self.switch_event)
        GPIO.add_event_detect(self.button, GPIO.BOTH, callback=self.button_event, bouncetime=200)
        return
 
    # Call back routine called by switch events
    def switch_event(self,switch):
        if GPIO.input(self.pinA):
            self.rotary_a = 1
        else:
            self.rotary_a = 0
 
        if GPIO.input(self.pinB):
            self.rotary_b = 1
        else:
            self.rotary_b = 0
 
        self.rotary_c = self.rotary_a ^ self.rotary_b
        new_state = self.rotary_a * 4 + self.rotary_b * 2 + self.rotary_c * 1
        delta = (new_state - self.last_state) % 4
        self.last_state = new_state
        event = 0
 
        if delta == 1:
            if self.direction == self.CLOCKWISE:
                # print "Clockwise"
                event = self.direction
            else:
                self.direction = self.CLOCKWISE
        elif delta == 3:
            if self.direction == self.ANTICLOCKWISE:
                # print "Anticlockwise"
                event = self.direction
            else:
                self.direction = self.ANTICLOCKWISE
        if event > 0:
            self.callback(event)
        return
 
 
    # Push button up event
    def button_event(self,button):
        if GPIO.input(button): 
            event = self.BUTTONUP 
        else:
            event = self.BUTTONDOWN 
        self.callback(event)
        return
 
    # Get a switch state
    def getSwitchState(self, switch):
        return  GPIO.input(switch)
 
# End of RotaryEncoder class
 
 
cs


2.2 VolumioKnob.py 

  sudo nano VolumioKnob.py
  아래내용 복사-붙여넣기
  Ctrl + X선택 후 y 선택 후 Enter
  그리고 아래를 실행하여 확인
  sudo python /home/volumio/VolumioKnob.py 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python
#
# Raspberry Pi Rotary Test Encoder Class
#
# Author : Bob Rathbone
#
# This class uses a standard rotary encoder with push switch
#
import subprocess
import sys
import time
from rotary_class import RotaryEncoder
 
# Define GPIO inputs (BCM)
PIN_A = 23              # Pin 16
PIN_B = 24             # Pin 18
BUTTON = 25     # Pin 22
 
# This is the event callback routine to handle events
def switch_event(event):
        if event == RotaryEncoder.CLOCKWISE:
              subprocess.call(['mpc''volume''+2' ])
              time.sleep(.2)
        elif event == RotaryEncoder.ANTICLOCKWISE:
              subprocess.call(['mpc''volume''-2' ])
              time.sleep(.2)
        elif event == RotaryEncoder.BUTTONDOWN:
              subprocess.call(['mpc''toggle' ])
        #elif event == RotaryEncoder.BUTTONUP:
              #print "Button up"
        return
 
# Define the switch
rswitch = RotaryEncoder(PIN_A,PIN_B,BUTTON,switch_event)
 
while True:
        time.sleep(0.5)
 
cs


3. 자동스크립트 작성

sudo nano /etc/rc.local

exit 0: 위에 아래 내용 삽입

sudo python /home/volumio/VolumioKnob.py &



3. 성공 & 재실행

sudo reboot


4. 동영상 확인





 

 

5. 관련상품

 
신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] 라즈베이파이로 텔레그램 봇 만들기[1] - 기본 설정

[아이씨뱅큐 ICbanQ 파워블로거 2기] 라즈베이파이로 텔레그램 봇 만들기[1] - 기본 설정
 
 
 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

사용한 품목


 1) 라즈베리파이B+ 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005607887&LType=R

 

 

 

 들어가면서


 개인서버를 운영하고 싶다는 생각은 예전부터 계속해왔었지만, 서버를 운영하려고 현재 사용하고 있는 노트북에 서버를 올리면 느려질 것 같은 두려움이 있었다. 그렇다고 새롭게 서버를 위한 컴퓨터를 사는 것과 호스팅 업체의 서비스를 이용하는 것은 경제적인 어려움이 있었다그냥 안하겠다는 거 아닌가?!). 그리고 시스템 공부를 위해 리눅스 워게임 환경을 개인적으로 구축해서 외부 어디서든 접근하게 하고 싶었는데 가상머신에서 올린 상태에서 외부에서 접근하는 설정이 꽤 귀찮았다. 

 또, 망한 기운이 스물스물 풍기는 내 블로그에 활력을 넣고자 포스팅을 해야 한다는 생각도 계속 가지고 있었다. 하지만 위 개인서버의 구축에 대한 변명과 비슷하게 이미 답(포스팅하기 귀찮다?)은 내놓고 합리화만 하고 있었다.

 위의 두가지 복합적인 이유를 가지고 있으면서 고민만 하던 와중에 icbanq의 파워블로거 2기에 지원했는데, 당첨이 되었다. 아!! 드디어 개인서버를 가질 수도 있고, 지원을 받으면서 어쩔 수 없이 블로그에 글을 쓰게 되는 계기가 될 수 있을 거라 생각했다. 

 

 그래서 이 개인서버를 가지고 어떤 것을 하면서 포스팅을 할까 생각했다.

1) 퍼징 디비 서버 구축(물론 아직 퍼징을 제대로 시작한 것은 아니지만 ㅎㅎ)

2) 웹 서버를 구축하여 뭔가 재미난 일?!

 

 처음에는 그냥 퍼징 정보를 받는 서버를 구축하려고 했었는데, 불현듯 머리에 재미난 것이 떠올랐다. 나는 메모가 중요하다고 생각하는 사람중에 한 사람으로 생각날 때 마다 메모를 하는 습관을 길러야 겠다는 생각만(??!!) 했었다. 곰곰히 생각해보니 습관을 만들지 못한 이유는 여러번의 시도가 있었지만 정리가 되지 않아서였다. 어떤 날은 손으로 직접 메모를 하고, 어떤 날은 구글 드라이브에 메모하고, 어떤 날은 아이폰 메모장에 메모를 했다. 그러다보니 내가 저번에 메모했던 것을 어디에 저장했는 지 기억이 나지 않았고, 모두 다 찾아보기엔 내 귀찮음이 너무 컸다. 그래서 생각했다. 아 그냥 웹서버를 만들어 거기에 메모를 하면 되겠구나!. 하지만 편리하지 않으면 안될텐데? 라는 생각에 아 카카오톡 봇을 이용하면 되겠구나 라는 생각을 했다.

 하지만...역시 쉽지 않았다. 학부시절 카카오톡 봇에 관심이 많았는데 플러스친구는 인정해도 봇은 카카오측에서 인정하지 않고 있었지만, 혹시나 하는 맘에 봤지만 역시 ..ㅎㅎ


 역시 쉽게 되지 않긔...아.. 난 아마 안될거야..

 하지만 나에게 한줄기 희망이 떠올랐으니.. 그것은 텔레그램이었다. 그래. 텔레그램 봇을 만들면 뭔가 더 안전할 거 같으니 텔레그램 봇을 만들어보도록 하자. 이미 기존의 사람들이 만들어 둔 이야기들도 있으니 난 이것을 라즈베리파이 B+에 올리기만 하면 되...아 되겠지? ㅎ

 그러기 위해서는 먼저 라즈베리파이에 서버를 구축해야 한다. 기존의 봇프로그램들처럼 명령을 통해 어디서든지 메신저로 내가 원할 때마다 데이터(나의 경우에는 메모)를 저장하고 그 목록을 보여주는 기능이 필요하기 때문이다. 

 그러기에 앞서 나는 서버를 구축해 본 경험은 있지만 라즈베리파이 이용에는 초.보.자.이므로 내가 텔레그램 봇을 만들기 위해 했던 것들을 하나하나 포스팅할 계획이다. 그래서 이번 포스팅은 '라즈베리파이 B+에 라즈비안을 설치하고 네트워크 연결하기'다. 이 포스팅의 제목을 적는 데 엄청난 서론이 있었던 것에 양해를 구하며 본격적인 포스팅을 시작하도록 하겠다.


 라즈비안 설치하기



 먼저 라즈베리파이에 대한 설명은 아래 URL을 참조하도록 하다.

(엔하위키 미러는 언제나 재밌다)

https://mirror.enha.kr/wiki/라즈베리%20파이

 

 먼저 라즈베리파이에 대한 설명은 아래 URL을 참조하도록 하다.

(엔하위키 미러는 언제나 재밌다)

 

 이를 위해 먼저 라즈베리파이에서 하드디스크 역할을 하는 SD카드에 라즈비안 이미지를 써야 한다. 그러면 라즈베리파이가 SD카드에서 라즈비안 이미지를 읽어와 부팅한다. 이미지는 아래 라즈베리파이 공식 사이트에서 받을 수 있다.

https://www.raspberrypi.org/downloads/


라즈비안 이미지를 다운받자

 

 위에서 받은 라즈비안 이미지를 SD카드에 쓰기전에 구성을 살펴보도록 하자. 라즈베리파이는 micro SD카드를 저장장치로 이용하기 때문에 데스크탑에 인식시키기 위해서 adapter가 필요하다. 아래 그림은 micro SD카드와 micro SD Adaptor의 크기를 비교한 그림으로 그 밑은 adaptor에 삽입하는 그림이다.


microSD Adaptor와 mircro SD카드 크기 비교

microSD Adaptor에 mircro SD카드 삽입

 

 SD카드를 삽입한 adaptor에 아래 그림와 같은 데스크탑의 SD카드 인식단자에 넣도록 하자. 

 

SD카드 인식단자(접사(?)하여 다소 부담스럽다)


 이제 데스크탑에 sd카드 인식시키는 것을 완료했으므로, 이 sd카드에 라즈비안을 저장하기 위해  'Win32 Disk Imager' 라는 프로그램이 필요하다. 방금 포스팅을 하다가 생각이 난 것인데, 영어와 한글을 같이 쓰면 줄간격이 내가 설정한 것과 달리 좁게 설정된다. 각설하고 이제 이 프로그램으로 방금 다운로드 받은 라즈비안 이미지를 SD카드에 덮어쓰도록 하자. 라즈베안 이미지를 위치를 지정하기 위해 오른쪽 폴더아이콘을 클릭하자. 그리고 SD카드가 인식된 것을 DEVICE에 [F:\]라는 표시에 나타는 것으로 확인 할 수 있다.

Win32 Disk Image로 라즈비안을 SD카드에 쓰기

 

 

 라즈비안 기본설정


 이제 sd카드를 라즈베리파이에 넣고 부팅하도록 하자. 부팅하면서 config를 변경해야 하는데 이 내용은 아래 URL에서 참조하면 되겠다. 

http://echo.tistory.com/34

 

 필요한 것만 정리하자면 아래와 같다. 1번째는 당연히 SD카드의 용량을 더 크게 사용하기 위해서 설정해줘야 한다. 단순히 enter한번으로 가능하다. 그리고 2번의 user password도 보안을 위해 변경해주도록 하자. 3번은 명령창[일반적인 cmd]으로 부팅할 것인지 GUI[그래픽 모드-ex)윈도우]로 부팅할 것인지 정하는 것이므로 GUI를 선택한다. 4번은 언어와 지역 시간,키보드를 설정하는 것이 있는데 이는 밑에 다시 할 것이니 패스하도록 한다. 마지막으로 8번은 외부에서 ssh로 접근하기 위해 ssh server를 enable 하도록 한다.

 

1. Expand Filesystem - SD카드 용량 확장
2 Change User Password - 사용자 패스워드 변경( 기본 id:raspberry/ pw:pi)
3. Enable Boot to Desktop/Scratch - CUI, GUI, Scratch로 부팅 설정
4. internaltionalisation Option - 언어, 지역 시간 변경을 위한 것 - 패스
8. Adavanced Option - ssh 옵션만 enable

부팅 시 초기설정 요약

 

 네트워크를 설정하기 위해 vi로 들어가서 #을 누르려고 하는데 안된다. 이는 라즈베리파이가 영국에서 만들어져 기본 셋팅이 GB(Great Britain?)으로 되어 있다. 그러므로 키보드 셋팅과 언어셋팅을 바꿔주도록 하자. 아래 블로그에 잘 나와있다. dpkg-reconfigure는 꽤 천천히 나타나므로 나처럼 성격이 급해서 몇번을 껐다가 다시 키는 불상사는 없었으면 한다. 또 dpkg에서 스크롤이나 방향키를 눌러서 이동하는 것보다 바로 ko_KR.UTF-8로 가기 위해 k를 누르고 Asia로 가기 위해 A, Seoul로 가기 위해 S를 눌러 바로 커서를 이동시키자!

http://ckbcorp.tistory.com/709

 

1. 키보드
sudo nano /etc/default/keyboard
GB를 ->ko로 바꿔줌
2. 언어
sudo dpkg-reconfigure locale
ko_KR.UTF-8로 설정
3. 지역시간(timezone)
sudo dpkg-reconfigure tzdata
Asia>Seoul

키보드, 언어, 시간 설정 요약

 

 이제 막바지에 접어 들었다. 라즈비안을 설치하고 기본설정을 했다. 이제 네트워크 연결을 해보도록 하자. 아래 블로그에 잘 나와있다.

 

http://www.rasplay.org/?p=1516

 

 요약하자면 크게 2가지로 나뉘는데 network설정과 dns설정이다. network설정은 /etc/network/interfaces 에서 하고 dns설정은 /etc/resolv.conf에서 하도록 하자. 위 블로그에 워낙 잘 나와있으므로 직접 들어가 그림을 보면서 금방 이해하도록 하자. 

 

 이렇게 모든 셋팅이 끝나면 ssh로 접속가능하고 아래와 같은 화면이 나온다. 아래 화면은 내 노트북에서 ssh로 접속한 화면이다. 이상으로 본 포스팅을 마치도록 하겠다.

 

▲노트북에서 ssh로 접속 

마치면서


 지금까지 라즈베리파이에 텔레그램 봇을 만들기 위해서 라즈비안을 SD카드에 쓰고 네트워크가 되도록 기본설정하는 것들을 봤다. 부팅 기본설정과 키보드/언어/지역시간 설정, 네트워크 설정을 했었다. 나 또한 초.보.자.이므로 라즈비안을 셋팅하면서 알아가면서 소소한 재미를 느꼈고, 차근차근 하나하나 알아가는 재미를 느끼길 기대한다. 

 

 

관련 상품


라즈베리파이2 보드: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005652343

라즈베리파이2 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005655515

손톱두이노: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005668577

라즈베리파이 전용 방열판 (소): 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002110427

 

 

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

신고

무상체험단 27기 모집 : 바나나프로

안녕하세요, 아이씨뱅큐 icbanq 입니다!

 

저희가 여지껏 많은 제품들로 체험단을 진행하였었는데요..

많은 분들께서 관심 가져주셔서 꾸준히 이어지고 있습니다!

 

그래서 이번에는 꾸준히 인기를 얻고있는!! 보드의 체험단을 준비하였습니다~

 

기본적으로 라즈베리파이 호환이 가능한데, 듀얼코어에 SATA포트 지원,

내장된 와이파이까지 그 기능이 정말 다양합니다!

다른 보드들과 비교하기 딱이지 않나요?

 

 

 

 

Banana pro Spec

 

 

 

 

27기 아이씨뱅큐 ICbanQ 무상체험단 모집,

아래 이미지를 클릭하시면 좀 더 자세한 정보 확인이 가능하며 신청도 할 수 있습니다.

기타 문의사항은 담당자를 확인해 주세요!

 

김 효민 담당자

070 7019 3930

alicia@icbanq.com

 

 

 

 

신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] 아두이노윤으로 페북에 온도 메세지 올리기

아두이노 윤으로 페이스북에 집안의 온도를 상태 메세지로 올리기

집안의 온도를 상태 메세지로 페이스북에 올리는것을 좋아할지는 모르겠습니다.

하지만, 우리는 아두이노 윤을 갖고 있고 할 수 있으니 한번 해보는거에요. 재미있지 않을까요? ㅋㅋ

일단

아두이노 윤의 설정을 했고 준비가 되었다면 이제 Temboo와 인사를 나눌 시간입니다. 우리가 사용할 라이브러리를 제공해주는 개쿨~~한 ioT, Wearable 프레임워크입니다. 아두이노 윤을 정말 즐겁게 사용할 수 있도록 시간과 노력을 많이 줄여주는 멋진 친구들입니다.

https://www.temboo.com/

스크린샷 2015-05-31 오후 3.29.37

  

가입이 되어 있지 않다면 가입을 합니다.

가입을 하고 로그인을 하면 무료로 한달에 250번 콜을 할 수 있습니다.

스크린샷 2015-05-31 오후 3.31.44

  

저의 경우는 이런 저런 테스트도 하고 해서 벌써(?) 72개의 콜을 사용했습니다.

물론 유료로 업그레이드하면 많은 커넥션을 사용할 수 있습니다.

Learn 이라는 제목의 그램들 중에서

중간에 있는  Arduino Yun 링크가 있습니다. 클릭하여 들어갑니다.

  

스크린샷 2015-05-31 오후 3.35.05

화면을 조금 아래로 스크롤하면 Update your Facebook status 라는 메뉴가 보입니다.

클릭하여 들어갑니다.

  

스크린샷 2015-05-31 오후 3.36.37

설정하는 방법을 설명합니다.

일단 1번의 Temboo 계정 설정은 이미 했습니다.

2번은 Facebook 개발자 콘솔로 이동해야 합니다.

  

https://developers.facebook.com/apps

사이트로 이동하여 새로운 페이스북앱을 등록합니다.

스크린샷 2015-05-31 오후 3.39.26

마지막에 있는 Website 를 선택하고 앱을 새로 만들어 등록합니다.

스크린샷 2015-05-31 오후 3.43.15

그리고 왼쪽 메뉴의 Setting 에 들어가서 Add Platform을 클릭하고 새로운  Website로 등록합니다.

Site URL 과 Mobile Site URL은 https://{여러분의 Temboo계정}.temboolive.com/callback/ 으로 등록합니다.

저의 경우는 계정 아이디가 dimplejuno 입니다. 여러분의 자신의 계정으로 등록해 주시면 됩니다.

  

Facebook OAuth 설정 

이제 새로만든 앱을 사용할 수 있도록 페이스북에 설정작업을 합니다.

아래 링크로 이동합니다.

https://www.temboo.com/library/Library/Facebook/OAuth/

  

스크린샷 2015-05-31 오후 3.46.56

설명에서 처럼 페이스북 개발자 콘솔에서 작업을 했고 이제

https://www.temboo.com/library/Library/Facebook/OAuth/InitializeOAuth/

로 이동하여 초기화 작업을 진행합니다.

스크린샷 2015-05-31 오후 3.49.02

Inpu 에 AppID를 입력하고 Scope를 입력해줍니다.

AppID는 여러분이 페이스북에 새로 만든 앱의 ID이고 Scope는 앱이 페이스북에서 작동할 때 설정할 권한 개념입니다. publish_actions 으로 Scope는 설정하고 ID만 페이스북 콘솔에서 다시 확인하고 입력해줍니다. 그리고 Run을 클릭하여 실행합니다.

  

스크린샷 2015-05-31 오후 3.51.37

이제 AuthorizationURL 과 CallbackID 를 얻었습니다. 둘 다 잘 저장해 놓습니다.

그리고 FinalizeOAuth 버튼을 눌러 이동합니다.

  

스크린샷 2015-05-31 오후 3.55.03

이제 등록의 마지막 단계입니다. 초기화에서 얻은 CallbackID와 페이스북에서 만든 AppID, AppSecret을 입력하고 Run을 실행합니다.

  

스크린샷 2015-05-31 오후 3.56.30

이제 중요한 AccessToken을 얻었습니다. 잘 메모해 둡니다.

  

페이스북에 온도 메세지 보내기

이제 우리가 목표로 했던 페이스북에 온도 메세지 보내기를 위한 모든 준비가 되어 갑니다.

우선 페이스북에 메세지를 올리기 위한 기능을 제공하는 Temboo의 페이스북 메뉴로 이동합니다.

https://www.temboo.com/library/Library/Facebook/Publishing/SetStatus/

  

사이트로 이동하면 다음과 같은 화면이 나타납니다.

스크린샷 2015-05-31 오후 3.59.10

이 화면에서 중요한것은 윗쪽에 있는 보드 설정입니다.

화면에서 처럼 Arduino Yun이 설정되어 있는지 확인합니다.

그리고 이전 작업에서 얻은 AccessToken을 입력해줍니다.

마지막으로 페이스북에 올릴 메세지를 입력해 줍니다.

우선 메세지는 아무 메세지나 설정해줍니다.

기본 코드가 만들어지면 약간 수정할 예정입니다.

Run버튼을 눌러 기본 코드를 얻습니다.

  

스크린샷 2015-05-31 오후 4.02.04

코드가 생성되고 Download 할 수 있습니다.

코드를 다운로드합니다.

 

 


스크린샷 2015-05-31 오후 4.03.43

압축을 풀고 폴더를 사용하고 있는 아두이노 스케치 폴더에 복사해줍니다.

그리고 아두이노로 불러옵니다.

 

 

소스는 깃허브에 있습니다.

소스 : https://github.com/dimplejuno/Temboo/tree/master/setstatus_sketch

  

소스중에서 setup() 에서 다음을 찾아서 리마크해줍니다.

시리얼 연결을 기다리는 코드인데 생략합니다.

딜레이를 5초를 주고 접속하는걸 기다려줍니다.

  

// For debugging, wait until the serial console is connected
delay(5000);

//while(!Serial);

  

그리고

마지막 소스도 1시간으로 수정해서 페이스북 메세지를 한시간 단위로 올리도록 수정합니다.

delay(60000*60); // wait 1 hour between SetStatus calls

  

  

FullSizeRender

  

아두이노 윤에 연결은 간단합니다. 5V 파워 소스를 USB 에 연결한 후 온도센서

TMP36 을 사용했고 5V와 Gnd 를 연겨하고 신호선은 A0(아날로그 0번)에 연결해줍니다.

  

이제 모든 준비는 끝났습니다.

스케치를 무선으로 아두이노 윤에 업로드합니다.

  

페이스북 메세지 확인

스크린샷 2015-05-31 오후 4.38.21

잘 동작합니다. 페이스북 타임라인에 집안 온도를 측정하여 상태 메세지로 올렸습니다.

글을 쓰는 동안 2도 기온이 상승했습니다. ㅋㅋ

즐거운 ioT, Wearable , 사물인터넷, 웨어러블 생활되세요.

감사합니다.

관련상품 소개

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005670094&catg_code=&LType=S

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다] 

신고

[아이씨뱅큐 ICbanQ 파워블로거 2기] 아두이노윤으로 무선 스케치 업로드 및 활용

아두이노로 즐기는 무선의 편리함

아두이노 윤의 기능중에 스케치를 무선으로 업로드 하는 기능은 그 어느것보다 편리하고 파워풀합니다.

아두이노 윤의 와이파이 설정이 끝나면 윤은 다른 장치들과 같은 와이파이에 연결되고 서로 무선으로 연결됩니다. 따라서, 컴퓨터에서 스케치를 와이파이를 통하여 별다른 조작없이 무선으로 직접 업로드할 수 있습니다.

FullSizeRender

  

위에 사진은 윤을 보조배터리에 연결하고 13번핀에 LED를 연결한 사진입니다.

이렇게 전원만 공급해주면 윤은 대기상태로 기다립니다.

  

스크린샷 2015-05-31 오후 12.37.33

아두이노 IDE에서 포트를 찾아보면 위에 그림처럼 네트워크에 연결된 윤이 나타납니다.

로컬 네트워크에 연결되어 같은 아이피 영역내에서 할당받습니다.

저의 경우는 34번을 할당받아서 연결되어 있는것을 볼 수 있습니다.

  

  

Bridge 라이브러리 이해

이제 윤은 네트워크에 연결되어 있고 스케치를 업로드 할 수 있습니다.

이러한것들이 가능하게 해주는 라이브러리가 Bridge 라이브러리 입니다.

 아두이노 윤의 구성도

  

위에 구성도에서 알 수 있듯이 윤에있는 리눅스 환경이 와이파이와 이더넷, SD카드,USB 등의 하드웨어에 대한 제어를 담당하고 있으며 그러한 장치의 연결과 제어에 대한 기능을 Bridge 라이브러리를 통해서 처리하는것을 알 수있습니다.

따라서 Bridge 라이브러릴 통하면 많은것들을 처리할 수 있으며 리눅스의 기능을 또한 사용할 수 있고 서로 통신하면서 다양한 프로토타입을 개발 할 수 있습니다.

  

Bridge 라이브러리의 샘플 Bridge 업로드 및 실행

이제 모든것이 준비가 되었습니다.

파일/예제/Bridge/Bridge 소스를 IDE로 읽어옵니다.

스크린샷 2015-05-31 오후 12.47.45

이제 무선을 통하여 스케치를 업로드 합니다.

스크린샷 2015-05-31 오후 12.49.10

보드는 Yun 을 선택하고 포트는 Network ports 중에서 ArduinoYun(이름은 설정할 때 설정해준 이름)으로 선택합니다.

그리고 일반적인 스케치 업로드처럼 업로드 버튼을 눌러 스케치를 업로드합니다.

잠시 후 스케치가 업로드 됩니다.

  

브라우져로 접속하여 실행하기

이제 윤은 웹서버가 되고 REST형식의  여러분의 접속을 기다립니다.

브라우져를 열고 주소창에 아래와 같은 형식으로 입력해줍니다.

http://arduinoyun.local/arduino/digital/13/1

저의 경우 주소창에 입력된 내용입니다.

즉, arduinoyun.local 는 설정할 때 지어준 윤의 이름입니다. 직접 아이피를 입력해도 됩니다.

그리고 arduino/digital 은 digitalWrite를 의미하고 13은 핀번호 1은 TRUE 값을 의미합니다.  즉 위와 같은 형식으로 접속하면 13 핀의   LED가 켜지게됩니다.

0, FALSE 를 입력하면 당근 꺼지게 됩니다.

  

이제 우리는 윤을 활용하여 REST 형식의 시스템을 구성할 수 있습니다. 디지털은 물론 아날로그 입출력과 핀모드 설정이 모두 가능합니다.

이제 브라우져를 사용할 수 있는 모든 장치들에서 연결이 가능합니다.

FullSizeRender 2

위에 사진은 아이패드에서 연결하여 LED를 켠 그림입니다.

윤은 웹서버역활을 하기 때문에 이론적으로 어떤 단말의 어떤 브라우져에서도 접속이 가능하고 제어가 가능합니다.

즐거운 ioT, Wearable 메이커 생활되세요.

감사합니다.

https://youtu.be/DbQtK_K9qmQ

 https://youtu.be/DbQtK_K9qmQ
 
관련상품 소개
http://www.icbanq.com/shop/product_detail.asp?prod_code=P005670094&catg_code=<ype=S

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

신고


티스토리 툴바