Thing+와 함께하는 "나만의 IoT 서비스 만들기"

 

 

IoT, 말로만 하지 말고 직접 만들어 보는 건 어떠세요?

 

 

 

오픈하드웨어를 이용하여 쉽고 빠르게 IoT를 시작할 수 있도록 도와드립니다!

 

초보자도 쉽게 시작할 수 있는 Thing+ 와 함께 나만의 IoT 서비스를 만들어보세요 :)

시중에서 판매하고 있는 키트와 함께 무료강의도 GET!

 

자세한 사항은 아래 이미지 클릭 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓  

http://www.icbanq.com/P005756201

 

 

 

 

신고

블랙이랑 한 번 붙어볼텨? 비글본그린이 나타났다! (BeagleBone Green)

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

 

뭔가 많은 메이커 분들의 이목을 집중시킬 만한 포스팅 재료가 없을까 곰곰이 생각하다가 신제품 출시 때에도 쓰지 못했던 비글본 그린 (Beaglebone Grea) 에 대해 몇 자 적어볼까 하여 컴퓨터 앞에 앉았습니다 (은유적인 표현입니다. 저는 오늘 하루 종일 컴퓨터 앞에 앉아 있었습니다!!).

비글본 그린은 한때 제 2의 라즈베리파이로 불려졌던 비글본 블랙의 설계를 본뜬 기판으로 최초는 아니지만 그 구조가 크게 바뀐 파생 기판이라 볼 수 있습니다. 중국 오픈소스 하드웨어 필드에서 유명한 Seeedstudio 에서 개발한 상품으로 두 개의 그로브 시스템 (Grove System) 커넥터, 마이크로 USB 를 장착하였으며 배터리 기반의 실시간 시계 (RTC)도 추가된 제품이라고 합니다. (그에 반해 사용량이 적은 HDML 커넥터는 제거!)

그로브 시스템 커넥터가 장착 됨으로써 기타 케이프 없이도 Seeedstudio에서 생산/판매 중인 다양한 종류의 센서기판과 바로 연결이 가능하게 되었습니다. 새로운 센서기판들과의 연결뿐만 아니라 기존의 비글본 블랙 (Beaglebone Black)과도 100% 호환된다고 하니 가히 BBB의 제대로 된 업그레이드 버전이라 칭할 만 하지 않나요?

 

 

 

<비글본 블랙과 비글본 그린 SPEC 비교>

 

 

 

 

그렇다면

 

비글본 그린이 출시되었던 6월에도 쓰지 않았던 포스팅을 제가 쓰는 이유는 무엇일까요아 아이씨뱅큐에서 또 뭔가를 하나보다라고 생각하시면 될 것 같습니다 ㅎㅎㅎㅎ

 

바로 Thing+와 비글본 그린의 만남! 이라고나 할까요…………. (너무 억지스럽다면 ()지성…)

Thing+ (한글로 씽플러스라고 네이버에 등록되어 있던데 이게 더 억지스러운거 아닌가…………)는 사물인터넷 (IoT) 응용서비스를 위한 서비스형 소프트웨어 (SaaS) 입니다. 사용자에게 IoT 경험을 제공하려는 서비스 파트너에게 클라우드 인프라에서 수행되는 애플리케이션뿐 아니라 임베디드 미들웨어와 클라이언트 애플리케이션까지 모두 제공해 쉽고 빠르게 서비스를 시작할 수 있도록 도와줍니다. 쉬운 말로누구나 쉽게 IoT 플랫폼을 개발/이용/관리 할 수 있단 말입니다. 기술적인 내용은 저도 잘 모르니 아래 참조…………….. ^^

https://www.imaso.co.kr/news/article_view.php?article_idx=20150520201143

 

하지만 아무리 쉽다고 해도 쉬운 것이 아니라는 거! 아이씨뱅큐도, Thing+를 운용하는 달릭웍스도 잘 알기에 준비한 나만의 IoT 서비스 만들기워크샵! 오호.. 기대되쥬? (참석하시면 저도 만날 수 있습니다. 피하지 말아주세요). 라즈베리파이2 또는 비글본 그린을 이용하여 IoT 서비스를 구축하는 방법을 달릭웍스 담당자로부터 직접 들을 수 있는 기회!

 

 

강의까지 들을 수 있지만 무엇보다도 시중에 판매하고 있는 키트들을 저렴하게 득!할 수 있는 기회라는 거………… WOW. 자세한 워크샵 내용은 http://www.icbanq.com/P005756201/ 에서 확인하시기 바랍니다. 문의는 shop@icbanq.com 으로 GOGO J

 

 

 

 

신고

[아이씨뱅큐 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. 관련상품

 
신고

아이씨뱅큐 체험단 25기 모집)) Bluetooth 4.1 BLE 모듈 테스트 키트

icbanq 에서 25기 무상 체험단을 모집하고자 합니다.

아두이노 (Arduino)와 라즈베리파이(Raspberry Pi)로 이제 뭘 해야 할지 고민이신 분들!

이제 블루투스 4.1 모듈 테스트 키트 체험단에 당장 신청! GOGO

 

더 자세한 내용은 아래 이미지 CLICK CLICK

 

*라즈베리파이2는 현재 소스를 제공하지 않습니다. 추후 공개될 예정이나 현재는 B+ 모델만 테스트 가능합니다*

 http://www.icbanq.com/shop/event_list.asp?number=294&paging=1&b_type=EVENT#eventTop

 

 

 

신고

블루투스 4.1 (BLE) 모듈 테스트 키트 (BoT-CLE 110 Test Kit)

블루투스 v4.1 Low Energy BoT-CLE110용 테스트 키트가 칩센에서 출시되었습니다!

아이씨 뱅큐에서 현재 구매 가능하며  아두이노 (Arduino)도 연동가능!

요즘 핫한 비콘 (Beacon)  사용가능!

진동모터 LED 외 모듈 테스트 환경 완벽지원!

 

BoT-CLE110 테스트 키트로 BoT-CLE110의 비콘, PWM, UART, I/O 기능을 SMT 작업 없이 손쉽게 테스트 가능할 수 있습니다.

자세한 사항 및 구매는 아이씨뱅큐 ICbanQ 에서! 

 

 

 

신고