linux

raspberry pi を使って何かするメモ。

何ができるかについての(偏った)考え方

  • ADCがない

raspberry piは、一般的なマイコンに付いているADCがついていないので、何かセンサをつなげるならば、デジタル信号がでてくるようモジュール化されたセンサを使うと楽。I2CやSPIはRaspberry piのGPIOにimplementされているので使いやすいのではないか。最近は秋月でI2Cインタフェースのセンサが多く売られている。

  • タイミング制御が得意でなさそう。

OSが走っているので。

 

上の二点のことがあるので、凝ったことをするなら、AVRなりで前処理して、AVR-raspberry pi間をUART,SPIなどで結ぶとか。
今回はraspberry piの動作確認程度を目的に、家に転がっていたI2Cインタフェースの大気圧センサ(秋月で650円, AE-LPS331、以前、液晶表示の温度・気圧計を作るときに使ったチップ)を使って大気圧と温度の履歴をグラフ化でもしてみます。
トラ技2014年7月号の3章にLPS331を使った似たような応用が紹介されていますが、センサは一緒だけどモジュール化しているメーカーが違って、ピン位置が異なるので、見ないようにする。

 

Raspberry piのI2Cピンは1k8Ωでプルアップされている。回路図をみると、R1,R2に相当している。GPIOピンの真横に見えるチップ抵抗。
プルアップが強すぎなので、チップ抵抗をマイナスドライバでふっ飛ばしてしまいたいが、借り物なのでそれもできず、このままやってみる。

 

基板を作って、LPS331をRaspberry piに載せた。
f:id:beiz23:20140726150536j:image:w250f:id:beiz23:20140726150552j:image:w250f:id:beiz23:20140726154939j:image:w250
表裏と載せたところ。

 

i2cの設定は各所で紹介されている通り。
/etc/modprobe.d/raspi-blacklist.conf
/etc/modules
の書き換えと、i2c-toolsでの動作確認。


pi@raspberrypi ~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- 5d -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

接続できた通信相手のアドレスの上位7ビット分が表示される。この場合は5d。
pythonでi2cポートを制御するため、python-smbusをapt-getでインストール。

 

ここまでできたら、あとはソフトウェアの開発。
大気圧と温度を記録してグラフにして他のPCからグラフを見る。までを作ることにする。次エントリ

 

次のラズパイ本が人気です。

 

 

mac osxとubuntu OSインストールめも

なんか結局何回もOSインストールしていて毎回やりかた調べるのめんどいのでメモ。
自分用。
macbook 4,1 (early 2008)に64GB SSD挿入したときの場合。

  • mac osxをインストール。言語・プリンタドライバを色々切っても15GBだとちょっときつい。事実アップデートできず。office 2004は(word, excel, powerpoint)は入った。officeファイル扱うときにしかmacは使わないのでこれでいいか・・。空き容量1.2GB。
  • refitインストール。sudo sh enable.sh, vi refit.confでwait 3sec, linuxを優先に。
  • ubuntu 10.04をインストール。sda3: 10GB / ext4, sda4: 5GB swap, sda5: 30GB /home ext4, でパーティション切る。
  • sudo aptitude update; sudo aptitude safe-upgrade
  • LANG=C xdg-user-dirs-gtk-update
  • update-locale LANG=en_GB.utf8; update-locale LC_CTYPE=ja_JP.utf-8
  • rsyncで/homeをごっそりもってくる。ドットファイルも忘れずに。ドットファイルが移動中はXをログアウトして、それが終わったころにログインするといい。
  • 無線ドライバインストール、ドライバ画面でボタンぽちぽち。
  • octave3.0, octave3.2, gnuplot, emacs23, sylpheed, a2ps, ntp, samba, preload, gconf-editor, python-visual, python-scipy, python-serial, python-numeric, gfortran, fort77, openssh-serverインストール
  • sudo aptitude install ubuntu-restricted-extras
  • sudo aptitude purge ubuntuone系とopenjdk系
  • System > admin > Software sourcesでlucid partnerにチェック。そのごsun-java6類を入れる。
  • System > admin > setup helper for Japanese environment
  • atok x3 入れる。updateファイルとか

[044609]Ubuntu 9.04 Desktop 日本語 Remix CDでのインストール方法
[037494]アプリケーションウィンドウや入力カーソルの下に表示される[ATOK]を非表示にしたい(参考情報)

  • cp ~/etc/hosts /etc/hosts

ここがとても参考になった。
http://www.k5.dion.ne.jp/~r-f/sicklylife/memo/ubuntu1004/setting_and_install.html

SSD用に

  • /etc/fstabを変更していわゆるramdisk(tmpfsのほう)を活用するようにした。firefoxのキャッシュなどはhomeディレクトリのramdiskに保存するように指定。

proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=x /               ext4    noatime,errors=remount-ro 0       1
UUID=x /home           ext4    noatime,defaults        0       2
UUID=x none            swap    sw              0       0
tmpfs   /tmp    tmpfs   defaults,size=512m  0   0
tmpfs   /home/ttt/tmp   tmpfs   defaults,size=512m  0   0

追記:最後のSSDの設定の/tmpをramdiskにするのはどうも好ましくないようで、いろいろ不具合を引き起こします。ググって別の方法を用いていただくか、そのままつかうのがよいと思います。

bashを、shというシンボリックリンクから呼んだ場合の動作の違い

/bin/sh -> /bin/bash
このようにshのシンボリックリンクがbashであるときに、

$ sh -c 'echo $SHELL'

と実行すると

/bin/bash

と返ってきますが、bash 2.0のプロセス置換の機能をsh -cでつかってみると、

$ sh -c 'echo $SHELL; echo $0; paste <(cat tmp;) <(cat tmp;)'
sh: -c: line 0: 期待してない token `(' のあたりにシンタックスエラー

となり、reduced bashというか、低機能bashというか、無印shの振る舞いをしてくれます。
一方、bashとして呼ぶと、bashとして機能します。

$ bash -c 'echo $SHELL; echo $0; paste <(cat tmp;) <(cat tmp;)'
/bin/bash
bash
1.0000 1.0000 0.0000 1.2000 5 ...

さらに、

$ ln -s /bin/bash mysh

として、./mysh -> /bin/bashとしてから、次のようにすると、bashとして機能します。

$ ./mysh -c 'echo $SHELL; echo $0; paste <(cat tmp;) <(cat tmp;)'
/bin/bash
./mysh
 1.0000 1.0000 0.0000 1.2000 5 ...

呼び出しもとを判別して、無印shとして振る舞うようになっているようです。
shコマンドが呼ばれる場面でbashのコマンドを使いたい場合には、阻止されてしまいます。

解決法

zsh をリンクしてみた!
SHELLはなぜか /bin/bashだ。

$ zsh -e 'echo $SHELL'
/bin/bash

しかし、zshだと期待通りに動きました。これでなんとかなりそうです。

$ sh -c 'echo $SHELL; echo $0; paste <(cat tmp;) <(cat tmp;)'
/bin/bash
sh
1.0000 1.0000 0.0000 1.2000 5 ...

h11tをgnu/linux ubuntu9.10上でusbモデムとして使う

macbook4,1にインストールしてあるubuntu9.10に付属usbケーブル経由でh11tに接続。

<blockquote>
    [254519.152097] usb 5-1: new full speed USB device using uhci_hcd and address 6<br />

[254519.312460] usb 5-1: configuration #1 chosen from 1 choice
[254519.323086] cdc_acm 5-1:1.1: ttyACM0: USB ACM device
[254519.327482] cdc_wdm 5-1:1.3: cdc-wdm0: USB WDM device

</blockquote>

/dev/ttyACM0として認識される。

chat scriptなどを書く。
今回は楽をするためにgnome-pppをインストール。
設定は以下のよう。

device: /dev/ttyACM0
type: analog or usb どちらでも
init strings: 空欄 とか AT+CGDCONT=1,”IP”,”emb.ne.jp”
user: em
pass: em
phone no.: *99#
auto reconnect: どちらでも
abort connection if no dial tone : どちらでも
ignore terminal strings(stupid mode): チェックすると早くつながる
speed: 460800 (一番はやいもの<エラーが多いなと感じたら減らしてゆけばよい)

init stringsにいろいろ文字列をいれよ、と紹介しているところもあるようですが、どちらでもいけます。

stupid modeにチェックせず、ダイアルしてみると、

    • > Carrier detected. Waiting for prompt.

のところで律儀に待たされる。(40secとか。)待っていれば、リダイアルなしでつながる。
チェックすれば1sec以内につながる。

dial log

<blockquote>
    • > WvDial: Internet dialer version 1.60
    • > Cannot get information for serial port.
    • > Initializing modem.
    • > Sending: ATZ

ATZ
OK

    • > Sending: AT+CGDCONT=1,”IP”,”emb.ne.jp”

AT+CGDCONT=1,”IP”,”emb.ne.jp”
OK

    • > Modem initialized.
    • > Sending: ATM1L1DT*99#
    • > Waiting for carrier.

ATM1L1DT*99#
CONNECT

    • > Carrier detected. Waiting for prompt.
    • > Don’t know what to do! Starting pppd and hoping for the best.
    • > Starting pppd at Sat Mar 27 11:52:36 2010
    • > Warning: Could not modify /etc/ppp/pap-secrets: Permission denied
    • > –> PAP (Password Authentication Protocol) may be flaky.
    • > Warning: Could not modify /etc/ppp/chap-secrets: Permission denied
    • > –> CHAP (Challenge Handshake) may be flaky.
    • > Pid of pppd:
    • > Using interface ppp0
    • > local IP address
    • > remote IP address
    • > primary DNS address
    • > secondary DNS address
</blockquote>

速度テスト。@柏市

<blockquote>
            • BNRスピードテスト (ダウンロード速度) ——

測定サイト: http://www.musen-lan.com/speed/ Ver3.5001
測定日時: 2010/03/27 11:53:24
回線/ISP/地域:

1.NTTPC(WebARENA)1: 437.047kbps(0.437Mbps) 54.15kB/sec
2.NTTPC(WebARENA)2: 666.268kbps(0.666Mbps) 82.73kB/sec

</blockquote>

bluetooth接続@柏市。比較用。usb接続のがちょっと早い

<blockquote>
            • BNRスピードテスト (ダウンロード速度) ——

測定サイト: http://www.musen-lan.com/speed/ Ver3.5001
測定日時: 2010/03/27 12:19:13
回線/ISP/地域:

1.NTTPC(WebARENA)1: 375.468kbps(0.375Mbps) 46.86kB/sec
2.NTTPC(WebARENA)2: 426.608kbps(0.426Mbps) 53.17kB/sec

</blockquote>