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.
Intel Edison + Eaglet for Switch Science
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
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.
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>
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.
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
Ü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