Raspberry Pi 3에 연결된 NFC 리더의 데이터를 Python에서 읽기 OSC로 openFrameworks로 전송
11996 단어 Raspberrypi3파이썬NFCopenFrameworks
1. 개요
이전 기사( Raspberry Pi 3에서 openFrameworks 샘플 프로그램 실행 - Qiita )에 쓴 계속이지만 전시용 Mac을 Raspberry Pi로 바꾸려는 시도입니다.
전회는 Raspberry Pi에 oF를 인스톨 해 샘플 프로그램 움직인 곳까지였으므로, 이번은 Raspbery Pi에 NFC 리더를 접속해 python의 프로그램으로부터 읽은 NFC의 데이터를 OSC로 openFrameworks에 보냅니다.
2. 작업 환경
3. 참고 사이트
4. Raspberry Pi 3에서 NFC 리더 사용
참고 사이트 1.을 의지해 NFC 리더를 사용할 수 있도록 했습니다.
움직인 프로그램은 참고 사이트 2.의 Read.py입니다.
참고 사이트대로 이었으므로 생략하고 있습니다.
처음 시도했을 때 프로그램을 실행해도 NFC 태그에 반응하지 않았습니다. 사이트에는 Device Tree를 무효로 하지 않으면 안 된다고 쓰고 있었습니다만, sudo raspi-config
하지만 Advanced Option 안에 Device Tree가 보이지 않았습니다.
잘 모르겠지만 Raspbian을 다시 설치하면 치료했습니다. Raspbian 2016-02-26이 사전 설치된 micro SD 카드를 구입했지만 사전 설치된 것이 좋지 않았을 수 있습니다.
5. pyOSC 도입
4.에서 움직인 파이썬 샘플 프로그램을 openFrameworks에 가져 가기 위해 osc를 사용했습니다.
oF에서 직접 NFC 리더를 읽으면 좋겠다고 생각했습니다만, 어떻게 하면 좋은지 모르기 때문에 이 방법을 채택하고 있습니다.
참고 사이트 3. ( Python OSC (pyOSC) | 안드로이드 날 )를 보면서 pyOSC를 시험해 보았습니다.
pyOSC 설치
git clone https://gitorious.org/pyosc/devel.git
cd devel
sudo python setup.py install
실패
참고 사이트 3. 에 쓰여진 샘플 프로그램을 사용해 보려고했지만 잘 가지 못했습니다.
git clone https://github.com/conanxin/Arduino-Meets-Blender-OSC.git
터미널 2개를 시작하여 샘플 프로그램을 움직여 본다.
terminal1cd Arduino-Meets-Blender-OSC/pyOSC_examples
python basic_receive.py
terminal2cd Arduino-Meets-Blender-OSC/pyOSC_examples
python basic_send.py
send.py를 실행하면 다음과 같은 오류가 발생했습니다.
terminal2Traceback (most recent call last):
File "basic_send.py", line 28, in <module>
client.sendto(msg, ('127.0.0.1', 2014)) # note that the second arg is a tupple and not two arguments
File "/usr/local/lib/python2.7/dist-packages/OSC.py", line 1174, in sendto
ret = select.select([],[self._fd], [], timeout)
AttributeError: 'OSCClient' object has no attribute '_fd'
잠시 몰랐어요.
성공
주의를 풀고 다른 샘플을 사용해보십시오.
pyOSC를 다운로드한 devel 폴더에 있던 샘플을 실행합니다.
terminal1cd devel/examples
python knect-rcv.py
terminal2cd devel/examples
python knect-snd.py
knect-snd.py를 실행하면 knect-rcv.py의 화면에 다음과 같은 표시가 나왔습니다.
terminal1('Now do something with', 'user1', 3.0, 1.0, -1.0)
('Now do something with', 'user2', 4.0, 2.0, -2.0)
('Now do something with', 'user3', 3.0999999046325684, 2.0, -2.0)
('Now do something with', 'user4', 6.0, 3.200000047683716, -2.4000000953674316)
6. RFID 프로그램에 OSC 처리 추가
Dump.py에 knect-snd.py 프로그램을 끼워 넣었습니다.
Dump_osc.py#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
# OSC setting
from OSC import OSCClient, OSCMessage
client = OSCClient()
client.connect(("localhost", 7110))
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
# Scan for cards
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"
# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
# Print UID
print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
# Send OSC
client.send( OSCMessage("/user/1", [uid[0], uid[1], uid[2], uid[3]] ) )
# This is the default key for authentication
key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
# Select the scanned tag
MIFAREReader.MFRC522_SelectTag(uid)
7. openFrameworks에서 OSC를 수신하는 프로그램 만들기
이쪽도 샘플 프로그램을 유용합니다.
샘플 프로그램 oscReceiveExample을 openFrameworks/apps/myApps/에 복사합니다.
cd openFrameworks/examples/addons
cp -r oscReceiveExample /home/pi/openFrameworks/apps/myApps/
ofApp.h를 엽니다.
cd /home/pi/openFrameworks/apps/myApps/oscReceiveExample/src
vim ofApp.h
포트 번호가 설정된 7행 #define PORT 12345
를 #define PORT 7110
로 변경하여 저장합니다.
한 폴더에 다시 make
합니다. 컴파일이 끝나면 make run
합니다.
cd ..
make
make run
화면 오른쪽 상단에 파란색 창이 열립니다.
다른 터미널을 시작하고 6.에서 만든 Dump_osc.py를 시작합니다.
cd MFRC522-python
python Dump_osc.py
NFC 리더와 함께 제공된 NFC 키 홀더를 잡으면 파란색 화면에도 NFC UID가 표시됩니다.
동영상은 이런 느낌입니다. (이미지를 클릭하면 YouTube로 이동합니다)
여기까지 할 수 있었으므로, 나머지는 oF로 받은 UID에 응한 처리를 해 나가면 좋을 것 같습니다.
Reference
이 문제에 관하여(Raspberry Pi 3에 연결된 NFC 리더의 데이터를 Python에서 읽기 OSC로 openFrameworks로 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuji_miyano/items/ed1f3d7ec9dc75bff9f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
4.에서 움직인 파이썬 샘플 프로그램을 openFrameworks에 가져 가기 위해 osc를 사용했습니다.
oF에서 직접 NFC 리더를 읽으면 좋겠다고 생각했습니다만, 어떻게 하면 좋은지 모르기 때문에 이 방법을 채택하고 있습니다.
참고 사이트 3. ( Python OSC (pyOSC) | 안드로이드 날 )를 보면서 pyOSC를 시험해 보았습니다.
pyOSC 설치
git clone https://gitorious.org/pyosc/devel.git
cd devel
sudo python setup.py install
실패
참고 사이트 3. 에 쓰여진 샘플 프로그램을 사용해 보려고했지만 잘 가지 못했습니다.
git clone https://github.com/conanxin/Arduino-Meets-Blender-OSC.git
터미널 2개를 시작하여 샘플 프로그램을 움직여 본다.
terminal1
cd Arduino-Meets-Blender-OSC/pyOSC_examples
python basic_receive.py
terminal2
cd Arduino-Meets-Blender-OSC/pyOSC_examples
python basic_send.py
send.py를 실행하면 다음과 같은 오류가 발생했습니다.
terminal2
Traceback (most recent call last):
File "basic_send.py", line 28, in <module>
client.sendto(msg, ('127.0.0.1', 2014)) # note that the second arg is a tupple and not two arguments
File "/usr/local/lib/python2.7/dist-packages/OSC.py", line 1174, in sendto
ret = select.select([],[self._fd], [], timeout)
AttributeError: 'OSCClient' object has no attribute '_fd'
잠시 몰랐어요.
성공
주의를 풀고 다른 샘플을 사용해보십시오.
pyOSC를 다운로드한 devel 폴더에 있던 샘플을 실행합니다.
terminal1
cd devel/examples
python knect-rcv.py
terminal2
cd devel/examples
python knect-snd.py
knect-snd.py를 실행하면 knect-rcv.py의 화면에 다음과 같은 표시가 나왔습니다.
terminal1
('Now do something with', 'user1', 3.0, 1.0, -1.0)
('Now do something with', 'user2', 4.0, 2.0, -2.0)
('Now do something with', 'user3', 3.0999999046325684, 2.0, -2.0)
('Now do something with', 'user4', 6.0, 3.200000047683716, -2.4000000953674316)
6. RFID 프로그램에 OSC 처리 추가
Dump.py에 knect-snd.py 프로그램을 끼워 넣었습니다.
Dump_osc.py#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
# OSC setting
from OSC import OSCClient, OSCMessage
client = OSCClient()
client.connect(("localhost", 7110))
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
# Scan for cards
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"
# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
# Print UID
print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
# Send OSC
client.send( OSCMessage("/user/1", [uid[0], uid[1], uid[2], uid[3]] ) )
# This is the default key for authentication
key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
# Select the scanned tag
MIFAREReader.MFRC522_SelectTag(uid)
7. openFrameworks에서 OSC를 수신하는 프로그램 만들기
이쪽도 샘플 프로그램을 유용합니다.
샘플 프로그램 oscReceiveExample을 openFrameworks/apps/myApps/에 복사합니다.
cd openFrameworks/examples/addons
cp -r oscReceiveExample /home/pi/openFrameworks/apps/myApps/
ofApp.h를 엽니다.
cd /home/pi/openFrameworks/apps/myApps/oscReceiveExample/src
vim ofApp.h
포트 번호가 설정된 7행 #define PORT 12345
를 #define PORT 7110
로 변경하여 저장합니다.
한 폴더에 다시 make
합니다. 컴파일이 끝나면 make run
합니다.
cd ..
make
make run
화면 오른쪽 상단에 파란색 창이 열립니다.
다른 터미널을 시작하고 6.에서 만든 Dump_osc.py를 시작합니다.
cd MFRC522-python
python Dump_osc.py
NFC 리더와 함께 제공된 NFC 키 홀더를 잡으면 파란색 화면에도 NFC UID가 표시됩니다.
동영상은 이런 느낌입니다. (이미지를 클릭하면 YouTube로 이동합니다)
여기까지 할 수 있었으므로, 나머지는 oF로 받은 UID에 응한 처리를 해 나가면 좋을 것 같습니다.
Reference
이 문제에 관하여(Raspberry Pi 3에 연결된 NFC 리더의 데이터를 Python에서 읽기 OSC로 openFrameworks로 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuji_miyano/items/ed1f3d7ec9dc75bff9f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
# OSC setting
from OSC import OSCClient, OSCMessage
client = OSCClient()
client.connect(("localhost", 7110))
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
# Scan for cards
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"
# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
# Print UID
print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
# Send OSC
client.send( OSCMessage("/user/1", [uid[0], uid[1], uid[2], uid[3]] ) )
# This is the default key for authentication
key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
# Select the scanned tag
MIFAREReader.MFRC522_SelectTag(uid)
이쪽도 샘플 프로그램을 유용합니다.
샘플 프로그램 oscReceiveExample을 openFrameworks/apps/myApps/에 복사합니다.
cd openFrameworks/examples/addons
cp -r oscReceiveExample /home/pi/openFrameworks/apps/myApps/
ofApp.h를 엽니다.
cd /home/pi/openFrameworks/apps/myApps/oscReceiveExample/src
vim ofApp.h
포트 번호가 설정된 7행
#define PORT 12345
를 #define PORT 7110
로 변경하여 저장합니다.한 폴더에 다시
make
합니다. 컴파일이 끝나면 make run
합니다.cd ..
make
make run
화면 오른쪽 상단에 파란색 창이 열립니다.
다른 터미널을 시작하고 6.에서 만든 Dump_osc.py를 시작합니다.
cd MFRC522-python
python Dump_osc.py
NFC 리더와 함께 제공된 NFC 키 홀더를 잡으면 파란색 화면에도 NFC UID가 표시됩니다.
동영상은 이런 느낌입니다. (이미지를 클릭하면 YouTube로 이동합니다)
여기까지 할 수 있었으므로, 나머지는 oF로 받은 UID에 응한 처리를 해 나가면 좋을 것 같습니다.
Reference
이 문제에 관하여(Raspberry Pi 3에 연결된 NFC 리더의 데이터를 Python에서 읽기 OSC로 openFrameworks로 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuji_miyano/items/ed1f3d7ec9dc75bff9f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)