Guest User

Untitled

a guest
Dec 18th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.53 KB | None | 0 0
  1. import time
  2. import datetime
  3. import pigpio
  4. import Adafruit_GPIO.SPI as SPI
  5. import Adafruit_MCP3008
  6. import Adafruit_DHT
  7. import sqlite3
  8. import os
  9. import shutil
  10. import picamera
  11. import PIL
  12. from PIL
  13. import Image, ImageFont, ImageDraw
  14. import matplotlib
  15. matplotlib.use('Agg')
  16. import matplotlib.pyplot as plt
  17. import matplotlib.dates as mdates
  18. from matplotlib
  19. import style
  20. style.use('fivethirtyeight')
  21. pi = pigpio.pi()
  22.  
  23. # Software SPI configuration:
  24. CLK = 18
  25. MISO = 23
  26. MOSI = 24
  27. CS = 25
  28. mcp = Adafruit_MCP3008.MCP3008(clk = CLK, cs = CS, miso = MISO, mosi = MOSI)
  29.  
  30. # Sensor configuration
  31. SOIL_PIN = 13
  32. DHT = Adafruit_DHT.DHT11
  33. DHT_PIN = 12
  34.  
  35. def getSoilMoisture():
  36. pi.set_PWM_dutycycle(SOIL_PIN, 255)
  37. time.sleep(0.1)
  38. soil_value = mcp.read_adc(0)
  39. time.sleep(0.1)
  40. pi.set_PWM_dutycycle(SOIL_PIN, 0)
  41. return soil_value
  42.  
  43. def getTempAndHumidity():
  44. humidity, temperature = Adafruit_DHT.read_retry(DHT, DHT_PIN)
  45. return humidity, temperature
  46.  
  47. def printSensorValues():
  48. soil_value = getSoilMoisture()
  49. humidity, temperature = getTempAndHumidity()
  50. print("Soil Moisture Level: " + str(soil_value))
  51. print("Light Level: " + str(mcp.read_adc(1)))
  52. print("Temperature: " + str(temperature) + "C")
  53. print("Humidity: " + str(humidity) + "%")
  54.  
  55. # printSensorValues()
  56.  
  57. def logSensorValues():
  58. conn = sqlite3.connect('plant.db')
  59. c = conn.cursor()
  60. reading_time = time.time()
  61. soil_value = getSoilMoisture()
  62. humidity, temperature = getTempAndHumidity()
  63. light = mcp.read_adc(1)
  64. lastwater = checkWater(soil_value)
  65. c.execute('INSERT INTO data VALUES (?, ?, ?, ?, ?, ?)',
  66. (reading_time, soil_value, light, temperature, humidity, lastwater))
  67. conn.commit()
  68. print("Data written to database")
  69.  
  70. def capture_image():
  71. cam = picamera.PiCamera(resolution = (3280, 2464))
  72. filename = '/home/pi/internet-of-seeds/image-' + time.strftime('%Y-%m-%d-%H-%M') + '.jpg'
  73. cam.awb_mode = "off"
  74. cam.awb_gains = (1.55, 1.2)
  75. cam.capture(filename, quality = 100)
  76. print("Photo taken")
  77. graph_data()
  78. base = Image.new("RGBA", (4080, 2524), "#1f1e1f")
  79. img = Image.open(filename).convert("RGBA")
  80. base.paste(img, (825, 0), img)
  81. lightgraph = Image.open('/home/pi/internet-of-seeds/light.png').convert("RGBA")
  82. base.paste(lightgraph, (5, 5), lightgraph)
  83. lightgraph = Image.open('/home/pi/internet-of-seeds/soil.png').convert("RGBA")
  84. base.paste(lightgraph, (5, 625), lightgraph)
  85. lightgraph = Image.open('/home/pi/internet-of-seeds/temperature.png').convert("RGBA")
  86. base.paste(lightgraph, (5, 1245), lightgraph)
  87. lightgraph = Image.open('/home/pi/internet-of-seeds/humidity.png').convert("RGBA")
  88. base.paste(lightgraph, (5, 1865), lightgraph)
  89. font = ImageFont.truetype('/home/pi/Roboto-Regular.ttf', 36)
  90. draw = ImageDraw.Draw(base)
  91. draw.text((10, 2474), datetime.datetime.now().strftime('%H:%M, %a. %d %b %Y'), (255, 255, 255), font = font)
  92. conn = sqlite3.connect('plant.db')
  93. c = conn.cursor()
  94. c.execute('SELECT lastwater FROM data ORDER BY time DESC LIMIT 1;')
  95. for row in c.fetchall():
  96. y = row[0]
  97. draw.text((820, 2474), "Last watered on " + datetime.datetime.utcfromtimestamp(y).strftime('%H:%M, %a. %d %b %Y'), (255, 255, 255), font = font)
  98. base = base.resize((1920, 1080), Image.ANTIALIAS).convert("RGB")
  99. base.save(filename)
  100. shutil.copy2(filename, '/home/pi/internet-of-seeds/latest.jpg')
  101. shutil.copy2(filename, '/var/www/html/latest.jpg')
  102. return filename
  103.  
  104. def graph_data():
  105. yesterday = str(datetime.date.today() - datetime.timedelta(1))
  106. conn = sqlite3.connect('plant.db')
  107. c = conn.cursor()
  108. c.execute('SELECT time, light FROM data WHERE time >= ' + yesterday)
  109. times = []
  110. values = []
  111. for row in c.fetchall():
  112. times.append(datetime.datetime.fromtimestamp(row[0]))
  113. values.append(row[1])
  114. fig, ax = plt.subplots(figsize = (8, 6), dpi = 100)
  115. ax.plot_date(times, values, '-', linewidth = 3)
  116. fig.autofmt_xdate()
  117. ax.set_title('Light Level: ' + str(values[-1]), horizontalalignment = 'right')
  118. ax.set_xlim([datetime.datetime.now() - datetime.timedelta(days = 1), datetime.datetime.now()])
  119. ax.set_ylim([0, 1023])
  120. fig.savefig('/home/pi/internet-of-seeds/light.png')
  121. c.execute('SELECT time, soil FROM data WHERE time >= ' + yesterday)
  122. times = []
  123. values = []
  124. for row in c.fetchall():
  125. times.append(datetime.datetime.fromtimestamp(row[0]))
  126. values.append(row[1])
  127. fig, ax = plt.subplots(figsize = (8, 6), dpi = 100)
  128. ax.plot_date(times, values, '-', linewidth = 3)
  129. fig.autofmt_xdate()
  130. ax.set_title('Soil Moisture: ' + str(values[-1]), horizontalalignment = 'right')
  131. ax.set_xlim([datetime.datetime.now() - datetime.timedelta(days = 1), datetime.datetime.now()])
  132. ax.set_ylim([300, 1023])
  133. fig.savefig('/home/pi/internet-of-seeds/soil.png')
  134. c.execute('SELECT time, temp FROM data WHERE time >= ' + yesterday)
  135. times = []
  136. values = []
  137. for row in c.fetchall():
  138. times.append(datetime.datetime.fromtimestamp(row[0]))
  139. values.append(row[1])
  140. fig, ax = plt.subplots(figsize = (8, 6), dpi = 100)
  141. ax.plot_date(times, values, '-', linewidth = 3)
  142. fig.autofmt_xdate()
  143. ax.set_title('Temperature: ' + str(values[-1]), horizontalalignment = 'right')
  144. ax.set_xlim([datetime.datetime.now() - datetime.timedelta(days = 1), datetime.datetime.now()])
  145. ax.set_ylim([0, 40])
  146. fig.savefig('/home/pi/internet-of-seeds/temperature.png')
  147. c.execute('SELECT time, humidity FROM data WHERE time >= ' + yesterday)
  148. times = []
  149. values = []
  150. for row in c.fetchall():
  151. times.append(datetime.datetime.fromtimestamp(row[0]))
  152. values.append(row[1])
  153. fig, ax = plt.subplots(figsize = (8, 6), dpi = 100)
  154. ax.plot_date(times, values, '-', linewidth = 3)
  155. fig.autofmt_xdate()
  156. ax.set_title('Humidity: ' + str(values[-1]), horizontalalignment = 'right')
  157. ax.set_xlim([datetime.datetime.now() - datetime.timedelta(days = 1), datetime.datetime.now()])
  158. ax.set_ylim([0, 100])
  159. fig.savefig('/home/pi/internet-of-seeds/humidity.png')
  160. print("Graphs Drawn")
  161.  
  162. def checkLighting():
  163. now = datetime.datetime.now()
  164. if now.hour >= 20 or now.hour <= 6:
  165. pi.set_PWM_dutycycle(6, 0)
  166. else :
  167. pi.set_PWM_dutycycle(6, 255)
  168.  
  169. def checkWater(x):
  170. yesterday = datetime.datetime.now() - datetime.timedelta(days = 1)
  171. now = datetime.datetime.now()
  172. conn = sqlite3.connect('plant.db')
  173. c = conn.cursor()
  174. c.execute('SELECT lastwater FROM data ORDER BY time DESC LIMIT 1;')
  175. for row in c.fetchall():
  176. y = row[0]
  177. print(y)
  178. print(x)
  179. if not(int(now.hour) >= 20 or int(now.hour) <= 6) and(x >= 600) and(y * 1.0 <= (time.time() - datetime.timedelta(days = 1).total_seconds())):
  180. print("true")
  181. pi.set_PWM_dutycycle(26, 255)
  182. time.sleep(5)
  183. pi.set_PWM_dutycycle(26, 0)
  184. return time.time()
  185. else :
  186. print("false")
  187. return y
  188.  
  189. checkLighting()
  190. logSensorValues()
  191. capture_image()
Advertisement
Add Comment
Please, Sign In to add comment