All posts by chen

Raspberry Pi (8) Setup publickey

経緯

今回は、Raspberry Pi (ハードウェア)ではなく、Raspberry OS(基本ソフト)の話。

PIXEL (Raspberry OS)は、USBメモリに書き込んで、古いi386のPCでも活用でするもの。

Raspberry Pi (ハードウェア)がなく(不足)でも、同じOS体験できるがねらい。

Raspberry OSで、Atomエディタの動作が確認したくで、しばらく放置のPIXELを再起動してみた。

sshしてみる

まず、セキュリティ対策のため、 SSHサーバ初期値はオフになっています。調べて、/boot/に、sshというファイルを作成することでsshサーバを起動時に立ち上げてくれます。

それからsshしてみる。

外部から、ssh してみたが、publickeyがいるようですね。
chen@raspberrypi:~ $ ssh pi@192.168.11.138
The authenticity of host ‘192.168.11.138 (192.168.11.138)’ can’t be established.
ECDSA key fingerprint is 91:dd:87:09:8d:f4:a7:d1:5e:99:58:86:d1:e2:c5:e2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.11.138’ (ECDSA) to the list of known hosts.
Permission denied (publickey).
chen@raspberrypi:~ $ ssh pi@192.168.11.138
Permission denied (publickey).

SSH 接続用の鍵ファイル作成

ssh-keygen -t rsa

を実行して下さい。以下のようなメッセージが表示されます。鍵ファイルを作成する場所を聞かれているだけなので、特に問題がなければエンターを押すだけで構いません。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
 この後、2回パスフレーズの入力が求められるので適当なパスフレーズを入力して下さい。このフレーズ自体はそれほど強固でなくても構いません。(このフレーズは忘れないでください)。

これで、/home/pi/.ssh/ ディレクトリに id_rsa(秘密鍵) と、 id_rsa.pub(公開鍵)が作成されます。

次は、作成された公開鍵を pi ユーザーの公開鍵として登録します。

cat .ssh/id_rsa.pub >> .ssh/authorized_keys
 一方、秘密鍵(/home/pi/.ssh/id_rsa)の方は外部から Raspberry Pi にアクセスする際に利用するので、他のパソコンや USB メモリ等にコピーして下さい。この鍵はとても大切なので、絶対に第三者に漏れる事がないようにしてください。

あとは、念のため今までのファイルのアクセス権を pi ユーザーのみ読み書き出来るようにしておきます。

chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub

Clientにid_rsaをコピー

また外部からssh接続できないので、困るが、
内部から、他のPiにsftpして、 id_rsaをコピーする
ファイルは、.sshの下へ移動
root@raspberrypi:/home/chen# mv id_rsa .ssh/

sshしてみる

chen@raspberrypi:~ $ ssh pi@192.168.11.138
Enter passphrase for key ‘/home/chen/.ssh/id_rsa’:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@raspberrypi:~ $
ついに成功!

C.H.I.P. (5) Flash CHIP

C.H.I.P.は全部7台も購入した。

kickstandで2台購入し(Kernel 4.3)、getchipでその後追加5台追加した(Kernel 4.4)。

最初の2台は、特に問題なく使えたが、後追加5台は何と2台は使えない。

しばらく忙しいので倉入りでしたが、そろそろIoTに活用すると思って、リモート操作しやすいため、XRDPを入れると思って、エラーになって。

#apt-get update

これて改善すると思って、なぜかupdate中 いきなり電源オフ!!XRDP, git などインストールできないと、なにもできない状態!原因不明のまま、そのうち2台は使えない状態になった。

一台は、ブート途中で止まり、もう一台はどうしてもupdateできない。

getchipのサイトを見ながら、Flash CHIPすれば、改善する可能性があるから、その2台をFlashして見た。ついでに初期の2台を最新版の(Kernel 4.4)にアップする。

http://flash.getchip.com/

を見ながら、いろいろ苦労して、 re-flash CHIPができた。おもな問題はケーブル合わないと、Windowsでドライバーがうまくいかない。最終は特定にケーブルとiMacで作業成功。

それからブートも正常進行、apt-get updateも問題なく、upgradeが終わったら、debian 8.7 になった。

root@chip:/home/chip# uname -a
Linux chip 4.4.13-ntc-mlc #1 SMP Tue Dec 6 21:38:00 UTC 2016 armv7l GNU/Linux
root@chip:/home/chip# cat /etc/debian_version
8.3
root@chip:/home/chip# uptime
 07:30:48 up 7 min,  3 users,  load average: 2.33, 1.80, 0.93
root@chip:/home/chip# uptime
 07:32:29 up 9 min,  3 users,  load average: 2.74, 2.04, 1.10
root@chip:/home/chip# cat /etc/debian_version
8.7
root@chip:/home/chip# exit
chip@chip:~$ logout
Connection to 192.168.11.128 closed.
chen@raspberrypi:~ $

めでたく。

Onion Omega2+ (5) Motion Sensor

モーションセンサーに関して、適当なプログラムが見つからないので、下記のURLを参考しながら自作する!

https://docs.onion.io/omega2-docs/gpio-python-module.html

https://github.com/OnionIoT/onion-gpio-sysfs/

まずPython moduleのインストール

opkg update
opkg install python-light pyOnionGpio

プログラムはこちら

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import time
import onionGpio
from datetime import datetime

# LED GPIO
led_pin = 0
pir_pin = 9
sleeptime = 100000
led_light_up_time = 1

led = onionGpio.OnionGpio(led_pin)
pir = onionGpio.OnionGpio(pir_pin)

led.setOutputDirection(0)
pir.setInputDirection()

while True:
    value = pir.getValue().rstrip()

    if(value == "1"):
        print datetime.now(),
        print "motion_detected"
        led.setValue(1)
        time.sleep(led_light_up_time)
        led.setValue(0)

一応動作して、検出すると、LED点灯。

LEDをブザーに入れ替えると、検出すると、ブザー鳴る。Ctrl-Cで終了する。

しかし問題は、終了タイミングにより、GPIOが使用中のままになり、再度起動すると、異常終了になってしまう。

 

Onion Omega2+ (4) DHT22 Sensor

温度と湿度を測るべく、DHT22 Sensorを導入

ファイルのダウンロード

Onion Omega2 と DHT22情報を検索すると、まず見つかったのは、onionのフォーラム

https://wiki.onion.io/Tutorials/PHP-DHT11-DHT22-Sensor-Examples

こちらからは、次のパッケージをダウンロードすると指示された。

https://community.onion.io/uploads/files/1450434316215-checkhumidity.tar.gz

しかし、下記のエラーでうまくいかない。

./checkHumidity: line 1: syntax error: unexpected “(” (expecting “)”)

こちらの記事は2016-03-16のもの、 ファイルはOmegaに対応する、Omega2に対応してない!こちらは同じ悩みの方ののデスカッションでした。

http://community.onion.io/topic/1390/dht11-22-checkhumidity-syntax-error

流れの中で、次のOmega2に対応するパッケージをダウンロードすると話があった。

https://dl.dropboxusercontent.com/u/11811685/checkHumidity.tar.gz

しかしリンク切れえ、作者に連絡してみたら、新しいリンクアドレスを教えてくれた。

GPIOの選択

GPIOどれか使うもちょっと手間がかかった、どれでもいいではない。(プログラムちゃんと設定してないかも)!

いくつGPIOを試して、GPIO19に落ち着いた。GPIO6は、対応しないみたい;GPIO18とGPIO19は対応するが、DHT22のデータはGPIO18、Vccは3.3に繋ぐとうまくいかない;最後にDHT22のデータはGPIO19、Vccは5.0に繋ぐとうまくいった!

root@Omega-6F83:~/checkHumidity/bin# /root/checkHumidity/bin/checkHumidity 6 DHT22
-255.000000
-255.000000

root@Omega-6F83:~/checkHumidity/bin# /root/checkHumidity/bin/checkHumidity 18 DHT22
0.000000
0.000000

root@Omega-6F83:~/checkHumidity/bin# /root/checkHumidity/bin/checkHumidity 19 DHT22
21.799999
24.500000

 

参考:

  • https://wiki.onion.io/Tutorials/PHP-DHT11-DHT22-Sensor-Examples

Onion Omega2+ (3) Relay-Exp

昨日普通のリレーをブレッドボードで試したが、専用のリレーボードがあると思い出した。

早速つけって見た。

コマンドライン、ローカルWeb管理画面、そしてクラウド管理画面のどちらでも管理できるので便利。

図:ローカルWeb管理画面

 

リレーをコントロールする

root@Omega-6F83:~# relay-exp 0 on
> Initializing Relay Expansion chip
> Setting RELAY0 to ON
root@Omega-6F83:~# relay-exp 0 off
> Initializing Relay Expansion chip
> Setting RELAY0 to OFF
root@Omega-6F83:~# relay-exp 1 off
> Initializing Relay Expansion chip
> Setting RELAY1 to OFF
root@Omega-6F83:~#

図:コマンドライン管理の様子

ただ、切り替え結果の表示は、当にならないようね。目て確かめる必要。

同期の問題あるかもしれないが、コマンドラインでも状態が適当:

 

コマンド表示と 実物のLED状態、不一致の場合がある

root@Omega-6F83:~# relay-exp all off
> Initializing Relay Expansion chip
> Setting both RELAYS to OFF
root@Omega-6F83:~# relay-exp read 2
> Initializing Relay Expansion chip
> Reading RELAY2 state: ON
root@Omega-6F83:~# relay-exp read 1
> Initializing Relay Expansion chip
> Reading RELAY1 state: ON

両方ともにOffして、目て見てもOffになったが、

State:On

のまま。

IFTTTでも管理できるので、いつかやってみる。

Onion Omega2+ (2) LED Blink

いきよいで、LED Blinkを試み

まず pythonのインストール。

Python Install

メモリが限られているので、python-lightがいいらしい。
root@Omega-6F83:~# opkg update
root@Omega-6F83:~# opkg install python-light
Installing python-light (2.7.13-4) to root…
Downloading http://repo.onion.io/omega2/packages/packages/python-light_2.7.13-4_mipsel_24kc.ipk
Installing python-base (2.7.13-4) to root…
Downloading http://repo.onion.io/omega2/packages/packages/python-base_2.7.13-4_mipsel_24kc.ipk
Installing libffi (3.2.1-2) to root…
Downloading http://repo.onion.io/omega2/packages/packages/libffi_3.2.1-2_mipsel_24kc.ipk
Installing libbz2 (1.0.6-2) to root…
Downloading http://repo.onion.io/omega2/packages/base/libbz2_1.0.6-2_mipsel_24kc.ipk
Configuring python-base.
Configuring libffi.
Configuring libbz2.
Configuring python-light.
root@Omega-6F83:~#

Onion GPIO Python Module

GPIOを制御するモジュール

root@Omega-6F83:~# opkg install python-light pyOnionGpio
Package python-light (2.7.13-4) installed in root is up to date.
Installing pyOnionGpio (0.1-1) to root…
Downloading http://repo.onion.io/omega2/packages/onion/pyOnionGpio_0.1-1_mipsel_24kc.ipk
Configuring pyOnionGpio.
root@Omega-6F83:~#

 

LED Blink

いよいよLED点滅のプログラム

GPIO1にLEDと抵抗を繋ぐ。

import time
import onionGpio

gpioNum = 1
gpioObj = onionGpio.OnionGpio(gpioNum)

## set to output
status  = gpioObj.setOutputDirection(0)

## alternate the value
loop    = 1
value   = 0
while loop == 1:
    # reverse the value
    if value == 0:
        value = 1
    else:
        value = 0

    # set the new value
    status  = gpioObj.setValue(value)
    print 'GPIO%d set to: %d'%(gpioNum, value)

    time.sleep(1)

一秒ことにLED点滅が確認できた。

参考:

  • https://docs.onion.io/omega2-docs/gpio-python-module.html#gpio-python-module

Onion Omega2+ (1) Introduction

Onion Omega入手の翌日にfirmwareが壊れたらしく、シリアル接続、LAN接続など、firmware復帰に色々手を尽くして、サポートフォーラムにも質問しても、対策しても、再起不能で大失敗して、買ったものはごみ同然でしたが。

Introduction to Omega2 Plus

Onion Omega2が出た!また手を出した。

幸いドックなどは共通なので、本体だけ買えばよい。

Onion2は、2つのバージョンのOmega2が提供される。オリジナルとOmega2 Plusだ。

Omega2は、580MHz CPU、64MB RAM、16MBのストレージがある。

Omega2 Plusはメモリーとストレージが2倍だ(メモリー128MB、ストレージ32MB)。MicroSDスロットも装備されている。

今度は拡張性も重視して、Omega2 Plusは2個も注文した。

Setup

Omegaと同じ、初期状態は、WiFiのAcccessPointとして動くので、最初のセットアップは、まずにOmegaのWiFiに接続して、自分の環境に合うWiFi設定を行う。

OmegaのWiFiに接続パスワードは12345678であり、うまく繋ぎできたら、下記のURLにアクセス。

http://192.168.3.1/
セットアップウェイザード
ログイン情報
username: root
password: onioneer
次はクラウドの接続とソフトウェアのアップデート。
余計なトラブルがいやなので、クラウドの接続は後にする。
ソフトウェアのアップデートは結構ドキドキする。
ステータスバーの進捗を見て、やっと終わったが、
自動的にリブートしない。
しかたなく、手動で電源 Off /On。
黄色LED長い点滅後、やっと点灯状態に。

ブラウザの接続

手動の再起動は成功したかどうかわからないので、iPhoneのFingアプリで探す。

そのらしきもののIPにアクセスすると、つながった。

ここでクラウドの設定をした。

クラウドの接続

クラウドから接続してみた。

C.H.I.P. (4) LED Blink

しばらくC.H.I.P. を放置したが、そろそろ再開すると思って。とりあえずLED Blinkでワームアップする。

Network Setup

基本的に、ssh で作業を進むので、WiFi環境で使うため、まずネットワーク設定するが必要。

小さな4インチコンボージットモニターしかないので、USB接続でセットアップすると思ったが。意外にも大丈夫。画面でネットワークを設定したら、IPを確認する。

$ sudo ipconfig

ssh login

IPを確認したので、早速ssh でログイン。

下記のコマンドで、ssh開始。デフォルトユーザは「chip」であり、パスワードも「chip」になっている。

chen@raspberrypi:~ $ ssh chip@192.168.11.128

chip@chip:~$

Python Library Install

Pythonライブラリをインストールする

chip@chip:~$ sudo apt-get install git
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package git
chip@chip:~$
chip@chip:~$ sudo apt-get update
なぜか、このコマンドして、しばらくchipは電源オフ。
どこか熱いでもないのに
お手上げ状態!

Raspberry Pi (7) Setup Relay

人感センサーでLED点灯と、猫をなくことができたが、今度リレーをコントロールして、電源ONなどでもする。

購入したArduino センサーキットに、リレーが含まれている。

接続は簡単。GronudとVcc接続し、SignalはLED点灯ためのGPIOに繋げればOK。

特にトラブルはなく、猫のなき声とともに、リレーの動作音が聞こえて、リレーについてるLEDも点灯した。

リレーは、なにをコントロールか、まずLED電球のような高出力ものを試したいと思う。

この10WのLEDを点灯すると考えている。LEDにはヒートシンクが必要だが、短時間点灯なら、小さなものはいいかも。

上は100VからLEDを駆動するモジュール。

 

Raspberry Pi (6) Motion Sensor

モーションセンサー(人感センサー)を使って、人が近づくと、LED点灯、猫がなくのような動作をする。

モーションセンサーはHC-SR501を利用する。繋げは簡単な3本結線のみ。電源2本と、真ん中データ一本はGPIO26に接続する。

点灯LEDはGPIO6に接続する。

猫の音声は、AppInventor のHalloPurrから流用。ファイルは ./Music/meow.mp3 に置く。

Raspberry Piのpythonパッケージにはpygameというモジュールがデフォルトでインストールされているそうです。それを利用して、猫の音声を再生する。

動作プログラム

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import pygame.mixer

# LEDのGPIOピンの番号、センサーのGPIOピンの番号
let_pin = 6
pir_pin = 26

sleeptime = 100000
led_light_up_time = 1

GPIO.setmode(GPIO.BCM)
GPIO.setup(pir_pin, GPIO.IN)
GPIO.setup(let_pin, GPIO.OUT)
GPIO.output(let_pin, GPIO.LOW)

pygame.mixer.init()
pygame.mixer.music.load("./Music/meow.mp3")

def motion_detected(pir_pin):
  print "検知"

  # 点灯
  GPIO.output(let_pin, GPIO.HIGH)
  pygame.mixer.music.play(1)

  # 待機
  time.sleep(led_light_up_time)

  # 消灯
  GPIO.output(let_pin, GPIO.LOW)


# コールバック登録
GPIO.add_event_detect(pir_pin, GPIO.RISING, callback=motion_detected)

try:
  while True:
    print "App Start"
    print "ctrl+c  :  if you want to stop app"
    time.sleep(sleeptime)
except KeyboardInterrupt:
  print "Quit"
finally:
  print "clean up"
  GPIO.cleanup()
  pygame.mixer.music.stop()

出来上がったシステムの外観

 

参考

  • http://qiita.com/Nyanpy/items/cb4ea8dc4dc01fe56918 – Raspberry Piでwav/mp3ファイルを再生する方法(python編)
  • http://raspi.seesaa.net/article/417437441.html – Raspberry Piに赤外線センサーを付けて、動きを検知してみた