まえちゃんろぐ

日々の生活の中での気付き、学んだこと、体験したことをアウトプットするブログ(雑記多めです)| プログラミング 本 ワークアウト 茶道

Arduino + Raspberry Pi をUSBでシリアル通信して温度湿度センサーのデータを取得してみる

time 2017/08/14

Arduino + Raspberry Pi をUSBでシリアル通信して温度湿度センサーのデータを取得してみる

ArduinoとRaspberry Piを使ったセンサーを開発する機会に恵まれ、ここ最近はずっと物理屋さんになってたmaechanです。

センサーに触れるのは初めての経験で四苦八苦しながら開発していました。

今回は、ArduinoとRaspberry PiをUSBシリアル通信で連携しながら、温度湿度を取得するセンサーを開発して得た知見を書いていきます。

sponsored link

開発環境

今回の開発環境を大まかにまとめると以下になります。

  • PC: MacBook Pro
  • Arduino: UNO
  • Raspberry Pi: MODEL B+
  • 温度湿度センサー: DHT22

Arduinoはスターターキットのものを使用しました。

Raspberry PiはMODEL B+と少し古いのですが、USBポートが付いているのでUSBでシリアル通信は可能なので問題ありません。温度湿度センサーはDHT22を使用します。

今回、開発に使用したPCはMacBook Proなのですが、MacBook ProはUSB-Cポートしか存在しません。

そのため、USB-CをUSBに変換するケーブルが必要です。また、イーサネットポートも存在しないため、USBポートとイーサネットポートの変換も必要になります。

以下、開発に使用したツール一覧。

開発の前に

この記事を読み進めるにあたって、Raspberry PiにはOSはインストールされていることを前提とします。

開発に使用したOSは「Raspbian」です。

Arduino側の準備

まずは、Arduinoで温度湿度センサーを使ってデータを取得することから始めます。

Arduino上で動作するプログラミング言語はC言語を使用します。

DTH22の説明

DHT22 - Arduino Project Hub

image via: DHT22 – Arduino Project Hub

DTH22をArduinoへ取り付けるために、最低限知っておくこととして、各ピンの役割があります。

DTH22は4本のピンがあります。

上記の画像を参照すると、1が電源(VCC)、2がデータ(data)、3が不使用、4が抵抗(GND)となっています。

接続例:MacBook ProとArduino

adrp02

ブレッドボード:[BB]、Arduino:[A]

[BB]電源(VCC)は[A]アナログの5Vへ、[BB]抵抗(GND)は[A]アナログのGNDへ繋ぎ、[BB]データ(data)は今回は[A]デジタルの2へ繋ぎました。

DTH22のデータを取得するライブラリ「DHT-sensor-library」のインストール

DTH22で感知した温度湿度のデータを容易に取得するために「DHT-sensor-library」というライブラリを使用します。

Arduinoで外部のライブラリを使用するには「Arduino/libraries」ディレクトリにソースを置きます。こうすることで、プログラムからライブラリをインポートできるようになります。

温度湿度のデータを取得するプログラムを書いていく

以下、温度湿度のデータを取得するプログラム。

温度、湿度どちらか一方でも取得ができなかった場合は処理を中断させています。

Arduinoのシリアルモニタで確認動作を確認すると、以下のようにデータが取得できています。

adrp01

Raspberry Pi側の準備

次はRaspberry PiでArduinoからのデータを受け取る準備です。

Arduinoからのデータを処理するプログラミング言語は、今回はPythonを使用します。

接続例:MacBook ProとRaspberry Pi

adrp03

MacBookからRaspberry PiへSSH接続する

ifconfig コマンドでローカルIPアドレスを確認します。

arp コマンドでイーサネット通信の設定を確認します。

今回は “192.168.2.2” がRaspberry PiのローカルIPアドレスになります。

ssh コマンドでRaspberry Piへログインする。パスワードは「raspberry」を入力します。

Raspberry Piのシリアルポートの設定を行う

Arduinoとシリアル通信をするために、raspi-config コマンドを実行しシリアルポートの設定を行います。

シリアルポートの設定方法は以下の記事の「シリアルポートの設定」が参考になります。

Python製シリアル通信用ライブラリ「pySerial」のインストール

シリアル通信には利用者が多い「pySerial」を使用します。

「pySerial」をインストールするにはpipが必要になるため、まずはpipをインストールする。

pipのインストール完了後、pyserialをインストールします。

Arduinoからのデータを受け取るプログラムを書いていく

Arduinoからのデータを出力するプログラムを記述します。

ファイル名は任意の名前でOKです。

以下、Arduinoからのデータを時刻と共に1秒毎に表示するプログラム。

ArduinoとRaspberry PiをUSBで接続する

以上でArduinoで取得したデータをRaspberry Piで受け取る準備は整いました。

あとは両端末をUSBで接続し、シリアル通信を実行させれば完了です。

接続例:ArduinoとRaspberry Pi

adrp04

ArduinoとRaspberry Piは直接繋ぐ必要があります。

USBハブ経由で繋ぐと上手く動作しません。

Raspberry PiとMacをインターネット経由で接続する

Macの「システム環境設定」->「共有」を選択します。

インターネット共有で「共有する接続経路」を Wi-Fi に、「相手のコンピューターが使用するポート」は今回はUSBで接続しているため AX88179 USB… を設定します。

USB接続の確認

ArduinoとRaspberry PiがきちんとUSB接続できているかを確認します。

シリアル通信プログラム実行

Arduinoからのデータを受け取るプログラムを書いていく」で書いたプログラムを実行します。

上手くデータが受け取れてますね。

停止させる場合は control + C で抜けます。

おわり

センサー自体、シンプルな構造でデータも簡易的な数値で扱いやすいですね。

今回の開発を通してセンサー、そして電子回路の理解が進みました。

取得したデータを外部に渡したい場合は、Raspberry Piまでデータを取得することができているので、あとはPythonでHTTP通信を使って外部のサーバーへPOSTする仕組みを作れば実現できます。

取得したデータを蓄積したり、分析したり、データに応じて任意の端末に通知させたり、様々な使い道があります。

これは夢が広がりんぐ。

こちらからは以上です。

参考記事

販売中チケット

プログラミング、Webサービスの作り方教えます

自分のスキルを販売しております。お困りの方はご遠慮なくご連絡頂ければと思います。

down

コメントする




お知らせ

スポンサードリンク

書いてる人

maechan

maechan

ベンチャー企業、フリーランス、スタートアップを経験。開発業務、人事業務に従事していました。現在は農業系スタートアップ企業でエンジニアとして働いています。リモートワークをしているノマドサラリーマンです。詳しいプロフィールはこちら。 [詳細]

販売中チケット

プログラミング、Webサービスの作り方教えます 一人で悩まず!お気軽にご相談ください!

その他のチケットはこちら

Instagram