2019.12.03

Raspberry PiからAWS経由でSalesforceへ...1/2

「Raspberry PiからAWS経由でSalesforceへ...」

技術推進チームに所属しております城石です。
主にIoT案件を担当しています。
今回の内容は、「Raspberry PiからAWS経由でSalesforceへ...」です。
Salesforce界隈でのIoTに関する記事が乏しいため、
また、これから先増えていくモデルケースだと思いますので
本記事が少しでも、誰かの為になればと思い記載します。
IoT案件をこれから進める人などに、読んでいただければ幸いです。
※本記事では、電子工作の知識があることを前提に進めます。電子工作部分についてはタイミングがあれば別途記載します。

モデルケース

よくある課題を4つ程出しました。
課題をクリアしながら、Salesforceまで連携するのが今回のモデルケースです。
課題① 取得データ(アナログ値)は決まっているが、エッジ側が決っていない or できていない
課題② 取得項目は8項目~最大で20項目以下
課題③ クラウド未経験なので、まずは安価にクラウドを試してみたい
課題④ 開発期間は....兎にも角にも今すぐやりたい!!
まずは課題を解決
課題①/回答 アナログ値を複数ch取得するのであれば、Arduino/Raspberry Piヒアリングした際に制御系もしたいなら、Mbed
課題②/回答 I2C系でchを増やせば取得chは増やせるので、Arduino/Raspberry Pi
課題③/回答 AWSはRaspberry Piを使用したAWS IoT接続のリファレンスを公式に公開している為、Raspberry Piを使用する
課題④/回答 Arduino/Raspberry Piは秋葉原で即購入できるので、開発を即日スタートできる
4つの課題を考慮していくと、全体像はこのようになります。

全体像が決まりましたので、開発を進めましょう。
まずは、アナログ値をRaspberry Piで取得しデジタル値へ変換しましょう。

アナログ値をRaspberry Piでデジタル値へ

電子の味方(12ビットA-DコンバータADS1015)
電子工作好きの為のデパート「秋月電子通商」さんで500円ぐらいで販売されています。
あまり公開したくないですが、このADS君はとても優秀な奴なのです。
※青は廃版、緑が販売中

制御/出力インターフェース I2C
電源電圧範囲 2~5V
アナログ入力ch 4つ
アドレス 0x48~0x4B
PGAゲイン 2/3倍および、1/2/4/8/16倍を選択可能
I2Cアドレスを 0x48,0x49,0x4A,0x4Bの4つ設定可能なので、ADS1015を4つ連結すれば
アナログ入力chは最大で16ch持てることになります(500円でできるのはすごい!)。
アナログ入力16chあれば、大概のことはできるかと思います。
※電子工作部分の設定については、今回は割愛いたします。

Raspberry PiとAWS IoTの準備

※Raspberry Piのセットアップや、I2C設定、AWS IoT設定などは色々出てくると思いますので、今回は割愛いたします。
Raspberry PiとADS1015の接続が確立したところで、ADS1015から取得するアナログ値をデジタル値に変換しましょう。
変換といっても、Raspberry Piで受け取るだけですが(´・ω・`)

# coding: UTF-8

import time, signal, sys
import Adafruit_ADS1x15
import subprocess
import json

import serial
import threading

import os
import commands

gain = 1

adc48 = Adafruit_ADS1x15.ADS1015(address=0x48, busnum=1)
adc49 = Adafruit_ADS1x15.ADS1015(address=0x49, busnum=1)

message = {
    "SERIAL_NUMBER": "hogehoge"
}

while True:
    print("START Voltage\n")

#48
    try:
        volts1 = adc48.read_adc(0,gain=1) /50  * 0.1
        
    except IOError:
        volts1 = 9999
    try:
        volts2 = adc48.read_adc(1,gain=1) /50  * 0.1
    except IOError:
        volts2 = 9999
    try:
        volts3 = adc48.read_adc(2,gain=1) /50  * 0.1
    except IOError:
        volts3 = 9999
    try:
        volts4 = adc48.read_adc(3,gain=1) /50  * 0.1
    except IOError:
        volts4 = 9999

#49
    try:
        volts5 = adc49.read_adc(0,gain=1) /50  * 0.1
        
    except IOError:
        volts5 = 9999
    try:
        volts6 = adc49.read_adc(1,gain=1) /50  * 0.1
    except IOError:
        volts6 = 9999
    try:
        volts7 = adc49.read_adc(2,gain=1) /50  * 0.1
    except IOError:
        volts7 = 9999
    try:
        volts8 = adc49.read_adc(3,gain=1) /50  * 0.1
    except IOError:
        volts8 = 9999
    
    print( "V1 : " + str(volts1) + "V\n" )
    print( "V2 : " + str(volts2) + "V\n" )
    print( "V3 : " + str(volts3) + "V\n" )
    print( "V4 : " + str(volts4) + "V\n" )
    print( "V5 : " + str(volts5) + "V\n" )
    print( "V6 : " + str(volts6) + "V\n" )
    print( "V7 : " + str(volts7) + "V\n" )
    print( "V8 : " + str(volts9) + "V\n" )

    message['TIMESTAMP']              = time.time()
    message['AWS_項目A']               = volts1
    message['AWS_項目B']               = volts2
    message['AWS_項目C']               = volts3
    message['AWS_項目D']               = volts4
    message['AWS_項目E']               = volts5
    message['AWS_項目F']               = volts6
    message['AWS_項目G']              = volts7
    message['AWS_項目H']              = volts8
    
    payload = json.dumps(message)

    subprocess.call(['/home/pi/[hogehoge]/[AWS_IoT証明書から持ってくる.py]', payload])

    print("END Voltage\n")
    time.sleep(2)
python.py
ADS1015の値取得する際にtry-exceptをしている理由ですが、
アナログ値がない場合、エラーで落ちてしまうので、無理やりtry-exceptで繋げています。
subprocess.call部分もAWS_IoTで発行した証明書などを、コピー配置したディレクトリ[hogehoge]で指定してください。

上記プログラムを実行すると、2秒毎に8chのアナログ入力を取得します。

AWS IoTで値確認

AWS IoTのテストを選択

「トピックのサブスクリプション」で、設定したトピックを入力して接続します。
正しければ、ADS1015で取得した値が表示されます。

AWSからSalesforceへ

上記まで進めれば、IoTらしくなってきたかと思います。
今回はこれまでです。

次の記事では最後の仕上げです。
AWS IoT でサブスクったデータをRedshiftとSalesforceへ入れたいと思います。

Raspberry PiからAWS経由でSalesforceへ...2/2 でまた会いましょう!!
29 件
     
  • banner
  • banner

関連する記事