[PYTHON] Senden Sie den Wert des Beschleunigungssensors von Eaglet + Intel Edison an Kinesis

Dieser Artikel ist der Artikel zum 20. Tag des IoT Backend Adventskalenders 2015. Erstellen Sie eine Anwendung, die den Wert des Beschleunigungssensors von Edison an den Amazon Kinesis-Stream wie IoT sendet.

1. Hardware-Vorbereitung

Intel Edison + Eaglet for Switch Science edsion-eaglet.png

Die E / A von Intel Edison beträgt 1,8 V, aber da der Eaglet eine Umwandlungsschaltung auf 3,3 V hat, können viele der auf dem Markt befindlichen Sensoren verwendet werden. Darüber hinaus verfügt Eaglet über einen Anschluss, über den Sie [GROVE] verbinden können (https://www.switch-science.com/catalog/list/145/). Also werde ich GROVE's als Beschleunigungssensor verwenden.

GROVE - I2C 3-Achsen-Beschleunigungssensor ADXL345 installiert grove_ ADXL345.png

Die Verbindung ist sehr einfach. Verbinden Sie einfach die Grove-Anschlüsse mit dem mit dem Sensor gelieferten Kabel miteinander. Im Gegenteil, Sie können sicher sein, dass es nicht haften bleibt.

edison-grove-connect.png

2. Installieren und konfigurieren Sie die Software auf Edison

Ich werde den Teil des Artikels vom letzten und vom letzten Mal machen.

Melden Sie sich mit SSH bei Edison an. Installieren Sie die Pakete, die zum Entwickeln Ihrer Anwendung in Python erforderlich sind.

#Python Package Manager installieren
root@my-edison:~# opkg install python-pip
#AWS CLI-Installation
root@my-edison:~# pip install awscli
#Installieren Sie das Python-Paket für AWS
root@my-edison:~# pip install boto3 

Richten Sie die Verbindung für die Verbindung mit AWS ein.

root@my-edison:~# aws configure
AWS Access Key ID [None]: <Schlüssel für Edison>
AWS Secret Access Key [None]: <Schlüssel für Edison>
Default region name [None]: <Region, die Sie verwenden möchten>
Default output format [None]: <Nach Ihren Wünschen>

3. Erstellen Sie einen Kinesis-Stream

Erstellen Sie einen Kinesis-Stream, um die Daten zu streamen. Ich habe es hier über die AWS CLI erstellt, aber es gibt kein Problem, wenn ich es über die AWS Management Console mache.

Erweitern Sie den Stream-Namen als "Sample-Edison-Stream". Ersetzen Sie es durch einen beliebigen Namen.

$ aws kinesis create-stream --stream-name Sample-Edison-Stream --shard-count 1

Überprüfen Sie, ob der Stream erstellt wurde.

$ aws kinesis describe-stream --stream-name Sample-Edison-Stream
{
    "StreamDescription": {
        "RetentionPeriodHours": 24,
        "StreamStatus": "CREATING",
...

Wenn "StreamStatus" zu "ACTIVE" wird, ist es abgeschlossen. Warten Sie im Falle von "CREATING" eine Weile.

4. Erstellen Sie eine Anwendung, die Daten an Kinesis sendet

Erstellen Sie eine Anwendung, die den Wert des Beschleunigungssensors etwa alle 0,1 Sekunden an Kinesis sendet. Bitte verwenden Sie die erstellte Anwendung, wie sie im folgenden Repository veröffentlicht wird. https://github.com/mia-0032/edison-adxl345-to-kinesis

Edison hat von Anfang an ein Paket namens upm (Nützliche Pakete & Module) installiert, das die Verwendung von Sensoren usw. vereinfacht. Du kannst es schaffen.

sender.py


# -*- coding: utf-8 -*-

import boto3
import json
import pyupm_adxl345 as adxl345

from socket import gethostname
from sys import argv
from time import sleep

#Name des Kinesis-Streams durch Argument angegeben
stream_name = argv[1]

#Der Eaglet's Grove-Anschluss ist mit I2C Nr. 6 verbunden. Geben Sie daher 6 an.
adxl = adxl345.Adxl345(6)

kinesis = boto3.client('kinesis')

while True:
    #Beschleunigung bekommen
    adxl.update()
    force = adxl.getAcceleration()
    data = {'X': force[0], 'Y': force[1], 'Z': force[2]}

    #Daten an Kinesis senden
    res = kinesis.put_record(
        StreamName=stream_name,
        Data=json.dumps(data),
        PartitionKey=gethostname()  #Dieses Mal gibt es nur eine Scherbe, also spielt es keine Rolle
    )

    sleep(0.1)

Es kann mit dem folgenden Befehl ausgeführt werden.

root@my-edison:~# python sender.py Sample-Edison-Stream

5. Überprüfen Sie, ob Daten an Kinesis gesendet wurden

Überprüfen Sie, ob Daten zu Kinesis fließen. Wir haben ein Python-Skript zur Bestätigung erstellt. Verwenden Sie es daher.

receiver.py


# -*- coding: utf-8 -*-

import boto3
import logging

from sys import argv
from time import sleep

#Logger-Generierung
logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#Name des Kinesis-Streams durch Argument angegeben
stream_name = argv[1]
logger.info("Stream Name: {0}".format(stream_name))

kinesis = boto3.client('kinesis')

#Shard ID abrufen
stream = kinesis.describe_stream(
    StreamName=stream_name
)

#Dieses Mal wird die erste Shard-ID verwendet, da der Stream mit 1 Shard erstellt wird.
shard_id = stream['StreamDescription']['Shards'][0]['ShardId']

#Holen Sie sich den ersten Shard-Iterator
shard_iterator = kinesis.get_shard_iterator(
    StreamName=stream_name,
    ShardId=shard_id,
    ShardIteratorType='TRIM_HORIZON'
)['ShardIterator']

#Holen Sie sich Aufzeichnungen ernsthaft in einer Schleife
while True:
    res = kinesis.get_records(
        ShardIterator=shard_iterator,
        Limit=100
    )
    for r in res['Records']:
        logger.info(
            'Time: {0}, Data: {1}'.format(
                r['ApproximateArrivalTimestamp'],
                r['Data']
            )
        )
    shard_iterator = res['NextShardIterator']
    sleep(1)

Es kann mit dem folgenden Befehl ausgeführt werden.

root@my-edison:~# python receiver.py Sample-Edison-Stream

Wenn der Datensatz so fließt, ist er ein Erfolg.

INFO:root:Time: 2015-12-20 14:40:59.522000+09:00, Data: {"Y": -0.10188677161931992, "X": -0.075471684336662292, "Z": 0.95703125}
INFO:root:Time: 2015-12-20 14:40:59.675000+09:00, Data: {"Y": -0.056603759527206421, "X": 0.0037735840305685997, "Z": 0.94921875}
INFO:root:Time: 2015-12-20 14:40:59.833000+09:00, Data: {"Y": -0.24150937795639038, "X": 0.018867921084165573, "Z": 0.90625}
INFO:root:Time: 2015-12-20 14:40:59.983000+09:00, Data: {"Y": -0.22264145314693451, "X": -0.0037735840305685997, "Z": 0.9296875}
INFO:root:Time: 2015-12-20 14:41:00.133000+09:00, Data: {"Y": -0.15094336867332458, "X": 0.011320752091705799, "Z": 0.9375}

Sie haben die Daten erfolgreich an Kinesis gesendet! Ist Prost für gute Arbeit.

Recommended Posts

Senden Sie den Wert des Beschleunigungssensors von Eaglet + Intel Edison an Kinesis
Push-Benachrichtigung an Intel Edison
Senden Sie Befehle von Atom an Maya
Senden Sie eine Nachricht von Slack an einen Python-Server
Steuern Sie LED-Lampen von einem Mikrocomputer (Intel Edison) (1)
Steuern Sie LED-Lampen von einem Mikrocomputer (Intel Edison) (2)