スマートホーム構築記

IoTの恩恵を受けたいけど家庭用はなかなか出てこない。なら作ろうというブログ

Raspberry Pi3 のGPIOとセンサ間の通信規格について

*

 前回のおさらい

kagemomiji.hateblo.jp

 前回GPIOの仕様を確認していくうえでアナログセンサが使えないことがわかりました。

ではこのRaspberry Piでセンサを取り扱うにはどのような選択肢があるのか考えていきたいと思います。

Raspberry pi 3 のデジタル入力に使える通信規格があるようなのでまずそれらが使えるか考えていきます。

GPIOには以下の通信規格で通信することができるので以下のどれかに対応したセンサを選ぶ必要があります。

  • UART
  • SPI
  • I2C
  • 1-wire

また、公式に様々なデバイスを簡単に使用できるSense HATというのも出ているみたいです。

これには温度センサも搭載されているのようなのですが

https://www.raspberrypi.org/forums/viewtopic.php?f=104&t=111457

にあるようにデバイスの温度に依存するようで室温計測には向かないそうです。

スペーサを設けてデバイスから離すなどの対策をすれば可能というのも見られましたがある程度自作したいとも思うのでこれはパスしたいと思います。

では改めて先ほど上げた4つがどういった特徴があるものなのか調べてみましょう。

通信規格について

UART(Universal Asynchronous Receiver Transmitter)

www.ele-lab.comここにわかりやすく説明されていますね。

Raspberry Pi  UARTとgoogle検索をするとパソコンとの通信に用いたり、コントローラ間の通信をするものという位置づけなようです。

この辺も全然知らないので勉強になりますね。

センサを接続するポートというわけではないようです。

I2C (Inter-Integrated Circuit

http://www.picfun.com/c15.html

ここが参考になるかと思います。

マスタとスレーブの関係でマスタが複数のスレーブをぶら下げて通信することができる規格のようです。

イメージがCANとかと近いのでこちらの方がイメージはしやすいですね。

使用するのはVCC,GND,SDA,SCLの4線式になりようです。今後センサを拡張していくことを考えると有力候補と考えられます。調べると以下のセンサもあるようです。

akizukidenshi.com

SPI(Serial Peripheral Interface)

SPIもI2Cと同様のシリアル通信規格となります。

シリアル・ペリフェラル・インタフェース - Wikipedia

 

通信に使用する線は

  • SCK (Serial Clock)
  • MISO(Master In Slave Out)
  • MOSI (Master Out Slave In)
  • SS (Slave Select)
  • VCC
  • GND

となり6線で、デバイスごとにSSを用意するといった仕様になるようです。

とある無職の悪戦記録: SPIとI2C

上のサイトによるとSPIはI2Cと比較すると通信速度が速く多くのデータを通信できるとのことみたいですがRaspberry Pi3にはSSは2つしかないため多くのデバイスを接続するには向いていません。

使用方法としてはUARTに近い使用方法になると推測されます。

1-wire

1-Wire - Wikipedia

3線式で通信する手法で必要なのは

  • Vcc
  • 信号線
  • GND

となっています。信号線から電源を供給して駆動する仕様のものもあるようですね。

シリアル通信でマスタとスレーブの関係でマスタからスレーブに命令することで情報を取得する。I2Cより通信速度は遅いものの長距離の伝送が可能とのことみたいです。

GPIO4を用いている例が多いようですがほかのポートが使えるかどうかは現在調査中です。わかり次第このページを更新します。

以下のようにセンサ秋月で入手可能なようです。

 

akizukidenshi.com

結論

以上から拡張性やデバイスの入手性などを考えると1-wireかI2Cのどちらかと結論づけられそうです。

選定を行ってみるとI2Cの方がセンサの種類が多そうなのでI2Cで選定を行っていきます。

 

 

 

 

Raspberry pi 3でエアコン制御システム構築の構想とGPIO仕様について

構想

家庭用IoTということでまず考えたのが部屋の様々なところの温度や湿度を検出してエアコン制御を賢くするともっと電気代とか節約できるのではないかということです。

Raspberry Pi 3 で最初は部屋の温度や湿度から風量や温度などをコントロールしたいと考えました。

とりあえずラフなシステム構成図をのせます。

f:id:kagemomiji:20160804230834j:plain

温度センサと湿度センサを入力としてエアコン制御プログラムがエアコンの制御命令を決定して赤外線信号の保存された部分から制御命令を読みだして赤外線LEDから制御信号を出力するといった構成です。

この構成を実現するためには以下の技術が必要です。

  • 温度センサの出力を取得する
  • 湿度センサの出力を取得する
  • エアコン制御するためのアルゴリズムを考えるためログを残す
  • 制御アルゴリズムを実装する
  • 赤外線信号のデータベースを作成する
  • 赤外線信号を記録するために赤外線センサの出力を取得する
  • 赤外線LEDの制御をする

なのでこれから順番にこれら一つ一つを解決していきたいと思います。

Raspberry pi 3 GPIO仕様

そのためにはRaspberry Pi3 のGPIOモジュールの仕様について勉強です。参考までにGPIOはGeneral Purpose Input Outputの略です。

参考は以下

www.raspberrypi.org

f:id:kagemomiji:20160805085619p:plain

  •  5V x2
  • 3.3V x2
  • GND x8
  • GPIO x26 (無印17)
  • EEPROM x2

IOポートが26個もあるのでいろいろできそうですね。

GPIO は HIGHが3.3V LOWが0Vです。5Vではないところに注意です。

Pull down とPull upは内蔵でプログラムから設定できるようです。

そしてアナログ入力には対応していないようです。

0-3.3VのDIポートになります。

アナログ入力が使えると思っていたので少しセンサについて考える必要があります。

また、以下のサイトから

消費電流に関する仕様として

  • 3.3Vソースは最大50mA
  • 5VソースはUSBが供給する電流から消費している電流を除いただけ
  • GPIOは1pinあたり定格16mAで全部のpin合計で50mA以下

これらに気をつけて次はデバイス選定をしていきたいと思います。

 

 

 

 

Raspberry Pi 3の環境構築(9/3 ssh不安定化対策追記)

今回の目標は電源ケーブルだけつないでおけばRaspberry Pi 3をいじれるようにするところです。

目次

  • 日本語化
  • ssh(ssh不安定化対策実施を追記 16/9/3)
  • vncserver

日本語化

まずは日本語化していきます。日本語化しなくても使えなくはないですがやっぱり不便ですし。

 $sudo apt-get update

インストールの時はSDから読みだしてインストールしているみたいなので最初はパッケージリストを最新版にしておきます。

 $sudo apt-get upgrade

次に全体のパッケージを更新します。ただしこれは後回しにしてもいいかもしれません。15分程度かかるかと思います。

 $sudo apt-get install fonts-ipafont fonts-ipaexfont ibus-anthy manpages-ja manpages-ja-dev 

次に日本語フォントとimeとmanページをインストールします。これで表示・入力・ヘルプの日本語化する準備ができました。

今度はデスクトップの左上のMenuをクリックしてRaspberry Piの設定を変更していきます。

 Menu -> Prefereces -> Raspberry Pi Configuration -> Localisation 

以上の順にクリックしていきます。

次に"Set Locale"というボタンがあるのでそれをクリックします。
 -Language: ja(Japanese)
-Country: JP(Japan)
-Character Set: UTF-8
と設定して”OK”をクリックしてください。

ついでにタイムゾーン設定とキーボード設定を行います。
同じ画面で"Set TimeZone"をクリックします
-Area: Asia
-Location: Tokyo
として設定して"OK"をクリックしてください。
これでタイムゾーンが日本に設定されます。

また同じ画面で"Set Keyboard"をクリックします
-Country:Japan
-Variant:Japanese(PC-98xx Series)
として設定して"OK"をクリックしてください。
これでキーボードレイアウトが日本語キーボードに変更されます。

最後にRaspberry Pi Configurationのウィンドウから"OK"をクリックします。
そうすると再起動を進められますので再起動してください。

これで日本語化は完了です。

ssh

リモートアクセスするためのsshを設定します。
実はすでにsshでのアクセスは可能になっているのでアクセスの設定だけいじっていきます。
何も設定していないとパスワードによるログインが有効になっているのでまずはこれを公開鍵認証でログインするように変更します。
それでは公開鍵と秘密鍵のペアを作るところから始めます。
リモートアクセスするクライアント用PCで公開鍵と秘密鍵のペアを作成します。
Windowsの方はCygwinを使うかPuttyを使って作成をしてください。Mac,Linuxの方は"ssh 鍵の作り方" とでも検索していただければやり方は検索できるかと思います。
PuTTY: a free SSH and Telnet client
Cygwin
Cygwin,Puttyについては調べてみてください。簡単にでてくると思います。
それぞれの方法で作った公開鍵をraspberry pi 3に送ります。
私はCygwinを用いているので以下のようにscpコマンドで公開鍵をraspberry piに送ります。

$scp ~/.ssh/<公開鍵ファイル> pi@(Raspberry PiIPアドレス):.ssh/

送り終わったらsshでアクセスします。

 $ssh pi@(Raspberry PiIPアドレス)
 Password: <パスワード(変更していなければraspberry)>

ここからRaspberry Pi側で作業します。

 $sudo vi /etc/ssh/sshd_config

お好きなエディタで/etc/ssh/sshd_configを編集していきます。私はコマンドラインのみでも使いやすいviを使います。

 #Password Authentication yes (変更前)
 Password Authentication no  (変更後)

に変更して保存します。

 $cd ~
 $mkdir .ssh
 $mv <公開鍵ファイル> .ssh/authorized_keys
 $chmod 600 .ssh/authorized_keys

として公開鍵を登録します。

 $sudo /etc/init.d/ssh restart

sshサーバを再起動して設定を反映します。
これでパスワードによるログインを禁止して公開鍵認証によるログインができるようになりました。

ssh不安定化対策(16/9/3追記)

Raspberry Pi3 で最近sshが不安定化していてうまく接続ができなかったので調べてみました。
Raspberry Pi • View topic - [RPi3] SSH not working via wifi
上記のフォーラム内でRaspberry Pi 3に元からついているWiFiアダプタでsshがつながらないという症状が報告されています。
そこでさらに調べていくと以下のコマンドを入力することで解決するという記事が見つかりました。
Raspberry Pi 3 built-in WiFi SSH NTP Problem · Issue #1519 · raspberrypi/linux · GitHub

$ sudo iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00

なのでこの記事にも書かれているように/etc/rc.localに以下のコマンドを登録して起動時に実行されるようにします。

/sbin/iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00

しかしこの対策だけでは私の環境は改善されませんでした。
この対策はあくまでNTPが実行された際に通信エラーが起こりネットワークが落ちてしまうといったものへの対策で、それによってsshも落ちるといった時に効果があるようです。

そこでさらに、最初のフォーラムを読み進めていくと/etc/ssh/sshd.confに以下を追記することで解決ができるとのコメントを見つけました。

IPQoS cs0 cs0

そして設定を反映するためにsshdを再起動します。

$ sudo systemctl restart ssh

これで安定したssh接続ができるようになります。

vncserver

最後にvncserverをインストールしてリモートデスクトップができるようにします。
このインストールが終わると電源ケーブルをつなぐだけでRaspberry Pi3を扱えるようになるので周辺機器が不要になりすっきりします。

$sudo apt-get install tightvncserver

vncserverであるtightvncserverをインストールします。

 $vncserver
Password:(8文字以内)
Verify:
Would you like to enter a view-only password (y/n)? n

次にvncserverを起動します。パスワードは8文字までです。それ以上だと勝手に省略されて短くなります。

www.tightvnc.com
次に上のサイトからWindows用のtightvncのソフトをダウンロードします。
ダウンロードしたソフトをインストールします。
インストールする際にviewerしかいらないのでインストールでcustomを選択して
Tightvncserverをクリックして一番下の×を選択してインストールを行います。

インストールが終わったら起動して接続を試みます。

 Remote Host: (Raspberry PiIPアドレス)::5901

これでパスワード入力画面が出てくるので先ほど設定したパスワードを入力してアクセスします。
f:id:kagemomiji:20160803211447p:plain

最後にこのvncserverをRaspberry Piの起動と同時に起動されるようにします。
ここを参考にやります。
raspberrypi.stackexchange.com
起動時に呼び出されるrc.localに起動スクリプトを書きます。

 $sudo vi /etc/rc,local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
##ここから追加
# boot tightvnc 
su - pi -c '/usr/bin/tightvncserver :1 -geometry 1200x800 -depth 24 '
##ここまで
exit 0

本当は起動スクリプトを書いてちゃんとしたかったのですがうまく起動できなかったのでこちらでやりました。
スマートではないですがそのうち起動スクリプトを書いてなんとかできるようにしたいと思います。
これで電源ケーブル以外何もつなげずに扱えるRaspberry Piの出来上がりです。
今日はここまでです

Raspberry Pi3の開封~OSインストール

f:id:kagemomiji:20160801231307j:plain

到着しました。

内容確認

さっそく中を確認してみます。

f:id:kagemomiji:20160801231422j:plain

  • Raspberry Pi3
  • クリアケース
  • ヒートシンク大・小
  • ねじx4
  • ナットx4
  • 滑り止めの樹脂x4
  • クイックスタートガイド
  • セーフティガイド
  • ピンアサイン表
  • ピンアサイン用のシール

割とケースがしょぼいですね。安物のコンパスとかのケースと同じ材質。すぐに割れそうな感じですね。まあクリアタイプならこんなものとも思います。

ネジはケースを何かに固定するときに使うようです。Raspberry Pi3本体はケースで挟み込んで固定するようになっていてネジは不要です。

ピンアサインのシール貼るところがないんだけどどうしよう。まあとりあえず保管で。

f:id:kagemomiji:20160801231704j:plain

ヒートシンクはぴったりのサイズのチップがあるんでそこに貼り付けるだけですね。

なんでヒートシンクを貼り付けて、滑り止めをケースに貼り付けていざセットアップです。

セットアップ編

クイックセットアップを開くと日本語の説明があるのでその通りにやってみます。

「セットアップとインストールの詳しい手順は」とあるので

http://www.raspberrypi.org/qsg

にアクセスしてみるとpdfが表示されます。

1ページ目が接続表

2ページ目が必要なデバイ

  • SD card (4GB以上 class4以上)
  • HDMIケーブルor HDMI-DVI変換ケーブル
  • RCAビデオリード(もしもHDMIでやらないなら)
  • USBキーボードとマウス
  • LANケーブル(オプション)
  • 電源アダプター 最低700mA@ 5V→これMODEL Aの時みたい
  • オーディオケーブル(オプション)

3ページ目が注意・安全使用上の注意・SDカードの作り方

注意には

  •  5VDC用の製品で電流範囲は~で使用が意図される国の規制と規格に準じたもので使用できる。
  • オーバークロックしたらダメです。すごく熱くなります
  • よく換気された環境で使ってね
  • 安定した平らな非導電性な材質の上で使ってね。
  • GPIOコネクタに会わないコネクタは使わないでね。まがったり、壊れたりします。
  • 周辺機器も国の規制や規格に準じたものにしてください。
  • ケーブルやコネクタがない周辺機器を使う場合、絶縁やパフォーマンスがちゃんとしたものを使ってね

と書いてますね。

安全な使用方法には

  •  水・湿気・導電性のものにさらすな
  •  熱源にさらすな
  •  プリント基板に機械的・電気的なダメージを与えるな
  •  電源が入っているときにプリント基板が触るな。触るときは橋をもって最低限のダメージになるように
  •  USBポートから電源供給するようには設計してないよ。故障するよ。

4ページ目がSDの作り方の続きとコンプライアンス情報と電磁両立性(EMC)の話ですね。この辺がしっかり記述してあるのは安心感がありますね。ここではきっちり話しませんがあとで興味があるのでよく読んどこうかな。とりあえず早く起動したい。

 

さてやっとセットアップです。

SDカードの作り方を読んできましょう。

私の環境はWindowsなのでWindowsのところを読んでいきます。

  1. SDカードをPCにさしてください。
  2. SDカードをフォーマットするツールをダウンロードしてください

    SD Formatter for Windows Download - SD Association

    規約を読んで下のAcceptってところを押せばダウンロードできます。ダウンロードしたらそれを解凍してsetup.exeを起動してインストール。

    インストールしたSDFormatterを起動してオプション設定をクリック。論理サイズ調整をONに変更してフォーマット(ほんとにこれいるのかな。FAT32ならWindowsから普通にいけなかったっけ?)

  3. http://downloads.raspberrypi.org/noobsにアクセスしてファイルをダウンロード。1GBくらいあるので結構時間がかかる。(10分くらい)

  4. ダウンロードしたファイルNOOBS_v*.zipを解凍
  5. 中身をSDカードにコピー
  6. SDカードをRaspberryPiにさす。

 これでやっとSDカードの準備が完了。次に起動ですね。クイックガイドのほうに戻ります。

  1. SDカードを挿入します(すでにpdfのほうの指示で挿入してますが)
  2. USBキーボードとマウスをつなぎます。
  3. テレビもしくはモニタとHDMIをつなげます。私はテレビにつなげました
  4. インターネットに接続するためLANケーブルを接続してルータに接続しました。本当は無線LAN使いたいのですがmacアドレスフィルタかけてるのでとりあえず有線です。
  5. USB電源アダプタを接続したらLEDが点灯して起動します。

次にインストールです。

 

  1. 画面の下のほうのキーボード設定部日本語に変更します。f:id:kagemomiji:20160801232134j:plain
  2. RaspbianとDataPartitionにチェックを入れてインストールをクリック(10分くらいまつ。
  3. この画面が出たらとりあえずインストール完了。

    f:id:kagemomiji:20160801232301j:plain

  4. 起動

    f:id:kagemomiji:20160801232459j:plain

割とこんな感じで結構すんなり起動するところまでたどりつけました。昔新しいノートパソコンにdebianを先輩に入れさせられてインストールうまくいかなかったことを考えると本当に素晴らしいですね。今日はここまでにしたいと思います。

明日はいろんな設定とかいじれればいいなと思います。

Raspberry Piの購入

今回はRaspberry Piの購入です。

「Raspberry Pi 3 Model B」発表のお知らせ - Raspberry Pi Shop by KSY

第3世代モデル「Raspberry Pi 3 Model B(ラズベリー・パイ スリー モデル ビー)」の取り扱いを決定 | 半導体・電子部品の通販 RSオンライン

2016年2月29日からRaspberry Pi 3が発売となっていました。

私が去年初めてRaspberry Piについて知った時はRaspberry Pi2 Model Bでしたので技術の進歩はとても速いです。

 

スペックを確認してみると2からは全体的に性能向上しているみたいですし、WiFiとかbluetoothも標準搭載されてインターフェースが充実されています。

インターフェース用に周辺機器を大量に購入しなくてもよさそうですし、初期のRaspberry Pi2とほぼ同額の値段で多くのことができそうですので、3でやってみようと思います。

いざ購入ですが、ケースもいろいろな種類があるようですね。クリアタイプのものやカッコいい黒いケースも。

黒いケースのRasberry Pi3も捨てがたいのだけど初めてですしデバッグとかするときに中が見える方がよさそうなんでクリアタイプにしてみます。

あとはディスク用にマイクロSDと電源ACアダプターとケーブルを購入して準備完了です。USBキーボードやUSBマウスがない方は安いのでいいので追加で購入するのを推奨します。常に使い続けるわけではないのでパソコン等につないでいるのを流用してもよいとは思います。

電源ACアダプタで注意しなければならないのは最大電流が2.5Aという点です。普通のスマホタブレット用のアダプターが対応してないです。この点残念ですがWifiやBluetooothが使えることを考えれば納得ですね。

それぞれポチって明日を待ちます。(プライムってすばらしい)