[PYTHON] Acquisition des données de croissance des plantes Acquisition des données des capteurs

Pour la dernière fois, l'achat des matériaux et la mise en place de la tarte à la râpe sont terminés.

  1. Obtenez des données sur l'environnement de croissance des plantes.
  2. Acquisition de données sur la croissance des plantes Construction de l'environnement du Raspberry Pi2 modèle B

Cette fois, nous convertirons les données du capteur en valeurs numériques que les humains peuvent comprendre et les lierons au serveur Web.

Je l'ai utilisé pour la conversion des données d'acquisition du TSL2561. 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

    #Obtenir la température et la convertir en degrés 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
    #PUBLIER sur l'application Web
	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)
	#Éteignez la LED et dormez pendant 10 minutes
	GPIO.output(led, False)
	time.sleep(600)
	

Avertissez Slack du webhook lorsque Rasperry pi2 démarre. Ici, l'adresse IP attribuée par DHCP est notifiée. Le webhook de Slack est-il facile à comprendre ici? 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() +".")

Script de démarrage

autorun_script.sh


#!/bin/sh

python /home/pi/python_apps/welcome.py

python /home/pi/python_apps/spi_get.py

Définissez ce script de démarrage pour qu'il s'exécute au démarrage du Raspberry Pi. Connectez-vous à Raspeye et modifiez le fichier suivant

$ 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

Maintenant que vous connaissez l'adresse IP de votre réseau, vous pouvez déboguer pendant l'exécution. Il ne dure pas 8 heures lorsqu'il est alimenté par une batterie de 10000 mAh avec cette spécification. Plutôt que de dormir avec un script Python, il se termine une fois qu'il est exécuté. Pour une exécution cyclique, il semble préférable d'exécuter le shell avec Cron. Si l'alimentation est sévère, il peut être préférable de démarrer et de s'arrêter au moment de l'exécution.

Recommended Posts

Acquisition des données de croissance des plantes Acquisition des données des capteurs
[Bases de la science des données] Acquisition de données à partir de l'API
Acquisition et visualisation des données de capteurs pour la croissance des plantes avec Intel Edison et Python
Acquisition de données chronologiques (quotidiennes) des cours des actions
Détecter les données General MIDI à partir d'une grande quantité de MIDI
Acquisition automatique des données de cours des actions avec docker-compose
Transition du baseball vue à partir des données
DataNitro, implémentation de la fonction de lecture des données de feuille
[Bases de la science des données] Collecte de données depuis RSS avec python
Extraction de données depuis S3
Pré-traitement des données préfectorales
Sélection des données de mesure
SIGNATURE Quête ② De la création du modèle de ciblage à la création des données soumises
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
[Python] Extrayez des données texte à partir de données XML de 10 Go ou plus.
L'histoire de la copie de données de S3 vers TeamDrive de Google
Météorologie x Python ~ De l'acquisition de données météorologiques à l'analyse spectrale ~