⑤ Raspberry Pi3 및 토양 습도 센서로 토양 습도 획득(YL69+MCP3002)

6829 단어 Raspberrypi3

준비하는 것(주변기기)



1. Raspberry Pi 3
2.YL-69(토양 습도 센서)
3.MCP3002(A/D 컨버터)
4. 남성 점퍼, 여성 점퍼 (Raspberry Pi 초보자 키트 사용)

A/D 컨버터란?



Raspberry Pi는 아날로그 데이터를 읽을 수 없습니다.
A/D 컨버터는 아날로그 데이터를 1과 0의 2진수로 변환하고 Raspberry Pi에 통신으로 송신하는 디바이스입니다.
Raspberry Pi와 A/D 컨버터 간의 통신은 SPI 통신을 사용합니다.

Raspberry Pi에서 SPI 통신 설정



SPI 통신 드라이버 설치
$ sudo apt-get install python-spidev

"5.Interfacing Options"를 선택


P4 SPI 선택


SPI가 유효한지 확인
ls -l /dev/spi*


yl69+MCP3208+브레드보드+Raspberry Pi 연결





스크립팅



yl69.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import spidev

#GPIOのピン番号
pin = 22

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

#GPIOの指定したピン番号を出力端子に設定
GPIO.setup(pin, GPIO.OUT)

#出力用関数
def output_fromGPIO(pin, output):
    GPIO.output(pin, output)
    sleep(0.1)

#MCP3002動作用関数
def readadc_spidev(adcnum):
    if ((adcnum > 1) or (adcnum < 0)):
        return -1
    #0x68は1chを使う場合です。2chは0x78を使います。
    ret = spi.xfer2([0x68,0x00])    
    #データは8ビットずつに分かれているので、最初の8ビットを上位データとして8ビットシフトし、下位データと結合する
    #MCP3002は10ビット目までがデータなので、10ビット目までを残して他のデータを消す
    adcout = ((ret[0]<<8) + ret[1])&0x3ff
    return adcout

#SPI通信開始
spi=spidev.SpiDev()
spi.open(0, 0) # bus0, CE0

#データ取得前にYL-69に電圧を印可
output_fromGPIO(pin,True)

try:
    while True:
        #先ほど定義したMCP3002の関数を呼び出す
        getValue = readadc_spidev(0)
        #値がちゃんと取れたらデータを出力。取れるまでトライ
        if getValue != -1:
            print(getValue)
            break;
        sleep(1)

except KeyboardInterrupt:
    pass

#YL-69の印加電圧をとめる
output_fromGPIO(pin,False)
#SPI通信終了
spi.close()

스크립트 실행


sudo python yl69.py
>>> 1023
>>> 464
>>> 699

성공!!

좋은 웹페이지 즐겨찾기