Rasberry Piを使う¶
i2cバスの有効化とWiFi¶
sudo apt-get install i2c-tools
sudo modprobe -r i2c-bcm2708
# i2c devむけ
sudo apt-get install python-smbus python3-smbus
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でのimageの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
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
- Mode
=== ========= ==============
num MoveDir 文字全体Shift
=== ========= ==============
04 0: 右 -
05 0: 右 YES
06 1: 左 -
07 1: 左 YES
=== ========= ==============
Displayについて¶
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