braintag

公開してしまう備忘録

raspberry pi2 のファン付きケースを ebayで買った

Raspberry pi2 を購入し、旧モデルと入れ替え完了。
しかし、ケースに互換性がなかったので、ケースを物色。

でも、Amazonやら楽天やらの日本のサイトにはいいのがない。あったとしても高い。

eBayを見てみると、送料込みでも1000円行かないのがあった。www.ebay.com
$4.99、送料$2.99で約$8だ。960円程度。

ファン付きでこのお値段。なんでこれが日本で売ってないの?

早速、paypalで支払い購入。

約一週間で届いた。


f:id:kiwamaru:20150322172129j:plain

アクリルパネルがなんかやたら曇ってるなーと思いながら組み立ててたら保護シートだった。うっかりそのまま組むところだった。

f:id:kiwamaru:20150322172303j:plain

なんか、組むのがかなり難しい。やたらと面倒くさい。
スペーサをアクリルと基板の間に挟み、4か所をボルトを止めるんだが、
4か所のネジは1つずつ締めることができないため、4か所を同時に保持しないといけない。

f:id:kiwamaru:20150322175046j:plain

簡単な説明書はついてんるんだけど、ボルトの用途、止め方等は一切書いておらず、中華クオリティだなぁと感じながら組み立て。

f:id:kiwamaru:20150322172140j:plain

f:id:kiwamaru:20150322175405j:plain

ちなみに、付属のファンのコネクタは、raspberry pi2のピンの幅と微妙にサイズが異なり、すこしピンが曲がる。
f:id:kiwamaru:20150322175850j:plain

最初、ファンを中にいれてみたが、ヒートシンクと干渉して入らず。クソッ。

f:id:kiwamaru:20150322180102j:plain

仕方ないので外に。吸気方向に設置。

f:id:kiwamaru:20150322180729j:plain

温度についてはかなり下がった。室温22℃でRaspiのCPU温度は常に28℃をキープ。
ファンなしだと40℃。その差、12℃。
かなり冷える。

でも、高音のノイズが結構気になる。
回転数を落とせないものかな。


ファンのノイズについては、動画撮ってみたので聞いてみてください。

Sublime Text3でC言語で呼んだり呼ばれたりリストからジャンプする(Windows)

今、C言語にて開発していますが、今使ってるIDEのエディタが非常に使いづらいです。
定義や行番号へのジャンプ後、戻れないゴミエディタ。

Eclipseでのコーディングも考えましたが重いのは嫌なのでSublime Text3を使ってみようと思います。

コードを読むにはタグジャンプが最低限必要です。
デフォルトではgoto_definitionてのはありましたが、関数の定義にしか使用できませんでした。

変数でもジャンプしたいなぁとぐぐってみるとSublimeClangというのもありましたがディスコンとなっており、ST3上では何やっても動作しませんでした。

諦めてCTagsを試したのですが、定義にしかジャンプできない。
どうせなら読んだり呼ばれたりのリストにも飛びたいなあと。
(grepでいいじゃんという話もありますが意外と面倒くさい)

更にググるとCscopeSublimeというのがあるので試したところ、これで実現できました。

以下のFork版の方がSublimeText3のメニューからデータベースを作れるので便利です。


ChinaShrimp/CscopeSublime · GitHub

で、手順なのですが、以下の公式の手順通りやっても動作しませんでした。
Windowsだからなのかな?手順5が追加で必要でした。

1.cscope-win32をインストール
cscope-win32 - Win32 port of cscope utilty - Google Project Hosting

2.cscope-win32へのパスを通す(環境変数)

3.Generate a cscope database (cscope.out) //これは上記版なのでパス

4."Packages"ディレクトリにgit clone

以下の手順5を追加することで動作するようになりました。
5."Setting User"に"CscopeSublime_executable": "C:\\Program Files\\cscope\\cscope",を追加。
"C:\\Program Files\\cscope\\cscope"はcscopeのインストールパス

調べたいものの上でCtrl+\を押すと以下の様なメニューが出るようになりました。
f:id:kiwamaru:20140918093113p:plain
でも、何故かメニューが二重に出てしまう。

Raspberry PI 高精度I2C温度センサーMCP9808で温度を記録

Raspberry PIを買って以来、Linuxサーバとしてしか使用していないので、
電子工作っぽいことをしたくなり、I2Cの温度センサーで温度を記録するプログラムを作ることにしました。

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)


とりあえず、安くて精度も高い(±0.25%,最大±0.5%)高精度I2C温度センサーMCP9808を
スイッチサイエンスで購入しました。

とりあえずMCP9808とピンをハンダ付けしておきます。
f:id:kiwamaru:20140813103859j:plain

・VDDとRaspiの1番(3.3V)
GNDとRaspiの6番(GND)
・SDAとRaspiの3番
・SCLとRaspiの5番
につなげます。
f:id:kiwamaru:20140813103750j:plain
写真を見ると変な繋げ方になっていますが、単にメスメスのジャンパケーブルがなかっただけです。

ここからはRaspberry PIのコンソール上での作業

/etc/modulesを編集し、以下を追加

i2c-bcm2708
i2c-dev

/etc/modprobe.d/raspi-blacklist.confを編集し、i2c-bcm2708をコメントアウト

# blacklist spi and i2c by default (many users don't need them)

blacklist spi-bcm2708
#blacklist i2c-bcm2708

ここで一旦再起動。

sudo shutdown -r now


i2c-toolsと開発用のライブラリのインストール

#sudo apt-get install i2c-tools libi2c-dev

MCP9808のアドレスの確認

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

MCP9808のデータシートを見る
http://www.farnell.com/datasheets/1522173.pdf

5.1 Registersを見ると、温度を取得するには、

0101 = Temperature register (TA)

と書いてあるので、0x05(0b0101)を書き込めばいいことがわかります。

i2cgetを使用した簡単な温度の取得

pi@raspberrypi ‾ $ sudo /usr/sbin/i2cget -y 1 0x18 0x05 w
0xe4c1 <---結果

この結果をバイトスワップして、0x0FFFでマスクして、16で割ると、温度(摂氏)が出ます。(マイナスの場合はMSBの4bit目が符号)

上の結果、0xe4c1の場合、
1.バイトスワップ 0xc1e4
2.0x0FFFでマスク 0x01e4
3.16で割る 0x01e4 / 16 = 30℃

C言語で書くとこうです。ちなみに、sudoで実行しないと読めません。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#include <linux/i2c-dev.h> // I2C用インクルード
#include <fcntl.h>
#include <sys/ioctl.h>

int main(int argc, char **argv)
{
    char *i2cFileName = "/dev/i2c-1";
    const unsigned char i2cAddress = 0x18;
    const __u8 t_reg = 0x05;
    int i2c_fd;

    if((i2c_fd = open(i2cFileName,O_RDWR)) < 0){
        fprintf(stderr,"Faild to open i2c port¥n");
        return 1;
    }
    if (ioctl(i2c_fd, I2C_SLAVE,i2cAddress) < 0) {
        fprintf(stderr,"Unable to get bus access to talk to slave¥n");
        return 1;
    }
    __s32 res = i2c_smbus_read_word_data(i2c_fd,t_reg);
    if(res < 0){
        fprintf(stderr,"Error i2c_smbus_read_word_data()¥n");
        return 1;
    }
    float temp;
    {
        __u16 t = res << 8 | res >> 8;//byte swap
        temp = t & 0x0FFF;      //mask
        temp /= 16;
        if(t & 0x1000){                 //sign or unsigned
            temp -= 256;
    	}
	}

    time_t t;
    time(&t);
    struct tm *m;
    m = localtime(&t);

    printf("%d/%d/%d-%d:%d:%d,%.2f¥n",m->tm_year+1900,m->tm_mon+1,m->tm_mday,m->tm_hour,m->tm_min,m->tm_sec,temp);

    return 0;
}

cronで10分毎に記録する

*/10 * * * * cd /home/pi/templogger;sudo ./templogger 2>&1 1>>temp.csv | logger -t templogger

※ログのローテーションとか考えてないです。エラーはsyslog行き。

約一日間、記録を取った結果はこんな感じ。
f:id:kiwamaru:20140819135452p:plain
急激に温度が下がってる部分は、エアコン付けたからです。
上がってる部分は、おそらく、TV録画のためPCが稼働しているからです。

参考:http://www.raspberrypi.org/forums/viewtopic.php?t=40831&p=540457
参考:http://openrtm.org/openrtm/ja/content/pirt-unit_with_i2cdevices

OneNote2013でサインイン出来ない現象の解消

無料になったOneNote2013を試しにインストールしたところ、「サインインしてください」というダイアログが延々と出続け、出てちっとも進まない現象に遭遇した。

日本語ではググっても一件も引っかからなかった。

ここに同じ情報があり、対策方法も載っている。
2011年から今の今まで放置されているバグのようだ。原因も不明。

http://social.msdn.microsoft.com/Forums/office/en-US/4b877cc1-e5f3-40b7-abb5-fb4b94885a74/cant-sign-in-to-windows-live-via-onenote-on-my-laptop-to-share-my-notebooks-why-does-it-just-keep?forum=olbasics

1.OneNote2013は終了しておく
2.IEOneNote Onlineにサインイン
3.OneNoteOnlineで新しいページを作成
4.OneNoteOnlineの上の方にある、ONENOTEで開くをクリックf:id:kiwamaru:20140418100904p:plain
5.OneNote2013が起動する


以上

OpenProjファイル(*.Pod)が開けなくなる現象の解消

ガントチャート作成に訳あってというか金がなくてMS Projectじゃなく、OpenProjを使っています。
OpenProj入門―Microsoft Project対応

たまにpodファイルが開けなくなることがあり、OpenProjの使用を中止しなければならないなぁと思ってましたが、どうやらJAVA7との相性が悪いようです。

OpenProjインストールフォルダの
"OpenProj1.4.0.ini"ファイルを開いて、以下の箇所を1.6までに変更します。

[Java Runtime Environment]
;Maximum Version=1.6

これで開けるようになります。

2014/07/11 追記
OpenProjは捨てて、後継ソフトのProjectLibreを使用するのがおすすめ。
http://www.projectlibre.org/

RaspberryPIでクラウドストレージcopyを使用する コンソールモード

f:id:kiwamaru:20130902131232p:plain + Raspberry Pi Type B 512MB

RaspberryPIでDropboxは動作しない。何故?arm用のクライアントが無いからです。
アップロード、ダウンロードを操作するシェルスクリプトはあるようなのですが、やっぱり自動で同期してほしいなーと思ってました。

copyならベータ版ですが、RaspberryPI用?のクライアントがあるらしいので、使ってみます。

copyアカウントをまだ持ってない人は、以下の私の紹介アカウントから是非登録してください。
https://copy.com?r=7XIzQt

** Raspberry PI対応 copyクライアントはここで配布されてます(ただしベータ版)
Client for Raspberry PI(Beta)
https://copy.zendesk.com/entries/23438841-Client-for-Raspberry-PI

2014/05/23追記 いつのまにか、正式にサポートされていました。
https://copy.com/install/linux/Copy.tgz

CopyConsole

私は、RaspberryPIでは一切GUIを使ってないので、コンソールモードでcopyを使用したいと思います。

Raspberry PIの設定

とりあえずRaspbianを更新しておきます

sudo aptitude upgrade 
copyクライアントダウンロード
wget https://copy.com/install/linux/Copy.tgz --no-check-certificate
適当な位置で展開する
tar zxvf Copy.tgz
x86系の余計なモジュール削除
cd copy
rm -r x86*
usrへ移動
sudo mv armv6h /usr/copy
同期ディレクトリを作成

userは自分のアカウントで

sudo mkdir /home/<user>/Copy
デーモンで実行する

emailとuserは自分のアカウントで

sudo /usr/copy/CopyConsole -username=<email> -root=/home/<user>/Copy -daemon

この後、パスワードを聞かれるので、copyアカウントのパスワードを入力する

表示してみる
sudo ls /home/<user>/Copy/

デフォルトのままならば、
"Quickstart Guide.pdf"が表示されるはず

以上

Raspberry PIで、stoneを使用する sslトンネルでssh接続

Raspberry Pi Type B 512MB
ネット環境によっては、インターネットへはhttp/httpsしか通してくれないところがあると思います。

遠隔地からsslトンネルでRaspberryPIにssh接続しようと思います。

Windows[stone]---[Internet:443]---[stone]RaspberryPI

通常は単に443でもsshを受ければいいだけなのですが、
パケットを覗かれるとsshであることがバレバレです。
stoneであれば、httpに偽装ができます。
http://www.gcd.org/sengoku/stone/Welcome.ja.html

なお、proxy超えは考慮していないです。

前提

  • サーバ側はRaspberryPIで、OSはRaspbian
  • サーバ側のポートは443を開けておく
  • クライアント側のポートは443がInternet側に通る(普通、開いているはず)

文中のstoneserverは、グローバルIPアドレス等に置き換えてください。

サーバ側(Raspbian)

まずはstoneをインストール

sudo apt-get install stone

設定

起動スクリプトに直接書きます

sudo vim /etc/init.d/stone

ssl3を明示的に指定しないとエラーになったので、Server,Client双方で指定しました。

#! /bin/sh

### BEGIN INIT INFO
# Provides: stone
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: packet repeater
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="TCP/IP packet repeater in the application layer"
NAME=stone
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-z ssl3 -l -D localhost:22 10443/ssl -- localhost:10443 443/http"
SCRIPTNAME=/etc/init.d/$NAME
KILL=/usr/bin/killall

[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
        echo "Starting $DESC:" "$NAME"
        $DAEMON $DAEMON_ARGS
        ;;
  stop)
        echo "Stopping $DESC:" "$NAME"
        $KILL $NAME
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop}" >&2
        exit 3
        ;;
esac
起動と自動起動設定

起動はinit.dで、自動起動はrc.dで。

sudo chmod +x /etc/init.d/stone
sudo /etc/init.d/stone start
sudo update-rc.d stone defaults 99 1

クライアント側の設定(Windows7)

Windows版のstoneをインストール

といっても解凍して何処かに置くだけです。
自分はC:\Program Filesに置きました。

そして設定
-L "C:\Program Files\stone23xp\error.log"
-a "C:\Program Files\stone23xp\access.log"
-q ssl3
localhost:10443/ssl 10022
--
stoneserver:443/http 10443 "CONNECT stoneserver:443 HTTP/1.0"
Windows上のサービスとして登録する

コンソール上で以下を実行

C:\Program Files\stone23xp\stone -M install repeater -C C:\Program Files\stone23xp\stone.cfg

そのままだとサービスはなにもしないので、以下で有効化&自動起動に設定。

Windows->コントロールパネル->管理->サービス->Stone repeaterを有効化・自動起動

SSHクライアントの起動

Teratermか何かで、localhost:10022にsshで繋げばリピートされ、リモートのRaspberryPIにSSHでつながる。