mattintosh note

Hello Raspberry Pi!

Raspberry Piの画面解像度を再起動せずに変更する

いつも /boot/config.txtframebuffer_width とか framebuffer_height を書いて再起動していたけど fbset コマンドですぐに変更できた…orz

$ sudo fbset -g 1280 720 1280 72 24
Linux Frame Buffer Device Configuration Version 2.1 (23/06/1999)
(C) Copyright 1995-1999 by Geert Uytterhoeven


Usage: fbset [options] [mode]

Valid options:
  General options:
    -h, --help         : display this usage information
    --test             : don't change, just test whether the mode is valid
    -s, --show         : display video mode settings
    -i, --info         : display all frame buffer information
    -v, --verbose      : verbose mode
    -V, --version      : print version information
    -x, --xfree86      : XFree86 compatibility mode
    -a, --all          : change all virtual consoles on this device
  Frame buffer special device nodes:
    -fb <device>       : processed frame buffer device
                         (default is /dev/fb0)
  Video mode database:
    -db <file>         : video mode database file
                         (default is /etc/fb.modes)
  Display geometry:
    -xres <value>      : horizontal resolution (in pixels)
    -yres <value>      : vertical resolution (in pixels)
    -vxres <value>     : virtual horizontal resolution (in pixels)
    -vyres <value>     : virtual vertical resolution (in pixels)
    -depth <value>     : display depth (in bits per pixel)
    -nonstd <value>    : select nonstandard video mode
    -g, --geometry ... : set all geometry parameters at once
    -match             : set virtual vertical resolution by virtual resolution
  Display timings:
    -pixclock <value>  : pixel clock (in picoseconds)
    -left <value>      : left margin (in pixels)
    -right <value>     : right margin (in pixels)
    -upper <value>     : upper margin (in pixel lines)
    -lower <value>     : lower margin (in pixel lines)
    -hslen <value>     : horizontal sync length (in pixels)
    -vslen <value>     : vertical sync length (in pixel lines)
    -t, --timings ...  : set all timing parameters at once
  Display flags:
    -accel <value>     : hardware text acceleration enable (false or true)
    -hsync <value>     : horizontal sync polarity (low or high)
    -vsync <value>     : vertical sync polarity (low or high)
    -csync <value>     : composite sync polarity (low or high)
    -gsync <value>     : synch on green (false or true)
    -extsync <value>   : external sync enable (false or true)
    -bcast <value>     : broadcast enable (false or true)
    -laced <value>     : interlace enable (false or true)
    -double <value>    : doublescan enable (false or true)
    -rgba <r,g,b,a>    : recommended length of color entries
    -grayscale <value> : grayscale enable (false or true)
  Display positioning:
    -move <direction>  : move the visible part (left, right, up or down)
    -step <value>      : step increment (in pixels or pixel lines)
                         (default is 8 horizontal, 2 vertical)

パイプで繋いだコマンドの出力をバッファ無しで受け取りたい

先日、Raspberry Pi で温度を測定するプログラムを書いたので温度をモニタリングしながらファイルに保存していこうと思ったら画面に何も出てこなかった。すっかり忘れてたけどバッファがあるんだった。

$ python2 temp.py | tee temp.csv

昔は grep --line-buffered みたいなの使ってた気がするけど、他にも無いのかと調べてみたらコマンドのバッファを変更できる stdbuf っていうちゃんとあった。

$ man -s 1 -k buffer
dmesg (1)            - print or control the kernel ring buffer
stdbuf (1)           - Run COMMAND, with modified buffering operations for its standard streams.
$ stdbuf --help
Usage: stdbuf OPTION... COMMAND
Run COMMAND, with modified buffering operations for its standard streams.

Mandatory arguments to long options are mandatory for short options too.
  -i, --input=MODE   adjust standard input stream buffering
  -o, --output=MODE  adjust standard output stream buffering
  -e, --error=MODE   adjust standard error stream buffering
      --help     display this help and exit
      --version  output version information and exit

If MODE is 'L' the corresponding stream will be line buffered.
This option is invalid with standard input.

If MODE is '0' the corresponding stream will be unbuffered.

Otherwise MODE is a number which may be followed by one of the following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
In this case the corresponding stream will be fully buffered with the buffer
size set to MODE bytes.

NOTE: If COMMAND adjusts the buffering of its standard streams ('tee' does
for example) then that will override corresponding changes by 'stdbuf'.
Also some filters (like 'dd' and 'cat' etc.) don't use streams for I/O,
and are thus unaffected by 'stdbuf' settings.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report stdbuf translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/stdbuf>
or available locally via: info '(coreutils) stdbuf invocation'

すっきり(´ー`)

$ stdbuf -i0 -o0 -e0 python2 temp.py | tee temp.csv

今月の Raspberry Pi 色々

Raspberry Pi をブレッドボードに直接接続

年が開けてから aitendo に買い物に行ってきた。

Raspberry Pi Zero もらったし、ブレットボードに直載せしたいな〜」と。aitendo にはオリジナルの製品でT字の基盤キットが195円で売っている。お店に行くと基盤自体は店頭特価で39円。店を出るときには4枚も買っていた…。

その他、ピンヘッダやピンソケットが必要になる。aitendo のピンヘッダは足が曲がってたりするのであまり質が良くない。

家に帰って早速ハンダ付け。ここでひとつ気づいたことがある。一般的なピンヘッダはブレッドボードに挿しづらいのである。秋月で売っている細ピンヘッダの方がブレッドボードでは扱いやすい。そして秋月で売っているブレッドボードはだいたいバネが堅い。

半田付け中 #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

とりあえず Raspberry Pi Zero 用が出来た。Zero にはL型のピンヘッダを付けたので、基板側はピンソケットにしてある。

で、こうなる #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

秋月にL型の40Pソケットが売っていたのでこちらも付ける。これは Raspberry Pi 2 や Raspberry Pi 3 用。

今のところ使う予定ないけどとりあえずレギュラーサイズ用も作っておいた #raspberrypi

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

二台並べてみる。

並べてみました #raspberrypi #raspberrypi3 #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

さて、早速 GPIO を使おうと思ったが、基盤に何もプリントされていないのでどこが何番ピンなのかわからない。テスターで調べてみたら上下というか左右というか色々ひっくり返っているらしく、頭の中でちょっと面倒くさいことをしなくてはいけない。値段の安い理由はこれか…。初心者だとちょっと難しいかもしれない。※秋月で300円で売っているような基盤の場合は GPIO 通りの配線になっている。

とりあえずどれがどのピンかわかったので先日作成した YouTube ボタンを作りなおす。

LEDつけたのでYouTubeのロードが分かりやすくなった #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

動画で撮ってみた。再生には OMX Player を使っているけど、YouTube の動画をそのまま再生しようとすると実は色々と細工をする必要があるのでスムーズに再生出来るようにちょっと工夫した。

YouTube Button Demo 2 #raspberrypi #raspberrypizero #YouTube

Makoto Yoshidaさん(@mattintosh4)が投稿した動画 -

Raspberry Pi の電源は GPIO から拾える!?

どっかでそんなの見たな〜、と思い、秋月で microUSB の DIP 化キットを買ったのでやってみたところ普通に起動した。このタイプのブレッドボードだと細ピンヘッダは緩いので今は普通に接続している。

Power supplying from breadboard. #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

Raspberry Pi Zero からアナログビデオ出力

Zero の映像出力にピンヘッダを付けたのでせっかくだからと専用 RCA ケーブルを作ってみた。秋月で売っている小型のアナログ液晶ディスプレイはオス・メスどちらも使えるので Raspberry Pi A と同じメスにしてみた。

最近の成果 #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

ちょっと一息、イヤホン修理

1年前くらいに修理したイヤホンケーブルが断線してきたので修理。QIコネクタでもイケるかと思って試してみたけど D-Sub ピンじゃないとやっぱりだめらしい。前回よりも良い仕上がりで満足。

イヤフォン断線したので修理 #ultimateears #maudio #superfi #ie10

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

Zero のブレッドボード面積を2倍にして USB タイマー充電機能をつける

T字基盤を使うとブレッドボードが狭いのでひとつ大きいサイズを秋月で買ってきた。

Bluetooth スピーカーには OMAKER の M4 を使っているんだけど、過充電防止回路(?)が付いていないらしく、10時間以上の順電はしてはいけないんだそうだ。電池の持ちがいいので普段ほとんど充電しないんだけど、最近は YouTube ボタンを使うようになったので週に2度くらい充電するようになってきた。

電圧をチェックして自動で充電オフにする回路にしてもいいんだけど、とりあえずどれくらい電力を使っているのかということと、Zero で充電ができるかを調べるためにトランジスタと GPIO で時間制限付き充電回路を作った。トランジスタはコレクタ電流 1A 以上のものを秋月でいくつか仕入れてきた。2SD2012、TTC015B、2SD468 あたりを選んできたけど、ブレッドボードには TO-92 型の 2SD468 が使いやすい(写真は無理矢理差し込んだ 2SD2012 が付いている)。完全に電池を使いきった状態だと 400mA くらい消費するようだ。

OMAKER M4に過充電防止機構が付いていないのでタイマー充電することにした #raspberrypi #raspberrypizero

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -

来週は USB ハブの接続に使っている線をポリエステル銅線に変更する予定。秋月で細品ヘッダも買ってこないと。

dwm の st のフォントを変更する

Raspberry PiX Window System を使うときはだいたい dwm なんだけどなんか OS を再インストールする度にフォントが変わっている気がするので直に指定することにした。

と、言っても dwm から st を呼び出すときは Alt + Shift + Enter で、このカスタマイズが多分 config.h を変更することになりそうなので st の実行ファイル自体を細工する。

まず st の実行ファイルをリネームする。

$ sudo mv /usr/bin/st /usr/bin/st.bin

新しく /usr/bin/st を作る。

#!/bin/sh
exec /usr/bin/st.bin -f "Sazanami Gothic:size=10" "$@"

あとは実行権限を付与する。

$ sudo chmod +x /usr/bin/st

Raspbian とか Ubuntu で簡単に root になる

いままで「Ubuntu は初期状態ではパスワードが設定されてないから root には慣れないよ!」みたいなものを何度も見てきたので自分もそう思っていた。

Raspbian で GPIO にアクセスしたいから root になりたいと思ってなんとなくやってみたら簡単にできた。

pi@raspberrypi:~ $ sudo su -

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

root@raspberrypi:~# id
uid=0(root) gid=0(root) groups=0(root)
root@raspberrypi:~# 

Ubuntu でも同様。普通に root でログイン出来るようにしておいたトラブルが起きた時には助かるんだけどね。