⑤ 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
성공!!
Reference
이 문제에 관하여(⑤ Raspberry Pi3 및 토양 습도 센서로 토양 습도 획득(YL69+MCP3002)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk8/items/81db8b49727861bde9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
성공!!
Reference
이 문제에 관하여(⑤ Raspberry Pi3 및 토양 습도 센서로 토양 습도 획득(YL69+MCP3002)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk8/items/81db8b49727861bde9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ sudo apt-get install python-spidev
ls -l /dev/spi*
스크립팅
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
성공!!
Reference
이 문제에 관하여(⑤ Raspberry Pi3 및 토양 습도 센서로 토양 습도 획득(YL69+MCP3002)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ksk8/items/81db8b49727861bde9f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- 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
성공!!
Reference
이 문제에 관하여(⑤ Raspberry Pi3 및 토양 습도 센서로 토양 습도 획득(YL69+MCP3002)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ksk8/items/81db8b49727861bde9f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)