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にアクセスすると、つながった。
ここでクラウドの設定をした。

クラウドの接続

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

Raspberry Pi (4) Setup Relay

人感センサーでLED点灯と、猫をなくことができたが、今度リレーをコントロールして、電源ONなどでもする。
購入したArduino センサーキットに、リレーが含まれている。

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

特にトラブルはなく、猫のなき声とともに、リレーの動作音が聞こえて、リレーについてるLEDも点灯した。
リレーは、なにをコントロールか、まずLED電球のような高出力ものを試したいと思う。

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

Raspberry Pi (3) 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に赤外線センサーを付けて、動きを検知してみた

Raspberry Pi (2) Temperature Sensor

今回は、温度と湿度センサー DHT22を利用して、温度と湿度を測定する。

 
githubからソースコードを取得し、インストールする
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo apt-get install build-essential python-dev
$ sudo python setup.py install
実行例
chen@pi-top:~ $ cd Adafruit_Python_DHT/examples/
chen@pi-top:~/Adafruit_Python_DHT/examples $ sudo python ./AdafruitDHT.py 2302 22
Temp=21.6* Humidity=31.3%
chen@pi-top:~/Adafruit_Python_DHT/examples $ sudo python ./AdafruitDHT.py 2302 22
Temp=21.9* Humidity=26.2%
 
参考:

  • https://wiki.pieper.eu/luchtvochtigheid-sensor-raspberry-pi

Raspberry pi (1) Led blink

いよいよIoT の内容へ
下の図は、LED点滅、温度と湿度のセンサー、人感センサーを付けた状態です。

まずLED点滅から、GPIO4にLEDと抵抗を付けて、下記のプログラムを実行

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
while True:
        GPIO.output(4, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(4, GPIO.LOW)
        time.sleep(1)
~

$ sudo python led_blink4.py
下記のは、プログラムでLED点滅を示すビデオです。

Raspberry Pi (3) Remote login

Raspberry Pi はIoT研究によく使われる機材。
Raspberry Pi の内部はLinux 動く、遠隔管理するため、LinuxのCUIで管理を行う。
ネットワーク接続した状態で、下記の作業へ進む。

ユーザー操作

ユーザuser1を対象とする。
ログイン、ログアウト、パスワード変更の他に、テキストファイルの作成、変更もよくあるので、テキストエディタviの基本操作を是非覚えてください。

ログイン

user1をipのサーバにログインとする。
$ ssh user1@ip
サーバの中身が入れ替わり、ログインできない場合、~.ssh/know_hostに該当する項目を削除してください。

ログアウト

$ logout

パスワード変更

$ passed user1

アドミン作業

SSHサーバーの有効化

  1. ターミナルで、設定ツールを起動
    $sudo raspi-config
  2. 8 Advanced Optionsを選択
  3. A4 SSHを選択
  4. [Enable]を選択
  5. 再起動を促されるので、再起動する

2016-11-25以降のISOイメージは、SSHはデフォルト無効にされた。SSH接続しようとしたがエラーとなる。
raspi-configで有効化するか、ブートパーテーションにsshという名のファイルを作るだけでもOK。

$ cd /boot
$ sudo touch ssh
$ sudo reboot

Terminal for Beginners Glossary

One of the great things about Linux is the terminal application. While it may look unfriendly and terse, if you want to really extend the capabilities of CHIP, you’ll often find yourself in the terminal. If you’re a beginner, here’s a quick reference of some really important and common commands. You can simply add -h to get some hints on how to use a command, such as cp -h or you can read a manual page using man cp. Most unix commands have a variety of options that can be executed in the command with flags, such as ls -l -a. Even better, search the internet! This primer is simply here to help you understand what a command might be doing, not to help you use it to its full ability.

  • cd change directory. open a folder. ex: cd ~/Pictures changes your current directory to the home Pictures folder, so you can easily access the files within.
  • mkdir make directory. create a folder. ex: mkdir Vacation makes a folder named Vacation in the current directory. mkdir ~/Pictures/Vacationmakes a Vacation folder in the home Pictures directory.
  • ls list files in the current directory so you know what is in it. Some options are ls -l to list in long format to provide information about permissions, size, and date. ls -a to show hidden files that start with the . character.
  • mv move a file from one directory to another, or to give it a new name. Ex: mv this.one that.one renames a file. mv this.one ~/Pictures/Vacation/ puts the file this.one into the Vacation directory.
  • cp copy a file from one place to another. Ex: cp this.one this_01.one will copy this.one to another file this_01.one. Add directories for more fun: cp ~/Pictures/Vacation/saturn.jpg /Users/otherone/Pictures/Vacation/saturn.jpg.
  • rm remove a file. delete it, and beware!. Use the -r to make it recursive to delete a directory. Ex: rm this.one deletes that file. rm -r ~/Pictures/Vacation to forget the good times.
  • sudo super user do. many commands need administrator-like privileges, otherwise they won’t work. apt-get is a command that needs to be run with sudo to allow files to be written to protected directories. You’ll see sudo as the first word in a lot of commands – all it is doing is giving the command the necessary access. You’ll be asked for a password the first time you use sudo. The default password and user is “chip”.
  • apt-get the command used for installing, removing, and finding software for Debian Linux systems, such as the CHIP Operating System. sudo apt-get install puredata installs the Pure Data program and any dependencies. sudo apt-get remove puredata will remove the program. sudo apt-cache search image will search apt repositories for the keyword search. And so on.
  • pwd present working directory. In case you forget where you are. Not much to it: pwd will output the directory name, such as /Users/home/chip/Pictures/Vacation/
  • grep a tool used for searching through files. It’s quite deep and can be complicated, but if you see the word grep in some command, you know it’s searching for a match.
  • | (pipe) a command used to redirect data into an application.
  • < (redirect) a command use to redirect data into a file.
  • cat and echo concactenate. append data to a file. Ex: echo "Last line of text" >> sometext.txt. Merge files: cat append.txt >> main.txtwill put all the text in append.txt into main.txt. Overwrite: echo "New contents of text file" > whatevs.txt will replace all text in the file with the text in quotes. Display text in file: cat showit.txt will print the contents in the terminal window. Create: cat > new.txt will let you create a new text file in the terminal by typing lines (ctl-c to exit).
  • less makes it so you can paginate and read a text tile. Ex: less longtext.txt will fill the screen with the first part of the longtext.txt file. Use the space bar to view the next page. Type q to exit.
  • nano a text editor. You’ll often see commands that call nano so you can edit a configuration. Ex: nano /etc/avahi/services/afpd.service to edit the avahi Apple file service file.
  • find look for files in the filesystem. Ex: find ~/Documents -name particular.txt -type f will look for the file with the name particular.txtin the Documents directory.
  • chmod change mode. Used for file permissions, which can be important when sharing things on the network, scripting actions, and many more reasons.
  • htop display the processes currently alive on the CPU. If things seem slow, or you want to see how much CPU or memory a program is using, just type htop to see a table of all running processes, then type q when you want to exit.
  • scp secure copy. copy a file from one computer to another over a network. Ex: scp Pictures/Vacation/motel.jpg Pictures/Vacation/accident.jpg chip@otherchip.local:~/Pictures copies a couple jpegs to another computer on the network.
  • ssh secure shell. access another computer on the network and use the terminal commands to make changes and control it. Ex: ssh chip@chip.local to access your CHIP on a local network.
  • CTRL C if you can’t use the terminal because a process is taking too long, type CTRL-C on your keyboard to cancel the most recent command.

参考:

  • http://net-newbie.com/linux/commands/vi.html – viエディタの使い方

Raspberry Pi (2) Network Config

Raspberry Piホスト名変更

Raspberry Piのホスト名は、初期raspberrypiになり、一台以上のRaspberry Piを立ち上がると、Network上識別しつらい。
早速ホスト名変更しましょう。下記のコマンドで関連ファイルを開き、raspberrypiを好みの名前(例えばweatherstation)に変更しましょう。
$ sudo vi /etc/hosts
$ sudo vi /etc/hostname

有線LANをRaspberry Piに接続

有線LANある環境で行う。
LANケーブルを用意し、有線LANをRaspberry Piに接続する

固定IPにする:

sudo vi /etc/dhcpcd.conf

interface wlan0
static ip_address=192.168.0.70/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

無線LAN子機をRaspberry Piに接続

無線LAN親機ある環境で行う。
Raspberry Pi3から、無線LAN内蔵になった。