ラズパイ+赤外線アレイセンサより収集したセンサ値を用いて温度分布を表示
前回、RaspberryPi + 赤外線アレイセンサによりセンサ値を収集する方法をまとめました。
elsammit-beginnerblg.hatenablog.com
今回は赤外線アレイセンサから得られたセンサ値をサーバ(PC)から取得要求を行い、
PCにて取得したセンサ値を元に温度マップを表示までの処理をまとめたいと思います。
■構成
今回も利用する赤外線アレイセンサはこちらのAMG8833です。
![]() | AMG8833 IR 8 * 8サーマルイメージャーアレイ温度センサーモジュール8x8赤外線カメラセンサー 新品価格 |

そして、全体の構成のポンチ絵ですがこんな感じです。
今回はこちらの構成で動作させていきたいと思います!!
RaspberryPi側:go言語
PC側:Python
で実装していきます。
■RaspberryPiからPCへのセンサ値送信
PCからセンサ値の要求があった場合にセンサ値を返せるようにhttpサーバを用意していきたいと思います。
今回赤外線アレイセンサはgo言語で制御しているため、httpサーバもgo言語で作成!!
httpサーバの作成はこちらにまとめておりますので、詳細はこちらを参考に。
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com
最終的なコードはこちらです。
package main import ( "fmt" "time" "github.com/gin-gonic/gin" "github.com/jweissig/amg8833" ) func Do_Post() { r := gin.Default() r.POST("/ping/", func(c *gin.Context) { c.JSON(200, gin.H{ "message": gridpost, }) }) r.Run() } var gridpost []float64 func main() { amg, err := amg8833.NewAMG8833(&amg8833.Opts{ Device: "/dev/i2c-1", Mode: amg8833.AMG88xxNormalMode, Reset: amg8833.AMG88xxInitialReset, FPS: amg8833.AMG88xxFPS10, }) if err != nil { panic(err) } ticker := time.NewTicker(1 * time.Second) go Do_Post() for { gridpost = amg.ReadPixels() fmt.Println(gridpost) <-ticker.C } }
■センサ値取得とグラフ表示
次にPC側でRaspberryPiへhttp Requestを送信しセンサ値を取得⇒グラフ表示についてまとめていきます。
pythonにてhttp Requestを行う際の実装はこちらでまとめておりますので割愛。
elsammit-beginnerblg.hatenablog.com
次にグラフ表示です。
グラフ表示はこちらを参考にし、
https://qiita.com/tm_nagoya/items/32d7e5becf73ba8a6110
このように、matplotlib.pyplotにてこちらのように実装しました。
fig = plt.imshow(array.reshape(8, -1), cmap="inferno", interpolation="bicubic")
前回のブログにて記載しました通り、センサ値は8×8(64)が1次元配列で格納されております。
2次元配列に変換するために、
array = np.array(センサ値) array.reshape(8, -1)
とし、numpyを用いて1次元配列から2次元配列に変換しております。
最終的なコードはこちらのようになります。
import requests import numpy as np import json import matplotlib.pyplot as plt from time import sleep while True: response = requests.post('httpパス') print(response.status_code) test = json.loads(response.text) array = np.array(test['message']) fig = plt.imshow(array.reshape(8, -1), cmap="inferno", interpolation="bicubic") plt.colorbar() plt.pause(.1) plt.clf()
■動作させてみた
実際に動作させてみると、このようになります。
一番温度の高い位置に頭があります。
結構はっきりと温度分布が見られたので満足!!
■最後に
今回RaspberryPiにhttpサーバも立ててしまったのですが、本来であればセンサ値を管理するサーバみたいなものがあった方がいいよな??とも思いました😅
後でやってみようかな??🤔
まぁ、RaspberryPi-PC間にサーバが新たに追加になってデータが流れるだけなのでそこまで難しくないし、やっても旨味ないかも😅