[RaspberryPI] 유선 통신

정재훈·2022년 4월 21일
0

RaspberryPi

목록 보기
10/12

유/무선 통신 종류

두 장치간 데이터를 송수신 하는데, 유선통신무선통신이 있습니다.
무선통신은 노이즈 등 신뢰성이 보장되지 않는다.

간단한 데이터만 주고 받을 때는 GPIO로도 충분하지만, 빠른 성능 및 다량의 신호를 전달하기 위해서는 프로토콜을 사용한다.

유선 통신 프로토콜 종류
1. UART
2. SPI
3. I2C - IspareC로 읽을것
4. CAN - 차량내 네트워크

무선 통신 프로토콜 종류
1. 적외선
2. RFID
3. 블루투스
4. Wifi

소수의 pin 으로 다량의 장치를 Control
MCU PC 간 신호를 주고 받음 - MCU 의 로그 데이터를 PC 에 전달함
센서 MCU 간 , 신호 전달 - 센서 모듈별로 사용하는 프로토콜이 다름

센서 구매할 때 , 통신 프로토콜 확인 필수

유선통신 = 직렬(Serial)통신 + 병렬(Parallel)통신
병렬은 다량의 신호를 한꺼번에 전달하기 위해 PIN도 많이 필요하고, 전력소모도 크고 느리다. 따라서, 직렬통신을 더 많이 사용한다.

I2C 제어

BMP 280 : 정밀한 대기압 센서, 온도 측정 가능하다.
SDA / SCL핀 이 존재하며, I2C 통신을 하는 센서이다
1. SDA : Serial Data
2. SCL : Serial Clock

I2C가 GPIO 연결보다 좋은점은 핀 2개로 다량의 장치를 연결하여 각각 제어할 수 있다.

초기셋팅

연결

VCC( 3.3V ), GND, SCL, SDA 연결한다. SDO / CSB 는 연결하지 않는다.

테스트

Slave 들은 자기만의 주소값 을 가진다. i2cdetect -y 1를 통해 주소값을 확인할 수 있고 기억해두자!

I2C 값 읽기

import smbus
from time import sleep
DEVICE_BUS = 1
DEVICE_ADDR = 0x76 # 본인 Slave 주소
bus = smbus.SMBus(DEVICE_BUS)

while True:
    a = bus.read_byte_data(DEVICE_ADDR, 0x00)
    print(a)
    sleep(0.5)

I2C로 온도값 읽기

데이터시트 p.24 , p.27 참고한다.


import smbus
from time import sleep
DEVICE_BUS = 1
DEVICE_ADDR = 0x76
bus = smbus.SMBus(DEVICE_BUS)

while True:
    a = bus.read_byte_data(DEVICE_ADDR, 0xFB)
    b = bus.read_byte_data(DEVICE_ADDR, 0xFA)
    c = bus.read_byte_data(DEVICE_ADDR, 0xFC)
    print(a,b,c)
    result = (a<<12) | (b<<4) | ((c&0xF0) >> 4)
    
    print(result)
    sleep(0.5)

한계점 : 온도 계산하는데에는 매우 복잡한 과정을 거쳐야 한다. 따라서, 저는 LIB를 사용한다.

BMP280 온도 & 대기압 LIB 설치

cmd 창에서 git clone https://github.com/pimoroni/bmp280-python를 설치해준다.
cd bmp280-pythonsudo ./install.sh로 추가 설치해준다.

LIB 사용 코드

import time
from bmp280 import BMP280
from smbus import SMBus

bus = SMBus(1)
bmp280 = BMP280(i2c_dev=bus)

while True:
    temperature = bmp280.get_temperature()
    pressure = bmp280.get_pressure()
    print('{:05.2f}*C {:05.2f}hPa'.format(temperature, pressure))
    time.sleep(1)

SPI

Master/Slave 통신, 쌍방 동시 통신 가능, 빠르다. 하지만, SPI는 4개 핀(CS, SCK, MOSI) 필요하다.
1. CS slave 선택 (chip select)
2. SCK : 클럭
3. MOSI : Master Out Slave In 마스터 말한다 , 슬레이브 듣는다
4. MISO : Master In Slave Out 마스터 듣는다 , 슬레이브 말한다

profile
여러 방향으로 접근하는 개발자

0개의 댓글