Rasberry Piを使う

Contents:

i2cバスの有効化とWiFi

sudo modprobe -r i2c-bcm2708
sudo modprobe i2c-bcm2708 baudrate=4000
sudo  wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -Dwext -B

SDカードへの書き込み on OSX

diskutil list
> diskNがターゲットであることを確認
sudo diskutil unmountDisk /dev/disk2
sudo dd bs=1m if=raspbian.img of=/dev/disk2

OSXでのmount

interfacesなどを先に変えたいことがある。

まず, OSXFUSEをインストール。次に、 https://github.com/alperakcan/fuse-ext2 をいれる。

brew install homebrew/fuse/ext2fuse
brew install homebrew/fuse/ext4fuse
sudo dscl . append /Groups/operator GroupMembership `echo $USER`
mkdir /Volumes/tmp
ext4fuse /dev/disk2s2 /Volumes/tmp
> sudoしないのがポイント

して各種操作をする。

sudo umount /Volumes/tmp

で終わり。

SDカードへの書き込み on Windows

http://www.raspberrypi.org/downloads/ からダウンロードする。今は、Debian Wheezyを落とした。

http://shounen.ru/soft/flashnul/index.html をいれる。これが書き込みによい。

ここで、「管理者で実行したコマンドプロンプト」から、

同じディレクトリにこれらをいれて

flashnul.exe -p
Avaible physical drives:
0       size = 2000398934016 (1863 Gb)
1       size = 2000398934016 (1863 Gb)
2       size = 180045766656 (167 Gb)
3       size = 2000398934016 (1863 Gb)
4       size = -1 ( -not avaible- )
5       size = -1 ( -not avaible- )
6       size = 7861174272 (7497 Mb)
7       size = -1 ( -not avaible- )
8       size = -1 ( -not avaible- )
9       size = -1 ( -not avaible- )

flashnul.exe 6 --load 2012-10-28-wheezy-raspbian.img
Device size              = 7861174272 (7497 Mb)
delta to near power of 2 = 728760320 (695 Mb), 9%
Surplus size             = 6031872 (5890 kb)
Really destroy data on drive PhysicalDrive6?  :
とする。ドライブ間違えるとすべてが消えるので注意。

resizeだけして再起動。

User ID: pi
Password: raspberry

で入って、

sudo su -
passwd pi
passwd root
ifconfig eth0
⇒有線でアドレス着いてること確認

GPS

シリアルの用意

秋月で昔買ったGT-730F/Lを使うことにする。

[    8.848099] pl2303: Prolific PL2303 USB to serial adaptor driver

のように、PL2303の石で見えているので、Debianではそのまま、たたくことができる。 apt-get install cu してから、 cu -s 38400 -l /dev/ttyUSB0 でみえる。おっけー。

pythonからシリアル

さて、次に、pythonでこれをたたく。

sudo apt-get install python-pip
sudo pip install pyserial
して
>>> import serial
>>> fd = serial.Serial('/dev/ttyUSB0',38400,timeout=1)
>>> while True:
...  s = fd.readline()
...  print s

よめたー! ということでおっけーです。

おとならす

sudo modprobe snd-pcm-oss sudo modprobe snd-pcm sudo modprobe soundcore sudo apt-get install madplay madplay hoge.mp3(適当なやつ)

なった!

しゃべらす

http://shokai.org/blog/archives/6095 を参考にします。

sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

cat >a.sh<<EOF
#!/bin/sh
TMP=/tmp/jsay.wav
#cd /usr/share/hts-voice/nitech-jp-atr503-m001
cd /usr/share/hts-voice/mei_happy
echo "$1" | open_jtalk \
-td tree-dur.inf \
-tf tree-lf0.inf \
-tm tree-mgc.inf \
-md dur.pdf \
-mf lf0.pdf \
-mm mgc.pdf \
-dm mgc.win1 \
-dm mgc.win2 \
-dm mgc.win3 \
-df lf0.win1 \
-df lf0.win2 \
-df lf0.win3 \
-dl lpf.win1 \
-ef tree-gv-lf0.inf \
-em tree-gv-mgc.inf \
-cf gv-lf0.pdf \
-cm gv-mgc.pdf \
-k gv-switch.inf \
-s 16000 \
-a 0.05 \
-u 0.0 \
-jm 1.0 \
-jf 1.0 \
-jl 1.0 \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP
EOF
chmod 755 a.sh

icingaをいれて無線監視

基本的には https://wiki.icinga.org/display/howtos/Setting+up+Icinga+Web+on+Debian を参照する

sudo apt-get update
sudo apt-get install sudo lv less
visudo
sudo apt-get install icinga php5 php5-cli  icinga python zsh screen mtr fping
Configuring icinga-common
> no
> apache2
> password
http://<server>/icinga/
にアクセスできる(icingaadmin: password)
無線カード: GW-USValue-EZをつかった
標準で認識する > wlan0
sudo apt-get install iw
sudo iwconfig wlan0 mode Managed
sudo iwlist wlan0 scanning  | grep ESSID
 > 見えるESSIDのリスト
やり方はいろいろあるけど、
/etc/network/interfaces
に
iface wlan0 inet dhcp
    wpa-ssid beefbeef-home-air
    wpa-psk <password>
と書くのが1つの手
あるいは
wpa_passphrase ssid pass
したのを
/etc/wpa_supplicant/wpa_supplicant.conf
に書く
次は、メールの転送環境を作ります。
sudo apt-get install postfix
> Local Only
myhostname = 設定
inet_interfaces = yyy.yyy.yyy.yyy, localhost
relayhost = [xxx.xxx.xxx.xxx]
あと、以下2つをコメントアウト
#default_transport = error
#relay_transport = error
sudo service postfix restart

icingaの設定

sudo vi objects/contacts_icinga.cfg
emailを変更

sudo vi objects/OurService.cfg
define host {
 use                     generic-host
 host_name               EXTERNAL_google
 alias                   google_dns
 address                 8.8.8.8
}
define service {
 use                     generic-service
 host_name               EXTERNAL_google
 service_description     PING
 check_command           check_ping
}
define host {
 use                     generic-host
 host_name               EXTERNAL_unreach
 alias                   google_dns
 address                 254.1.1.1.1
}
define service {
 use                     generic-service
 host_name               EXTERNAL_unreach
 service_description     PING
 check_command           check_ping
}

再起動する
sudo service icinga restart
サービスは /usr/lib/nagios/plugins に入っている

bluetooth

apt-get install bluetooth bluez-utils blueman  bluez python-dbus python-gobject bluez-compat
hciconfig -a
lsusb
 Bus 001 Device 008: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
sudo hcitool scan
 DC:2C:26:XX:XX:XX       BSKBB06
sudo bluez-simple-agent hci0 DC:2C:26:13:6C:31
sudo bluez-test-device list
 > ペアリング中のデバイス一覧
sudo bluez-test-device remove DC:2C:26:13:6C:31

Mathematica

sudo apt-get install wolfram-engine tightvncserver

I2C

まず、i2c busのデバドラを組み込む。

sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
sudo lsmod | grep i2c
i2c_bcm2708             3947  0
i2c_dev                 5594  0
sudo vi /etc/modules
> 以下を追加
> i2c-dev
> i2c-bcm2708
sudo vi /etc/modprobe.d/raspi-blacklist.conf
> blacklist spi-bcm2708
> blacklist i2c-bcm2708
とあるので、i2cをコメントアウト。

以上で、

ls -alt /dev/i2c-*                                   [~]
crw-rw---T 1 root root 89, 1 12月 27 00:07 /dev/i2c-1
crw-rw---T 1 root root 89, 0 12月 27 00:07 /dev/i2c-0

となる。

sudo apt-get update
sudo apt-get install i2c-tools
i2cdetect -y 1
> -yは以下のエラーのy/nを確認しない。
WARNING! This program can confuse your I2C bus, cause data loss and worse!
   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
sudo i2cget -y 1 0x48 0 w
> 0x48のアドレスからword型で読み込む
> 0の部分はDATA-ADDRESSで読むだけなら0で
0x200b
> エンディアンをなおすと0x0b20
python -c 'print(int("0x0b20",16) * 0.00625)'
17.8

http://www.analog.com/jp/mems-sensors/digital-temperature-sensors/adt7410/products/product.html

これでとりあえずOK!温度は取れました!

LCDディスプレイの接続

acm1602を接続する ピンアサインは次の通り

pin description
1 GND
2 VCC 3V-5V
3 抵抗10k
4 SCL
5 SDA
6 BL-VCC 3-5V
7 BL-VDD

BLは5Vを食わせると電流が流れすぎる。 3.3Vを想定して15ormはいっているということは0.22A流したいようなので、 23ormにすればよい。ので、7ormくらいの抵抗を入れる。

まず、今回の環境では、10kの半固定抵抗についてはおおよそ2kくらいに調整するのがいいっぽい。 (VCC - LCD間の抵抗値)

RasberryPIから直に電源を供給すると電流が大きすぎるので外部の5V<->3.3Vの レギュレータを用意。

ところがうまく認識しない。(i2cdetectで出てこない) http://avr.gawakaru.jp/archives/735 を先人の知恵が。

– デフォルトの通信速度では通信がつまずくことがある – Write専用で一度でもReadを掛けるとモジュールがフリーズする。製品に添付の資料にも明記しているが、Readを掛けた時の状態に付いては記載がない。 ということらしいです。

結論からいうと、

sudo modprobe -r i2c-bcm2708
sudo modprobe i2c-bcm2708 baudrate=50000

したうえで、 /etc/modprobe.d/以下の適当なconfに(なんでも読みこまれる)

sudo vi /etc/modprobe.d/option.conf
options i2c_bcm2708 baudrate=50000

と記載する。なるほど。

その後のコントロールですが、たとえば、以下のようにします。

なんか、最近のOSではうまくいかないので、
sudo raspi-config
“8 Advenced Options” -> “A7 I2C”
するといいかも。。。
それで、
/boot/config.txt
dtparam=i2c_arm_baudrate=50000
sudo vi /boot/config.txt
# from
device_tree=bcm2708-rpi-b.dtb
device_tree_param=i2c1=on
device_tree_param=spi=on
# end
sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
sudo apt-get install i2c-tools
# Clear Display: 画面の初期化
sudo i2cset -y 1 0x50 0x00 0x01 b
# 列等の設定: 8bit コード、2列, 5x8表示
sudo i2cset -y 1 0x50 0x00 0x38 b
# カーソルは表示、ただし、部リンクしない(Display)
sudo i2cset -y 1 0x50 0x00 0x0e b
sudo i2cset -y 1 0x50 0x00 0x06 b
sudo i2cset -y 1 0x50 0x80 0x31 b
sudo i2cset -y 1 0x50 0x80 0x32 b
sudo i2cset -y 1 0x50 0x80 0x33 b
sudo i2cset -y 1 0x50 0x00 0xc1 b
sudo i2cset -y 1 0x50 0x80 0x35 b
sudo i2cset -y 1 0x50 0x80 0x36 b
sudo i2cset -y 1 0x50 0x80 0x37 b
num MoveDir 文字全体Shift
04 0: 右
05 0: 右 YES
06 1: 左
07 1: 左 YES

8 - 0x0f

num bin disp cursor blink
08 000
09 001
0a 010
0b 011
0c 100
0d 101
0e 110
0f 111
num bin Shift Left
18 10
1c

18で左にシフト 1cで右にシフト

テンキーを使う

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0G4J

を買った。 ここにある解説の通りの結線となっている。 3行x4列のパットで線が7本しか出ていないが、 要はマトリックスの結線になっている。 Raspiに適当にさしてやり、それぞれスキャンする必要がありそうだ。

まず、結線を考える。

pad symbol GPIO
1 COL2 17
2 ROW1 22
3 COL1 10
4 ROW4 9
5 COL3 11
6 ROW3 23
7 ROW2 24

にする。特に深い意味はない。

zsh
for i in {17,22,10,9,11,23}; do (echo $i > /sys/class/gpio/export );sleep 1; done for i in {17,22,10,9,11,23}; do (echo $i > /sys/class/gpio/export );sleep 1; done