--- Linux ---
2015年05月09日(土)
Spec-RecorderとHROFFTの比較
ラズパイ2で流星の電波観測をしようと準備を進めてたけど、ラズパイ2の設定とSpec-Recorderの修正が間に合わへんかった。
んで、どうせPCで観測するんやったらということで、Spec-RecorderとHROFFTの両方のソフトを使って結果の違いを見てみた。
この前極大を迎えたみずがめ座η流星群の時期に。。

エコー検出は、Spec-Recorderの方が多かった。
これは分解能がHROFFTの8倍ってことが要因かも。

Spec-Recorderのエエとこは...
・エコーを自動でカウントしてくれる。
・オープンソースなんで好きに改造できる。
・Linuxなんで、シェルとかで外からイロイロできる。
・ターミナルで動かせるんで、リモート運用しやすい。

---
下はスペクトログラムの例。
..HROFFTは、1画像 10分。
..Spec-Recorderは、1画像 5分。

【流星のエコー】




【衛星のエコー?】




【ノイズ】




---
みずがめ座η流星群の観測結果は、自分とこの環境では去年よりかなり静かやった。
受信機やアンテナが劣化したんかもしれへんし、もしかして既に送信場所が変わったんかも。
長年稼働してきた福井高専の設備が停波して代わりに和歌山県のみさと天文台から送信するという情報もあるみたいなんで。。

---
参考にならへんかもしれへんけど、エコーを捉えたデータ(png,csv,ogg,echo)だけを取り出すシェルを。。
ほんまはPythonのソースを直接修正したいんやけど、なにせPythonの知識が乏しいもんで。。
-----------------------------------------------------------
#!/bin/bash

dir_echo=./echo/
dir_ogg=./ogg/
dir_csv=./CSV/
dir_png=./PNG/
dir_mono=./monoPNG/

dir_dst=../SR_Data/

find $dir_echo -printf "%s:%p\n" | while read filelist
do
    # Get file size
    filesize="${filelist%%:*}"

    # Get file name
    filename="${filelist##*/}"

    # Get file name prefix
    filename="${filename%%.*}"

    # Exception echo directory
    if [ $filename ]
    then
        # Select ECHO file
        if [ $filesize -ne 0 ]
        then
            echo "move to" $dir_dst$filename $filesize

            mv $dir_ogg$filename* $dir_dst.
            echo "filename" $dir_ogg$filename

            mv $dir_csv$filename* $dir_dst.
            echo "filename" $dir_csv$filename

            mv $dir_png$filename* $dir_dst.
            echo "filename" $dir_png$filename

            mv $dir_mono$filename* $dir_dst.
            echo "filename" $dir_mono$filename

            mv $dir_echo$filename* $dir_dst.
            echo "filename" $dir_echo$filename

        else
            rm $dir_ogg$filename*
            rm $dir_csv$filename*
            rm $dir_png$filename*
            rm $dir_mono$filename*
            rm $dir_echo$filename*
        fi
    fi
done
-----------------------------------------------------------

2015年03月22日(日)
Linux Mint Debian Edition を使ってみた
Windows XPのままにしていたノートPCをLinuxにしようと、この一週間ネットを徘徊。
今回 Linux化するPCもPAE非対応のPCやから、ディストリビューションの選択肢も限られてるんで、2年前と同じMint Mayaかなぁと思いながらサイトを見たら...

Debian Editionやったら非PAE対応のPCで使えるという情報が。

Debian版は年一回のペースでリリースされているみたいで、最新版は去年の3月。ということはボチボチ新しいのが出る?

http://ja.wikipedia.org/wiki/Linux_Mint

と思って週末にダウンロードしようとしたら、新しいのが出てた。

で、さっそく最新版のBetsy MATE RC (32-bit)をダウンロードしてインストール。

http://linuxmint-jp.net/
http://www.linuxmint.com/download_all.php


LMDE2 BetsyをインストールしたPC
 CPU:Intel(R) Pentium(R) M 1.60GHz
 HDD:40GByte
 RAM:1GByte



xrdpを入れてリモートからアクセスしたら、エラーが出てアクセスできへん。



ネットを検索すると、vnc4serverもインストールせなあかんとか。
確かに、これまで使ってるMint Mayaにはvnc4serverが入ってた。
これをインストールして無事、リモートからアクセスできた。
2015年03月08日(日)
ラズパイ2で流星の電波観測(HRO)
Raspberry Pi 2の性能を活かして、電波観測(HRO)の環境を構築した。

インストールの練習を兼ねて、Linuxで流星の電波観測(HRO)で書いたように、Linux PCに観測用のソフト「Spec-Recorder」をインストールして動作を確認。
そやから、今回は安心してRaspberry Pi 2へインストール。
これで、わざわざ高いPCを使う必要はないし、格安でHROの環境を構築できる。

インストール方法は、添付のRead me.pdfに書かれているとおり。
sr.confファイルも修正。



動作結果は、下のとおり。どこか設定が悪いのか、Warningが出てるけど、とりあえず放置。。
-----------------------------------
$ python main.py
HTTP server is unavailable
del_ogg is unavailable
filename will not be written
CSV file will be saved
data will be analyzed
OS = Linux,BSD,etc
Spec_Recorder Ver.1.21
Executed freq_exec.py
executed freq_send_mail.py
Audio fileneme is ocv1503081615.ogg
Waiting 5 minutes
Filename is ocv1503081615.ogg
Recording start
sox WARN alsa: can't encode 0-bit Unknown or not applicable

Input File     : 'default' (alsa)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:58.88 [00:00:00.00] Out:2.82M [   ===|===   ]  Clip:0  1
In:0.00% 00:01:09.03 [00:00:00.00] Out:3.31M [     =|=     ]  Clip:0  1
In:0.00% 00:01:19.19 [00:00:00.00] Out:3.80M [  -===|===-  ]  Clip:0  1
In:0.00% 00:01:29.26 [00:00:00.00] Out:4.28M [  -===|===-  ]  Clip:0  1
:
-----------------------------------

今回もFM放送で動作を確認。



Raspberry PiにはAudio入力の端子はついてないんで、市販のUSB Audioを追加。
たまたま昔買って手元にあったPLANEX PL-US35APを使っているサイトがあったんで、その通りに設定。
参考にしたサイト
http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/RaspberryPi/%C6%FC%CB%DC%B8%EC%B2%BB%C0%BC%C7%A7%BC%B1/

-----------------------------------
pi@raspberrypi2 ~ $ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0d8c:0008 C-Media Electronics, Inc. 
pi@raspberrypi2 ~ $ cat /proc/asound/modules 
 0 snd_usb_audio
 1 snd_bcm2835
pi@raspberrypi2 ~ $ amixer
Simple mixer control 'PCM',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 151
  Mono:
  Front Left: Playback 44 [29%] [-20.13dB] [on]
  Front Right: Playback 44 [29%] [-20.13dB] [on]
Simple mixer control 'Mic',0
  Capabilities: cvolume cvolume-joined cswitch cswitch-joined penum
  Capture channels: Mono
  Limits: Capture 0 - 16
  Mono: Capture 0 [0%] [0.00dB] [on]
Simple mixer control 'Auto Gain Control',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [on]
-----------------------------------

2015年03月02日(月)
やっと到着。 ラズパイ2
一月遅れになったけど、ようやくラズパイ2が届いた。

買ぅて何に使うん? っていういつもの無意味な自問を繰り返してる間に在庫がなくなってて。
で、このままやといつになっても買われへんかもと思って、とりあえず発注しといたんが、3週間経った今日、ようやく到着。

到着を待ってる間に使い道も決まって、ちょっと残念。
Windows10が出たらこれで遊ぼうと思って、Windows Developer Programにも登録してるのに。。
落ち着いたら、もう一台買う?!

Raspberry Pi 2 Model B

2015年02月22日(日)
Linuxで流星の電波観測(HRO)
流星の電波観測(HRO)用のソフトはWindowsで動作するHROFFTが有名やけど、今回はWindows XPからLinuxにOSを入れ替えた古いPCの有効活用を考えてMINT 13(Maya)へSpec-Recorderをインストールしてみた。

現在の最新版をダウンロード。
http://sourceforge.jp/projects/spec-recorder/

Spec-Recorder Ver.1.40.zip

インストールは簡単。
添付のRead me.pdfに書かれている必要なライブラリのうち、インストールされてないものをパッケージマネージャで入れてツールを実行するだけ。
実行したら、結果が5分毎に分割されてファイルに保存されていく。

HTTPサーバーを使ったりとか設定のカスタムはconfigファイルでできる。

-----------------------------------
$ python main.py
HTTP server is unavailable
del_ogg is unavailable
filename will not be written
CSV file will be saved
data will be analyzed
OS = Linux,BSD,etc
Spec_Recorder Ver.1.21
Executed freq_exec.py
executed freq_send_mail.py
Filename is ocv1502220920.ogg
Audio fileneme is ocv1502220920.ogg
Waiting 5 minutes
Recording start

Input File     : 'default' (alsa)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:59.73 [00:00:00.00] Out:2.86M [    |    ]   Clip:0   1
In:0.00% 00:01:09.72 [00:00:00.00] Out:3.34M [    |    ]   Clip:0   1
In:0.00% 00:01:19.79 [00:00:00.00] Out:3.83M [    |    ]   Clip:0   1
In:0.00% 00:01:29.94 [00:00:00.00] Out:4.31M [    |    ]   Clip:0   1
:
-----------------------------------


ちゃんと動作しているように見えたけど、正時に異常が発生して測定結果のPNGが作成されへんとかCtr-Cで停止できへんとかの現象が。

-----------------------------------
:
In:0.00% 00:00:10.84 [00:00:00.00] Out:516k  [    |    ]   Clip:0   Waiting for ocv1502220955.png
In:0.00% 00:00:11.43 [00:00:00.00] Out:545k  [    |    ]   Clip:0   Waiting for ocv1502220955.png
In:0.00% 00:00:11.86 [00:00:00.00] Out:565k  [    |    ]   Clip:0   ocv1502220955.png is exist
make csv
make zip
Traceback (most recent call last):
  File "main.py", line 189, in <module>
    if int(start_minute) >= 0 and int(start_minute) < 5 and conf.get("file", "auto_make_rmob") == "on":
  File "/usr/lib/python2.7/ConfigParser.py", line 618, in get
In:0.00% 00:00:12.03 [00:00:00.00] Out:573k  [    |    ]   Clip:0   raise NoOptionError(option, section)
ConfigParser.NoOptionError: No option 'auto_make_rmob' in section: 'file'
In:0.00% 00:00:12.29 [00:00:00.00] Out:586k  [    |    ]   Clip:0   start making list
In:0.00% 00:00:54.19 [00:00:00.00] Out:2.60M [    |    ]   Clip:0   finished making list 
:
-----------------------------------


異常が出ている行を見たら、cofigファイル「sr.conf」の「auto_make_rmob」をチェックしているのが分かる。
そやけど、「sr.conf」には「auto_make_rmob」の設定が記載されてへん。

処理としては、毎正時に「auto_make_rmob = on」やったら、RMOBに関係する何かの処理をするのかなぁ?という感じ。

配布サイトの情報を見るとRMOBの処理はまだ実装中のように読めたんで、「sr.conf」に「auto_make_rmob = off」を追加して対応。

-----------------------------------
:
[file]
header = ocv
del_ogg = off
write_filename = off
write_csv = on
make_zip = on
auto_make_rmob = off
:
-----------------------------------


とりあえず、異常なしで動作するようになった。
FM放送で動作を確認。。


2014年11月09日(日)
Raspberry Pi にLCD液晶を付けて時計を作ってみた
LCD液晶の動作を確認するために時計のサンプルを作ってみた。
使用したLCD液晶は、トラ技2014年7月号に掲載されていたもの。

ストロベリー・リナックス http://strawberry-linux.com/

I2C低電圧キャラクタ液晶モジュール(16x2行) メーカー品番:SB1602B
http://strawberry-linux.com/catalog/items?code=27001

使い方は、ストロベリー・リナックスで公開されている資料と
使用されているコントローラー(ST7032i)のデータシートを参考に。



I2Cのアドレスを確認

--------------------------------------------
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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi ~ $
--------------------------------------------


そうそう、I2Cを使うのに、libi2c-dev だけではダメみたいで、i2c-tools もインストールしてた。

下のソースが時計のサンプル。
アイコン表示の動作を確認するために、26秒間だけ動作。

ソース

--------------------------------------------
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <wiringPiI2C.h>

#define LCD_ADDRESS 0x3e
#define LCD_CMDADRS 0x00
#define LCD_DATADRS 0x40

// Prototype
int lcd_init(int fd);
int lcd_write(int fd, char* buf, int line);
int lcd_clear(int fd);
int lcd_icon(int fd, int num, int disp);

/**
 * main
 *  Initialize ST7032i (LCD Controller)
 *  ICON Control
 *  Write DATE,TIME
 */
int main(void)
{
	int fd_lcd;           // ST7032i (LCD Controller)
	char disp_buf[17];    // Display Buffer
	int icon_num;         // ICON Number
	int icon_disp;        // ICON (1:display 0:clear)

	int loop;

	time_t timer;
	struct tm *local;
	char wday_buf[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

	/** Device open */
	if((fd_lcd = wiringPiI2CSetup(LCD_ADDRESS)) == -1) { return 1; }

	/** Initialize ST7032i (LCD Controller) */
	if (lcd_init(fd_lcd) == -1) { return 1; }

	icon_num  = 0;
	icon_disp = 1;               // ICON display
	for (loop=0; loop<26; loop++) {
		/** ICON */
		if (loop == 13) {        // 0-12:Display 13-:Clear
			icon_num  = 0;
			icon_disp = 0;       // ICON clear
		}
		lcd_icon(fd_lcd, icon_num, icon_disp);
		icon_num++;

		/** CLOCK */
		timer = time(NULL);
		local = localtime(&timer);
		sprintf(disp_buf,"%4d/%02d/%02d %s",
		        local->tm_year+1900, local->tm_mon+1, local->tm_mday, wday_buf[local->tm_wday]);
		lcd_write(fd_lcd, disp_buf, 1);

		sprintf(disp_buf,"%02d:%02d:%02d",
		        local->tm_hour, local->tm_min, local->tm_sec);
		lcd_write(fd_lcd, disp_buf, 2);

		sleep(1);        // 1sec
	}

	/** LCD clear */
	lcd_clear(fd_lcd);

	return 0;
}

/**
 * sub:lcd_init
 *  ex. ST7032i dataseet (Command , Initilaize flowchart)
 */
int lcd_init(int fd)
{
	delay(40);                                          // 40msec

	/** Function Set (8bit bus mode, 2-line mode,normal font,normal instruction mode) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00111000);
	delayMicroseconds(30);                              // 26.3usec

	/** Function Set (IS=1 : extension instruction mode) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00111001);
	delayMicroseconds(30);                              // 26.3usec

	/** Internal OSC frequency (BS=Low, Freq=183Hz, VDD=3.0V) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00010100);
	delayMicroseconds(30);                              // 26.3usec

	/** Contrast set (lower 4bit) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b01111010);
	delayMicroseconds(30);                              // 26.3usec

	/** Power (ICON ON/Boost ON/Contrast higher 2bit) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b01011111);
	delayMicroseconds(30);                              // 26.3usec

	/** Follower control (Fon ON/Rab1 ON) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b01101010);
	delay(200);                                         // 200msec (for Power stable)

	/** Display ON/Cursor ON/Blink ON */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00001111);
	delayMicroseconds(30);                              // 26.3usec

	/** Clear Display */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00000001);
	delay(2);                                           // 2msec

	/** Entry Mode Set (Cursor moves to right) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00000110);
	delayMicroseconds(30);                              // 26.3usec

	return 0;
}

/**
 * sub:lcd_write
 */
int lcd_write(int fd, char* buf, int line)
{
	int cnt;
	char addr;

	/** Set DDRAM Address */
	if (line == 1) {
		/** Line 1 (0x00) */
		addr = 0b10000000;
	} else {
		/** Line 2 (0x40) */
		addr = 0b11000000;
	}
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, addr);

	/** Write Data To DDRAM */
	for (cnt=0; buf[cnt]!=0; cnt++) {
		wiringPiI2CWriteReg8(fd, LCD_DATADRS, buf[cnt]);
	}

	return 0;
}

/**
 * sub:lcd_clear
 */
int lcd_clear(int fd)
{
	/** Clear Display */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00000001);
	delay(2);                                           // 2msec

	/** Return Home */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00000011);
	delay(2);                                           // 2msec

	return 0;
}

/**
 * sub:lcd_icon
 */
int lcd_icon(int fd, int num, int disp)
{
	char icon;

	// ICON address table (Lower 4bit)      OFFSET : ADDR: BIT : ICON
	char icon_addr_buf[13] = { 0x00,          // 0 : 00H : S1  : ANT
	                           0x02,          // 1 : 02H : S11 : TEL
	                           0x04,          // 2 : 04H : S21 : SP
	                           0x06,          // 3 : 06H : S31 : CON
	                           0x07,          // 4 : 07H : S36 : UP
	                           0x07,          // 5 : 07H : S37 : DN
	                           0x09,          // 6 : 09H : S46 : KEY
	                           0x0b,          // 7 : 0BH : S56 : ?
	                           0x0d,          // 8 : 0DH : S66 : BAT
	                           0x0d,          // 9 : 0DH : S67 : BAT
	                           0x0d,          // A : 0DH : S68 : BAT
	                           0x0d,          // B : 0DH : S69 : BAT
	                           0x0f           // C : 0FH : S76 : ?
	                         };

	// ICON bits table (Lower 5bit)         OFFSET : ADDR: BIT : ICON
	char icon_bits_buf[13] = { 0b00010000,    // 0 : 00H : S1  : ANT
	                           0b00010000,    // 1 : 02H : S11 : TEL
	                           0b00010000,    // 2 : 04H : S21 : SP
	                           0b00010000,    // 3 : 06H : S31 : CON
	                           0b00010000,    // 4 : 07H : S36 : UP
	                           0b00001000,    // 5 : 07H : S37 : DN
	                           0b00010000,    // 6 : 09H : S46 : KEY
	                           0b00010000,    // 7 : 0BH : S56 : ?
	                           0b00010000,    // 8 : 0DH : S66 : BAT
	                           0b00001000,    // 9 : 0DH : S67 : BAT
	                           0b00000100,    // A : 0DH : S68 : BAT
	                           0b00000010,    // B : 0DH : S69 : BAT
	                           0b00010000     // C : 0FH : S76 : ?
	                         };

	if (num > 12) { return 1; }

	/** Function Set (IS=1 : extension instruction mode) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00111001);
	delayMicroseconds(30);                              // 26.3usec

	/** Set ICON Address */
	icon = 0b01000000 | icon_addr_buf[num];             // Lower 4bit
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, icon);
	delayMicroseconds(30);                              // 26.3usec

	/** Write Data To RAM */
	if (disp == 1) {
		/** ICON display */
		icon = icon_bits_buf[num];
	} else {
		/** ICON clear */
		icon = icon_bits_buf[num] ^ icon_bits_buf[num];
	}
	icon = 0b00000000 | icon;                           // Lower 5bit
	wiringPiI2CWriteReg8(fd, LCD_DATADRS, icon);

	/** Function Set (IS=0) */
	wiringPiI2CWriteReg8(fd, LCD_CMDADRS, 0b00111000);
	delayMicroseconds(30);                              // 26.3usec

	return 0;
}
--------------------------------------------

--------------------------------------------
gcc -o lcdsample lcdsample.c -l wiringPi
--------------------------------------------



2014年11月03日(月)
Raspberry Pi にRTCを追加
Raspberry Pi単体で動くようにしようとLCD液晶とRTCを追加した。

購入したLCD液晶はトラ技2014年7月号に載ってたのを。
RTCも同じサイトで扱っていたもの。

ストロベリー・リナックス http://strawberry-linux.com/

M41T62 リアルタイムクロック(RTC)モジュール
http://strawberry-linux.com/catalog/items?code=12062




M41T62のドライバーを確認してみると...ない?!

--------------------------------------------
pi@raspberrypi /lib/modules/3.10.25+/kernel/drivers/rtc $ ls -l
合計 316
-rw-r--r-- 1 root root  7001  1月  8  2014 rtc-bq32k.ko
-rw-r--r-- 1 root root 12226  1月  8  2014 rtc-ds1305.ko
:
:
-rw-r--r-- 1 root root  8048  1月  8  2014 rtc-isl12022.ko
-rw-r--r-- 1 root root 15377  1月  8  2014 rtc-isl1208.ko
-rw-r--r-- 1 root root 10558  1月  8  2014 rtc-m41t80.ko
-rw-r--r-- 1 root root  8059  1月  8  2014 rtc-m41t93.ko
-rw-r--r-- 1 root root  7363  1月  8  2014 rtc-m41t94.ko
-rw-r--r-- 1 root root  7587  1月  8  2014 rtc-max6900.ko
:
:
-rw-r--r-- 1 root root  9175  1月  8  2014 rtc-s35390a.ko
-rw-r--r-- 1 root root 12472  1月  8  2014 rtc-x1205.ko
pi@raspberrypi /lib/modules/3.10.25+/kernel/drivers/rtc $
--------------------------------------------


ネットで検索してみると、どうやらrtc-m41t80が対応しているみたい。
http://code.metager.de/source/xref/raspberrypi/linux/drivers/rtc/rtc-m41t80.c

M41T62を認識できてるか確認したら...出た!
--------------------------------------------
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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi ~ $
--------------------------------------------


ということで、M41T62をRTCとして設定。
--------------------------------------------
pi@raspberrypi / $ sudo modprobe rtc-m41t80
pi@raspberrypi / $
pi@raspberrypi / $ sudo su
root@raspberrypi:/# echo m41t62 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
root@raspberrypi:/#
--------------------------------------------


現在の時刻をハードウェアクロックに設定。
--------------------------------------------
pi@raspberrypi / $ date
2014年 10月  5日 日曜日 12:00:08 JST
pi@raspberrypi / $ sudo hwclock -w
pi@raspberrypi / $ sudo hwclock -r
2014年10月05日 12時01分58秒  -0.057212 seconds
pi@raspberrypi / $
--------------------------------------------


Raspberry Pi起動時にハードウェアクロックからシステムクロックを設定するように、/etc/rc.lodalに以下を追加。
--------------------------------------------
echo m41t62 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sleep 1
hwclock -s
--------------------------------------------


問題は、NTPサーバーで時刻校正した結果をハードウェアクロックに反映する仕組みになってないってこと。



LCD液晶は、そのうちに。
2014年09月23日(火)
Raspberry Pi にレベルメータ
センサーとかで読み取った内容を表示しようと、レベルメータを付けてみた。

使えそうなLEDを探してたら10セグメントのLEDが見つかって、その隣にレベルメータICってものが出てた。
で、これらを使おうと思って必要な部品を探そうとしたら、キットも売ってた。

あれこれ部品を買い集めるのも面倒なんで、このキットを買って、超簡単にレベルメータを実装。

コンパクトレベルメータキット SK-LV39
http://eleshop.jp/shop/g/g7AD113/



GPIO 18はH/W PWMとして使えるんで、この信号をレベルメータに入れる。
レベル調整は、キット基板上の半固定抵抗で。

--------------------------------------------
#include <wiringPi.h>
#define LED_PIN 1         // GPIO 18
#define DELAY_TIME 500    // usec
#define LOOP_CNT 10

int main(void)
{
	int pwm;
	int cnt;

	if(wiringPiSetup() == -1) return 1;
	pinMode(LED_PIN, PWM_OUTPUT);

	for (cnt=0; cnt<LOOP_CNT; cnt++) {
		// Up
		for (pwm=0; pwm<=1023; pwm++) {
			pwmWrite(LED_PIN, pwm);
			delayMicroseconds(DELAY_TIME);
		}
		// Down
		for (pwm=1023; pwm>=0; pwm--) {
			pwmWrite(LED_PIN, pwm);
			delayMicroseconds(DELAY_TIME);
		}
	}
	return 0;
}
--------------------------------------------



2014年08月17日(日)
Raspberry Pi その後
Raspberry Piを買ってから2ヶ月。
ほとんど触ることもなく。

Raspberry Pi以降にインストールしたもの。


・I2C通信を行うためのライブラリ。
--------------------------------------------
pi@raspberrypi ~ $ sudo apt-get install libi2c-dev
--------------------------------------------

・GPIOを制御するためのC言語ライブラリ。
--------------------------------------------
pi@raspberrypi ~/Workspace $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi ~/Workspace $ cd wiringPi/
pi@raspberrypi ~/Workspace/wiringPi $ ./build
--------------------------------------------

・赤外線リモコンを使用するためのライブラリ。
--------------------------------------------
pi@raspberrypi ~ $ sudo apt-get install lirc
--------------------------------------------
Raspberry Pi起動時にlircを起動するよう設定

変更するファイル:
  /etc/modules
変更内容:
  ファイルの最後にlirc〜の2行を追加。
  (GPIO 22,23を使用した場合)
--------------------------------------------
pi@raspberrypi /etc $ more modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22
pi@raspberrypi /etc $
--------------------------------------------

で、これらを使って何種類かの機能を実装してみた。


・shutdownボタン

1秒間隔でスイッチの状態をチェックして3秒間の長押しでシャットダウン。

rc.localからバックグラウンドで起動。
--------------------------------------------
/home/pi/Workspace/shutdown/shutdown_btn &
--------------------------------------------
ソース
--------------------------------------------
#include <wiringPi.h>
#include <stdio.h>
#define BUTTON_PIN 0    // GPIO 17
#define SLEEP_TIME 1    // sec
#define SHUTDOWN_CNT 3

int main(void) {
    int dat = 0;
    int cnt = 0;

    if(wiringPiSetup() == -1) return 1;
    pinMode(BUTTON_PIN, INPUT);

    while(1) {
        dat = digitalRead(BUTTON_PIN);
        if(dat == 0) {
            cnt = 0;
        } else {
             cnt++;
             if(cnt >= SHUTDOWN_CNT) {
//                 printf("Shutdown!!dat=%d , cnt=%d\n", dat, cnt);
                 system("shutdown -h now");
                 break;
             }
        }
//        printf("dat=%d , cnt=%d\n", dat, cnt);
        sleep(SLEEP_TIME);
    }
    return 0;
}
--------------------------------------------
デバッグ時の状態
--------------------------------------------
pi@raspberrypi ~/Workspace/shutdown $ sudo ./shutdown_btn
dat=0 , cnt=0
dat=0 , cnt=0
dat=0 , cnt=0
dat=0 , cnt=0
dat=1 , cnt=1
dat=1 , cnt=2
Shutdown!!dat=1 , cnt=3
--------------------------------------------

・温湿度モニタ

DHT11温湿度モジュールを使ったて温湿度モニタ。


ソース

こちらのをそのまま使用。(GPIOは変更)
http://www.rpiblog.com/2012/11/interfacing-temperature-and-humidity.html

実行中の表示
--------------------------------------------
pi@raspberrypi ~/Workspace/dht11 $ sudo ./dht11
Interfacing Temperature and Humidity Sensor (DHT11) With Raspberry Pi
Humidity = 38.0 % Temperature = 29.0 *C (84.2 *F)
Humidity = 39.0 % Temperature = 28.0 *C (82.4 *F)
Humidity = 39.0 % Temperature = 28.0 *C (82.4 *F)
:
--------------------------------------------

・赤外線リモコン

温湿度をモニタして扇風機やエアコンを制御するのが目的やけど、リモコンを覚えさせることができへんかった。
TVは制御できるのに...


GreenFanの電源スイッチをONした時の受信結果
--------------------------------------------
pi@raspberrypi ~ $ mode2 -d /dev/lirc0
space 2993751
pulse 8957
space 4557
pulse 553
space 583
pulse 533
 :
 :
space 1695
pulse 573
^C
pi@raspberrypi ~ $
--------------------------------------------
受信はできてるように見えるのに、覚えさせようとしたら、タイムアウトになる。。


・無線LANモニタ

手元にあったUSBの無線LANモジュール(コレガ CG-WLUSB300AGN)をRaspberry Piに挿してみたら使えたんで、アクセスポイントのモニタソフトを作成。

無線LANモジュールの認識状況
--------------------------------------------
pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 07aa:003f Corega K.K. CG-WLUSB300AGN
pi@raspberrypi ~ $
--------------------------------------------
モニタソフトの実行結果 (同じ内容をファイルへ保存)
--------------------------------------------
pi@raspberrypi ~/Workspace/wlanmon $ sudo ./wlanmon
2014/08/16 21:24:09
Cell,Address,Ch,Freq(GHz),Quality(%),Signal(dBm),Enc,ESSID,Cipher,Auth
01,70:73:CB:BB:xx:xx,36,5.18,34,-86,on,"xxxxxxxxxxxxx",CCMP,PSK
02,70:73:CB:BB:yy:yy,11,2.462,42,-80,on,"yyyyyyyyyyyyy",CCMP,PSK
03,00:01:8E:9F:zz:zz,1,2.412,40,-82,on,"zzzzzzzzzzzz",,
04,00:1D:73:40:**:**,2,2.417,40,-82,on,"************",TKIP,PSK
05,28:C6:8E:0F:**:**,48,5.24,90,-47,on,"",CCMP,PSK
06,00:1D:73:A6:**:**,2,2.417,34,-86,on,"************",TKIP,PSK
07,34:76:C5:1B:**:**,1,2.412,42,-80,on,"************",TKIP CCMP,PSK
08,00:0D:02:CC:**:**,7,2.442,31,-88,on,"***************",,
pi@raspberrypi ~/Workspace/wlanmon $
--------------------------------------------
ちなみに上の結果に対応する生データ
--------------------------------------------
pi@raspberrypi ~/Workspace/wlanmon $ sudo iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 70:73:CB:BB:xx:xx
                    Channel:36
                    Frequency:5.18 GHz (Channel 36)
                    Quality=24/70  Signal level=-86 dBm  
                    Encryption key:on
                    ESSID:"xxxxxxxxxxxxx"
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000004c8c0ad50f7
                    Extra: Last beacon: 1680ms ago
                    IE: Unknown: 000D736B326272206E6574776F726B
                          〜中略〜
                    IE: Unknown: 200100
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 2D1AEF111BFFFFFF0000000000000000000000000000000000000000
                          〜中略〜
                    IE: Unknown: DD0B0017F20100010100000007
          Cell 02 - Address: 70:73:CB:BB:yy:yy
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=30/70  Signal level=-80 dBm  
                    Encryption key:on
                    ESSID:"yyyyyyyyyyyyy"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000004e402adea2f
                    Extra: Last beacon: 2180ms ago
                    IE: Unknown: 000D736B326272206E6574776F726B
                          〜中略〜
                    IE: Unknown: 32043048606C
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 2D1AAD511BFFFFFF0000000000000000000000000000000000000000
                          〜中略〜
                    IE: Unknown: DD0B0017F20100010100000007
          Cell 03 - Address: 00:01:8E:9F:zz:zz
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
:
:
--------------------------------------------
iwlist wlan0 scan の結果

無線LANドライバの種類によって出方が違うみたい。
例えば、MINTなノートPC内臓の無線LANの場合は、上のCell 02と同じAPやのに...
--------------------------------------------
eth1      Scan completed :
          Cell 01 - Address: 70:73:CB:BB:xx:xx
                    ESSID:"xxxxxxxxxxxxx"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Frequency:2.462 GHz (Channel 11)
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Quality=65/100  Signal level=-61 dBm  
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Extra: Last beacon: 80ms ago
--------------------------------------------

Raspberry Piとブレッドボードを組み合わせたケースをレゴブロックで作ってみた。

裏面と側面に作業性を考慮した隙間を作って排熱に気を付けて、ついでにLEDの近くは透明のブロックを使って LEDの状態を見られるように。


2014年07月05日(土)
chumby 復活
chumby復活のニュースがあった。

http://japanese.engadget.com/2014/07/03/chumby/

サービスが終了してからは、ラジオやUSBに入れた音楽を聴くのに使っていたけど、ここ数か月電源を入れてなかったんで、画面が変わってることに気が付かへんかった。



chumbyのサイトにログインしてみたら登録情報は活きてたんで、月$3の支払いの手続き登録をしたらすぐに昔のように使える状態になるみたい。



で、さっそくクレジットカードを登録しようと、住所とカード情報を入力して...キャンセル。
とりあえず一週間ほど様子をみてから。。

http://www.chumby.com/


2014年06月15日(日)
Raspberry Pi
とうとう買った。

まずは部屋の温度をロギングして...というのが目的で。。

先々週の暑い日に思い立って、先週末に発注。
昨日、無事に初期設定が完了して使える状態になった。

情報はネットに豊富に出てるんで、参考本はええかなと思ってたけど、ちょうどトラ技7月号でRaspberry Piが特集されていたんでトラ技を

ついでに本屋さんで眺めた本は↓の3つ。

・Raspberry Piで遊ぼう
オールカラーで絵や写真がふんだんにあって、重くて高い!
SSHやSCPの使い方まで丁寧に書かれてるんで、Windowsしか知らへん人向きかも。

・Raspberry Piアイデア実験室
回路図とかも載ってるんで、普通に参考になると思う。

・トラ技7月号
要所要所に回路図,ブロック図,タイミング図,フローは載っとるし、コードのコメントも解りやすく書かれているんで、ソフトが苦手なエレキ屋さんにもハードが苦手なファーム屋さんにも役立ちそう。
何といっても安いし必要な情報は入ってる。


やったこと。

・http://www.raspberrypi.org/からRaspbianをダウンロードしてSDカードに書き込んで
・SDカードをRaspberry Piに装着して電源投入。
・電源はスマフォに付いてたのを使用。
・初回起動時にraspi-configが立ち上がって、一通りの初期設定を。この時、SSHの有効化とUpdateを実施。

その他の設定は...

・IPアドレスを固定設定。(/etc/network/interfaces)
・xrdpをインストールしてRemote Desktopできるように。
・ksnapshotをインストールしてScreen Shotを採れるように。

ここまでしといたら、Raspberry Piにモニタやキーボートとかを繋ぐ必要がないんで、邪魔にならへんところで動かして作業ができる。

この後は、トラ技の記事を参考に、必要な部品を調達して週末に備えようかと。



Remote Desktopでアクセス

SCPでアクセス

SSHでアクセス

2013年09月15日(日)
レゴ EV3 にTelnet
レゴ EV3には、Linuxが入ってるってことなんで、手元のLANアダプタで繋いでみた。


アダプタが2種類あったんで、その両方を試してみることに。
どちらもPlanexの製品で、Linuxを使ったモノをネット化する時に使えるんで重宝する。
で、レゴでも使えるかなと。。
UE-100TX-G3は、日経Linux誌の記事で紹介されてたんで、使えるのはわかっとるけど。


UE-200TX2
 pegasus 2-1:1.0: eth1,
 ADMtek ADM8511 "Pegasus II" USB Ethernet

UE-100TX-G3
 asix 1-2:1.0: eth3: register 'asix' at usb-0000:00:1d.7-2,
 ASIX AX88772 USB 2.0 Ethernet

無事、二つ共、使えた。


2013年05月19日(日)
Win XP ノートPCのメモリ増設&Linux入れ替え
Win XP PCをリストアする時にメモリ増強を考えて内蔵メモリの位置を確認してて、その時は内蔵メモリの位置が増設メモリと反対側のマザーボード?の表側に付いてて、結構バラさなあかんやろし面倒やなぁと思って断念してた。
 内蔵メモリ512Mと増設メモリ512Mなんで、増設メモリだけ1Gに交換しても
 モッタイナイなぁと。。。

そやけど、メモリの価格がそんなに高くないことが分かって、それやったら他にも内蔵メモリを交換してる人がおるんちゃう?と思ってPCの型名とメモリ交換をキーに検索したら...ヒットした。
内蔵メモリはキーボードと本体を留めているネジ2本と噛み合わせのツメ3箇所を外すだけで交換できる。
さすがPC組み立てメーカー(E社)のPCだけあって、バラすのも簡単。
元にもどすのはキーボードをパチンと押し入れてネジを留めればいい。

 
 

これで、メモリは2GByteになって、WindowsもLinuxも気持ちよく使えるカナ??
ついでに、LinuxもPlamo Linuxからもっと使いやすそうなのに入れ替えを。
ネットで調べてみたら、Linux Mint 13っていうのがPAE非対応のPCに対応してて2017年までサポートされるみたい。
ってことで...



インストール方法とかは、↓の情報そのまま。
http://linuxcom.info/install-linuxmint-13.html

BUFFALO ノートPC用増設メモリ PC2700 (DDR333) 1GB DN333-A1G/E
2013年05月06日(月)
Windows XP リストア奮闘
7年前に買ったWindows XPのノートPCの動作が重くなってきたんでリストアした。
PC付属のリカバリCDがあるんで簡単やん!って思ってたら...

リカバリCDのバージョンはSP2。
めんどくさぁ〜
リカバリCDでインストールした後、SP3に上げなあかん。。

Windows UpdateでSP3に上げようと思ってたのに、更新の確認中に異常が出てWindows Updateができへん事態に。
なんでよぉぉぉ

このまま放置するわけにもいかんし。。

もしかしたらと思ってMSのサイトをSP3のパッケージを探してウロウロしてたら出てきた。
これをCD-ROMに焼いて無事にインストール完了。
SP3に上げた後は、正常にWindows Updateも出来るようになった。

今回、リストアするついでに、HDDの容量を増やして、Linuxとのデュアルブートに。
一年後にはXPは逝ってしまうし、かといって、Microsoftが勧めているようなWindows7とか8へのバージョンアップなんてメモリが1GByteしかないPCにはできへんし。。
メモリを大きいのに入れ替えるにしても、512+152MByteの内、交換できそうなのは1枚だけ。これを1GByteに交換して1.5GByte?
コストメリットはなるんかなぁ。。

HDDは使ってないUSB HDD(120GByte)のを取り外して、PCのHDD(40GByte)と入れ換えて使うことに。
  


続いてLinuxのインストールを。 これがタイヘンやった。

これまで使ったことがなくて軽いのをと考えてたけど...
いろいろ試すつもりはなかったけど、インストールできへんディストリビューションばかりに遭遇して、軽いとか選り好みできへん状況に。。

・Xubuntu (Debian系:Ubuntu)
インストールしようとDVDからイメージを起動したらハングアップ。
 This kernel requires the following features not present on the CPU: pae
 Unable to boot - please use a kernel appropriate for your CPU.

このメッセージをキーに検索すると、"Ubuntu 12.04からPAE非対応のCPUは対象外"って。
https://forums.ubuntulinux.jp/viewtopic.php?id=14784

・Linux Mint (Debian系:Ubuntu)
Xubuntuと同じ結果。 まぁ当然かぁ。

・Berry Linux (Red Hat系)
ディストリビューションが違うんで期待したけど...Xubuntuと同じ結果に。

・openSUSE (Slackware系)
あんまり期待せずに ...
基礎部分のシステム設定まではできたけど自動設定のところでGUIが表示されず更に文字化け。
結局、起動しなかった。

・Plamo Linux
インストールとか設定とかが面倒っていう印象があるんで避けてたけど選択肢がなくなってきて。。
インストールできて、それなりに使えてる。
けど、所々文字が表示されへんとか使い辛い。。 設定がまずいんかなぁ。

他には重いCentOSやPuppy Linuxもあるけど...
CentOSは重装備のデスクトップPCで使ってるし、PuppyはWindows 2000時代に使って日本語環境が貧弱で使い辛い印象がある。今は改善してるんやろか?

しばらくPlamo Linuxを使ってみょう〜っと。。

今回リストアしたPCは
 OS :Win XP pro
 CPU:Pen M 1.6GHz
 RAM:1GByte