2018年08月04日

Arduino& W5500からelasticsearchへのデータ投入

今回はArduino&W5500からelasticsearchへデータ投入する方法を紹介します。

W5500の代わりにESP32やESP02などのWiFiモジュールでもほとんど同じです。


httpクライアントからpostしてデータを
elasticsearchへ投入するのが正統派の方法です。

今回はコードを減らすため、
httpクライアントを使用せずにTCPのみでデータを投入します。

httpのpostは結局、TCPで下記の文字列送っているだけなので、
単純な処理であればTCPのみで実装できます。


POST /test_index1/data HTTP/1.1
Content-Type: application/json
Content-Length: 99
Host: 192.168.XXX.XXX:9200
Connection: close

{
"index":"test_index",
"type":"data",
"date": "2018-07-10T13:56:06.000Z",
"temp": 28.5,
"humd": 70.2
}


1. Elasticsearch側の設定
 Elasticsearchを起動させているPCのLANといった外部からデータを投入するため、
 config/elasticsearch.ymlファイルに下記の文字を追記します。

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300


2. Elasticsearchを起動させているPCのLANを設定します。
 今回はW5500とPCをLANケーブルで直結します。
 最近のLANは自動的に接続状態を判別するため、
 クロスケーブルでなくても、普通のストレートケーブルが使用できます。

 直結でDHCP無効のため、PC 192.168.1.1と設定します。

elastic-arduino0.png

 なお、W5500側は192.168.1.2を設定しています。

3. W5500&Arduinoの設定
 W5500のシールドを乗せたArduinoに下記のコードを書き込みます。
 今回のコードはデータ送信後のhttp post成功の有無を確認していません。
 実際の運用ではデータ送信後の200、201などの成功有無確認が必要です。

 処理の流れ
 [W5500初期化]→[接続]→[データ送信]→[切断]

4. 動作確認
 PCとW5500をLANケーブルで接続し、Elasticsearchを起動させます。
 この状態でコードを書き込んだArduinoの電源を入れ、
 シリアルモニタで確認するとデータが投入されます。
 成功すると下記のように
 「HTTP/1.1 201 Created…」
 と成功したことが分かります。

elastic-arduino.png

5. Elasticsearch Kibanaの動作確認
 kibanaを起動させます。
 最初はインデックスパターンが何も設定されていないため、
 データを投入しても何も表示されません。
 Manegementから今回の「test_index」を欄に入れ、
 「Next Step」をクリックします。

 kibana-1.png


 続いて送信データ内の日付情報のデータを選択します。
 「Create index pattern」をクリックして設定を完了します。



 「Discover」に戻って、右上の時間範囲を「This year」などを選択すると
 データが入っていることが分かります。



  kibanaは未来のデータは表示できません。
 また、今回投入したデータの日付は固定時刻ですが、
 実際はRTC等からUTC時刻を取得して送信する必要があります。

 このようにArduinoからElasticsearchに簡単にデータ投入が可能です。
 W5500でなくても同様のシリーズの他、
 無線LANでTCP送信可能なESP-WROOM-02やESP-WROOM-32からでも簡単に
   Elasticsearchにデータ投入して、kibanaで可視化することができます。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年07月28日

Node-Redからelasticsearchへのデータ投入

今回はNode-Redからelasticsearchにデータを投入する方を紹介します。

elasticsearchはhttpメソッドを使用してjson形式でデータを投入します。

今回はタイムスタンプボタンを押すとその時の時刻とサンプルデータを
elasticsearchに投入する例を紹介します。



使用するノードは主に
「http request」のノード
「function」のノード
です。




node.jpg






「function」のノード内で投入先のelasticsearch、
インデックス、データ等を定義してpayloadに投入します。


今回はelasticsearchとNode-Redが同一マシン上にあるため、
elasticsearch の宛先はlocalhostに設定しています。
また標準のポート番号は9200です。

今回の例ではインデックス
「test_data」
と設定して温度と湿度を投入します。

今回は例として定数ですが、
実際には定数でなくセンサから読んだデータを投入します。



func.jpg



「http request」ノードは
POSTメソッドを選択します。

URLはfunctionノードで設定しているため、
空欄にします。



post.jpg


上記の設定をしてデプロイ後、
タイムスタンプボタンをクリックすると
データがelasticsearchに投入されます。

ブラウザからkibanaにアクセスして、
discoverから投入されたデータを確認できます。
必要に応じて、右上の期間設定や更新タイミングを変更してください。



discover.jpg

今回のサンプルコードは下記のリンクです。
メモ帳等で開いてNode-Redの
「読み込み」→「クリップボード」からインポートしてください。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年07月14日

elasticsearch 起動エラー対処方法

センサ情報を収集して表示する際にelasticsearchkibabaを使うことが時々あります。

Cloudサービスでelasticsearchとkibanaに対応しているものがありますが、
オンプレミス環境の場合はWindowsで実行する場合が多いと思います。

Windows環境でelasticsearchを起動させた際に出たエラーの対処方法をメモとして記します。

elasticsearchはJava8が必須ですが、
Java8をインストールしたにも関わらず、
下記のようなエラーが出て起動できない場合があります。
@elasticsearch6.3.0

日本語版Windowsの場合
¥Common の使い方が間違っています。

英語版Windowsの場合
The syntax of the command is incorrect.


この場合の対処方法として、
batファイルの文法が間違っているとかではなく、
JAVA_HOMEが設定されていないために発生するエラーです。

システムの環境変数にJAVA_HOMEを下記のようなJavaディレクトリを設定するとエラーが出なくなります。

JAVA_HOME C:\Program Files\Java\jdk1.8.*_***
*はインストールされているJavaのバージョンによる
  エクスプローラでディレクトリからバージョンを確認する



最初、このエラーが出て、zipファイルの解凍をミスしたのか、
batファイルの文字化けたのかなど色々試行錯誤してしまいました。
なんとも分かりづらいエラーです。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年06月30日

MACアドレス内蔵EEPROM

IoT機器の開発をしていると、
WiFi、Bluetoothだけでなく、
Ethernetも使用する機会が多々あると思います。

Wiznet W5500といったICを使用することで
簡単にEthernetでUDP,TCPを利用できます。

IMG_0023-.jpg

ここでEthernetのICで問題になるのはMACアドレスです。
サンプルプログラム等ではMACアドレスが同じため、
固有のMACアドレスを取得する必要があります。

遊びであってもスイッチングハブを使用すると
MACアドレスで識別するため、固有のMACアドレスが必要となります。

王道としてはIEEEに申請してMACアドレスを入手する方法ですが、
中小や個人ではなかなかできません。

そこで便利なものがMACアドレス内蔵EEPROMを使用する方法です。

ただ、パッケージがPDIP8しかなく、SPIベースのシリアルです。



ここでご紹介したいのが、
Microchip社から出ている24AA02E48、25AA02E48シリーズです。

24AA02E48はI2C通信、25AA02E48はSPI通信です。
また、SOT23-5、SOT23-6、SOIC8とパッケージ選択もできます。
価格も30円前後と非常に低価格です。
MACアドレスの領域は書き込み禁止になっているため、
誤ってMACアドレスを消してしまう心配もありません。

なお、24AA02E64、25AA02E64シリーズもありますが、
こちらはEUI-64のIPv6のMACアドレスのため、
未だ一般的なIPv4を使用する場合はEUI-48の24AA02E48、
25AA02E48シリーズを使用します。


実際のMACアドレスの読み出し方等についてはまた次回、ご紹介します。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2018年06月16日

ミニLCDプロジェクタ検討部品

今回はミニLCDプロジェクタを自作しようと思い、
検討している部品を紹介します。


海外でもミニLCDプロジェクタの自作プロジェクトがいくつかありますが、
LCDの日本国内での部品入手性が悪く、
なかなか踏み出せない状況でした。


秋月電子で販売されているLCDで簡単な改造により
ミニLCDプロジェクタが作れる部品があることが分かり、
実験してみました。


使用するLCDはAQM1602Y-NLW-FBWです。
秋月で販売されているこのLCDのみ黒背景で白文字、
つまり、表示文字部分が透過するタイプです。
バックライトの光で文字として白く見えるようになっています。


他のLCDは背面に反射板や色フィルム等がついているため、
LCDプロジェクタとして使用するのが難しいです。


プロジェクタといえばドームプロジェクタ部品もありますが、
制御が面倒なのとフルカラーは不要なため、
I2CのキャラクタLCDを使用します。



lcd1.jpg

まずは動作チェック。
コントラストは要調整ですが、
想定通り、文字部分が透過され、文字以外は黒く半透明となっています。


また、バックライトのプレートが簡単に外れる構造となっています。
付属のバックライトを外して、パワーLEDを当てて、レンズを通せば
ミニプロジェクタ完成という感じです。



レンズの種類、パワーLEDの出力等の検討がつかないので、
まずはiPhoneのLEDと100円均一の虫眼鏡を使って実験してみました。



lcd2.jpg

結果は表示範囲に問題ありますが、
はっきりと文字が紙のスクリーンに表示されました。

I2CでミニLCDプロジェクタが作れれば、
色々応用できそうです。


パワーLEDや非球面などのレンズ使って
もう少し実用的なミニLCDプロジェクタを作ってみたいと思います。

posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする