Hogyan lehet mérni a hőmérsékletet és elküldeni az AWS IoT-nak egy Raspberry Pi használatával

Mi van, ha önállóan szeretné korrigálni az irodában a hőmérsékletet? Vagy mi van, ha kíváncsi az irodai környezetre az IoT-érzékelők használatával?

Ha ez érdekesnek tűnik számodra, kérlek, olvasd tovább.

Először fel kell állítanunk egy hőmérséklet-érzékelőt. Csatlakoztatjuk egy Arduino-hoz, amely egy RaspberryPi-hez csatlakozik.

A következő lépés az AWS IoT SDK beállítása a Raspberry Pi készüléken.

Állítsa be a dolgot

  1. Hozzon létre egy dolgot az AWS IoT-ban:

2. Kezdeményezzen egyetlen dolgot:

3. Hozzon létre egy adott típusú dolgot. Itt RaspberryPi-t használunk (a típusokat te állítod össze).

4. Hozzon létre egy tanúsítványt a Thing számára, hogy kommunikáljon az AWS-szel:

5. Töltse le a tanúsítványokat, egy root tanúsító hatóságot (CA), aktiválja a dolgot, és csatolja a házirendet.

6. Itt található a szabályzat kódja. Lehet, hogy kissé megengedőnek tűnik, de rendben van a bemutató alkalmazás számára.

Telepítse a RaspberryPi-t

Mielőtt elkezdené a telepítést, kérjük, másolja át az összes tanúsítványt és az összes gyökér CA fájlt a RaspberryPI-re (az scp segíthet). Telepítenie kell a Node.js-t is, ha még nem rendelkezik vele.

Telepítenie kell az AWS IoT eszköz SDK-t is.

sudo apt-get update sudo apt-get upgrade sudo apt-get install nodejs openssl x509 -in ./CA-roots/VeriSign-Class\ 3-Public-Primary-Certification-Authority-G5.pem -inform PEM -out root-CA.crt chmod 775 root-CA.crt npm install aws-iot-device-sdk

Itt található az a kód, amely beolvassa az adatokat a soros portról, és hőmérsékleti értékeket küld az AWS IoT eszköz SDK segítségével. A kód az Amazon példáin alapul.

'use strict'; console.log('Running...'); const SerialPort = require('serialport'); const Readline = require('@serialport/parser-readline') const portName = '/dev/ttyACM0'; const port = new SerialPort(portName, (err) => { if (err) { return console.log('Error: ', err.message); } }); const deviceModule = require('aws-iot-device-sdk').device; const parser = port.pipe(new Readline({ delimiter: '\r\n' })); const rePattern = new RegExp(/C: (.+)F:(.+)/); parser.on('data', (data) => { const arrMatches = data.match(rePattern); if(arrMatches && arrMatches.length >= 1) { const readingInC = arrMatches[1].trim(); console.log(readingInC); sendDataToTheNube(readingInC); } }); const defaults = { protocol: 'mqtts', privateKey: './iot/f5b0580f5c-private.pem.key', clientCert: './iot/f5b0580f5c-certificate.pem.crt', caCert: './iot/root-CA.crt', testMode: 1, /* milliseconds */ baseReconnectTimeMs: 4000, /* seconds */ keepAlive: 300, /* milliseconds */ delay: 4000, thingName: 'cuttlefish-hub-01', clientId: 'nouser' + (Math.floor((Math.random() * 100000) + 1)), Debug: false, Host: 'a7773lj8lvoid9a.iot.ap-southeast-2.amazonaws.com', region: 'ap-southeast-2' }; function sendDataToTheNube(readingInC) { const device = deviceModule({ keyPath: defaults.privateKey, certPath: defaults.clientCert, caPath: defaults.caCert, clientId: defaults.clientId, region: defaults.region, baseReconnectTimeMs: defaults.baseReconnectTimeMs, keepalive: defaults.keepAlive, protocol: defaults.Protocol, port: defaults.Port, host: defaults.Host, debug: defaults.Debug }); device.publish(`temperature/${defaults.thingName}`, JSON.stringify({ temperature: readingInC })); }

Tehát most mit tehet ezekkel az adatokkal?

Írhat egy Lambdát, amely az adatokat feldolgozásra vonja be. Így nézhet ki:

require("source-map-support").install(); import { Callback, Handler } from "aws-lambda"; import { baseHandler } from "../shared/lambda"; import logger from "../shared/logger"; import {Models} from "../shared/models"; import {QueueWriter} from "./queue-writer"; const handler: Handler = baseHandler((event: any, callback: Callback) => { logger.json("Event:", event); const writer = new QueueWriter(); const { temperature, sensorId } = event; const reading: Models.Readings.TemperatureReading = { temperature, sensorId, }; writer.enqueue(reading) .then(() => callback()) .catch(callback); }); export { handler };

És a serverless.com fájlja így nézhet ki:

functions: sensorReadings: name: ${self:provider.stage}-${self:service}-sensor-readings handler: sensor-readings/index.handler description: Gets triggered by AWS IoT timeout: 180 environment: READING_QUEUE_NAME: ${self:provider.stage}_${self:custom.productName}_reading READING_DL_QUEUE_NAME: ${self:provider.stage}_${self:custom.productName}_reading_dl tags: service: ${self:service} events: - iot: sql: "SELECT * FROM '#'"

Remélem, hogy ez a bejegyzés spórolt Önnek egy kis időt az eszköz beállítása során. Köszönöm, hogy elolvasta!