라즈베리파이 4일차

ParkJinYoung·2022년 10월 7일

조도 센서(아날로그신호)


#ADC 호출할 때 쓰는 

import spidev
spi = spidev.SpiDev()
spi.open(0,0)
 
spi.max_speed_hz = 1000000

def analog_read(portChanner):
    #트랜짓 0~7번까지의 채널을 의미한다.
    adc = spi.xfer2([1, (8+portChanner)<<4, 0])

    data = ((adc[1]&3)<<8)+adc[2]

    return data


#해두고 다른 파일에서 파일을 import한다.
import spidevRead as sr
import time as t

#0~1023값이 넘어오게
while True:
    sensorValue = sr.analog_read(0)
    print(sensorValue)
    t.sleep(0.5)
    #if sensorValue>=600:
    #    print("빛이 난다")
    #else :
    #    print("어둡다")


#센서 값에 따라 LED 점소등
gpio.setmode(gpio.BCM)
gpio.setup(18, gpio.OUT)
#0~1023값이 넘어오게
while True:
    sensorValue = sr.analog_read(0)
    print(sensorValue)
    t.sleep(0.5)
    if sensorValue <= 400:
        gpio.output(18, gpio.HIGH)
        t.sleep(0.5)
    else:
        gpio.output(18, gpio.LOW)
        t.sleep(0.5)

조도센서 값을 DB에 저장

  • sudo apt-get install mariadb-server
  • root로 마리아DB 들어가기 : sudo mysql -u root
  • 권한 만들기 : alter user 'root'@'localhost' identified by '1234';
  • DB나오기 : ctrl + c
  • mysql -u root -p : 만들어진 유저로 접속
    - create database test;
    • use test;
    • create table 이름(컬럼명 INT,컬럼명 TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
    • insert into 테이블 이름(컬럼명) values(값)
  • 파이썬에서 사용할수 있도록
    - sudo pip3 install PyMySQL
import pymysql as ps
#mysql db 연결
db = ps.connect(
    host = "localhost", user = "root", passwd = "1234",
    db = "test", charset = "utf8"
    )
#전역 변수 형태로 커서 객체 만들기
curs = db.cursor()
#insert
def sensorDataInsert(s):
    sql = f'insert into sensordb(sensing) values({s})'#포맷팅
    curs.execute(sql)
    db.commit()
    
def sensorDataSelect():
    sql = 'select * from sensordb'
    curs.execute(sql)
    #매개변수에 뭐가 들어가있는가에 따라서 처리가 다르다
    result=curs.fetchall()
    return result
    
"""여러줄 주석
r= sensorDataSelect()
print(r)
print(len(r))
print(r[0])
print(r[0][1])
print(type(r[0][1]))
"""

url을 Flask요청 => DB => Flask => 유저

  • Flask
    - WSGI : 서버가 웹 어플리케이션과 통신하기위한 인터 페이스, 최소한의 기능만 제공됨
from flask import Flask, render_template
import ledCon as lc
import DBCon as dc

#__name__는 이미 만들어진 내장 변수
#코드를 실행시킬 수 있는 방법
app = Flask(__name__)
#경로 설정
@app.route("/")
#호출함수
def hello():
    return render_template('main.html')

@app.route('/led/on')
def led_on():
    lc.ledon()
    return render_template('main.html')

@app.route('/led/off')
def led_off():
    lc.ledoff()
    return render_template('main.html')

@app.route('/sensor')
def getSensor():
    result=dc.sensorDataSelect()
    #원하는 결과를 문자열로 바꾸기
    # , 를 기준으로 조인() 튜플데이터 꺼내오기
    r = ','.join(map(str, result))
    return r


if __name__ == '__main__' :
    app.run(host='172.30.1.41'
            #localhost가 아닌 ip(inet)쓰는 이유
            #같은 ui wifi만 같으면 핸드폰으로도 접속가능 
            )
profile
꾸준히

0개의 댓글