「Raspberry PiからAWS経由でSalesforceへ...」
技術推進チームに所属しております城石です。
主にIoT案件を担当しています。
今回の内容は、「Raspberry PiからAWS経由でSalesforceへ...」です。
Salesforce界隈でのIoTに関する記事が乏しいため、
また、これから先増えていくモデルケースだと思いますので
本記事が少しでも、誰かの為になればと思い記載します。
IoT案件をこれから進める人などに、読んでいただければ幸いです。
※本記事では、電子工作の知識があることを前提に進めます。電子工作部分についてはタイミングがあれば別途記載します。
主にIoT案件を担当しています。
今回の内容は、「Raspberry PiからAWS経由でSalesforceへ...」です。
Salesforce界隈でのIoTに関する記事が乏しいため、
また、これから先増えていくモデルケースだと思いますので
本記事が少しでも、誰かの為になればと思い記載します。
IoT案件をこれから進める人などに、読んでいただければ幸いです。
※本記事では、電子工作の知識があることを前提に進めます。電子工作部分についてはタイミングがあれば別途記載します。
モデルケース
よくある課題を4つ程出しました。
課題をクリアしながら、Salesforceまで連携するのが今回のモデルケースです。
課題をクリアしながら、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で取得しデジタル値へ変換しましょう。
アナログ値をRaspberry Piでデジタル値へ
電子の味方(12ビットA-DコンバータADS1015)
電子工作好きの為のデパート「秋月電子通商」さんで500円ぐらいで販売されています。
あまり公開したくないですが、このADS君はとても優秀な奴なのです。
※青は廃版、緑が販売中
電子工作好きの為のデパート「秋月電子通商」さんで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あれば、大概のことはできるかと思います。
※電子工作部分の設定については、今回は割愛いたします。
アナログ入力chは最大で16ch持てることになります(500円でできるのはすごい!)。
アナログ入力16chあれば、大概のことはできるかと思います。
※電子工作部分の設定については、今回は割愛いたします。
Raspberry PiとAWS IoTの準備
※Raspberry Piのセットアップや、I2C設定、AWS IoT設定などは色々出てくると思いますので、今回は割愛いたします。
Raspberry PiとADS1015の接続が確立したところで、ADS1015から取得するアナログ値をデジタル値に変換しましょう。
変換といっても、Raspberry Piで受け取るだけですが(´・ω・`)
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のアナログ入力を取得します。
アナログ値がない場合、エラーで落ちてしまうので、無理やりtry-exceptで繋げています。
subprocess.call部分もAWS_IoTで発行した証明書などを、コピー配置したディレクトリ[hogehoge]で指定してください。
上記プログラムを実行すると、2秒毎に8chのアナログ入力を取得します。
AWS IoTで値確認
AWS IoTのテストを選択
「トピックのサブスクリプション」で、設定したトピックを入力して接続します。
正しければ、ADS1015で取得した値が表示されます。
正しければ、ADS1015で取得した値が表示されます。
AWSからSalesforceへ
上記まで進めれば、IoTらしくなってきたかと思います。
今回はこれまでです。
次の記事では最後の仕上げです。
AWS IoT でサブスクったデータをRedshiftとSalesforceへ入れたいと思います。
Raspberry PiからAWS経由でSalesforceへ...2/2 でまた会いましょう!!
今回はこれまでです。
次の記事では最後の仕上げです。
AWS IoT でサブスクったデータをRedshiftとSalesforceへ入れたいと思います。
Raspberry PiからAWS経由でSalesforceへ...2/2 でまた会いましょう!!
29 件