安価かつ簡便にハウスの遠隔監視に使える
IoT 機器「通い農業支援システム」
製作マニュアル農研機構 東北農業研究センター

目次
はじめに ..................................................................................................................................................... 3
通い農業支援システムの目的 .................................................................................................................... 3
通い農業支援システムのコスト ................................................................................................................. 4
１．通い農業支援システムの構成 ......................................................................................................... 4
２．通い農業支援システムのイニシャルコスト（1 棟から 6 棟の場合） ............................................ 5
３．使用に伴うランニングコスト ......................................................................................................... 6
４．通い農業支援システムの技術的な仕組み ....................................................................................... 7
第１章 IoT 温度計の製作 ........................................................................................................................ 11
１．材料を確認しましょう .................................................................................................................. 11２．温度計を組み立てましょう ........................................................................................................... 11
３．温度計をスマホと接続しましょう ................................................................................................ 12４．温度を計ってみましょう ............................................................................................................... 15
５．【重要】温度計のアクセストークンを保存する ............................................................................ 15
６．【応用】他のセンサをつないだときの注意 ................................................................................... 16
第２章 スマホのメッセージアプリの設定 .............................................................................................. 17
１．【スマホで】事前準備 .................................................................................................................... 17
２．【スマホで】通知先の設定 ............................................................................................................. 17
３．【Raspberry Pi で】LINE Notify にアクセスして、トークンを発行する .................................... 17
４．【スマホで】通知したい LINE グループに LINE Notify を招待する............................................ 20
第３章 小型パソコン（Raspberry Pi）でのプログラム ...................................................................... 21
１．Raspberry Pi の設定（windows パソコンでの操作） ................................................................... 21
２．Raspberry Pi の設定（Raspberry Pi での操作） ........................................................................... 25
３．グラフ通知プログラムを使用する際の追加設定 .......................................................................... 27
４．プログラム言語 Python を使う準備 .............................................................................................. 29
５．配布プログラムのダウンロード .................................................................................................... 32
６．プログラム①：「定期通知プログラム」温度を決まった時刻に通知 ........................................... 34
７．プログラム②：「警報通知プログラム」決まった温度以上・以下になった時に通知 .................. 39
８．【応用】プログラム③：センサが３つ以上あり、エラー時に再取得する .................................... 41
９．【応用】プログラム④：３つ以上のデータを csv 形式で保存する方法 ........................................ 44
第４章 プログラムの自動実行................................................................................................................. 48
１. ターミナルから crontab を開く ..................................................................................................... 48
２．crontab の初期設定をする。（２回目以降は初期設定画面が出てきません） .............................. 49
３．crontab を使って通知間隔の設定を行う。 ................................................................................... 50
第５章 現場での設置方法 ........................................................................................................................ 54
１. マイコンの防水方法 ....................................................................................................................... 54
２. 100V 電源からの設置方法 ............................................................................................................. 56
３. 電源から設置場所が遠い場合の設置方法（USB ケーブルの延⻑について） .............................. 58
1

４. 【参考】100V 電源が無い場合に太陽光発電システムを自作する ............................................... 59
５. 温度センサの設置方法 ................................................................................................................... 63
６. 土壌水分センサの設置と使用方法 ................................................................................................. 68
第６章 第 5 章までのまとめ-温湿度と土壌水分をハウスで測定する例- .............................................. 69
１. Wio Node とセンサの準備（第１章を参照） ................................................................................ 69
２. 通知する LINE グループを準備する.............................................................................................. 70
３. プログラムの準備を行う................................................................................................................ 70
４. 「データ通知プログラム」を作成する .......................................................................................... 71
５. 「グラフ通知プログラム」を作成する .......................................................................................... 79
６. 「警報通知プログラム」を作成する ............................................................................................. 87
７. プログラムを定期実行できるように crontab を設定する ............................................................. 89
第７章 現場での使用事例 ........................................................................................................................ 90
１. 水稲育苗ハウスでの水稲育苗・タマネギ育苗の事例 .................................................................... 90
２. 水稲育苗施設（ハウス 14 棟、催芽機）の事例 ............................................................................. 91
３. イチゴ育苗ハウス・花きハウスの事例 .......................................................................................... 92
４. イチゴハウスの事例 ....................................................................................................................... 93
５. マッシュルームハウスの事例 ........................................................................................................ 94
６. 福島における水稲育苗ハウスを活用した香酸カンキツ栽培の事例 .............................................. 95
第 8 章 使用する部品と入手先について ................................................................................................. 96

免責事項■本マニュアルを用いて作成する「通い農業支援システム」、「配布プログラム」の利用又は利用不能で生じた直接又は間接的損害について、一切の責任を負わない。
■マニュアル記載の配布プログラムの商業的な利用又は配布は、農研機構に連絡する。
■農研機構は、配布プログラムに関して不具合やエラーや障害が生じないことを保証しない。
■農研機構は、配布プログラムに欠陥があると判明した場合、訂正や補修する義務を負わない。
■Wio Node は Seeed Technology Co.,Ltd の商品です。
■Wio、Wio Link は Seeed Technology Co.,Ltd が提供するソフトウェアです。
■Raspberry Pi はラズベリーパイ財団の登録商標です。
■Raspberry Pi Imager はラズベリーパイ財団が提供するソフトウェアです。
■LINE は LINE 株式会社の商標または登録商標です。
■Slack は Slack Technologies, Inc.の商標または登録商標です。
■Python は Python Software Foundation の商標または登録商標です■Google Chrome、Chromium は Google LLC の商標または登録商標です。
■GitHub は、GitHub Inc.の商標または登録商標です。
■その他、会社名、商品名などは一般に各社の商標または登録商標です。

2

はじめに
本マニュアルは「通い農業支援システム」の製作方法を説明したものです。
本システムはモジュール化された簡便な IoT 機器を利用して、離れたハウスの温度等をスマホで遠隔監視できるようにするハウス遠隔監視システムです。
ハウスごとに通信機能付きマイコンと温度センサを設置して遠隔監視システムを構築するには、
IoT に関する知識や WEB サーバの構築またはクラウドサービスの契約が必要であり、容易には作成できません。そこで、データ取得用・メッセージ通知用の Web API*を利用することで、（初歩的なプログラミングの知識など）一定の知識があれば利用できる、ハウス温度等の遠隔監視を「安価かつ簡便に」実現するシステムを提案しています。
本マニュアルでは「IoT 温度計の設定」、「スマホのメッセージアプリの設定」、「小型パソコン（Raspberry Pi）でのプログラム」「プログラムの自動実行」「現場での設置方法」「導入事例」
について説明しており、「温度等のデータを定期通知」、「しきい値を超えた際の警報通知」、「日平均値・最大値・最小値の通知」、「グラフでの通知」といった機能を持つシステムを作成できます。
*HTTP からはじまる URL を用いてサーバ側のアプリケーションを実行する仕組み

通い農業支援システムの目的
被災地では大規模水田輪作やハウス栽培による営農再開が先行しています。
しかしながら、震災被災地の営農再開地域では以下の問題があります。
■少ない担い手で大規模化・分散化した農地・ハウスを管理している■水稲育苗では既存ハウスに一時的に利用できる遠隔監視システムが求められている■育苗と圃場作業が同時期で労働負荷が大きい■見まわりなど生産管理の省力化対策が求められている■遠隔監視システムは有用だが、１年中使用することが前提の装置は過剰投資となる■ハウスを新たに建設し、灌水や側窓開閉を自動化したが遠隔監視機能はついていない
本マニュアルで紹介する「通い農業支援システム」を導入することで、遠隔地からスマートフォン
で温度、湿度、土壌水分などを定期的に確認でき、取得データは平均値やグラフで確認できるため、見回りの管理の負荷を軽減できるなど、これらの問題の解決に役立ちます。

図１ 通い農業支援システムのイメージ
3

通い農業支援システムのコスト
１．通い農業支援システムの構成
通い農業支援システムは以下の３つから構成されています。
（１）マイコン（Seeed 社製 Wio Node*）およびセンサ（２）データの取得や通知を行う小型パソコン Raspberry Pi（３）メッセージアプリ（本マニュアルでは LINE を例にしています）

図２ 通い農業支援システムの構成要素とその役割
設置場所ごとに必要となる資材について簡単に説明していきます。なお、詳しい設置方法は第 5章で説明しますので、使用する材料については適宜第 5 章を確認してください。今回はハウス１棟
から 6 棟を上限に温度センサを 1 つずつ設置するパターンについて説明します。
ハウス内には（１）の Wio Node や温度センサを設置する必要があります。Wio Node の設置には電源が必要です。100V 電源から一般的なスマートフォンの充電器に使われる USB-AC アダ
プタを使って、USB ケーブルで接続します。100V 電源が無い場合は太陽光発電システムを設置する必要がありますが、これについてはイニシャルコストの試算をしません。
データの取得や保存、グラフ化などといった処理を行う（２）の Raspberry Pi はインターネット
を通じてデータを取得・通知します。そのため、ビニールハウス内やその周りに設置する必要は無く、インターネットが利用可能な自宅や事務所などに設置します。マウスやキーボードなどの周辺機器は新品で揃える必要が無いため、コスト試算には含めません。本体基板とケースのみを想定しています。
データの閲覧にはメッセージの送受信に必要な Web API を備えるメッセージアプリであれば使*「ワイオノード」と呼びます4

用できます。今回は LINE 社のメッセージアプリ「LINE」を例にしますのでコスト試算には含めません。

２．通い農業支援システムのイニシャルコスト（1 棟から 6 棟の場合）
ハウス１棟から 6 棟を上限に通い農業支援システムを導入した際のイニシャルコストは 1 棟では約 2 万円、上限の 6 棟の場合は 1 棟あたり約 1 万円となります。表 1 の黄色の網掛け部分は
1 棟ごとに必要となる資材となります。
表１ 通い農業支援システムの導入コスト試算

（１）

（２）

ハウスの棟数
マイコン（Wio Node）
防水温度センサ
電源用USBケーブル

1棟
1,300
1,000
110

3棟
3,900
3,000
330

6棟
7,800
6,000
660

USB延長ケーブル
100V電源延長コード他*
USB ACアダプタ
Wi-Fiルータ**
Raspberry Pi 3B+***合計
1棟あたりの費用

500
5,000
1,000
5,000
6,000
¥19,910¥19,9101,500
15,000
3,000
5,000
6,000
¥37,730¥12,577

3,000
30,000
6,000
5,000
6,000
¥64,460¥10,743*100V 電源延長コード他の内訳は、「100V 電源延長コード（1,500 円）」、延長コードを入れて USB AC アダプタを保護する「コンテナ（1,000 円）」、「コンセント差し込み型の漏電ブレー
カ（2,500 円）」を想定しています。
**Wi-Fi ルータは 100V で動作する市場流通品のホームルータ（例えば Speed Wi-Fi Home
L01s 等）やモバイル ルータを想定しています。
***Raspberry Pi 3B+は本体のみを想定しています。周辺機器一式が整っているスターターキットであれば約 1 万円となります。
自宅の前にビニールハウスがある場合は、自宅の Wi-Fi ネットワークが利用できることがあります。その場合は Wi-Fi ルータは不要となります。
既に自動灌水装置などを導入しているハウスであれば、ハウス内に配電盤があることが多いです。その場合はコンテナや 100V 延長コードを利用せず、配電盤内に USB-AC アダプタを設置することで 100V 電源延長コード等を省略することができます。また、配電盤のブレーカが漏電ブレーカであれば、コンセント差し込み型の漏電ブレーカを省略することが可能です。
また、100V 電源が無い場合、太陽光発電システム（第 5 章で説明）を作成することで運用が可能ですが、冬季間を除いて 1 年間使用できるものを作る場合、少なくとも約 3 万円必要となりますので、今後ハウスに自動側窓開閉装置や自動かん水装置などを検討しているのであれば、100V 電源を設置する工事とどちらが安価かを検討する必要があります。
5

図３ 通い農業支援システム導入のイメージ
複数棟で利用する際は、Wi-Fi ルータの設置場所を工夫してできる限り１台の Wi-Fi ルータで
無線ネットワークの範囲を広くすることがコツです。ただし、通常の Wi-Fi ルータは同時接続台数
が 10 台（ホームルータでは最大 20 台ほど）ですので、温度以外にも他に測定したい項目がある、あるいは多点で計測したい場合は Wio Node の数が増えるため複数の Wi-Fi ルータが必要となることに注意してください。また、市販の Wi-Fi 中継器を用いて無線ネットワークの範囲を広げることが可能ですが、Wi-Fi 中継器自体も接続数にカウントされますので注意が必要です。
Wi-Fi ルータは製品によって異なりますが、Wi-Fi の電波はハウス内に設置した場合は直線距
離で約 30～40m ほど届きます。用意した Wi-Fi ルータでどこまで電波が届くかは事前に確認する必要があります。今回 6 棟で使用する場合は、中央のハウスの入り口に設置し、他の隣接するハ
ウスでは電波が届く範囲に Wio Node を設置することを前提としています。

３．使用に伴うランニングコスト
通い農業支援システムで使用するインターネット回線は高速かつ大容量である必要はありません。そのため、格安 SIM と呼ばれる月額 1,000 円でデータ容量 3GB 程度の物を選択すれば十分に利用できます。使用する Wi-Fi ルータで利用可能な格安 SIM を選択しなければいけないことに注意が必要です。

6

４．通い農業支援システムの技術的な仕組み
ハウスの遠隔監視システムを製作するには、「マイコンから無線でデータを取得する仕組み」を作り、「データの取得」と「データの閲覧」機能を備える必要がありますが、簡単ではありません。
この仕組みを実現するためには、マイコン本体を「Web サーバ」とよばれるものにし、データを蓄積して、インターネットを通じてマイコン本体にアクセスしてデータを確認する方法があります。パソ
コンをハウス内に置いて、外部からそのパソコンにアクセスするイメージになります。また別の方法
は、マイコンからデータを貯めるためのクラウドへ自動でデータをアップロードする方法です。これはプログラミングの知識のある方であれば作成できますが、いずれの方法もマイコンにプログラムを書き込む必要があり、簡単ではありません。
そこで、「通い農業支援システム」では「データの取得を簡易に行える Web API が用意されたモジュール化された IoT 機器（本マニュアルでは Wio Node）」を使用して作ります。データ取得
用の Web API が用意されていると、図 4 のような仕組みで簡単にデータを取得できます。

図４ Web API を利用したデータ取得の仕組み
スマートフォンからデータ取得用の Web API にアクセス（図 4 中の赤い点線）すると、自宅や事務所の Wi-Fi を通じてメーカーのサーバにデータを取得するよう指示（リクエスト）を出します。メーカーAPI サーバはハウス内に設置した Wio Node のセンサデータを取得し、スマートフォンにデータを返します。
このように Wio Node と温度センサは前述のように数千円と、市販のインターネットにつながる
1～2 万円する温度計と比べ安価です。そのため、ハウス遠隔監視システムを安価に作成することが可能となります。
*Wio Node は Seeed Technology Co,. Ltd の製品で、データ取得用 Web API が無償で利用可能です。
7

図５ データ取得用 Web API のアクセストークンの設定方法と自動化方法
さて、データ取得用の Web API にアクセスする仕組みを図 4 では赤い点線で示しましたが、実際には図５のような設定が必要です。第１章で説明しますが、Wio Node ではスマートフォン上のア
プリでマイコンを設定し、使用するセンサを決めることができます。使用するセンサを決めると、セン
サごとにアクセストークン*が設定されます。Wio Node の場合は、「https://から始まる URL にアクセストークンが含まれた文字列」（固有の値）が設定されます。この固有の値をブラウザにアクセスすることでデータが取得可能です。
しかし、これでは手動でしかデータを知ることができません。そこでこの操作を自動化して、スマートフォンに通知するプログラムを「通い農業支援システム」では用意しています。配布プログラム
中では、センサごとに設定される「固有の値（ＵＲＬ）」を書き換えることで自動実行できるようになります。なお、配布プログラムの入手方法や利用については第 3 章で詳しく説明します。
ここまで「データ取得用の Web API が用意されてる機器は、データの取得が比較的簡便に行える」という「データの取得」機能について説明をしてきましたが、ここからは「データを閲覧する」
機能をどのように実現するかについて説明します。
Web サーバやクラウドを利用したハウス遠隔監視システムは、ブラウザで直接 Web サーバにアクセスするか、専用のアプリケーションを利用してデータを閲覧します。この方法でも、いつでもどこでもデータを確認することはできますが、普段使っているメッセージアプリでデータを確認することができれば、より簡便に利用することが可能です。
例えば「データを確認して、従業員に指示を出す」といったことをする際に、「専用のアプリを開く」⇒「メッセージアプリで従業員に連絡」といった流れよりは「メッセージアプリでデータを確認」⇒「メッセージアプリで従業員に連絡」の流れの方が簡便です。そのため、「通い農業支援システム」
ではデータをメッセージアプリに通知することにしています。

*ユーザーを判別する固有の値8図６ メッセージ通知の仕組み
メッセージアプリにはメッセージ通知用の Web API が利用されているものを使用する必要があります。そのため、今回は LINE を利用することとしています。Raspberry Pi でデータを通知するた
めのプログラムを実行すると、LINE 社のメッセージ通知用の API サーバにデータを渡します（赤い点線）（図 6）。これだけでスマートフォンにデータを通知することができます。*

図７ 配布プログラム中のメッセージ通知部分の例
ただし、ＬＩＮＥのどのグループに（あるいはどのユーザーに）通知するかを設定する必要があります。これには、Wio Node と同様に、LINE のメッセージ通知サービスである「LINE notify」を利用し、アクセストークンを発行する必要があります。アクセストークンの発行は第２章で説明しますので割愛しますが、LINE 社の Web API サーバに「通知するメッセージ」と「アクセストークン」を渡せば指定したグループにメッセージを通知することが可能です（図 7）。
*メッセージ通知用の Web API が用意されているアプリケーションは LINE や Slack があります。第３者が個人情報にアクセスできる状態となっていた事例もあることに留意して利用してください（p.９８参照）。
9ここまで、「通い農業支援システム」の「データ取得」と「データ通知」について説明しました。
しかし、例えば「10 分おきの温度」が知りたいのか、それとも「平均温度」や「グラフ」などデータを処理することで傾向を知りたいのかは生産者によって異なります。生産者にとって「利用しやすい形」でデータを通知する必要があります。そこで「通い農業支援システム」ではデータの取得、保存と通知を行う「データ通知プログラム」と、10 分おきに保存したデータ（瞬時値）を「平均値」や「グラフ」に処理してから通知する「グラフ通知プログラム」を用意しています（図 8）。

図８ 「通い農業支援システム」の仕組み
なお、プログラムの実行タイミングは、Raspberry Pi OS に付属する「プログラムを任意のタイミ
ングで自動実行する機能」である「crontab」を利用して設定しますが、第４章で説明するためここでは説明を割愛します。
「通い農業支援システム」の技術的な説明は以上となりますが、配布プログラムは Python と呼ばれるプログラム言語で書かれています。Python はインターネットを介してデータをやり取りしたり、
データを処理してグラフを作成したりすることが比較的簡単です。そのため、多くの入門書やインタ
ーネット上に解説が書かれています。本マニュアル中で説明に用いている用語や、プログラムの書
き方についてわからない点があれば、まずはインターネット上で検索し調べてみることをお勧めします。
なお、最近のインターネットにつながるスマート機器はデータ取得用の Web API が公開されているものが増えてきています。本システムでは農業用途に利用できるセンサの豊富さと、本体が安価であるため Wio Node を用いていますが、Web API を後述するような JSON 形式でデータを取得できる機器であれば、他の機器からデータを取得することも技術的には可能です。ただし、本システムでは対象としておりませんので、ご了承ください。また、配布プログラムはβ版（プロトタイ
プ）であり、Raspberry Pi の OS のアップデートや、メーカーの Web API サーバの仕様変更による不具合には対応いたしかねますので、ご留意ください。

10

第１章 IoT 温度計の製作
簡便な IoT 機器を活用した「通い農業支援システム」は、以下の３つを使って、「ハウスの温度を計って、スマートフォンに通知」します。
そのうち、１の IoT 温度計の部分が第１章となります。
1.温度センサ付きのマイコン（IoT 温度計）を組み立てて設定をする
2.スマートフォンのメッセージアプリ（LINE など）の設定をする
３．１と２を自動実行する配布プログラムを小型 PC（Raspberry Pi）で動かす

１．材料を確認しましょう

Wio Node

温度センサ

micro USB ケーブル USB-AC アダプタ

２．温度計を組み立てましょう
センサと micro USB ケーブルを Wio Node に接続します。
センサ取り付け口

完成した状態

Micro USB 端子11３．温度計をスマホと接続しましょう（先にソフトをインストールしておくとスムーズです）
イ． func ボタン を長押しするとボタン近くの青色 LED の点滅がゆっくりになります

ロ．専用ソフト「Wio」(iOS は「Wio Link」)をインストールし、スマホに機器を登録します。
Android 版*を例に説明します。 （Google Play や App Store からインストールします）

メールアドレスとパスワードを設定

タップして
機器を追加

（注意）NEXT を押す前に･･･

Wio Node を選択*「Wio」ver.2.5.2 / Android 10「Wio Link」ver.1.5.6 / iOS 14.3 動作確認済 12

スマホの設定を確認
1.GPS を ON
2.モバイルネットワークを OFF
3.WiFi を ON にして，SSID : 接続先 Wi-Fi
Pass : 接続先 Wi-Fi のパスワードに接続

マイコンと接続する
wifi を選択

Wio_xxxxxxxx
を選択（xxxx は数字）
wifi のパスワードを選択

お気に入りの名前をつけて Start

機器の登録完了！

この画面になった時は機器を追加するところからもう一度やってみましょう

ハ．温度センサを機器に登録します。

機器一覧から「Input」をタップ設定する機器をタップ「One Wire」を
タップ＆ドラッグ
左のセンサまで
持って行きます13

セットした機器を確認しタップ

この画面が出ればOK!

Update Firmware に失敗した場合は、
この手順を
もう一度行ってください。

【設定をする際のポイントと注意】
・iOS 版では設定画面や設定手順が一部異なりますが、同様の設定ができます。
Android 版の手順を開始する前に、接続用の Wi-Fi と接続しておく必要があります。「接続用の Wi-Fi と接続」⇒「Setup Your Wio Node まで進める」⇒「iOS の設定画面を開いて、Wio Node の SSID と接続する」⇒「アプリに戻って設定を進める」の順に進めてください。残りは Android 版とほぼ同様です。
・複数の Wio Node を設定する際は 1 台ずつ行い、設定が完了した Wio Nodeは一度電源を切ってから次の Wio Node の設定を開始してください。
（Wi-Fi ルータへの接続数が増えると回線が混雑して設定に失敗します）
・接続する Wi-Fi は 2.4GHz の SSID と接続してください。5GHz の SSID とは接続できません。
・一部のスマートフォンでは設定できません。また、OS の更新がされた場合
は、Wio Node 設定アプリのアップデートがされるまで設定できなくなることがあります。
（Wio Node の Func ボタンを押すことで、Wio Node が設定用の電波を発し、Wio Node の SSID を選択し接続することで、Wio Node とスマートフォンを接続しています。一部のスマートフォンは接続した SSID でインターネッ
ト通信できない場合、自動的に接続を切断してしまうため設定できません。）

14

４．温度を計ってみましょう

温度の値が出ます
右上をタップ後、
View API を選択
GET をタップ
View API の画面に出てくる https://us/wio.seeed.io/･････ の URL が重要です。
この URL をアクセストークン*と呼びます。
*ユーザーを識別する固有の値のこと
この URL をスマートフォンのブラウザでアクセスすると、以下のように表示が出ます。

ブラウザでアクセスすることで、メーカーのサーバ（Web API サーバ）を介してデータを取得しています。この操作を自動化するためにプログラムを作成する必要があります。
（本マニュアルではすぐに使える配布プログラムのほか、修正に必要な知識を得るためのサンプルプログラムを掲載しています。）

５．【重要】温度計のアクセストークンを保存する
API 画面右上に「共有ボタン」があるので、そこをタップすると View API の画面にアクセスできる URL をコピーできます。コピーして保存しておきましょう。紙に書き留めてもよいですが、「スマホのメールで自分に送る」「メモアプリ」に保存するなどすると便利です。
しかし、この URL を知られると他の人にもアクセスされてしまうので、保管方法には十分気を付けてください。

15

６．【応用】他のセンサをつないだときの注意
p.11 で温度を測定した際に、以下のように表示されました。
これは「JSON」と呼ばれる「名前」と「データ」の組み合わせの表示形式です。
｛”temperature”：23.75｝
Key
value
「データの名前のこと」「データ」
第 3 章で作成するプログラムでは、この Key が重要になります。今回は温度を測定する
ため、”temperature”しか使いませんが、他のセンサを使う場合はそれぞれのセンサに応じた Key が表示されます。たとえば、水分センサであれば”moisture”と表示されるため、水分センサを使う際はプログラム上で moisture”と表記する必要があります。
下図の Returns：という場所を見てみましょう。
これは http://us から始まるアクセストークンにアクセスした際に表示される値です。
HTTP 200 {“temperature”:[float value]} と書いてあり、key がわかります。

「HTTP 200」は正常にアクセスできた際の表示[float value]は数字のことです※プログラムでは文字と数字を区別します「HTTP 400」はアクセスできなかった際の表示

16

第２章 スマホのメッセージアプリの設定
第２章では、スマホにデータを通知するためメッセージアプリを連携させるための準備をしていきます。今回はメッセージアプリ「LINE」を例に、機能の１つである「LINE Notify」の設定を行っていきます。

１．【スマホで】事前準備
通知に使用したいＬＩＮＥのアカウント（メールアドレス）とパスワードを確認しておきます。
※ スマートフォンの LINE アプリ上で PC でのログイン許可を行いましょう

２．【スマホで】通知先の設定通知したいスマホのＬＩＮＥアプリでグループを作っておきます。

３．【Raspberry Pi で】LINE Notify にアクセスして、トークンを発行する
イ．Ｒａｓｐｂｅｒｒｙ Pi のブラウザを開き、https://notify-bot.line.me/ja/ にアクセスし、
メールアドレスとパスワードでログインします。
※ログインできない場合は、スマートフォンでブラウザアプリを開き、「PC 版サイト」を閲覧する設定にして同じ操作を行ってみてください。
（注意！）複数回ログインに失敗するとしばらくログインできなくなるようです。LINE ア
プリの設定については本マニュアルでは説明いたしませんので、ご了承ください。

ここをクリックしてログイン画面に移動してください

メールアドレスとパスワードを入力してログインしてください17

ロ．下の図のような Line Notify のページが開きます。右上をクリックして、
マイページにアクセスします
マイページはココです

ハ．下の方にアクセストークン発行とあるので、「トークンを発行する」をクリックします

トークンの発行はココです18

ニ．通知したいグループを選び、「トークン名」には「定時報告」と書き込み、「発行する」を押しましょう※トークン名はデータを通知する際に表示されます。

ホ． 【重要】アクセストークンが発行されます。
コピーボタンを押し、wio node のアクセストークンと同様にしっかり保存しましょう。
１度しか表示されないので、必ず「テキストファイル」などに一時保存しましょう19

４．【スマホで】通知したい LINE グループに LINE Notify を招待する
LINE グループのトークから招待する必要があります。
招待が終わればこれで本章は終了です。
なお、Line Notify のアクセストークンを再発行した
い場合、本章の内容を初めからもう一度行えば再発行可能です。

（参考）スマートフォンで Line notify のトークンを設定する方法「３．【Raspberry Pi で】LINE Notify にアクセスして、トークンを発行する」と同じ操作をスマートフォンで行います。スマートフォンのブラウザ（Chrome など）の設定画面で、「PC 版サイト」を表示する項目をオンにすると、スマートフォン向けサイトでは設定することができないアクセストークンの発行が可能です。ただし、「PC 版サイト」を表示する設定は、ページを移動すると「オフ」になってしまうので注意してください。

20

第３章 小型パソコン（Raspberry Pi）でのプログラム
第３章では、第１章で設定した IoT 温度計と、第２章で設定したメッセージアプリを連携させるためのプログラムを作っていきます。
プログラムは小型パソコン（Raspberry Pi）上で作成し定期実行させます。Raspberry
Pi は、初めから python というプログラミング言語が使用できる環境がインストールされており、プログラムの自動実行に必要な第４章で使用する crontab が使用できます。
まずは簡単に Raspberry Pi の設定から説明していき、その後それぞれのプログラムを動かしていきます。Raspberry Pi の詳しい OS インストール方法などについては市販の入門書等を参照してください。また、既に OS が書き込み済みの microSD カードが付属するものを購入した場合はこの操作は必要ありません。今回は何も書き込まれていない未使用の microSD を使用した場合の手順を説明します。なお、本手順はマニュアル作成時のものであることをご了承ください。

１．Raspberry Pi の設定（windows パソコンでの操作）
Raspberry Pi Imager と呼ばれる公式ソフトウェアを利用した方法を説明します。
イ．OS ファイルをダウンロードする
ラズベリーパイ財団のホームページのダウンロードページ（以下 URL）にアクセスする
https://www.raspberrypi.org/software/operating-systems/「Raspberry Pi OS with desktop and recommended software」をダウンロードするために「Download」をクリックします。
ファイルが大きいため、時間がかかります。注意してください。

ここからダウンロード

引用：https://www.raspberrypi.org/software/operating-systems/ より
21

ロ．OS ファイルをダウンロードしたら、zip ファイルのままで解凍する必要はありません。
ハ．次に OS をインストールするための公式ソフトウェア「Raspberry Pi Imager」をダウ
ンロードします。
ラズベリーパイ財団のホームページのダウンロードページ（以下 URL）にアクセスします。https://www.raspberrypi.org/software/
Windows 版を例に説明します。「Download for windows」をクリックしてダウンロードを開始してください。「imager_1.5.exe」というファイルがダウンロードされます。
今回はバージョン 1.5 を用いた場合の説明を行います。

ここからダウンロード

ニ.「imager_1.5.exe」から「Raspberry Pi Imager」をインストールします。インストー
ル後、Raspberry Pi Imager を実行します。書き込みする microSD カードの選択とイ
ンストールする OS を選択してから OS のインストールを行います。

インストールするOS の選択22

OS インストールを行う
SD カードの選択ホ．インストールする OS の選択を行います。
「Use custom」を選択し、ダウンロードした OS ファイル「20xx-xx-xx-raspiosbuster-armhf-full.zip」を選択します。
なお、「Raspberry Pi OS(other)」⇒「Raspberry Pi OS Full(32bit)」を選択する
ことでもインストールが可能ですが、OS ファイルをダウンロードしながらインストールすることとなるため、長い時間がかかるほか、通信環境等の問題で失敗した場合は途中から再実行できないため、今回は OS ファイルを事前にダウンロードする方法で行っています。

Use custom を選択

ダウンロードした OS ファイルを選択して Open をクリック
23

ヘ．インストールする SD カードの選択を行います。
事前に使用する microSD カードを使用できるようマイクロ SD カードリーダーに接続
しておきます。

OS インストールを行う
SD カードを選択しますト．OS ファイルと SD カードの選択が終わりましたので、WRITE を選択し、OS ファイルの書き込みを開始します。

WRITE を選択

SD カード内のファイルが削除されます。
問題なければ YES を選択

OS の書き込みは完了です24

２．Raspberry Pi の設定（Raspberry Pi での操作）
OS をインストールした microSD を Raspberry Pi にセットし、電源用の USB ケーブルをつなぎ Raspberry Pi に電源を入れます。Raspberry Pi には液晶モニタ、キーボードおよびマウスが接続された状態にしてください。
イ． 初期設定画面が開かれていますので、以下の画面の Next をクリックして、画面に表示される指示に従って初期設定を進めていきます。

ここをクリック

初期設定画面

ロ． 日本語での表示を行うために、「Country」を「Japan」に変更します。

ハ． 必要に応じてパスワードを変更します。

初期パスワードは“raspberry”です
変更する場合は
パスワードを入力します25

ニ． 表示画面に黒い枠がある場合はチェックボックスを入れて進めてください。

黒い枠がある
ここをチェックする

ホ． Wi-Fi に接続します。

接続先を選んで接続します。

ヘ． ソフトウェアの更新を行います。ここで更新することで日本語入力ができるようになるので、必ず実行してください。アップデートに成功すると右の画面になります。

ト. “Restart”をクリックして再起動すると日本語表示、入力ができるようになります。
再度初期設定を行いたい場合、
また日本語入力できない場合は、初期設定画面から再度ソフトウェアの更新を行う必要があります。
LXterminal(ターミナル)を使用して、
sudo piwizと入力して実行してください。
※LXterminal の説明は次ページ
26

３．グラフ通知プログラムを使用する際の追加設定
ここまでの設定で本マニュアル上のプログラムはほぼ使用できますが、グラフ通知プログ
ラムを利用する際は以下の設定が必要です。必要に応じて設定を行ってください。
イ． LXterminal（ターミナル）を使用して、グラフ通知プログラムに必要なモジュール*（プログラミング言語 Python の機能を拡張するライブラリ）を 3 つインストールします。
「NumPy」「pandas」「matplotlib」と呼ばれるものです。以下の手順に従ってください。

この画面が表示されますここをクリックする

ロ．ターミナルに次のコマンド（下線部）を打ち込んで Enter を押してください
pi@raspberrypi: ~ $ sudo pip3 install numpy

本マニュアルに沿って設定していると既にインストールされているとの表示が出ます。
ＮｕｍPｙの version は 1.20.1 の利用を想定していますが、pandas をインストールする
際にアップデートされます。
ハ．ターミナルに次のコマンド（下線部）を打ち込んで Enter を押してください
pi@raspberrypi: ~ $ sudo pip3 install pandas

インストールに成功すると上記の表示になります。

* Python 3.7.3、Numpy 1.20.1、Pandas 1.2.2、 Maplotlib 3.3.4 で動作を確認済
27

ニ．ターミナルに次のコマンド（下線部）を打ち込んで Enter を押してください
pi@raspberrypi: ~ $ sudo pip3 install matplotlib

既にインストールされているとの表記が出ますが、matplotlib の version が 3.0.2 となっています。本マニュアルでは 3.3.2 以上が必要ですのでアップデートを行います。
version が古いままだとグラフ通知時に日本語での表示ができません。
pi@raspberrypi: ~ $ sudo pip3 install -U matplotlib

アップデートに成功して、3.3.4 となったという表示が出ています。
ホ．このままですと numpy がインストールされているのに使用できない（インポートできない）状態になっています（2021 年 3 月現在）。そのため、以下のコマンドを実行し、使用できるようにします。
pi@raspberrypi: ~ $ sudo apt-get install libatlas-base-dev

28

ヘ．ここまででラズベリーパイの設定は終了ですが、必要に応じて OS のアップデートを
以下の操作を参考に行ってください。
１.アップデートがあるか確認する。ターミナルで以下のコマンドを打つ。
sudo apt-get update２．アップデートをインストールする。Lx Terminal で以下のコマンドを打つ。
sudo apt-get upgrade
場合によっては以下を実行
sudo apt autoremove

４．プログラム言語 Python を使う準備
イ．プログラムを入れるフォルダを作りましょう
Raspberry Pi （の OS である「Raspberry Pi OS」）では、通常使うフォルダは、
home フォルダ内の pi フォルダの中に作られます。つまり、 /home/pi/ の中に作られます。
以下の画面のフォルダをクリックすると pi フォルダが表示されます。

このフォルダの中にプログラムを入れる「program」フォルダを作りましょう。
右クリックの新規作成（または「New Folder」を選択）から作ることができます。

29

ロ．Python を書くためのエディタ（ソフト）を立ち上げてみましょう左上のラズベリー（図の赤い丸）をクリックし、プログラム⇒Thonny Python IDE をクリックすると下の画面が出てきます。このままでも使用できますが、日本語での表示ができるように設定していきましょう。

ハ．まず、右上にある「Switch to regular mode」をクリックした後、OK を選択後、Thonny（トニー）を終了し、もう一度起動してください。起動すると右の画面になります。

メニューが表示されます再起動
OK をクリックニ ． 「 Tool 」 か ら 「 Options 」 を 選 択 す る と 、 左 図 の Option 画 面 が 出 ま す の で 、「Language」を「日本語」に変更し、OK を選択した後、Thonny を再起動してください。

再起動

OK をクリック30

ホ．無事日本語設定が出ましたが、プログラムを作成し実行した際に、間違っている箇所などを教えてくれる「アシスタント」を表示しておきます。「表示」から「アシスタント」をクリックすると、以下の画面になります。これで Python のプログラムを書く設定は完了です。

プログラムの保存

プログラムの実行
プログラムへのアドバイス

プログラムの実行結果を表示

31

５．配布プログラムのダウンロード
マニュアル内のプログラムを Thonny で書いて使用することもできますが、通い農業支援システムでは配布プログラムをダウンロードして使用できます。
以下の手順に沿って、プログラムをダウンロードしましょう。
イ．ブラウザ（Chromium）を開いて、以下の URL にアクセスします。
https://github.com/YoshimichiYAMASHITA/KayoinougyouShienSystem
クリックしてブラウザを起動

URL をここに入力してください

ロ．GitHub と呼ばれるサイトからプログラムをダウンロードできます。「↓ Code」をクリックして、「Download ZIP」を選択してダウンロードしてください。

クリックするダウンロードする
ハ．pi フォルダ中の Downloads フォルダにプログラムがダウンロードされます。
ダウンロードしたファイル「KayoinougyoShienSystem-main.zip」を右クリックして、「ここでファイルを展開」を選択すると圧縮されたファイルが解凍されます。

右クリックして、展開します32

ニ．解凍したフォルダには以下のファイルが入っていることを確認してください。
これら以外もいくつか資料が付属していますので、適宜確認し利用してください。
【 KayoinougyoShienSystem-main フォルダ】
・program（フォルダ）
program1.py…

プログラム①「定期通知プログラム」

program2.py…

プログラム②「警報通知プログラム」

program3.py…

プログラム③「定期通知プログラム」（再実行あり）

program4.py…

プログラム④「データ保存プログラム」

これらの４つのプログラムは「通い農業支援システム」を構成する機能の一部です。このため、本システムを利用するためのチュートリアルを目的としています。しかし、これらのプログラム単体で運用することも可能です。時間が無く、通い農業支援システムをいち早く作成したい場合は、少なくともプログラム①だけを作成して利用方法を学んで下さい。
Kayoi_data10.py…

「データ通知プログラム」
10 分おきにデータを（通知）・保存する

Kayoi_daily_report.py …

「グラフ通知プログラム」
平均値、最大・最小値、グラフを通知する「通い農業支援システム」はこれらの２つのプログラム「データ通知プログラム」と「グラフ通知プログラム」で動かすことを前提としています。データ通知プログラムで 10 分ごとにデータを取得し、通知と保存を行います。グラフ通知プログラムはデータ通知プログ
ラムで保存したデータから、前日の平均値・最大値・最小値とグラフを通知します。なお、
この２つのプログラムは第６章で説明します。
ホ ． こ れ ら の プ ロ グ ラ ム を 「 ４ ． プ ロ グ ラ ム 言 語 Python を 使 う 準 備 」 で 作 成 し た「program」フォルダに移動させてください。その後、program1.py をダブルクリックして開くと、以下のような画面が開きます。次ページの説明を読んで、このプログラムを利用してみましょう。

33

６．プログラム①：「定期通知プログラム」温度を決まった時刻に通知
program1.py を開いて、プログラムを作成します。第１章、第２章で設定したアクセス
トークンを利用します。以下のプログラムの灰色の網掛け部分を変更します。
５～６行目はアクセストークンを変更
２１行目は通知するＬＩＮＥグループのアクセストークンに変更
24 行目、27～28 行目のメッセージ、センサ名、単位は必要があれば変更
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# coding:utf-8
import requests#スマートフォンで設定した wio node のトークンを入れる
url01 = "アクセストークン１"
url02 = "アクセストークン２"#request 関数を使ってデータを取得する
json1 = requests.get(url01).json()json2 = requests.get(url02).json()#エラー判定 json の key に error が含まれていれば「エラー」を返す#別のセンサを使うときはセンサに応じた"analog"などの Key を書く
data1 = 'エラー' if ("error" in json1) else json1["temperature"]data2 = 'エラー' if ("error" in json2) else json2["temperature"]#LINE notify の URL#LINE notify のトークン（通知先に応じて変更すること）
url99 = "https://notify-api.line.me/api/notify"
token = '通知する LINE グループのアクセストークン'#LINE に通知するメッセージを記入 ''は文字列のこと
message = 'ハウスの情報\n '#message += を使うと通知メッセージを増やせる#センサ名、データ番号、単位を書く
message += '温度１:'+str(data1)+'℃'+'\n'message += '温度２:'+str(data2)+'℃'#LINE に通知するための３行
payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token,}r = requests.post(url99,data=payload,headers=headers)34イ．5～6 行目のアクセストークンは第１章の p.15 で説明しました。
Wio Node のアプリを立ち上げ、View API で出てくるこの URL が「アクセストークン」になります。

View API のこの画面にはp.6 で説明した通り、PC やスマホのブラウザ上でアクセスできます。
Raspberry Pi のブラウザに、View API の URL を打ち込んで、アクセストークンを確認し、コピーしてプログラムに貼り付けましょう。
なお、
アクセストークンをブラウザに打ち込むと、ＧＥＴボタンを押したときと同じ表示がブラウザ上に表示されます。

第１章では温度センサを 1 つしか設定しませんでした。そのため、アクセストークンは今回１つだけとなります。そのため、url01、url02 ともに同じアクセストークンをコピー&ペーストしてみましょう。
ロ．２１行目のアクセストークンは第２章の p.19 で説明しました。通知したい LINE グループのアクセストークンを設定した際、画面に表示されるものを使います。

ＬＩＮＥグループのアクセストークン

35

ハ．プログラムを実行してみましょう。問題なければ設定した LINE グループに通知が来るはずです。もしも来なければアクセストークンのコピー&ペーストに失敗していないか確認して、Ｔｈｏｎｎｙの右側にあるアシスタントをチェックして修正してみてください。
同じデータを通知しているので、ほぼ同じ値になります。
温度１、温度２に同じ値が通知されました。Wio Node に温度センサを２つ接続している
場合や、ハウス２棟に温度センサを 1 つつけた Wio Node をそれぞれに設置している場合
はこのプログラムで問題ありません。しかし、今回は温度センサが１つだけですので、温度２を表示させる必要はありません。
ニ.温度２を通知しないように、温度２に関係する行を実行しないようにプログラムを修正します。実行しない行は「＃」シャープをつけることでコメント行に変えることができます。
６行目、１０行目、１５行目、２８行目の頭に「#」をつけてからプログラムを実行してください。

温度１だけが通知されましたか？ 通知されない場合はアシスタントを確認してください。よくある間違いとして「#」が半角ではなく、全角の「＃」シャープになっていることがあります。プログラムは半角文字で書くので、半角で書くようにしてください。
36

ホ.次は「24 行目、27～28 行目」の「メッセージ」、「センサ名」、「単位」の部分を変更してみましょう。’ ’や” ”で囲うことで「文字列」として表示することができます。これらを消さないように注意して名称を変えて試してみましょう。また、\n は改行を表しています。
キーボードの「\」を押すことで「\」（バックスラッシュ）を入力できます。

ヘ.次は通知するセンサを増やしてみましょう。
6 行目の次の行に、「url03 = "アクセストークン３"」を、
10 行目の次の行に、「json３ = requests.get(url0３).json()」を、15 行目の次の行に、「data3 = 'エラー' if ("error" in json3) else json3["temperature"]」を、
28 行目の最後に「+'\n'」を追加し、その次の行に「message += '温度 3:'+str(data3)+'℃'」を追加しましょう。
1 つ 1 つ入力する必要はありません、前の行からコピー&ペーストして、必要な場所だけ修正しましょう。その後はこれまで通り、灰色網掛け部分を修正してみましょう。アクセストークン３はアクセストークン１と同じものにしてから実行すると、以下のような通知が来る
はずです。
37

同じデータを通知していますが、その都度データを取得しているので、全て同じ値にならないこともあります。

このように「アクセストークンの URL の行」、「データを取得しエラー判定を行う行」、「通知メッセージの行」の３つのセットを増やしたり減らしたりすることで通知するデータの数を変えることができます。
ト.温度センサ以外を使用する時は、対応する key に変更する必要があります。例えば土壌水分センサを利用した場合は、以下のように key は”moisture”となるので、14～15 行目の”temperature”は”moisture”と変更しなくてはいけないことに注意してください。

Key は temperature

Key は moisture38

ここを変更する必要があります７．プログラム②：「警報通知プログラム」決まった温度以上・以下になった時に通知
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# coding:utf-8
import requests#スマートフォンで設定した wio node のトークンを入れる
url01 = "アクセストークン１"#request 関数を使ってデータを取得する
json1 = requests.get(url01).json()#"temperature"のデータが取れたときに data に温度を入れる
data1 = json1["temperature"]#LINE notify の URL#LINE notify のトークン（通知先に応じて変更すること）
url99 = "https://notify-api.line.me/api/notify"
token = '通知する LINE グループのアクセストークン'#高温用メッセージ
message1 = '高温注意！:'+str(data1)+'℃'
payload1 = {'message' : message1}#低温用メッセージ
message2 = '低温注意！:'+str(data1)+'℃'
payload2 = {'message' : message2}
headers = {'Authorization' : 'Bearer '+ token,}#警報を出したいときの温度を設定する
if data1 > 20.0:#高温用：この温度より「高い」と通知する
r = requests.post(url99,data=payload1,headers=headers)
if data1 < 10.0:#低温用：この温度より「低い」と通知する
r = requests.post(url99,data=payload2,headers=headers)

修正しなければいけない箇所は灰色の網掛け部分
0５～0６行目のアクセストークンを変更
２１行目は通知するＬＩＮＥグループのアクセストークンに変更
29、３２行目の設定温度は自由に変えてみましょう39

program２.py を開いて、プログラムを作成します。１から 17 行目までは先ほどのプロ
グラム①と同様です。18 行目から 33 行目が設定した温度以上、以下になった際にメッセージを通知するために追加された部分です。プログラムの灰色の網掛け部分を変更して、実行してみてください。高温注意を出したい場合は、温度センサを握って実行してみてください。例えば、以下のような通知が来れば完成です。

リアルタイムでデータ計測して通知を出すのではなく、「データを取得したタイミング」
で、設定したしきい値を上回っているか、あるいは下回っているかで警報通知するかを判断しています。そのため、警報プログラムを利用する際は、「定期通知」のプログラム①と、「警報通知」のプログラム②を両方実行して、警報通知だけは短い間隔で実行するように設定する必要があります。また、通知する LINE グループのアクセストークンは「定期通知」と「警報通知」でそれぞれ発行し、通知を分けることをお勧めします。
たとえば、以下のように設定します。
プログラム①「定期通知」・・・１時間おきに実行⇒１時間おきに通知
プログラム②「警報通知」・・・５分おきに実行⇒5 分おきにデータを取得し、異常値の時だけ通知※自動実行間隔の設定は次の章で説明しますが、crontab には以下の通り記述します。

00 * * * * sudo python /home/pi/program/program1.py*/5 * * * * sudo python /home/pi/program/program2.py
なお、温度データ取得に失敗した際は警報通知が行われませんので、プログラム①「定期通知」を行うことで、温度が問題なく取得できる状況にあることを確認して下さい。
また、高温時、低温時の通知のどちらかだけを使用したい場合は、29～30 行目、あるいは 31～32 行目に#をつけることでコメント行に変更してください。

40

８．【応用】プログラム③：センサが３つ以上あり、エラー時に再取得する
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# coding:utf-8
import requests
import time
#スマートフォンで設定した wio node のトークンを入れる
url01 = "アクセストークン１"
url02 = "アクセストークン２"
url03 = "アクセストークン３"#request 関数と for 関数を使って最大３回 ５秒おきにデータを取得する
CONNECTION_RETRY = 3
INTERVAL_TIME = 5#data1#1<= X < 4 なので 1 2 3 回試行する
for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :data1 = 'エラー'
print('data 1 error!')time.sleep(INTERVAL_TIME)
else:
data1 = json1["temperature"]
break#data2for i2 in range(1, CONNECTION_RETRY+1):
json2 = requests.get(url02).json()if ("error" in json2) :data2 = 'エラー'
print('data 2 error!')time.sleep(INTERVAL_TIME)
else:
data2 = json2["temperature"]
break#data3for i3 in range(1, CONNECTION_RETRY+1):
json3 = requests.get(url03).json()
41

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

if ("error" in json3) :data3 = 'エラー'
print('data 3 error!')time.sleep(INTERVAL_TIME)
else:
data3 = json3["temperature"]
break#LINE notify の URL#LINE notify のトークン（通知先に応じて変更すること）
url99 = "https://notify-api.line.me/api/notify"
token = '通知する LINE グループのアクセストークン'#LINE に通知するメッセージを記入
message = 'ハウス情報\n'#'センサ名:'+str(data 番号)+'単位'+'\n' センサ名、データ番号、単位を書く
message += '温度１:'+str(data1)+'℃'+'\n'message += '温度２:'+str(data2)+'℃'+'\n'message += '温度３:'+str(data3)+'℃'#必要に応じて接続回数を通知する
message += '\n'+'接続回数:'+str(i1)+' '+str(i2)+' '+str(i3)payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
r = requests.post(url99, data=payload, headers=headers)

修正箇所は灰色の網掛け部分
６～8 行目のアクセストークン
２３,34,45 行目の”key”は使用するセンサに応じて変更
52 行目の通知するＬＩＮＥグループのアクセストークンに変更
55 行目の通知するメッセージを必要に応じて変更
57～59 行目のセンサ名、単位を変更

42

program3.py を開いて、プログラムを作成します。10 から 46 行目まではプログラム①の 8 行目から 15 行目までと同じ働き（データ取得）を行っています。データを取得使用したが、回線の混雑などがあった場合に再実行するようになっています。なお、再実行の間隔と実行回数は 11-12 行目で設定できますが、通常はこの設定で問題なく動作します。網掛け部分をこれまでのプログラム同様に修正すると、以下の通知が来ます。

接続回数は、データを取得しようとした回数です。通常は１か２ですが、電源が抜けていたり、Wi-Fi ルータの電源が切れていたりすると３になります。便利な機能ですが、必要としない場合は 61 行目の頭に「#」をつけてコメントに変えてください。
次にプログラム中に出てくる「for」について説明します。「for」は繰り返し処理を行う
ときに使いますが、詳しい使い方については、市販の入門書等に任せて、ここでは「センサの数を増やしたとき」、「センサの種類を変えたとき」にどのように修正すれば良いかを解説します。以下のようにセンサの数を増やした際は黄色網掛けの数字を増やしてください。センサの種類を変えた際は灰色の網掛けの文字列（key）を変更してください。
#data1for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :data1 = 'エラー'
print('data 1 error!')time.sleep(INTERVAL_TIME)
else:
data1 = json1["temperature"]
break
コピー&ペーストして数字を変更#data2for i2 in range(1, CONNECTION_RETRY+1):
json2 = requests.get(url02).json()if ("error" in json2) :data2 ='エラー'
数字を変更
print('data 2 error!')time.sleep(INTERVAL_TIME)
else:
data2 = json2["temperature"]break
水分センサなら moisture に変更
43

９．【応用】プログラム④：３つ以上のデータを csv 形式で保存する方法
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# coding:utf-8
import requests
import os#スマートフォンで設定した wio node のトークンを入れる
url01 = "アクセストークン１"
url02 = "アクセストークン２"
url03 = "アクセストークン３"
url04 = "アクセストークン４"
url05 = "アクセストークン５"
url06 = "アクセストークン６"#request 関数を使ってデータを取得する
json1 = requests.get(url01).json()json2 = requests.get(url02).json()json3 = requests.get(url03).json()json4 = requests.get(url04).json()json5 = requests.get(url05).json()json6 = requests.get(url06).json()#エラー判定 json の key にエラーが含まれていれば「空白」を返す#別のセンサを使うときはセンサに応じた"analog"などの Key を書く
data1 = ' ' if ("error" in json1) else json1["temperature"]data2 = ' ' if ("error" in json2) else json2["temperature"]
data3 = ' ' if ("error" in json3) else json3["temperature"]
data4 = ' ' if ("error" in json4) else json4["temperature"]
data5 = ' ' if ("error" in json5) else json5["temperature"]data6 = ' ' if ("error" in json6) else json6["temperature"]#LINE notify の URL#LINE notify のトークン（通知先に応じて変更すること）
url99 = "https://notify-api.line.me/api/notify"
token = '通知する LINE グループのアクセストークン'#LINE に通知するメッセージを記入
message = 'ハウス情報\n'#'センサ名:'+str(data 番号)+'単位'+'\n' センサ名、データ番号、単位を書く
message += '温度１:'+str(data1)+'単位'+'\n'
44

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

message += '温度２:'+str(data2)+'単位'+'\n'message += '温度３:'+str(data3)+'単位'+'\n'message += '温度４:'+str(data4)+'単位'+'\n'message += '温度５:'+str(data5)+'単位'+'\n'message += '温度６:'+str(data6)+'単位'
payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
r = requests.post(url99, data=payload, headers=headers)#csv の保存のために時刻を取得
timestamp = 'date +%F" %H:%M:%S"'current_time = os.popen(timestamp).readline().strip()#csv で保存するデータを組み合わせる
data_set = str(current_time)
data_set += ',' + str(data1)
data_set += ',' + str(data2)
data_set += ',' + str(data3)
data_set += ',' + str(data4)
data_set += ',' + str(data5)
data_set += ',' + str(data6)
data_set += '\n'#/home/pi/data.txt というファイルにデータを保存する
fout = open('/home/pi/data.txt','at')fout.write(data_set)
fout.close()

修正箇所は灰色の網掛け部分
６～１１行目のアクセストークン
２３～２８行目の”key”は使用するセンサに応じて変更
３４行目の通知するＬＩＮＥグループのアクセストークンに変更
37 行目の通知するメッセージを必要に応じて変更
３９～４４行目のセンサ名、単位を変更
66 行目 data.txt を必要に応じて別の名前に変更

45

program4.py を開いて、プログラムを作成します。プログラム③のようにエラー時に繰り返し実行をするようにはなっていません。必要に応じて、13-28 行目をプログラム③で使用した for 部分に置き換えてください。
ここでは取得したデータを保存する部分である 51 行目から 68 行目について説明します。はじめに、「時刻の取得」について説明します。以下の 51-53 行目で時刻を取得しています。
%H は「時」、%M は「分」、#csv の保存のために時刻を取得%S は「秒」を示しています。
timestamp = 'date +%F" %H:%M:%S"'current_time = os.popen(timestamp).readline().strip()
次に、55-63 行目を説明します。保存するデータ数を増やしたいとき減らしたいときは
これらの行を変更します。必要のない行（例えばセンサの数が３つなら data4 から
data6 の行）は削除、あるいは「#」をつけてコメントに変更します。
＃csv で保存するデータを組み合わせる
data_set = str(current_time)
data_set += ',' + str(data1)
data_set += ',' + str(data2)
data_set += ',' + str(data3)
data_set += ',' + str(data4)
７つ目のセンサをつけた時は次の行に
data_set += ',' + str(data5)
data_set += ',' + str(data7)
data_set += ',' + str(data6)
を追加
data_set += '\n'
次に、65-68 行目を説明します。データを保存するファイル名は灰色の網掛け部分になります。このままだと、保存する先は「pi」フォルダ内で、「data.txt」という名前のファイ
ルになります。
#/home/pi/data.txt というファイルにデータを保存する
fout = open('/home/pi/data.txt','at')fout.write(data_set)
fout.close()
データの取得間隔によって名前を変えると良いでしょう。たとえば、
10 分間隔なら「data10.txt」
60 分間隔なら「data60.txt」など

46

プログラムを実行すると、以下のような通知の他に、「pi」フォルダ内に「data.txt」と呼ばれるファイルが保存されているはずです。ダブルクリックして表示すると以下のようになります。

ダブルクリックして表示通知されたデータと同じ数値が保存されます。

第４章で説明する crontab を用いて自動実行させるときは、以下のように記述してみてください。
●10 分間隔でデータを保存したいとき*/10 * * * * sudo python3 /home/pi/program/program4.py●1 時間おき（60 分間隔）でデータを保存したいとき

00 * * * * sudo python3 /home/pi/program/program4.py
47

第４章 プログラムの自動実行
ラズベリーパイには、crontab（クロンタブ）と呼ばれる、プログラムを決めた時間に実行してくれる機能が搭載されています。これを使って、先ほど作成したプログラムを自分の好きなタイミングで動かすことができます。たとえば 1 時間ごとや、早朝の温度が上がる時間の６時から 1８時までなど自由に通知間隔を設定できます。
設定方法は次の 1.～3.の手順です。
1. ターミナルから crontab を開く
2. crontab の初期設定をする。
3. crontab を使って通知間隔の設定を行う。

１. ターミナルから crontab を開く
イ．デスクトップの左上、ファイルのアイコンの隣にある黒い四角（LX terminal）をクリック
してください。

ココ！

ロ．この画面のように、 crontab -e と打って、Enter を押してください。

48

２．crontab の初期設定をする。（２回目以降は初期設定画面が出てきません）
イ．/bin/nano（と呼ばれるエディタ）を使います。画面の表示をよく見て、該当する番号を打ち Enter を押してください。（この画面の場合は「２」です。）

ロ．この画面になりましたら初期設定完了です。次に通知間隔の設定に移ります。
Ctrl を押しながら X を押すと終了し、元の画面に戻ります。

ハ．誤って「イ」の操作で/bin/nano 以外を選択してしまった場合は、ターミナルを一度終了した後、ターミナルを再度起動して、以下の下線部のコマンドを実行して/bin/nano を選択してください。
pi@raspberrypi: ~ $ select-editor

49

３．crontab を使って通知間隔の設定を行う。
イ ． 手 順 １と 同 様 に、デ ス ク ト ップ の 左 上、 フ ァイ ルの ア イ コ ン の 隣 にあ る 黒 い四 角
（LXterminal）をクリックしてください。
（手順 2 に続けて行う場合はこの手順を飛ばします）

ココ！

ロ．この画面のように、 crontab -e と打って、Enter を押してください。

50

ハ．この画面が出たら、□で囲んだ部分に次の文を書きます。

*/2 * * * * sudo python3 /home/pi/program/test.py
2 分間隔で実行

プログラムはプログラムのあるところ

Python を使う

program はフォルダ名

ファイル名
ここでは test.py
としていますが、動かすプログラムを入力してください。
(Program1.py など)

51

ニ．書き込んだあとはキーボードの「Ctrl」キーを押しながら X を押してください。
保存するか聞かれるので「y」を押しましょう。その次は「Enter」を押してください。
2 分間隔で通知が来ます。来ない場合はもう一度やり直してみてください。

キーボードで「y」を押します

キーボードで「Enter」を押して保存します

この画面が出れば保存となります。

52

ホ．指定した LINE グループに通知が来たのを確認できたら、下記の設定例を参考に通知間隔を変えてみましょう。
その前に今作成した設定は使わないので、先頭に＃「シャープ」をつけましょう。
＃をつけることでその設定は動かなくなります。

#*/2 * * * * sudo python3 /home/pi/program/test.py
2 分間隔で実行

プログラムはプログラムのあるところ

Python を使う

program はフォルダ名

また動かしたいときは＃を消してください。
crontab を設定したときは必ず Ctrl + X で終了し、忘れずに保存しましょう。

〔crontab の設定例〕
例１）10 分おき*/10 * * * * sudo python3 以下略
例２）１時間おき
00 * * * * sudo python3 以下略例３）6-18 時まで 10 分おき*/10 6-18 * * * sudo python3 以下略例４）6 時、9 時、10 時、12 時、13 時、14 時、15 時、22 時
00 6,9,10,12,13,14,15,16,22 * * * sudo python3 以下略
53

第５章 現場での設置方法
本章では現場に実際に設置する際の方法や使用できるセンサについて説明します。

１. マイコンの防水方法●必要な材料[簡易かつ短期間（半年ほど）使用する場合]・ジッパーバッグ（市販の M サイズ以上をオススメします）
・ビニールテープ又は自己融着テープ**日東シンコー、自己融着性ブチルゴムテープ No.15 など
イ． まずはじめにジッパーバッグを用意して、袋の隅をカットします。

✂✂

通すセンサによりますが、
1.5cm もあれば十分です。

ロ．その後、袋の中に電源用の USB ケーブルとセンサをつなげた Wio Node を入れ、カットして穴をあけた部分から USB ケーブルとセンサを通します。

USB ケーブルと「Analog/I2C1/D1」コネクタに接続したセンサを通します「UART/I2C0/D0」コネクタに接続したセンサを通します54

ハ．センサを通した後は、センサ部と袋の隅を「ビニールテープ」もしくは「自己融着テープ」で巻けば完成です。マイコンのコネクタ側を下にし、センサを１つだけつけた場
合は以下の写真（左側）になります。

ミスト灌水で浸水した様子

ミスト灌水など、ミストがかかるような場所には設置しないよう、高い位置から吊るすなど
してください。また、袋ごと地面に置くと中に水が入ることがあります。ハウス内に設置する際はマイカ線などを利用して、できるだけ吊るすようにしてください。

●必要な材料[長期間（1 年中ハウス内に設置して）使用する場合]
ジッパーバッグによる簡易な防水袋を作り変えればよいですが、作り変えるのが面倒であったり、高価でも長期間使用したい場合は、市販の防水バッグを利用してください。
・市販防水バッグ**Aquapac Wire Through Case S (TC Clip 付き) 型番 548
市場価格約 7,000 円
市販防水バッグでもなるべく高い位置に吊るす（ケーブルタイやビニールタイなどで）ケーブルはクリップ等で束ねる
ただし、マイカ線等を吊るして一緒に束ねることを推奨

55

２. 100V 電源からの設置方法
イ． 【ハウス内の分電盤内などにコンセントがあり、その周辺に設置したい場合】
分電盤内のコンセントに USB-AC アダプタを差し込み使用します。

コンセント
分電盤

ロ．【ハウス内のコンセントから測定したい場所が遠い場合】
100V 電源延長ケーブルで延長します。電源ケーブルを地面に置いてしまうと、灌水時に漏電する危険性があるため、電源ケーブルはコンテナ（RVBOX など）内に設置します。
コンテナ内にはコンクリートブロックなど適当な重りを入れて動かないようにします。
●必要な材料・コンテナボックス*・100V 電源延長ケーブル（電工ドラムなどでも可）・漏電ブレーカ**
・コンクリートブロック等* アイリスオーヤマ 収納 BOX RVBOX400 など （約 1,500 円）**テンパールビリビリガード プラグ型漏電遮断器 など （約 2,500 円）
コンテナボックス

コンセント
漏電ブレーカ

延長コード

Wi-Fi ルータも入れる

コンクリートブロック

可能であれば万が一の漏電を防ぐため、コンセントには漏電ブレーカを設置してください。
使用しない箇所はビニールテープで塞ぐか、予算が許せば防水延長コードや、普通のプ
ラグを防水プラグ化するプラグカッパーなどを利用してください。
56

※【参考】１００Ｖ電源はハウス内に無いけれども、ハウス隣の機械庫にはある、といった
場合に、一時的にハウス内まで電工ドラム等で引き込む場合は以下のように行います。
ハウスまで電工ドラムで引き込む

ハウス近くにあるコンセント

電工ドラムの電線は火災防止のため、すべて引き出しておく

各ハウスへ
多くのハウスに設置する場合は、地元の電気屋さんに頼む方法もあります
ウォルボックスなどで配電盤を作る

漏電ブレーカ大きい物を使うと、
Wi-Fi 中継器も設置できる

RV ボックスからの延長コードを自作して、ウォルボックス内に設置する方法もあります

ハウス近くの 100V 電源からハウスまで引き込む際に、電線（電工ドラムのキャプタイ
ヤケーブル）の上を軽トラなどが通過する場合は、電線が断線して漏電事故が起きることを防ぐため、ケーブルプロテクタの中にキャプタイヤケーブルを通すなどしてください。
57

３. 電源から設置場所が遠い場合の設置方法（USB ケーブルの延長について）
イ．【USB 延長ケーブルで延長する】●必要な材料・USB 延長ケーブル（5m）*・ビニールテープ*エレコム U2C-JE50BK [エコ USB2.0 延長ケーブル 5m]など（約 500 円）
接続してビニールテープで絶縁します

Wio Node に接続する USB ケーブル（microB）と接続してビニールテープを巻いて絶縁します。USB 延長ケーブルで延長する際は 2 個までとすることを推奨します。長くなればなるほど電圧が降下し、Wio Node が動作しません。（電圧降下は、電線の太さが細ければ細いほど、電線が長ければ長いほど起こります。そのため、細い電線を使った USB ケー
ブルでは延長できません。延長する際は Wio Node に接続する USB ケーブル（microB）
は急速充電対応と書いてあるものを使用することを推奨します。）
ロ．（参考）【USB 延長ケーブルを自作する】
電子工作が得意な方向けの参考情報です。
●必要な材料・USB ケーブル（microB）または USB 延長ケーブル・シールド線（２線 0.5sq）*
・ビニールテープ、熱収縮チューブ、圧着スリーブなど* 富士電線工業 MVVS 0.5sq×2 芯 ケーブルなど 100m 市場価格 約 8,000 円
1m 単位でも流通していますが、100m 巻が安価です。

100m 巻を4 等分して、
25m にしたもの

58

被覆をむいて、

赤い線と黒い線

電線を出しますだけにします

被覆をむいて、

ビニールテープで電線を出します

絶縁します
圧着スリーブ等で接続します

太い電線を利用することで、電圧降下を抑えた電源用の USB 延長ケーブル（最大 25m
ほど）を作ることができます。USB ケーブル内には４つの電線がありますが、赤い線（5V）と黒い線(GND)だけ使用します（必ずテスターで確認して下さい）。USB ケーブルをカットして、シールド線を用いてつなぎ延長してください。その際はハンダ付けか圧着スリーブを用いて、ショートしないように熱収縮チューブによる絶縁処理だけでなく、ビニールテープを用いて再度絶縁処理をするようにしてください。短い USB 延長ケーブルではなく、急速充電対応の USB ケーブルを用いると電線が太いため作りやすいです。うまく電線の被覆をはがせない、あるいは圧着スリーブをかしめても電線が抜けてしまう場合は太い電線の USB ケーブルに変えることを検討してください。

４. 【参考】100V 電源が無い場合に太陽光発電システムを自作する
ハウス内やその近くに 100V 電源がない場合は、自動車用のバッテリーとソーラーパネ
ルを利用して太陽光発電システムを作り、電源とすることができます。モバイル Wi-Fi ルー
タ（NEC Aterm MR05LN など）と Wio Node2 つを使用することを前提に、積雪の心配がない 4 月から 11 月まで利用することを想定しています。また、Wio Node の代わりに市販のネットワークカメラ（PLANEX スマカメ）等を接続しても構いません。
●必要な材料（約 3 万円）
・ソーラーパネル（50W）(1)・バッテリー（12V36Ah）(2)・充放電コントローラ(3)・シガーソケットＵＳＢ(4)・自動車用メスソケット(5)59・ウォルボックス×２（６）・ＭＣ４コネクタ付きケーブル（７）・コンテナボックス（８）・その他（ビニールテープや圧着端子、スピーカーケーブルなどの電線）（１）ＪＡsolar AT-MA50A ソーラーパネル 単結晶 50W 約 7,500 円（２）LONG 12V36Ah ディープサイクルバッテリ（U1-36NE） 約 9,000 円（３）電菱 太陽電池充放電コントローラ Solar Amp B SA-BA10 約 3,000 円（４）BUFFALO USB カーチャージャー BSMPS2401P2BK 約 700 円（５）槌屋ヤック 車用 ソケット分配器 コードタイプ PZ-724 など 約 600 円（６）未来工業 ウォルボックス ＷＢ－１ＡＪ 約 1100 円（７）蓄電システム.com ソーラーパネル接続ケーブル 2SQ など 約 3500 円（８）アイリスオーヤマ RV ボックス 400 約 1,500 円

持ち手部分が 4cm なので、
（裏側）2cm のところに穴をあけます下穴を開けてから、
ホールソーで穴を開けます

ケーブルブッシュを取り付け、ゴム穴をカットしておきます

ＲＶボックス内にはバッテリーや充放電コントローラを設置し、充放電コントローラからは「ソーラーパネル用のケーブル」とバッテリーから 12V 電源を取り出す「メスソケット用の電源ケーブル」を通す必要があります。コンテナのサイド部分の内側に穴をあけます。ホールソーなどで 2cm 程の穴をあけます。ケーブルブッシュがあればそれを付けますが、ない場合は安価なエアコンパテで代用してください。水が浸入しないようにすることが目的ですので、必ずしもきれいに作る必要はありません。ホールソーの扱いに慣れていない場合は、必ずしも丸い穴である必要はありませんので、ドリルで穴を開けてからニッパーなどで穴を広げて
ください。
60

充放電コントローラを入れるケースを作ります。ウォルボックスの下部のケーブルを通せるようにします。（ケーブルブッシュがあれば使用します）

今回の構成では
10A で十分です。

ウォルボックス内に充放電コントローラをねじ止めします。電線の取り回しを楽にするため、なるべく上に取り付けます。もし端子台があればウォルボックス内に取り付けます。充放電コントローラのバッテリー側と、負荷側のマイナス極は「ヒューズ」を取り付ける必要があります。ヒューズは自動車用のカーヒューズで構いません。端子台を設置する場合は「平型」か「ミニ平型用」のものを使用すると良いでしょう。端子台を設置しない場合はスペースに余裕があるので、ガラスヒューズ用のものでもかまいません。入手しやすいものを利用してください。なお、制作時には充放電コントローラの説明書をよく読み、指示に従ってください。

ソーラーパネル用ケー
ブルは通しておきます。
MC4 コネクタ側はボックスの外側になります。

RV ボックスの中にバッテリーを置き、充放電コントローラから接続できるようケーブルを準備します。ケーブルはホームセンターで販売している 2.0SQ のスピーカー線等で問題ありません。ただし、芯径は 2.0SQ のものか、少なくとも 1.25SQ のものを使用してください。
なお、充放電コントローラを設置したウォルボックスはバッテリーの隣に設置するので、スピーカー線は 50cm もあれば十分でしょう。メンテナンス性を確保する場合は RV ボックスの外から出して地面におけるように 1m 弱の長さでもかまいません。
61

バッテリーに接続し、マイナス極側にはアース線を取り付けます
使用時には地面に打ち込みます

充放電コントローラとバッテリーを接続します。感電しないよう注意して作業を行ってください。アース線＊はホームセンターや電気屋などで入手しやすいものを使用してください。
*ELPA アース棒 Ｗ型 3m など
ウォルボックス内への設置は、絶縁被覆付閉端接続子など
ソケットと２芯の電線

超強力両面テープなどで行で接続し、ビニールテープでを用意します。

い、ケーブルの固定はケーブ

絶縁します。

ルクリップを使うと簡単です。

負荷側を作成します。ソケット分配器にスピーカー線やビニルキャプタイヤコードなどを接続し、ウォルボックス内に設置します。その後、充放電コントローラに接続してください。必ずテスターでプラスマイナスが逆になっていないかを確かめてください。逆になった状態で、Ｕ
ＳＢカーチャージャーを接続すると壊れますので注意してください。
確認した後、

ソーラーパネル側にソーラーパネル接続

プラス、マイナスがケーブルのプラス、

書いてあります。

マイナスを間違えな
いように接続します

ソーラーパネル用ケーブルを用いて、ソーラーパネルと接続します。ソーラーパネル側のコネクタにプラス極とマイナス極が書いてあるので、それに合わせてソーラーパネル用のケーブルを充放電コントローラに接続します。
62

ソーラーパネルを上に置きますケーブルタイで固定します

完成図
ソーラーパネルはＲＶボックスの上に置き、ケーブルタイや被覆ビニール線で固定するか、キャンプ用のテーブルなどの上に置いて、同様にケーブルタイなどで固定しても構いません。
負荷用のウォルボックスはハウス内に設置するか、ＲＶボックス内に入れて使用してください。
ソーラーパネルは南向きに設置し、雑草で覆われないように注意してください。

５. 温度センサの設置方法
ハウス内の気温を測定するためには、センサに日射を遮るための日よけが必要になります。「ラジエーションシールド」で検索すると市販品が出てきますが、自分でも作成できます。
作成方法はインターネット上でも手に入りますが、ここでは Wio Node と接続する温度セン
サ、温湿度センサを設置するための簡易なものを製作する方法を紹介します。

第１章で使用した

温湿度センサ

防水温度センサ

Grove 温湿度センサ（SHT31）

One Wire Temperature sensor

Grove 温湿度センサ（SHT35）
63

●必要な材料
・鉢皿*×4・M3 ステンレスねじ 60mm
・M3 ステンレスナット×2（または×4）・M3 ステンレスワッシャー×2・M3 ステンレススプリングワッシャー×２（または×4）
・アイロンビーズ** 直径 5mm ×26 個・テープ（養生テープやビニールテープ）*大和プラスチック 鉢皿サルーン 1 号 φ65×H15 ホワイト 市場価格 30 円**ウィルトンブランズ パーラービーズ 5001 単色 しろ 市場価格 200 円

本来はプラスペーサーを利用しますが、プラスペーサーは高価なため「アイロンビーズ」
で代用しています。

約 30mm になるよう

幅が 1cm なので、穴を広げて下さい

中心に 3mm の穴を開けます

中心は 7mm ほどの穴を開けます鉢皿を加工します。鉢皿全てに、温度センサを通すため穴を開けます。中心に 7mm ほどの穴を開けてください。1 枚はそのままにし、３枚はホールソーなどで穴を広げて約 30mmの穴にします。ホールソーが無い場合はニッパーで大まかに穴を広げ、調整はカッターナイ
フ等で行ってください。ステンレスねじを通す穴を開けるには 3mm のドリルで穴を開けます。
４枚すべてに行ってください。

64

3ｃｍの穴を開けた鉢皿の下からネジを通します。ネジにはスプリングワッシャー（無くてもかまいません）とワッシャーを入れてから鉢皿に通します。ネジにアイロンビーズ３つずつ通してスペーサーとします。その後鉢皿を通し、またアイロンビーズを３つずつ通してスペーサーとします。一番上の鉢皿には中心に 7mm の穴を開けたものが来るようにしてください。

最上段の鉢皿をつけたのち、ワッシャー、スプリングワッシャー（無ければ省略可）、アイロ
ンビーズ、ナットの順で取り付け、ナットを回してしめつけていきます。スプリングワッシャーがある場合はスプリングワッシャーがつぶれるまでしめます。無い場合は右図のようにナット２から３個分取り付けられる程度にしめます。ナットが外れるのが心配な場合は右図のようにダブルナットにしてください。

温度センサの被覆部分をテープで巻いて太くします

温度センサを穴に通した後、温度センサが抜けないようにします。温度センサの被覆部分を養生テープやビニールテープで 2 から 3 周分巻きます。右図のように持ち上げても外れなければ完成です。

65

温湿度センサを使用する場合について説明します。温湿度センサはこのままの状態では、ケーブル部分を通すことができないため、コネクタを一度外す必要があります。

コネクタの爪を持ち上げて、電線を引っ張ると抜けます

コネクタを外すには、爪を持ち上げる必要があります。カッターナイフでも行うことができますが、コネクタを破壊してしまう恐れがあるため、精密マイナスドライバなどで行ってください。

コネクタを外して、日よけに通した後はコネクタを再度取り付けて、温湿度センサを取り付
けてください。その際、コネクタ部を養生テープ等で巻いておき、日よけから落ちないようにします。右図のように持ち上げても外れなければ完成です。
接続用のケーブルが短いため、長いケーブルを購入して使用することを考えるかもしれませんが、ここで紹介した温度センサ、温湿度センサは「I2C」と呼ばれる通信方式のセンサであるため、ケーブルを長くするだけでは通信ができなくなってしまいます。少々短いですが、付属してくる長さのケーブルを使用してください。

66ここでは、簡易な日よけを作成する方法を紹介しましたが、強制通風筒と呼ばれるタイプのラジエーションシールドを利用すると、より精度よく測定することができます。強制通風筒も多くの自作方法がありますが、材料費 2 万円以下で作成できる「NIAES-09S」は、センサの設置方法が簡単で、作成や設置方法等の詳しい資料*が公開されています。
強制通風筒（NIAES-09S）

単管などを用いて設置できる*農業気象学会 の HP でダウンロード可能です。
連載講座「栽培環境における気温の観測技法と利用」（4）NIAES-09S 改型強制通風筒の製作法（福岡峰彦ら）
http://agrmet.jp/wordpress/wp-content/uploads/2019-A-2.pdf
連載講座「栽培環境における気温の観測技法と利用」（5）観測用マストの建て方（福岡峰彦）
http://agrmet.jp/wordpress/wp-content/uploads/2019-A-3.pdf【温度センサ使用の注意】
温度センサを利用する際には、これまで使用していた温度センサとの差を確認してから使用してください。なお、防水温度センサ（one wire temperature sensor ）や温度セン
サ（Grove 温湿度センサ（SHT31））の温度は±１℃の精度で測定できることを確認しておりますが、基板がむき出しのため、水をかけてしまったなどの原因で壊れたり、明らかにおかしい値が出るようになった場合は、新たにセンサを購入して交換してください。
温度センサの精度は重要です。ハウスで使用後、事務所などに回収し、しばらく使用しないで保管していたものを再度次年度に利用する際は、新しい温度センサと比較して問題なく使用できるかを確認して下さい。防水温度センサが複数ある場合は、バケツに水を入れてその中に全ての温度センサを同時に入れて、それぞれの温度センサの値の差を見ると確認が簡単です。

67

６. 土壌水分センサの設置と使用方法

Analog 通信用のコネクタ

Wio Node には 2 つコネクタがありますが、土壌水分センサ*に利用できるものは
Analog と書かれたコネクタ側のみとなりますので注意してください。Analog での通信のため、ケーブルは延長可能です。右図の写真のような延長ケーブル**を使用できます。
*GROVE - 水分センサ 市場価格 約 500 円**M5Stack 用 GROVE 互換ケーブル 200 cm（1 個入り） 市場価格 約 500 円

塗布後

防水加工が

自己融着テープ

必要です

で巻きます

（１）

（２）

（３）

（１） 未処理（２） ゴムスプレーを塗布（３） 自己融着テープで防水

土壌水分センサは基板部分がむき出しのため、防水加工を施す必要があります。最も良い方法は、基板部分以外を養生テープでマスキングして、RTV シリコーンスプレーなどの基盤塗布用のゴムスプレーを塗布してから、自己融着テープを巻きます。RTV シリコーンス
プレーが手に入らない場合は自己融着テープだけでもかまいません。

68

第６章 第 5 章までのまとめ-温湿度と土壌水分をハウスで測定する例本章ではこれまでのまとめとして、ハウスの温度（、湿度と地温、土壌水分）を測定するシステムを作成していきます。P.33 でダウンロードした「データ通知プログラム」、「グラフ通知プログラム」、「警報通知プログラム」を使用します。
〔本章で作成する遠隔監視システムの仕様〕（１）．ハウスの温度、（湿度、地温、土壌水分）を 1 時間毎に定期通知する（２）．ハウスの温度が 30℃を超えた時に警報通知する。
（３）．ハウスの温度について、前日の「平均温度」と「最高、最低温度」に加えて、前日の 0 時から通知する日の 24 時までの範囲のグラフを 12 時に通知する（４）．測定したデータは 10 分毎に保存する。

１. Wio Node とセンサの準備（第１章を参照）
ハウスの温度、湿度、地温、土壌水分を測定します。Wio Node と各センサを準備します。
●必要な材料・Wio Node × 2 個 … それぞれを「Wio Node 001」「Wio Node 002」とします。
・温湿度センサ×１個 … Grove 温湿度センサ（SHT31 または SHT35）
・防水温度センサ×１個 … One wire Temperature sensor
・土壌水分センサ×１個 … Grove 土壌水分センサ※ 入手先は第 8 章に掲載しております。少なくとも温湿度センサか温度センサのどちらか１つあれば本章のシステムを作成できます。
第 1 章を参考に、Wio Node とセンサを設定して、アクセストークンを取得します。
必要な材料全てが揃っている場合

温度センサのみある場合【Wio Node 001】
・温湿度センサ
温度 key : temperature
url01 = “アクセストークン１”
湿度 key : humidity
url02 = “アクセストークン２”【Wio Node 001】
・温度センサ
温度 key : temperature
url01 = “アクセストークン１”
Wio Node に番号を書くと便利です【Wio Node 002】
・温度センサ
地温 key : temperature
url03 = “アクセストークン３”・土壌水分センサ
土壌水分 key : moisture
url04 = “アクセストークン４”69

２. 通知する LINE グループを準備する
以下の３つのグループを作り、トークンを発行します。
（１）001 ハウス情報（定期通知）… 1 時間毎に通知する（2）002 ハウス情報（日報・グラフ通知） … 毎日 12 時に平均温度やグラフを通知する（3）003 ハウス情報（警報通知）… ハウス温度が 30℃を超えたら通知する

３. プログラムの準備を行う
以下の 4 つのプログラムを作成します。
（１）Kayoi_data10.py… 10 分間隔のデータ保存用。通知は行わない。

（2）Kayoi_data60.py… 60 分（1 時間）間隔で「001 ハウス情報（定期通知）」へ通知する。

（3）Kayoi_daily_report.py … （1）で保存した 10 分間隔データ(data10.txt)から平均温度と最高、最低温度に加えてグラフを作成し、「002 ハウス情報（日報・グラフ通知）」へ通知する。
（4）Kayoi_alert.py… 5 分毎に温度をチェックし、ハウス温度が 30℃を超えた際に「003 ハウス情報（警報通知）」へ通知する。

※データを１時間毎ではなく、10 分毎に通知する場合は（2）は必要ありません。また、警報通知を必要としない場合は（4）は必要ありません。
p.33 でダウンロードした「Kayoi_data10.py」は、これを元に「Kayoi_data60.py」を作 成 す る た め 、 事 前 に コ ピ ー を 作 っ て く だ さ い 。 次 に 「 program3.py 」 を コ ピ ー し て「Kayoi_alert.py」とファイル名を変更します。

70

４. 「データ通知プログラム」を作成する
Ｋａｙｏｉ_data10.py を開いて、必要な箇所を修正します。以下のプログラムの灰色の網掛け部分を適宜修正します。1 行に収まらない場合などは一部表記を省略、改変しています。
10,13,16,18 行目 対応するアクセストークンに変更
119 行目 通知する LINE グループのアクセストークンに変更
温度センサ１つで使用する場合などは p.75 から解説します。
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# coding:utf-8
import requests #Web API にアクセスするために用いる
import time #時刻の取得に用いる
import os #CSV ファイルの保存に用いるfrom decimal import Decimal, ROUND_HALF_UP #四捨五入に用いる#スマートフォンで設定した wio node のトークンを入れる#【Wio Node 001】
# 温湿度センサ-温度 key:temperature
url01 = "アクセストークン１"#"""# 温湿度センサ-湿度 key:humidity
url02 = "アクセストークン２"#【Wio Node 002】
# 温度センサ-地温 key:temperature
url03 = "アクセストークン３"# 土壌水分センサ-土壌水分 key:moisture
url04 = "アクセストークン４"#"""#request 関数と for 関数を使って最大 3 回 5 秒おきにデータを取得する
CONNECTION_RETRY = 3 #データ取得を行う最大試行数を設定する
INTERVAL_TIME = 5 #データ取得失敗時に何秒待つかを設定する#data1（json1 の後には設定したセンサにあわせて「key キー」を記入する）#1<= X < 4 なので 3 回試行する
for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :if("Node is offline" in json1["error"]):data1 = ' OFF'#マイコンか WiFi の電源がオフ
break
71

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

elif("timeout" in json1["error"]):data1 = 'TIME'#マイコン再起動中か WiFi の調子が悪いですtime.sleep(INTERVAL_TIME)
elif("METHOD" in json1["error"]):data1 = 'FWUP'#Wio アプリのセンサが正しいかを確認してください
breakelif("Unknown" in json1["error"]):data1 = ' UNK'#センサが壊れているか、センサが抜けています
time.sleep(INTERVAL_TIME)
else:
data1 = 'FAIL'#データ取得に失敗しました。
time.sleep(INTERVAL_TIME)
else:
data1 = (Decimal(json1["temperature"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します
break
#"""
for i2 in range(1, CONNECTION_RETRY+1):
json2 = requests.get(url02).json()if ("error" in json2) :if("Node is offline" in json2["error"]):data2 = ' OFF'#略
breakelif("timeout" in json2["error"]):data2 = 'TIME'#略
time.sleep(INTERVAL_TIME)
elif("METHOD" in json2["error"]):data2 = 'FWUP'#略
breakelif("Unknown" in json2["error"]):data2 = ' UNK'#略
time.sleep(INTERVAL_TIME)
else:
data2 = 'FAIL'#略
time.sleep(INTERVAL_TIME)
else:
data2 = (Decimal(json2["humidity"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します
break

72

72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

for i3 in range(1, CONNECTION_RETRY+1):
json3 = requests.get(url03).json()if ("error" in json3) :if("Node is offline" in json3["error"]):data3 = ' OFF'#略
breakelif("timeout" in json3["error"]):data3 = 'TIME'#略
time.sleep(INTERVAL_TIME)
elif("METHOD" in json3["error"]):data3 = 'FWUP'#略
breakelif("Unknown" in json3["error"]):data3 = ' UNK'#略
time.sleep(INTERVAL_TIME)
else:
data3 = 'FAIL'#略
time.sleep(INTERVAL_TIME)
else:
data3=(Decimal(json3["temperature"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します
break

92
93
94 for i4 in range(1, CONNECTION_RETRY+1):
95
json4 = requests.get(url04).json()96
if ("error" in json4) :97
if("Node is offline" in json4["error"]):98
data4 = ' OFF'#略
99
break
100
elif("timeout" in json4["error"]):101
data4 = 'TIME'#略
102
time.sleep(INTERVAL_TIME)
103
elif("METHOD" in json4["error"]):104
data4 = 'FWUP'#略
105
break
106
elif("Unknown" in json4["error"]):107
data4 = ' UNK'#略
108
time.sleep(INTERVAL_TIME)
109
else:
110
data4 = 'FAIL'#略
111
time.sleep(INTERVAL_TIME)
73

112
113

else:
data4=(Decimal(json4["moisture"]).quantize(Decimal('1'),rounding=ROUND_HALF_UP))#データを四捨五入します
114
break
115 #"""
116
117 #LINE notify の URL
118 url99 = "https://notify-api.line.me/api/notify"
119 token = '（１）001 ハウス情報（定期通知）のトークン' #LINE notify のトークン
120
121 #"""
122 #LINE に通知するメッセージを作る
123 message = '\n '124 #'センサ名:'+str(data 番号)+'単位'+'\n' センサ名、データ番号、単位を書く
125 message += '■ハウス環境'+'\n'126 message += ' 温度:'+str(data1)+' ℃'+'\n'
127 #"""
128 message += ' 湿度:'+str(data2)+' %RH'+'\n'129 message += ' 地温:'+str(data3)+' ℃'+'\n'
130 message += '土壌水分:'+str(data4)+''131 #"""
132
133 #LINE グループに通知を行う
134 payload = {'message' : message}
135 headers = {'Authorization' : 'Bearer '+ token}
136 r = requests.post(url99, data=payload, headers=headers)
137 #"""
138
139 #CSV で保存する
140 #CSV の保存のために時刻を取得
141 timestamp = 'date +%F" %H:%M"'142 current_time = os.popen(timestamp).readline().strip()143 #CSV で保存するデータを組み合わせる
144 data_set = str(current_time)
145 data_set += ',' + str(data1)
146 #"""
147 data_set += ',' + str(data2)
148 data_set += ',' + str(data3)
149 data_set += ',' + str(data4)
150 #"""
151 data_set += '\n'
74

152
153
154
155
156
157

#/home/pi/data.txt というファイルにデータを保存する
fout = open('/home/pi/data10.txt','at')fout.write(data_set)
fout.close()

現在の設定ですと、「10 分間隔のデータを保存し、通知を行う」というプログラムになっています。」
p.70 で説明した以下のプログラムを完成するには、通知を行わないようにする必要があります。
（１）Kayoi_data10.py… 10 分間隔のデータ保存用。通知は行わない。
p.69 で用意したセンサが「温度センサ」だけだった場合なども含めて、次ページの修正チ
ャートを確認しながら、以下のパターンに応じて修正を行ってください。
【パターン１：10 分間隔のデータを保存し、通知を行う」】
そのままで修正なし。通知間隔が 10 分で問題ない場合はこれで終了です。
【パターン 2：10 分間隔のデータを保存し、通知は行わない】
目的の設定です。以下の作業を行って、（１）Kayoi_data10.py を完成してください。
121 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」を削除します。
131 行目 「#”””」を削除します。
これで（１）Kayoi_data10.py は完成です。おつかれさまでした。
※ 「#」は後ろの文字列がコメントになる記号です。
「”””」は次の行からコメントになる記号です。コメント行を終わらせるには、「”””」を再度書くことでコメント行を終わらせることができます。
【パターン 3：温度センサが１つだけの場合で、通知を行う】
11 行目 「#”””」から 「#」を削除し、「”””」に変更します。
49 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」から 「#」を削除し、「”””」に変更します。
146 行目 「#”””」から 「#」を削除し、「”””」に変更します。
【パターン 4：温度センサが１つだけの場合で、通知を行わない】
11 行目 「#”””」から 「#」を削除し、「”””」に変更します。
49 行目 「#”””」から 「#」を削除し、「”””」に変更します。
121 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」を削除します。
131 行目 「#”””」を削除します。
146 行目 「#”””」から 「#」を削除し、「”””」に変更します。
75

（2）Kayoi_data60.py…60 分（1 時間）間隔で「001 ハウス情報（定期通知）」に通知を作成します。
前ページのパターン１を修正します。
154 行目 fout = open('/home/pi/data10.txt','at') の「data10.txt」を「data60.txt」に変更
Kayoi_data10.py をコピーし、ファイル名を「Kayoi_data60.py」に変更し完成。
●Kayoi_data10.py の修正チャート
ダウンロードした Kayoi_data10.py
温度センサのみの場合

Wio Node、LINE のアクセストークンを追加
Kayoi_data10.py【パターン１】（10 分間隔で保存しデータを通知）
ファイルをコピーし、名称を変更します。
154 行目を「data60.txt」に変更します。
（２）Kayoi_data60.py が完成

データ通知を行わないように変更します。
121 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」を削除します。
131 行目 「#”””」を削除します。
（１）Kayoi_data10.py が完成（Kayoi_data10.py【パターン 2】）
センサの数を１つにし、温度のみとします。
11 行目 「#”””」から 「#」を削除し、「”””」に変更します。
49 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」から 「#」を削除し、「”””」に変更します。
146 行目 「#”””」から 「#」を削除し、「”””」に変更します。
ファイルをコピーし、名称を変更します。
154 行目を「data60.txt」に変更します。
（2）Kayoi_data60.py（温度センサ１つのみ）が完成（Kayoi_data10.py【パターン３】）
センサの数を１つにし、温度のみとします。
11 行目 「#”””」から 「#」を削除し、「”””」に変更します。
49 行目 「#”””」から 「#」を削除し、「”””」に変更します。
121 行目 「#”””」から 「#」を削除し、「”””」に変更します。
127 行目 「#”””」を削除します。
131 行目 「#”””」を削除します。
146 行目 「#”””」から 「#」を削除し、「”””」に変更します。
（１）Kayoi_data10.py（温度センサ 1 つのみ）が完成（Kayoi_data10.py【パターン４】）76次にプログラムを活用する上で役に立つ事項を２つ説明します。
●エラー原因の通知（「プログラム③」の応用部分）
以下のプログラムはプログラム③のエラー時に再実行するプログラムを、現場で Wio
Node 等のメンテナンスをしやすいように変更したものです。データを取得時に「エラー」となった場合、そのエラーの原因から通知するメッセージを変えるように変更したものです。
#data1for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :data1 = 'エラー'
print('data 1 error!')time.sleep(INTERVAL_TIME)
else:
data1 = json1["temperature"]break

データ取得時にkey が”error”の際、返される値に応じて、メッセージを変えています。

#data1（json1 の後には設定したセンサにあわせて「key キー」を記入する）
for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :if("Node is offline" in json1["error"]):data1 = ' OFF'#マイコンか WiFi の電源がオフ
breakelif("timeout" in json1["error"]):data1 = 'TIME'#マイコン再起動中か WiFi の調子が悪いですtime.sleep(INTERVAL_TIME)
elif("METHOD" in json1["error"]):data1 = 'FWUP'#Wio アプリのセンサが正しいかを確認してください
breakelif("Unknown" in json1["error"]):data1 = ' UNK'#センサが壊れているか、センサが抜けています
time.sleep(INTERVAL_TIME)
else:
data1 = 'FAIL'#データ取得に失敗しました
time.sleep(INTERVAL_TIME)
else:
data1 = (Decimal(json1["temperature"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します
break
77

「Wio Node の電源がオフになっている場合」や、「Wio Node のスマートフォンアプリ上で設定したセンサと異なるセンサが接続されている、あるいはセンサが抜けている場合」は、原因が明らかなため、再実行する必要がありません。そのため、この２つがエラー原因だった場合は再実行しないようにしています。しかし、状況によってはセンサが接続されているのに FWUP と通知される場合があります。その場合は以下のプログラムのうち、break を削除すると、この場合でもデータ取得エラー時でも再実行するようになります。
elif("METHOD" in json1["error"]):data1 = 'FWUP'#Wio アプリのセンサが正しいかを確認してください
break

これらのエラーメッセージが必要無い場合は、Ｋａｙｏｉ_data10.py の該当部分を、プロ
グラム③の該当部分に書き換えて使用してください。
●データを四捨五入する
データを取得した際、温度センサは小数第２位までの値が表示されることがあります。しかし、実際には小数第２位まで必要な場合は少ないことと、通知時に数字の数がバラバラだと判断しにくいので、データを四捨五入して表示しています。
たとえば、22℃前後の値の際、以下の２つのパターンのように表示されると読みにくいので、小数第１位までの値に変更します。
22.3℃
22.24℃

22.3℃
22.2℃
1 にする⇒小数第１位を四捨五入して表示
0.1 にする⇒小数第 2 位を四捨五入して表示
0.01 にする⇒小数第 3 位を四捨五入して表示

data1 = (Decimal(json1["temperature"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します※実際のプログラム上では２行にせず、以下のように１行になります。
data1 = (Decimal(json1["temperature"]).quantize(Decimal('0.1'),rounding=ROUND_HALF_UP))#データを四捨五入します●その他
このプログラムでは 4 つのセンサまではこのプログラムでできます。Key や四捨五入の設定、メッセージ通知時の単位を修正して使用してください。また、センサを増やす場合はｐ.37、p.43 も参考に修正してください。

78

５. 「グラフ通知プログラム」を作成する
Kayoi_daily_report.py を開いて、必要な箇所を修正します。プログラムの灰色の網掛
け部分を修正します。1 行に収まらない場合などは一部表記を省略、改変しています。
147 行目 通知する LINE グループのアクセストークンに変更（（2）002 ハウス情報（日報・グラフ通知）用のアクセストークン)
温度センサ１つで使用する場合などは p.85 から解説します。
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# coding: utf-8
import pandas as pd #pandas をインポートする
import matplotlib.pyplot as plt #グラフを描画するのに用いる
import matplotlib as mpl #フォント名を指定するためにインポート
from datetime import date,timedelta #日付を扱うための標準ライブラリ
import requests
import datetime
from decimal import Decimal, ROUND_HALF_UP #四捨五入に用いる# 読み込む csv ファイル名（絶対パスを推奨）
csv_file = "/home/pi/data10.txt"# data10.txt にはヘッダーが無いので、列に名前をつける
col01 = "温度"#"""col02 = "湿度"
col03 = "地温"col04 = "土壌水分"#"""colums_name = ["datetime"]colums_name.append(col01)#"""
colums_name.append(col02)
colums_name.append(col03)
colums_name.append(col04)#"""# csv_file をデータフレーム型で読み込む
df = pd.read_csv(csv_file, names = (colums_name), index_col ="datetime", parse_dates = True, encoding = "UTF8")30
31 # データが取れなかった場合の警告があるところを NaN にする
79

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

df = df.replace(' OFF', 'NaN')
df = df.replace('TIME', 'NaN')
df = df.replace('FWUP', 'NaN')
df = df.replace(' UNK', 'NaN')
df = df.replace('FAIL', 'NaN')# NaN を含む行を除外する
df = df.dropna(how = "any")# データが文字列になっているので float に変更
df = df.astype(float)# 基準日を算出する（通常はプログラム実行日）
d = datetime.date.today()# 日時を指定する方法#d = date(2020,12,30)# 【基準日を含めた合計 48 時間を出力する】
d1 = d + timedelta(days = -1)# 基準日の前日を算出する
d2 = d + timedelta(days = +1)# 基準日の翌日を算出する#matplotlib のフォントを日本語にする
mpl.rcParams['font.family'] = "Noto Sans CJK JP"#全ての項目をグラフ化＆画像として保存#グラフ１：ハウス温度（1 つのグラフで）df.plot.line( y = ["温度"], subplots = False, grid = True, figsize=(8,8), xlim
= [d1,d2], ylim = [0,40], colormap = "Set1")
plt.savefig("graph1.png")#"""#グラフ２：ハウス湿度（1 つのグラフで）df.plot.line( y = ["湿度"], subplots = False, grid = True, figsize=(8,8), xlim
= [d1,d2], ylim = [0,100], colormap = "Set1")
plt.savefig("graph2.png")#グラフ３：地温（1 つのグラフで）df.plot.line( y = ["地温"], subplots = False, grid = True, figsize=(8,8), xlim
= [d1,d2], ylim = [0,40], colormap = "Set1")
plt.savefig("graph3.png")#グラフ４：土壌水分（1 つのグラフで）df.plot.line( y = ["土壌水分"], subplots = False, grid = True, figsize=(8,8),
80

70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

xlim = [d1,d2], ylim = [0,1023], colormap = "Set1")
plt.savefig("graph4.png")#グラフ 5：ハウス温度、ハウス湿度、地温、土壌水分（それぞれのグラフを 1 枚で）df.plot.line( y = ["温度","湿度","地温","土壌水分"], subplots = True, grid =True, figsize=(8,8), xlim = [d1,d2], colormap = "Set1")
plt.savefig("graph5.png")#グラフ 6：ハウス温度、地温（１つのグラフで）df.plot.line( y = [" 温 度 "," 地 温 "], subplots = False, grid = True,
figsize=(8,8), xlim = [d1,d2], ylim = [0,40], colormap = "Set1")
plt.savefig("graph6.png")#"""# DatetimeIndex の秒を切り捨て floor
print(df.index)
df.index = df.index.floor("min")print(df.index)# 【統計量を計算する（通知日から基準日までの区間）】
d_td = dd_ld = d_td + timedelta(days = -1) # 基準日（通知日 1 日前とする）# df.index の中身は timestamp 型であり、通知日で設定した date 型との比較では怒られるので、timestamp 型に変換する
d_td = pd.to_datetime(d_td)
d_ld = pd.to_datetime(d_ld)#【統計量を計算する】#平均、最高、最低を算出する。日平均気温は 1 時～24 時までの毎正時の平均値なので、60min データを df3 とする
96 #24 時（00:00:00）のデータを計算に入れるために全体を 10 分前にずらす（8/10
00:00:00 -> 8/9 23:50:00）
97 df2 = df
98 df3 = df
99 df2= df[(df.index >= d_ld) & (df.index <= d_td)]
100 df2.index = df2.index + timedelta(minutes = -10)
101
102 # 指定した範囲で df を抽出（置換）103 df2= df2[(df2.index >= d_ld) & (df2.index <= d_td)]#10min ずらしたことで出てくる前後+1 日を削除
81

104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

# 10 分データから最大値・最小値を算出する
df_max = df2.resample("1D").max()
df_min = df2.resample("1D").min()#【平均値を算出するために 60min データを作成する】
df3 = df[(df.index >= d_ld) & (df.index <= d_td)]
df3 = df3.asfreq('1H') #60min データを作成# 全体を 1 時間前にずらす（例：8/10 00:00:00 -> 8/9 23:00:00）
df3.index = df3.index + timedelta(hours = -1)# 指定した範囲で df を抽出（置換）df3 = df3[(df3.index >= d_ld) & (df3.index <= d_td)]
print(df3)# 60 分データから日平均値を算出する
df_mean = df3.resample("1D").mean()print(df_mean)# 全データ （np_mean[日付 index, データ項目 column]の２次元配列）
np_mean = df_mean.values
np_max = df_max.values
np_min = df_min.values
print(np_mean)# 前日のみ抽出 （インデックス-1 は最後の意味）
np_mean_yd = np_mean[-1]np_max_yd = np_max[-1]np_min_yd = np_min[-1]# 変数に入れる(col1 を指定したい。0 から始まるので、1 列目のハウス内温度１は 0,2列目の･･･は 1 のようになる）#ハウスの温度
house_temp_mean_1 = Decimal(np_mean[-1, 0]).quantize(Decimal('0.1'),
rounding = ROUND_HALF_UP)
house_temp_max_1 = np_max[-1, 0]
house_temp_min_1 = np_min[-1, 0]

139
140
141 # 日付を index から取得する
142 index = df_mean.index.date

82

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

index_str = df_mean.index.strftime('%Y-%m-%d')# LINE notify の URL
url99 = "https://notify-api.line.me/api/notify"
token = '（2）002 ハウス情報（日報・グラフ通知）用のアクセストークン'# LINE グループに通知を行う(１枚目の画像を送る)
message = '\n'message+= "■ハウス温度" + '\n'message+= str(index[-1]) + '\n'message+= '平均温度' + str(house_temp_mean_1) + " ℃" + '\n'message+= '最高温度' + str(house_temp_max_1) + " ℃" + '\n'message+= '最低温度' + str(house_temp_min_1) + " ℃"
payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph1.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)#"""# LINE グループに通知を行う(２枚目の画像を送る)
message = '\n'message+= "■ハウス湿度" + '\n'message+= str(index[-1])payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph2.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)# LINE グループに通知を行う(３枚目の画像を送る)
message = '\n'message+= "■地温" +'\n'message+= str(index[-1])payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph3.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)# LINE グループに通知を行う(４枚目の画像を送る)
83

184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

message = '\n'message+= "■土壌水分" + '\n'message+= str(index[-1])payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph4.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)# LINE グループに通知を行う(５枚目の画像を送る)
message = '\n'message+= "ハウス情報まとめ" + '\n'message+= str(index[-1])payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph5.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)# LINE グループに通知を行う(６枚目の画像を送る)
message = '\n'message+= "ハウス温度と地温" + '\n'message+= str(index[-1])payload = {'message' : message}
headers = {'Authorization' : 'Bearer '+ token}
files = {"imageFile":open("graph6.png","rb")}r = requests.post(url99, data=payload, headers=headers, files = files)#"""

これで、（１）Kayoi_data10.py を実行することで作られる data10.txt から、平均温度や最高、最低温度に加えてグラフを通知するプログラム（3）Kayoi_daily_report.pyが作成できました。p.69 で用意したセンサが「温度センサ」だけだった場合は、次ページの修正チャートを確認しながら、以下のパターンに応じて修正を行ってください。
【パターン１：必要なセンサが全てそろっている場合】そのままで修正なし。（3）Kayoi_daily_report.py は完成です。

84【パターン２：温度センサ１つの場合】
温度センサ以外の部分を全てコメントに変えます
15 行目 「#”””」から 「#」を削除し、「”””」に変更します。
22 行目 「#”””」から 「#」を削除し、「”””」に変更します。
59 行目 「#”””」から 「#」を削除し、「”””」に変更します。
162 行目 「#”””」から 「#」を削除し、「”””」に変更します。
●Kayoi_daily_report.py の修正チャート
ダウンロードした Kayoi_daily_report.py
温度センサのみの場合

LINE のアクセストークンを追加（３）Kayoi_daily_report.py が完成（温度、湿度、地温、土壌水分の４項目）

センサの数を１つにし、温度のみとします。
15 行目 「#”””」から 「#」を削除し、「”””」に変更します。
22 行目 「#”””」から 「#」を削除し、「”””」に変更します。
59 行目 「#”””」から 「#」を削除し、「”””」に変更します。
162 行目 「#”””」から 「#」を削除し、「”””」に変更します。
（3）Kayoi_daily_report.py が完成（温度のみ）

次にプログラムを活用する上で役に立つ事項を説明します。
●グラフの設定を変更する
温度のグラフを通知している、55-57 行目を例に説明します。
df.plot.line( y = ["温度"], subplots = False, grid = True, figsize=(8,8),
xlim = [d1,d2], ylim = [0,40], colormap = "Set1")
plt.savefig("graph1.png")
イ．表示するデータを選択する
14-18 行目で設定した、それぞれのデータ名を、y=["データ名"]の中に書き込みます。
今回は「温度」なので、y=["温度"]としています。たとえば、温度と地温を１つのグラフに表示する場合は、y=["温度","地温"]とします。
ロ．グラフの表示方法を変える
複数の項目（たとえば、温度と地温など）を表示する際に、１つのグラフの中に表示する
か、X 軸（時間軸）を同じにして複数のグラフを並べて表示するかを変更できます。
subplots = False… 1 つのグラフで表示する
subplots = True
… 複数のグラフを並べて表示する
85

ハ．Y 軸の範囲を変更する
今回は「ylim = [0,40]」と表示されています。これは Y 軸を 0 から 40 の間に設定していることとなります。たとえば、冬の間にハウス内で果樹などの永年性作物を越冬させたい場合は、氷点下になることもあります。その場合は「ylim = [-10,30]」とすると、
Y 軸を-10 から 30 の間に設定することができます。
土壌水分の場合は、ylim = [0,1023]としていますが、これは土壌水分センサが水分に応じて 0 から 1023 の間に値を通知するからです。
ニ．グラフの線の色を変更したい「colormap = "Set1"」を変更することで、線の色を変更することができます。
Set1,Set2,Set3,tab10 などがありますので、変更して見て下さい。また、以下のURL に選択できるカラーマップについて詳しく書いてあります。英語で書かれていますが、カラーチャートとともに表示されているので、いくつか試してみることをお勧めします。
https://matplotlib.org/3.3.4/tutorials/colors/colormaps.html
ホ．通知したグラフの画像を保存したい
plt.savefig("graph1.png")と書いてありますが、graph1.png がグラフの画像です。
これは「グラフ通知プログラム」を実行したフォルダに保存されます。今回は home フォルダ内の pi フォルダの program フォルダ内に「グラフ通知プログラム」である「kayoi_daily_report.py」を置いているため、program フォルダ内にグラフ画像は保存されます。
●平均温度の値をより正確に計算したい
Ｋａｙｏｉ_data10.py では、プログラムの後半（141-142 行目）に時刻を取得し、データを保存しています。そのため、crontab で指定した実行時刻よりも少し遅れることがあり、遅れた場合の値は除外されたまま計算されてしまいます。そのため、プログラムの実行と同時に時刻を取得するように変更（たとえば 141-142 行目の内容を 6 行目に変更）することで、より正確に平均温度を計算することができます。

86

６. 「警報通知プログラム」を作成する
program2.py を用いて、（4）Kayoi_alert.py を作成します。P.39 で説明した内容を参考に修正します。まず、program3.py を Kayoi_alert.py に名前を変更します。
５行目のアクセストークンを「温度センサ用のアクセストークン」に変更
16 行目は通知する「（3）003 ハウス情報（警報通知）」のトークンに変更
29 行目の設定温度を 30.0 に変更し、32、33 行目に「#」をつけコメントに変更
１
２
３
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# coding:utf-8
import requests#スマートフォンで設定した wio node のトークンを入れる
url01 = "アクセストークン１"#request 関数を使ってデータを取得する
json1 = requests.get(url01).json()#"temperature"のデータが取れたときに data に温度を入れる
data1 = json1["temperature"]#LINE notify の URL#LINE notify のトークン（通知先に応じて変更すること）
url99 = "https://notify-api.line.me/api/notify"
token = '通知する LINE グループのアクセストークン'#高温用メッセージ
message1 = '高温注意！:'+str(data1)+'℃'
payload1 = {'message' : message1}#低温用メッセージ
message2 = '低温注意！:'+str(data1)+'℃'
payload2 = {'message' : message2}
headers = {'Authorization' : 'Bearer '+ token,}#警報を出したいときの温度を設定する
if data1 > 20.0:#高温用：この温度より「高い」と通知する
r = requests.post(url99,data=payload1,headers=headers)
if data1 < 10.0:#低温用：この温度より「低い」と通知する
r = requests.post(url99,data=payload2,headers=headers)87これで（4）Ｋａｙｏｉ_alert.py は完成ですが、データ取得時にエラーだった場合に再実行するように修正する場合は、7 行目から 11 行目を削除し、Program3.ｐｙの 14-24 行目をコピー＆ペーストしてください。

#request 関数を使ってデータを取得する
json1 = requests.get(url01).json()#"temperature"のデータが取れたときに data に温度を入れる
data1 = json1["temperature"]
データ取得時にエラーであった場合、再実行するように変更#data1#1<= X < 4 なので 1 2 3 回試行する
for i1 in range(1, CONNECTION_RETRY+1):
json1 = requests.get(url01).json()if ("error" in json1) :data1 = 'エラー'#
print('data 1 error!')time.sleep(INTERVAL_TIME)
else:
data1 = json1["temperature"]
break

88

７. プログラムを定期実行できるように crontab を設定する
ｐ.70 で取り決めた設定で各プログラムを実行するようにします。
●ＬＩＮＥグループの設定（１）001 ハウス情報（定期通知）… 1 時間毎に通知する（2）002 ハウス情報（日報・グラフ通知） … 毎日 12 時に平均温度やグラフを通知する（3）003 ハウス情報（警報通知）… ハウス温度が 30℃を超えたら通知する●プログラムの設定（１）Kayoi_data10.py… 10 分間隔のデータ保存用。通知は行わない。
（2）Kayoi_data60.py… 60 分（1 時間）間隔で「001 ハウス情報（定期通知）」へ通知する。
（3）Kayoi_daily_report.py … （1）で保存した 10 分間隔データ(data10.txt)から平均温度と最高、最低温度に加えてグラフを作成し、「002 ハウス情報（日報・グラフ通知）」へ通知する。
（4）Kayoi_alert.py… 5 分毎に温度をチェックし、ハウス温度が 30℃を超えた際に「003 ハウス情報（警報通知）」へ通知する。
ターミナルで crontab -e を実行し、crontab を以下のように設定します。
*/10 * * * * sudo python3 /home/pi/program/Kayoi_data10.py
00 * * * * sudo python3 /home/pi/program/Kayoi_data60.py
00 12 * * * sudo python3 /home/pi/program/Kayoi_daily_report.py*/5 * * * * sudo python3 /home/pi/program/Kayoi_aleart.py

89

第７章 現場での使用事例
１. 水稲育苗ハウスでの水稲育苗・タマネギ育苗の事例
水稲育苗

タマネギ育苗南相馬市小高区の農業法人「（株）飯崎生産組合」の水谷社長

生産者の説明平成 22 年に小高区の担い手組織として飯崎生産組合を設立。震災後は組合員とともに小高区に通いながら、農地の保全管理などに尽力し、営農再開に向けた準備を行ってきた。
平成 28 年の避難指示解除後、水稲、大豆、タマネギ、カスミソウの栽培を再開し、経営体強化のため、平成 31 年に法人化し代表に就任。所有するハウス 6 棟に「通い農業支援システム」を導入し、水稲やタマネギ育苗時のハウス管理を行っている。

生産者の声（導入の目的とその効果）管理する耕地面積が広いため、耕地からハウスまで農機で移動するには多くの時間が必要です。これまで、育苗ハウスの管理（側窓開閉・灌水）に行き来するのは作業効率が良いとはいえませんでした。また、ハウス管理が必要かを判断できるハ
ウス遠隔監視システムが必要と考えていました。
「通い農業支援システム」を導入することで、定期的に温度やグラフ、画像が手元で得られ、ハウスの状況がよくわかります。どこにいてもハウス管理の判断ができる
ので、作業計画が立てやすくなりました。苗の様子をデータから判断し、灌水するよ
うなこともできるので、直接ハウスに行く回数が減りました。特に、農作業が忙しいときほど役に立っています。
90

２. 水稲育苗施設（ハウス 14 棟、催芽機）の事例

催芽機

ハウス群

岩手県奥州市の農業法人「（有）ピース」の家子社長と IT 担当の藤原さん

生産者の説明水稲や大豆を 100ha 超（受託含む）で栽培する大規模な農業法人。水稲苗は自社利用のほか、地域の生産者に販売しており、年間約 1.5 万箱を生産している。
水稲育苗施設（水稲育苗ハウス 14 棟、催芽機２機）に「通い農業支援システム」を導入。催芽機内の温度、プール育苗を行っているハウスの温度、プール水温を得て、水稲育苗の微妙な温度管理に利用している。

生産者の声（導入の目的とその効果）育苗に用いる催芽機は蒸気加温方式で自社開発しました。ボイラやヒーターで催芽機内の温度を制御して芽出しや催芽を行いますが、安定した品質の苗を生産するには、ボイラやヒーターの稼働状況を常に監視する必要があります。以前はチームを作って輪番で夜間の見回りを行いました。車で往復 1 時間かけて確認作業を行う社員もおり、見回りは大きな負担でした。また、ハウス 1 棟ごとに市販の温度センサをつけて確認作業を行うことも大変な負担でした。
「通い農業支援システム」で遠隔監視ができるようになり、夜間の見回りが家にいてもできるようになりました。ハウス温度をスマートフォンでいつでも確認できるようになったことにより、ハウスの急な温度上昇などにも育苗担当チーム全員が対応できるようになりました。

91

３. イチゴ育苗ハウス・花きハウスの事例

イチゴ育苗

花きハウス

川俣町山木屋地区生産者の谷口豪樹さん

生産者の説明震災後、義父の農業を手伝ったことをきっかけに就農。地域の先導的な花き生産者の一人。川俣町山木屋地区で熱帯植物のアンスリウム（復興の花「かわまたアンスリウム」）を栽培。また、ヒマワリやストック、カラーなどの花きのほか、イチゴの苗生産を行っている。
アンスリウムハウス、花きハウス、イチゴ育苗ハウスに通い農業支援システムを導入し、ハウス内の温度のほか、培地の土壌水分なども通知し管理に用いている。

生産者の声（導入の目的とその効果）
アンスリウム栽培は温度管理が重要なため、ハウス内の温度環境は自動で制御されています。しかし、暖房などの稼働状況を離れていても確認する方法はありませんでした。アンスリウムの品質維持のため、何度もハウス内の温度を確認に行き来する必要がありました。
「通い農業支援システム」を活用し、スマートフォンでハウスの状況を確認できるばかりか、実際にハウスにいなくても、遠くから作業の指示をすることができるようになりました。また、地震で暖房が停止するような突発的な状況にも自宅に居ながら、すぐに状況を確認し適切な対応をすることができるようになりました。温度に敏感な花の調整作業も、作業スペースの温度をグラフで確認できるため安心して作業ができ、品質維持に非常に役立っています。
92

４. イチゴハウスの事例

イチゴ栽培

ハウス群

群馬県昭和村の農業法人「（有）農園星ノ環」の星野社長

生産者の説明平成 17 年に開拓農家３代目の星野社長が設立。レタス、小松菜、ほうれん草などの高原野菜を約 18ha 生産している。また、5 年前から新規作物としてイチゴ栽培に取り組み始めた。
イチゴ栽培ハウスに「通い農業支援システム」を導入し、ハウスの温湿度や培地
温度、土壌水分、ＣＯ２濃度を測定してスマートフォンに通知し管理を行っている。

生産者の声（導入の目的とその効果）
新たにイチゴ栽培を始めるかどうかを検討していました。まずは小規模な生産から始めましたが、他の作物の作業もあり効率的な運営には、ハウスのモニタリングシ
ステムなどの技術の必要性を感じていました。施設栽培の担当社員と技能実習生
で管理を行っていますが、はじめはポカポカしてきたら側窓を開けるなど体感に頼った曖昧な栽培管理でした。
高価な市販品の購入は困難でしたが、安価な「通い農業支援システム」を知り、すぐに導入を行いました。温度センサが無かった頃の管理とは異なり、今では管理に携わるスタッフ全員がいつでもスマートフォンで温度を数値で確認でき、データに基づいた明確な管理の指示ができるようになり、とても役に立っています。
施設栽培担当も在宅時にデータを遠隔で確認できるため、自宅から管理作業の指示だけでなく、現地設置センサのメンテナンスの指示などを出しています。
93

５. マッシュルームハウスの事例

栽培の様子

マッシュルームハウス

岩手県八幡平市 ジオファーム八幡平の船橋代表生産者の説明馬を中心とした持続可能な仕組みづくりを行っているジオファーム八幡平の代表。
現役引退した競走馬からの馬ふんを用いた培地でマッシュルームを生産し、生産後の培地からは良質な馬ふん堆肥を生産している。
マッシュルーム栽培では培地の温度を指標に管理作業を行うが、この温度指標を安定して得るために「通い農業支援システム」を導入した。安価に複数箇所の温度データを得ている。

生産者の声（導入の目的とその効果）
馬ふん×マッシュルーム×地熱など、馬を中心とした新たな循環の形を実践しています。マッシュルーム生産時には馬厩肥自体が発酵するため、温度管理が極めて重要となります。生育ステージに応じたハウス内の温度設定をどうするかといった管理指標を作るには、1 棟あたり 4 段ある栽培棚２つの床温を測定するために何度も足を運ぶ必要があり、なかなかデータに基づいた管理指標を作ることができずにいました。
「通い農業支援システム」の導入で、遠隔監視できるようになってからは満足のいく温度管理ができるようになりました。今後は湿度のコントロールに向けて活用する予定です。また、自社の馬ふんを関東の馬厩肥生産施設に毎週トラックで運んでいますが、長距離運搬中も休憩時間にはハウスの床温をスマートフォンで確認できるので、余計な心配をせずに輸送でき安心できています。
94

６. 福島における水稲育苗ハウスを活用した香酸カンキツ栽培の事例

事例の説明
福島の被災地の営農再開地域では、大規模な水稲生産や花きなどの施設園芸を中心に営農再開しています。営農を促進するためには、魅力的な新規作物が必要です。そこで、通い農業支援システムを利用して、水稲育苗ハウスを活用し「スダチ」
や「カボス」といった香酸カンキツのポット栽培を行いました。
使っていない時期の育苗ハウスを利用して香酸カンキツを越冬させます
水稲育苗ハウス内（12 月-3 月）

南相馬市小高区

1/23 撮影

4/14 撮影

2 年生、３年生の苗木

育苗ハウスから搬出した後は、露地で栽培を行います
5/18 撮影

9/3 撮影

9/18 撮影

開花の様子

カボス

スダチ

通い農業支援システムの活用方法
冬季の寒害回避や、急に暖かくなり新芽が吹くようなことにならないよう、温度管理が重要です。
そのために「通い農業支援システム」
が有用です。

南相馬市小高区ハウス内温度（2019 年 12 月）
新たな魅力を提案できる可能性あり
95

第 8 章 使用する部品と入手先について
本マニュアルで使用した部品と入手先の一例
通販サイト「Amazon」や、IoT に関する部品を多く販売している通販サイト「スイッチサイエンス」「マルツオンライン」、「共立エレショップ」などで購入可能です。
なお、URL は 2021 年 3 月にアクセスして確認したものです。
・マイコン Wio Nodehttps://www.switch-science.com/catalog/2799/
https://www.amazon.co.jp/dp/B01HT253O4/
・温度センサ one wire temperature センサ
https://www.marutsu.co.jp/pc/i/829201/※熱電対を使用されたい方は以下のものもあります。
・熱電対モジュールhttps://www.switch-science.com/catalog/5345/
https://www.switch-science.com/catalog/4102/
ご自身で使用される熱電対を購入される必要がありますが、センサの長さを自分で延長できるため便利です。
・温湿度センサ GROVE - 温湿度センサ（SHT31） v1.0
・温湿度センサ GROVE - I2C 高精度温湿度センサ（SHT35）
https://www.switch-science.com/catalog/2853/
https://www.switch-science.com/catalog/5337/
・土壌水分センサ
https://www.switch-science.com/catalog/814/
使用条件によりますが、耐久性は約 1～2 ヵ月です。
使用の際は交換用に予備を用意しておくと安心です。
・照度センサhttps://www.switch-science.com/catalog/5345/
測定レンジを確認して用途に応じて使用してください。
・ＣＯ２センサ
https://www.switch-science.com/catalog/5345/
測定レンジが狭いので、使用には注意が必要です。
・USB ケーブル 3m,1.8m など
https://www.amazon.co.jp/dp/B071S5NTDR/
96

https://www.amazon.co.jp/dp/B01MUJOA5E/
100 円ショップなどの安価なケーブルであっても、急速充電対応のものは電線径が大きいです。
・USB 延長ケーブル 5m
https://www.yodobashi.com/product/100000001001680205/
ハウス内で使用する際は、2 つ繋いで 10m にして使用することは可能です。
接続部はビニールテープを巻いて、漏電しないようにしてください。
3 つ繋いで 15m 以上の延長については電圧降下が起きるため推奨しません。
・USB-AC アダプタ
https://www.amazon.co.jp/dp/B07DHP4QZ8/
100 円ショップなどではなく、ある程度の価格で良質な性能を持った製品がおすすめです。
・漏電遮断機
https://www.amazon.co.jp/dp/B01LMWDA60
ウォッシュレット機能付き便座とセットでよく使用される漏電遮断器です。
現場で万が一漏電した際に遮断してくれる装置です。使用を強く推奨します。
・RV ボックス
https://www.amazon.co.jp/dp/B000XBLYVA
ハウス内に設置する際に、
ＵSB-AC アダプタやモバイル WiFi ルータなどを入れておくために使います。
転倒防止のため、中にコンクリートブロックなどを入れておくことを推奨します。
・小型 PC（Raspberry Pi）
https://www.switch-science.com/catalog/3880/
https://www.physical-computing.jp/product/1336
ケースやケーブル、microSD が付属するものから本体だけのものもあります。

97

注意
本資料を用いて作成した「通い農業支援システム」は、自己の責任において製作・利用する遠隔監視システムです。本システムを用いて生じた故障又は損害等に関しては一切の責任を負いかねますのでご了承ください。
また、メッセージ通知用の Web API が用意されているアプリケーションには LINE や
Slack があります。2021 年 3 月に明らかになった LINE 利用者の個人情報が中国の関連会社で閲覧可能となっていた問題を受け、行政機関などで LINE の使用を禁止する動きがみられます。メッセージアプリの利用に際しては、サービス提供会社のプライバ
シーポリシーを十分に確認するとともに、自身の組織の情報セキュリティ管理方針に基づいて利用を判断下さい。

謝辞
本マニュアルは農林水産省委託事業「原発事故からの復興のための放射性物質対策に関する実証研究委託事業」による研究の成果です。

著者・発行者
２０２１年３月「安価かつ簡便にハウスの遠隔監視に使える IoT 機器「通い農業支援システム」製作マニュアル」
著者 山下善道、稲葉修武、内藤裕貴、星典宏、金井源太
発行者 農研機構 東北農業研究センター

問い合わせ先国立研究開発法人農業・食品産業技術総合研究機構
東北農業研究センター 地域戦略部研究推進室広報チーム〒020-0198 岩手県盛岡市下厨川字赤平 4
TEL： 019-643-3414
MAIL: www-tohoku@naro.affrc.go.jp
http://www.naro.affrc.go.jp/laboratory/tarc/

98