[PYTHON] Erfassung von Pflanzenwachstumsdaten Erfassung von Daten von Sensoren

Bis zum letzten Mal sind der Materialeinkauf und die Einstellung der Raspeltorte abgeschlossen.

  1. Erhalten Sie Daten über die Pflanzenwachstumsumgebung.
  2. Erfassung von Pflanzenwachstumsdaten Raspberry Pi2 Model B-Umgebungskonstruktion

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

Erfassung von Pflanzenwachstumsdaten Erfassung von Daten von Sensoren
[Data Science-Grundlagen] Datenerfassung über API
Erfassung und Visualisierung von Sensordaten für das Pflanzenwachstum mit Intel Edison und Python
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
Erkennen Sie allgemeine MIDI-Daten von einer großen Menge von MIDI
Automatische Erfassung von Aktienkursdaten mit Docker-Compose
Übergang von Baseball aus Daten gesehen
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python
Daten aus S3 extrahieren
Vorverarbeitung von Präfekturdaten
Auswahl der Messdaten
SIGNATE Quest ② Von der gezielten Modellerstellung bis zur Erstellung von Übermittlungsdaten
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python
[Python] Extrahieren Sie Textdaten aus XML-Daten von 10 GB oder mehr.
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
Meteorologie x Python ~ Von der Wetterdatenerfassung bis zur Spektrumanalyse ~