1. 程式人生 > >樹梅派學習 14. 雨滴檢測上報系統

樹梅派學習 14. 雨滴檢測上報系統

這一次搭建一個雨滴檢測併發送微信訊息到手機上。

Created with Raphaël 2.1.2雨滴檢測傳送微信訊息

硬體端:雨滴檢測

雨滴檢測感測器原理圖:
這裡寫圖片描述

接線圖:
這裡寫圖片描述

程式
PCF8591.py

#!/usr/bin/env python
#------------------------------------------------------
#
#       This is a program for PCF8591 Module.
#
#       Warnng! The Analog input MUST NOT be over 3.3V!
#    
# In this script, we use a poteniometer for analog # input, and a LED on AO for analog output. # # you can import this script to another by: # import PCF8591 as ADC # # ADC.Setup(Address) # Check it by sudo i2cdetect -y -1 # ADC.read(channal) # Channal range from 0 to 3 # ADC.write(Value) # Value range from 0 to 255
# #------------------------------------------------------ import smbus import time # for RPI version 1, use "bus = smbus.SMBus(0)" bus = smbus.SMBus(1) #check your PCF8591 address by type in 'sudo i2cdetect -y -1' in terminal. def setup(Addr): global address address = Addr def read(chn): #channel
if chn == 0: bus.write_byte(address,0x40) if chn == 1: bus.write_byte(address,0x41) if chn == 2: bus.write_byte(address,0x42) if chn == 3: bus.write_byte(address,0x43) bus.read_byte(address) # dummy read to start conversion return bus.read_byte(address) def write(val): temp = val # move string value to temp temp = int(temp) # change string to integer # print temp to see on terminal else comment out bus.write_byte_data(address, 0x40, temp) if __name__ == "__main__": setup(0x48) while True: print 'AIN0 = ', read(0) print 'AIN1 = ', read(1) tmp = read(0) tmp = tmp*(255-125)/255+125 # LED won't light up below 125, so convert '0-255' to '125-255' write(tmp) # time.sleep(0.3)

rain_detection.py

#!/usr/bin/env python
import PCF8591 as ADC
import RPi.GPIO as GPIO
import time
import math
import itchat

DO = 17
LAST_X = 0

GPIO.setmode(GPIO.BCM)

def setup():
    ADC.setup(0x48)
    GPIO.setup(DO, GPIO.IN)

def Print(x): 
    global LAST_X
    if LAST_X == x:
        return
    LAST_X=x
    if x == 1:
        LAST_X=1
        print ''
        print '   ***************'
        print '   * Not raining *'
        print '   ***************'
        print ''
    if x == 0:
        LAST_X=0
        itchat.send('its rainning', toUserName='filehelper')
        print ''
        print '   *************'
        print '   * Raining!! *'
        print '   *************'
        print ''

def loop():
    status = 1
    while True:
        print ADC.read(0)

        tmp = GPIO.input(DO);
        if tmp != status:
            Print(tmp)
            status = tmp

        time.sleep(0.2)

if __name__ == '__main__':
    itchat.auto_login(True)
    try:
        setup()
        loop()
    except KeyboardInterrupt: 
        pass    

執行:

sudo pip install itchat
python rain_detection.py

實體接線圖:

這裡寫圖片描述

手機端:實時顯示

執行程式。在雨滴感測器上滴水,會發送訊息到微信的檔案傳輸助手。

程式執行需要在視覺化介面進行,否則生成的qr.png顯示想辦法顯示出來讓手機微信掃描並登陸。