Tag Archives: raspberry pi

[RPi] RPi 와 Macbook 무선 direct 연결

RPi와 Macbook (PC, Laptop, Smartphone 등) 과 연결을 직접적으로 하는 일은 굉장히 드문 경우라고 할 수 있겠다.
내 경우엔 특수한 공간에서 외부망을 사용할 수 없는 환경이라 RPi와 직접 연결해야 하는 상황이 발생했다.

Ex) Peripheral – RPi:UART사용 – wifi – Macbook:RPi접속 minicom terminal

RPi 와 직접 연결을 위해서는 RPi를 AP로 동작을 하도록 설정해줘야 한다.
Wifi를 통한 closed 연결을 할 수 있다.

물론, Wifi 동글이 Broadcast를 지원해야 한다.

우선, DHCP 모듈을 설치해야 한다.
sudo apt-get install isc-dhcp-server

1. 네트워크 설정 수정

#적용ifdown wlan0ifup wlan0

이 과정까지 하면 무선 인터넷 검색을 하면 설정된 RPi가 나타나는 것을 확인 할 수 있다.
하지만, 연결해도 접속은 안됨

2. AP모드 활성화

service isc-dhcp-server restart

[rasp.] spi 통신 설정

Rasp. 와 FPGA 사이의 통신으로 SPI를 사용하기로 결정했다.

SPI Clock이 최대 32Mhz까지 나오는 놀라운 장면을 목격했다.

 

i2c와 마찬가지로 spi 또한 설정하기 위해서는 blacklist에서 spi를 빼줘야 한다.

sudo vi /etc/modprobe.d/raspi-blacklist.conf 에서 아래와 같이 수정한다.

# blacklist spi and i2c by default (many users don't need them)

 

#blacklist spi-bcm2708

#blacklist i2c-bcm2708

blacklist snd-soc-pcm512x

blacklist snd-soc-wm8804

그리고, sudo reboot

아래와 같이 python-spi를 위한 필요파일을 받아 설치한다.

mkdir python-spi

cd python-spi

wget https://raw.github.com/doceme/py-spidev/master/setup.py

wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c

sudo python setup.py install

이러면 완성..

 

아래는 시험 코드.

 

시험코드에 빠진 것이 있는데 spi 속도를 올리기 위해선 다음을 추가해야한다.

spi.max_speed_hz = 32000000

 

 

시험한 코드—-

#!/usr/bin/python

 

import spidev

 

spi = spidev.SpiDev()

spi.open(0,0)

 

while 1:

 

        r = spi.xfer2([0xAA,0x55,0xAA,0x55])

 

출력 결과 : 커플링이 좀 있지만 나름 나쁘지 않은 파형이네 ㅎㅎ

[python] Socket TCP/IP 통신 설정

음..

 

현재 꾸미고 있는 환경은 대충 아래 그림과 같다.

 

Application Program과 Rasp. 가 wifi로 통신을 해야 한다.

많은 양의 통신이 이루어 질 것으로 보이는데 뭐 어쨌든.. 

python으로 간단한 socket program을 작성하여 개발 환경을 구축했다.

 

Rasp. = Server / Application = Client 이다. 

 

Server —–

 

Client —-

 

개념은 아래와 같다. 

 

Rasp.은 항상 Application(이하 App.)의 명령을 기다린다. 

App.이 특성 요청을 보내면 Rasp.은 이 명령을 defetch 해서 명령을 수행하고 적절한 데이터를 App.에 전송한다.

App. 은 특정 요청에 대한 결과를 받아 GUI 로 표시한다.

[rasp.] GPIO 설정 (RPi vs. wiringPi)

Raspberry Pi B+ 와 FPGA를 연결할 계획에 있다. 

두 보드 간 통신을 위해 어떤 걸 사용할까 하다가.

GPIO를 이용한 parallel protocol을 직접 만들어 보려고 했다. 

그런데, GPIO의 속도가 그리 좋지 않았다. 

blog를 찾아 보니 language 별로 속도를 벤치마킹한 사이트가 있으니 링크를 참조.

http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/

 

처음에는 기본 제공 하는 RPi GPIO 설정을 하려고 했는데.. 속도가 생각보다 별로 였다. 약 100kHz 정도

 

Blog에 보면 wiringPi가 속도가 괜찮다고 해서 굳이 wiringPi를 설치하여 속도를 확인해 봤다.

근데 역시.. python에서 사용을 해서 그런지 속도가 많이 나지 않는군… C로 하면 빠른 거 같은데.. 

이미 project 진행을 python으로 하기로 했으므로 pass~

 

아래 사진은 RPi.GPIO를 사용했을 때, wiringPi를 사용했을 때의  GPIO 실험 코드와 결과이다. 

 

RPi.GPIO

import RPi.GPIO as GPIO

 

GPIO.setmode(GPIO.BCM)

GPIO.setup(17,GPIO.OUT,initial=1)

GPIO.setup(17,GPIO.OUT)

GPIO.output(17,0)

while 1 :

    GPIO.output(17,0)

    GPIO.output(17,1)

 
 
 
다음은 wiringPi

import wiringpi

 

io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_GPIO)

io.pinMode(17,io.OUTPUT)

io.digitalWrite(17,io.HIGH)

io.digitalWrite(17,io.LOW)

while 1:

    io.digitalWrite(17,io.LOW)

    io.digitalWrite(17,io.HIGH)

 

[rasp.] 지자기 센서(Digital Compass) HMC5883L

지자기 센서 예제

그 활용은 알아서~

 

import smbus

import time

from ctypes import c_short

 

bus = smbus.SMBus(1)

 

DEV_ADDR = 0x1E # for compass

 

# identification chip

 

id1 = bus.read_byte_data(DEV_ADDR,10)

id2 = bus.read_byte_data(DEV_ADDR,11)

id3 = bus.read_byte_data(DEV_ADDR,12)

 

print "ID 1 : ", hex(id1)

print "ID 2 : ", hex(id2)

print "ID 3 : ", hex(id3)

 

#CRA Registor Setting

bus.write_byte_data(DEV_ADDR,0,0×70)

#CRB Registor Setting

bus.write_byte_data(DEV_ADDR,1,0xA0)

#MODE Registor Setting

bus.write_byte_data(DEV_ADDR,2,0×00)

 

time.sleep(.100)

 

while 1 :

        x_axis_m = bus.read_byte_data(DEV_ADDR,3)

        x_axis_l = bus.read_byte_data(DEV_ADDR,4)

 

        z_axis_m = bus.read_byte_data(DEV_ADDR,5)

        z_axis_l = bus.read_byte_data(DEV_ADDR,6)

 

        y_axis_m = bus.read_byte_data(DEV_ADDR,7)

        y_axis_l = bus.read_byte_data(DEV_ADDR,8)

 

        bus.write_byte_data(DEV_ADDR,3,0×00)

 

        x = (c_short((x_axis_m << 8)+ x_axis_l).value)

        y = (c_short((y_axis_m << 8)+ y_axis_l).value)

        z = (c_short((z_axis_m << 8)+ z_axis_l).value)

        print "COMP : %6d %6d %6d"% (x,y,z)

        time.sleep(.01)