Bis zum letzten Mal sind der Materialeinkauf und die Einstellung der Raspeltorte abgeschlossen.
Dieses Mal werden wir die Sensordaten in numerische Werte konvertieren, die Menschen verstehen und mit dem Webserver verknüpfen können.
Ich habe dies für die Konvertierung von Erfassungsdaten von TSL2561 verwendet. https://github.com/aike/SimpleTSL2561.py
spi_get.py
#!/usr/bin/env python
import time
import sys
import spidev
import signal
import RPi.GPIO as GPIO
import pprint
import json
import requests
import tsl2561
from tsl2561 import SimpleTSL2561
# Sensor position#
moist_channel = 0
temp_channel = 1
#light_channel = 2
# LED GPIO
led = 4
# SPI bus open
spi = spidev.SpiDev()
spi.open(0,0)
def readAdc(channel):
# Get sendor data via MCP3008
# MCP3008 input channel count is 0-7
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
def exit_handler(signal, frame):
print("\nExit")
spi.close()
GPIO.cleanup()
sys.exit(0)
# End logic
signal.signal(signal.SIGINT, exit_handler)
# LED ON
GPIO.setmode(GPIO.BCM)
GPIO.setup(led, GPIO.OUT)
while True:
# Get Temp
v = 0.0
offset = 0.424
vc = 0.00625
#Holen Sie sich die Temperatur und rechnen Sie in Grad Celsius
temp = readAdc( temp_channel )
# temp = (temp*3.3/1024-0.5)/0.01
v = (float(temp)/1024*3.3)
temp = (v - offset) / vc
# Get Light
# light = readAdc( light_channel )
tsl2561class = SimpleTSL2561()
light = tsl2561class.readData()
# Get Moist
# the moisture sensor value description
# 0 ~300 dry soil
# 300~700 humid soil
# 700~950 in water
moist = readAdc( moist_channel )
# Sent Post request
#POST zur Web-App
payload = {'growdatum':{"device_id": 1,"moisture": moist,"temp": temp,"sublight": light,"air":0,"nutrient":0}}
headers = {'Content-Type': 'application/json'}
# LED ON
GPIO.output(led, True)
time.sleep(1)
response = requests.post('http://hogehoge.com/api/growdatas',
data=json.dumps(payload),
headers=headers)
print response
# LED Off (10min)
#Schalten Sie die LED aus und schlafen Sie 10 Minuten lang
GPIO.output(led, False)
time.sleep(600)
Benachrichtigen Sie Slack of Webhook, wenn Rasperry pi2 startet. Hier wird die von DHCP zugewiesene IP benachrichtigt. Ist Slacks Webhook hier leicht zu verstehen? http://qiita.com/satoshi03/items/14495bf431b1932cb90b
welcome.py
#!/usr/bin/env python
# Welcome slack post script for Raspberry pi2
import slackweb
import socket
import fcntl
import struct
slack = slackweb.Slack(url="https://hooks.slack.com/services/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")
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
def getserial():
# Extract serial from cpuinfo file
cpuserial = "0000000000000000"
try:
f = open('/proc/cpuinfo','r')
for line in f:
if line[0:6]=='Serial':
cpuserial = line[10:26]
f.close()
except:
cpuserial = "ERROR000000000"
return cpuserial
slack.notify(text="I'm wake up and join quad network.\nIP is " + get_ip_address('wlan0') + " cobit Raspi " + getserial() +".")
Startskript
autorun_script.sh
#!/bin/sh
python /home/pi/python_apps/welcome.py
python /home/pi/python_apps/spi_get.py
Stellen Sie dieses Startskript so ein, dass es beim Start des Raspberry Pi ausgeführt wird. Melden Sie sich bei Raspeye an und bearbeiten Sie die folgende Datei
$ sudo vi /etc/rc.local
/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
sleep 20
sudo -u pi /home/pi/autorun_script.sh &
exit 0
Nachdem Sie die IP-Adresse in Ihrem Netzwerk kennen, können Sie das Debuggen während der Ausführung durchführen. Es dauert nicht 8 Stunden, wenn es mit einer 10000-mAh-Batterie mit dieser Spezifikation betrieben wird. Anstatt mit einem Python-Skript zu schlafen, endet es, sobald es ausgeführt wird. Für die zyklische Ausführung scheint es besser zu sein, die Shell mit Cron auszuführen. Wenn die Stromversorgung schwerwiegend ist, ist es möglicherweise besser, zur Laufzeit zu starten und herunterzufahren.
Recommended Posts