I²C(Inter-Integrated Circuit)는 SPI 통신처럼 동기식 시리얼통신(직렬통신)이며 마스터 기기들과 슬레이브 기기들 간의 통신이 가능하면서 2개의 통신라인(SDA, SCL)만으로 가능하여서 쉽게 구성이 가능합니다. SPI 통신에는 슬레이브 기기가 추가 될 때 마다 CS(chip select) 통신라인이 필요한 거셍 비해 I²C에서는 추가가 필요없다. 간단하게 동시에 많은 기기를 연결 할 수 있지만 속도가 느려서 보통 저속의 주변장치 사이의 통신에 사용됩니다.
BMP180은 보쉬(Bosch)사에서 제작한 센서로 정밀한 기압 및 온도를 측정 가능합니다.
(ALTitude)는 기압에 따라서 달라지므로 기압값을 이용하여 고도로 변환이 가능합니다.
1. 브레드보드 연결
2. I²C 테스트 방법
우선 아래의 명령어를 입력하여 테스트 툴을 설치합니다.
BMP180을 연결한 후에 다음과 같이 주소(Address)를 확인
i2cdetect -y 1
3. 커맨드 창에서 다음과 같이 Adafruit사의 BMP180 센서의 라이브러리를 설치
cd (설치된 폴더 경로)
git clone https://github.com/adafruit/Adafruit_Python_BMP.git
cd Adafruit_Python_BMP
sudo pyhton3 setup.py install
4. 파이썬 코드 작성과 실행하기
5. 코드 결과
6. 실습 사진
플라스크는 경량 웹 프레임워크로, WSGI코어와 URL 라우팅을 지원하기 위해 werkzeug(벡자이그)와 템플릿 출력을 위해 jinja2 라이브러리를 함께 배포합니다.
꼭 필요한 핵심 요소를 제외하고는 필요할 때 마다 직접 환경에 맞춰 개발을 하고 라이브러리를 찾아서 추가해야 합니다.
Flask를 사용하기 위해서 VScode(Visual Studio Code) 툴을 이용
1. VSCode를 설치
sudo apt install code
Flask 설치하기위해 VSCode 메뉴에서 터미널을 실행.
Terminal - New Terminal[Ctrl+Shift+']
설치전 테스트를 위해 파이썬 버전을 확인
플라스크를 설치 , 설치도구는 pip
플라스크 설치된줄 알았는데 오류
$ sudo pip install flask
4. pip 버젼을 업그레이드
$ sudo pip install --upgrade pip
5. 다시 플라스크 설치
$ sudo pip install flask
6. 플라스크 설치 확인
>> from flask import Flask
7. Python extension 설치까지 완료되면 Web서버 구축을 위한 준비는 끝
설치가 완료된 모습
from flask import Flask # from flask에서 flask는 클래스명을 의미, 클래스를 import
app = Flask(__name__)
# app은 Flask 객체를 가지게 됨, __name__은 내장변수이면서 전역변수
(이 변수에는 해당 파이썬의 이름이 저장된다, app_stray)
@app.route("/") # 라우팅을 위한 뷰 함수 등록
def helloworld(): # "Hello World"는 함수가 종료될때 요청한 쪽으로 응답되는 String 값
return "Hello World"
if __name__ == "__main__":
app.run(host="0.0.0.0") # app.run()이 호출되면 웹서버가 동작함.
# 여기서 __name__은 두가지 이름을 가짐 첫번째는 내 모듈명 app_stary.py
# 두번째 이름은 __main__
# 만약 다른 파일에서 app_stary.py 파일을 import 해서 사용하게 되면 __name__이 __main__이 라는
이름이 될 수 없습니다.
__name__이 __main__이 되려면 import가 아닌 해당 파일을 직접 실행 시킬때만 가능하다.
위 문장이 필요한 이유는 app_start.py 파일을 직접 실행시켰을 때만 "서버를 작동시켜" 라는 뜻입니다.
터미널을 열고 다음과 같이 입력
웹브라우저를 열고 다음과 같이 주소를 입력합니다.
http://localhost:5000
from flask import Flask
app = Flask(__name__)
@app.route("/")
def helloworld():
return "Hello World"
@app.route("/led/on")
def led_on():
return "LED ON"

@app.route("/led/off")
def led_off():
return "LED OFF"
if __name__ == "__main__":
app.run(host="0.0.0.0")
from flask import Flask
import RPi.GPIO as GPIO
app = Flask(__name__)
LED = 8
GPIO.setmode(GPIO.BOARD) # BOARD는 커넥터 pin번호 사용
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
@app.route("/")
def helloworld():
return "Hello World"
@app.route("/led/on")
def led_on():
GPIO.output(LED, GPIO.HIGH)
return "LED ON"
@app.route("/led/off")
def led_off():
GPIO.output(LED, GPIO.LOW)
return "LED OFF"
@app.route("/gpio/cleanup")
def gpio_cleanup():
GPIO.cleanup()
return "GPIO CLEANUP"
if __name__ == "__main__":
app.run(host="0.0.0.0")
다음 준비물이 필요
브레드보드, 점퍼선, 저항 1K 1개, LED 1개
라즈베리 파이와 브레드보드에 연결한다. 빨간색 선은 9번 pin에 연결하였고, 주황색 선은 GND에 연결하였습니다.
웹 브라우저를 열어서 localhost:5000/led/on으로 접속
웹브라우저를 열어서 localhost:5000/led/off로 접속
웹브라우저를 열어서 localhost:5000/gpio/cleanup으로 접속
from flask import Flask
import RPi.GPIO as GPIO
app = Flask(__name__)
LED = 8
GPIO.setmode(GPIO.BOARD) # BOARD는 커넥터 pin번호 사용
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
@app.route("/")
def helloworld():
return "Hello World"
@app.route("/led/<state>")
def led_on(state):
if state == "on":
GPIO.output(LED, GPIO.HIGH)
else:
GPIO.output(LED, GPIO.LOW)
return "LED "+state
@app.route("/gpio/cleanup")
def gpio_cleanup():
GPIO.cleanup()
return "GPIO CLEANUP"
if __name__ == "__main__":
app.run(host="0.0.0.0")
1 app_start.py 파일을 수정
from f1
ask import Flask, request
import RPi.GPIO as GPIO
app = Flask(__name__)
LED = 8
GPIO.setmode(GPIO.BOARD) #BOARD는 커넥터 pin번호 사용
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
@app.route("/")
def helloworld():
return "Hello World"
@app.route("/led")
def led_on():
state = request.values.get("state", "error")
if state == "on":
GPIO.output(LED, GPIO.HIGH)
else:
GPIO.output(LED, GPIO.LOW)
return "LED "+state
@app.route("/gpio/cleanup")
def gpio_cleanup():
GPIO.cleanup()
return "GPIO CLEANUP"
if __name__ == "__main__":
app.run(host="0.0.0.0")
from flask import Flask, request
import RPi.GPIO as GPIO
app = Flask(__name__)
LED = 8
GPIO.setmode(GPIO.BOARD) #BOARD는 커넥터 pin번호 사용
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
@app.route("/")
def helloworld():
return "Hello World"
@app.route("/led")
def led_on():
state = request.values.get("state", "error")
if state == "on":
GPIO.output(LED, GPIO.HIGH)
elif state == "off":
GPIO.output(LED, GPIO.LOW)
elif state == "error":
return "쿼리스트링 state가 전달되지 않았습니다."
else:
return "잘못된 쿼리스트링이 전달되었습니다."
return "LED "+state
@app.route("/gpio/cleanup")
def gpio_cleanup():
GPIO.cleanup()
return "GPIO CLEANUP"
if __name__ == "__main__":
app.run(host="0.0.0.0")