Last active
May 28, 2024 12:55
-
-
Save cmchap/5480533 to your computer and use it in GitHub Desktop.
Raspberry Pi Water Sensor - Incredibly vague schematic here: http://fritzing.org/projects/raspberry-pi-water-sensor/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
######### | |
# About # | |
######### | |
# This script uses a Raspberry Pi to sense for the presense or absense of water. | |
# If there is water, an email is sent and a buzzer goes off. | |
# When it's dry again, another email is sent, and the buzzer turns off. | |
# To run this script at boot, edit /etc/rc.local to include (no quotes) 'sudo python <pathtoyourscript>.py' | |
# Schematic here: http://fritzing.org/projects/raspberry-pi-water-sensor/ | |
########### | |
# License # | |
########### | |
# Released under the WTFPL. | |
#Full text and more information here: http://en.wikipedia.org/wiki/WTFPL | |
######################################## | |
# Gmail login credentials to send email# | |
######################################## | |
username = 'exampleusername' #you don't need the "@gmail.com" bit. | |
password = 'examplepassword' | |
############################ | |
# General Email Parameters # | |
############################ | |
From = "[email protected]" | |
To = "recipientaddress#domain.com" | |
####################################### | |
# Email Parameters when sensor is Wet # | |
####################################### | |
Subject_wet = "RPi Water Sensor is WET" | |
Body_wet = "Your water sensor is wet." | |
####################################### | |
# Email Parameters when semsor is Dry # | |
####################################### | |
Subject_dry = "RPi Water Sensor is DRY" | |
Body_dry = " Your water sensor is dry again!" | |
import smtplib | |
from email.mime.text import MIMEText | |
import RPi.GPIO as GPIO | |
import string | |
import time | |
# Function Definitions | |
#takes either "wet" or "dry" as the condition. | |
def email(condition): | |
print "Attempting to send email" | |
if condition == 'wet': | |
Body = string.join(( | |
"From: %s" % From, | |
"To: %s" % To, | |
"Subject: %s" % Subject_wet, | |
"", | |
Body_wet, | |
), "\r\n") | |
if condition == 'dry': | |
Body = string.join(( | |
"From: %s" % From, | |
"To: %s" % To, | |
"Subject: %s" % Subject_dry, | |
"", | |
Body_dry, | |
), "\r\n") | |
# The actual mail send | |
server = smtplib.SMTP('smtp.gmail.com:587') | |
server.starttls() | |
print "Logging in..." | |
server.login(username,password) | |
print "Logged in as "+username+"." | |
server.sendmail(From, [To], Body) | |
server.quit() | |
print "Email sent." | |
#Tests whether wter is present. | |
# returns 0 for dry | |
# returns 1 for wet | |
# tested to work on pin 18 | |
def RCtime (RCpin): | |
reading = 0 | |
GPIO.setmode(GPIO.BCM) | |
GPIO.setup(RCpin, GPIO.OUT) | |
GPIO.output(RCpin, GPIO.LOW) | |
time.sleep(0.1) | |
GPIO.setup(RCpin, GPIO.IN) | |
# This takes about 1 millisecond per loop cycle | |
while True: | |
if (GPIO.input(RCpin) == GPIO.LOW): | |
reading += 1 | |
if reading >= 1000: | |
return 0 | |
if (GPIO.input(RCpin) != GPIO.LOW): | |
return 1 | |
# Turns on the piezo buzzer | |
# tested to work on pin 17 | |
def buzz_on (pin): | |
GPIO.setmode(GPIO.BCM) | |
GPIO.setup(pin, GPIO.OUT) | |
GPIO.output(pin, GPIO.HIGH) | |
# Turns off the piezo buzzer | |
# tested to work on pin 17 | |
def buzz_off(pin): | |
GPIO.setmode(GPIO.BCM) | |
GPIO.setup(pin, GPIO.OUT) | |
GPIO.output(pin, GPIO.LOW) | |
# Main Loop | |
print 'Waiting for wetness...' | |
while True: | |
time.sleep(1) # check for wetness every second | |
if RCtime(18) == 1: | |
buzz_on(17) | |
print "Sensor is wet" | |
email('wet') | |
print "Waiting for dryness..." | |
while True: | |
time.sleep(1) # check for dryness every second | |
if RCtime(18) == 0: | |
buzz_off(17) | |
print "Sensor is dry again" | |
email('dry') | |
print "Waiting for wetness..." | |
break |
It worked with gmail, but you had to change something: allow unsecure apps.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, I've tried both, without success. Now I found a nice video, in which the following code ist presented:
But even here (with the correct USER and PASSWORD) I got an error:
(With an e-mail adress from t-online.de, I got the same error message.)
I didn't find a solution in the internet so far. Does anyone know, how to use this properly?
Regards