Pi Zero (W) 拡張基板の作成

Pi Zero(W)はGPIO端子にピンが建っておらず自分で取り付けるようになっています。

そこでオス(ピンヘッダ)にするかメス(ピンソケット)にするかは少々迷うところです。

ブレッドボードの使用を想定するとメスが使いやすいと思います。

従来のPiの資産を利用するとなるとオスのほうがいいかなと思います。

どちらにも対応できるよう多少手間と部品が必要になりますが拡張ボードを作成してみました。

部品はコストを最小限に抑えるため汎用の40pinシングルのピンヘッダ、ソケットを基板は7cmx5cmの両面基板を使用します。

当サイトでは従来のPiに合わせてオス(ピンヘッダ)を取り付けています。

Pi Zero(W)はアルミ板ベースに取り付けてみました。
取り付け穴は2.6mmボルトを使用するようになっていますが3.2mmのドリルで揉んで3mmボルトで固定しています。


部品は多少納期がかかりますがAmazonで40pinピンヘッダ、ソケットSET10pcs(¥170)基板10pcs(¥360)程度で購入できます。

まずは真ん中のソケットから取り付けます。


ハンダ付けしたら隣のランドとハンダブリッジをします。

30W位のコテで少し冷やしながら手早くハンダをもります。
うまく載らない時は一旦冷ましてからトライしましょう。


反対側のさらに隣にピンヘッダ(またはソケット)を取り付けます。

間にあるハンダブリッジの部分は以降極力使用しないことにします。
万一ブリッジが離れてしまうと修正が困難になります。


こちらも同様にハンダブリッジをします。
ここは先に比べるとブリッジが載りやすくなっていると思います。(但しやはり手早くね)
これで表裏つながりました。何かハンダで接続する際はこちら側を使用します。


Zeroに取り付けてみました。
奥側のピンを使用する時はジャンパー線で接続することにします。
この基板自体は自作の回路か何かに使用します。特にGPIOを使用しなくてもPiと合体して使う目的でであれば何でもいいと思います。
さらにもう1枚今回の例では表裏メスメスで基板を作成すればGPIOはオスからメスに変換されることになります。
縦方向には増やすことができるので目的別に基板を作成することも可能と思います。

作り方、使い方はアイデア次第といったところでしょうか。

次回、この基板を使ってUSB-HUBを作成してみます。

Pi Zero W を購入してみた

発売延期をしていたPi Zero Wですがやっと国内販売を開始しましたがやはりというかやっぱり買えそうにありませんね。

先週の木曜日ですが国内販売のニュースを見た際にZeroの経緯もあり抑えとしてpimoroniに注文してみました。

もう少し時間がかかると思っていたのですが本日到着していました。

英国からのエアメール。実質6日間できています。

プチプチの入った封筒の簡単な包装ですがZeroも薄いので大丈夫でした。

価格も為替相場で変動がありますが今回は2015円と国内(KSY)より僅かに安い!


こうやってZeroと比べてみるとBCM2835の搭載位置が違いますね。

Pi Zero のカードで簡単に起動テストをしてみました。
/etc/dhcpcd.confにはwlan0に固定IPを割り当てています。

interface wlan0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

内蔵のWifiはZeroのカードそのままで動きますね。
外付けのドングルを使用すると外付けが優先して内蔵はwlan1となるようです。

以下、今回購入した簡単な流れです。(大雑把ですが)
購入方法もわかりやすくクレジットカードも使えます。

国内でもまだチャンスはありますが今回どうしても買えなかったという場合は一考の余地はあると思います。

pimoroni

赤(Raspberry Pi 3)にフォーカスを当てRaspberry Pi Zero Wを選択


In Stock 在庫あり カートに入れる

一番上に戻ってカートをクリック

Pi単体の複数注文、zero及びzero-wの同時注文は不可のようです。


ほかの商品もどうだときますがここは一番下のボタンをクリック


よければCheckout now をクリック

次の画面で名前、住所を入力します。
当方はローマ字で入れておきました。
電話は+81 ○○ ○○○ ○○○○


送料は一番安いやつを


クレジット情報を入力

以上で完了です。

Raspberry Pi ZERO RTC(DS1302) 時刻を保持する

今回はDS1302でRTCを設定してみたいと思います。

DS1302モジュールはArudino用としてかなり安価に出回っているようです。
多くのサイトはArudino用モジュールで解説しており素のICを使用する際、端子表記が異なるためわかりにくい(間違えやすい)原因になっているものと思います。(当サイトも当初接続を間違えてしまいました(・・;)

その中で制御プログラム、解説もわかりやすかったのはこちらのサイト
Using a DS1302 Real Time Clock module on Raspberry PI
DS1302 データシート

環境
Raspberry Pi ZERO jessie-lite

pi@zero:~ $ uname -a
Linux zero 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux


当サイトで購入した時はICのみ10個で¥194でした。

8ピンDIPタイプなので工作がしやすく1枚の自作基板にほかの回路と一緒に組むにはいい素材と思います。


回路は非常に単純で基本IC以外はクリスタル(32.768KHz)と電池のみになります。(別途電池ソケットやピンヘッダ等必要ですが)

# パスコンを追加しました。


クリスタルは古いマザボから、電池は賞味期限のとうに切れたリチウム電池(3.6V)を再利用。
電池自体はまだまだ元気なので廃品利用します。
コイン電池でも動作は確認しています。

プログラム
上記のサイトからrtc-pi-20140727.zipを適当なディレクトリにダウンロードして展開、コンパイルします。

$ unzip rtc-pi-20140727.zip
Archive:  rtc-pi-20140727.zip
  inflating: rtc-pi.c
$ cc rtc-pi.c -o rtc-pi

rtc-piができるので/usr/sbinにコピーします。

$ sudo cp rtc-pi /usr/sbin

モジュールに現在の時刻を書き込みます。

$ sudo rtc-pi YYYYMMDDhhmmss
Set UNIX timestamp to RTC: 1234567890

モジュールから時刻を読みだしてシステムクロックにセットします。

$ sudo rtc-pi

簡単ですね。Pi1B(Rev2)以降であれば特にソースプログラムは変更無しで動作するものと思います。

起動設定
ntpとfake-hwclockを停止します。

# systemctl stop ntp
# systemctl disable ntp
# systemctl stop fake-hwclock
# systemctl disable fake-hwclock

起動は/etc/rc.localに設定します。rtc-piのみでは
# systemctl status rc.local -l
Warning: Unit file changed on disk, ‘systemctl daemon-reload’ recommended.
こんなメッセージが出てるのでsystemctl daemon-reloadも記載しておきます。

/usr/sbin/rtc-pi
systemctl daemon-reload

exit 0

ここで# poweroffしてPiの電源コードも抜いて数分置いてから再投入します。

起動確認

$ timedatectl
RTC timeはi2c経由ではないため取得できません。

またfake-hwclockもわかりやすくするため停止していますがds1302の場合はenableでも問題ないように思います。

現在時刻がセットされてるでしょうか。
% date
1970年 1月 1日 木曜日 09:01:04 JST
Piの初期値 ハード、ソフト、起動設定など見直してみましょう。

% date
2000年 1月 31日 月曜日 02:01:40 JST
DS1302の初期値 DS1302から読み込みはできているがDS1302に書き込みの際失敗している。
Pin11(CE)とPin13(SCLK)の接続が逆になっているかも。
ICが壊れているかも。

また$ sudo rtc-piを実行した際下記のエラーがでる。
Read UNIX timestamp from RTC: -1
Unable to change the system time. Did you run the program as an administrator?
The operation returned the error message “Invalid argument”
Pin11-SCLK,Pin13-CEの接続ミスで且つI/Oをプルアップしているとこのエラーが発生します。
当サイトの失敗がこれでした。
Pin11とPin13の接続ミスは単に凡ミスですが他サイトの記述にはI/Oを10k抵抗でプルアップするような情報があります。当サイトの環境では特にプルアップなしでも問題は無いようです。
このエラーはネットを探索するとちらほら散見されるので間違いやすい何かがあるのか、またほかにもこのエラーが発生する何かがあるのかもしれません。

時刻補正
参考サイトにあるbashスクリプトは時折ネットに接続できる環境がありntpで取得した時刻をshutdown時にDS1302モジュールに書き込むようになっていますが現在のjessieではsystemdになっているため簡単にこの手法は使えません。

時計を見ながら手動で補正

$ sudo rtc-pi 20170703190000
Set UNIX timestamp to RTC: 1499076000

ネットに接続して補正

# apt install ntpdate
# ntpdate -v ntp.nict.jp
3 Jul 19:06:00 ntpdate[1595]: ntpdate 4.2.6p5@1.2349-o Mon Jul 25 22:35:35 UTC 2016 (1)
 3 Jul 19:06:08 ntpdate[1595]: adjust time server 133.243.238.244 offset -0.000792 sec
# rtc-pi `date +"%Y%m%d%H%M%S"`
Set UNIX timestamp to RTC: 1499076410

精度はあきらかにDS3121のほうが超高精度を謳ってるだけあって良いようです。
DS1302はクリスタルの精度次第と思いますが当サイトでは1日に10秒近く誤差が生じます。

Raspberry Pi ZERO RTC(DS3231) 時刻を保持する

Raspberry Pi ZEROは相変わらず入手困難ですが小型そして安価ということでネット環境の無いところでもいろいろと活用できそうです。
但しPiは時計を持ってないのでRTC(リアルタイムクロック)が必要になります。

手元には以前購入していたDS3231モジュール(¥250)とDS1302(IC 10個 ¥194)があったので試してみることにしました。

今回はDS3231モジュールで試してみます。

参考 http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_i2c_rtc_ds3231/

環境
Raspberry Pi ZERO jessie-lite

pi@zero:~ $ uname -a
Linux zero 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux

jessie-liteにはwiringPiがインストールされていません。DS3231に関しては設定自体にwiringPiは必要ありませんが一部コマンド(i2cdetect)が使えません。
インストールはここらが参考になると思います。
http://www.hiramine.com/physicalcomputing/raspberrypi3/wiringpi_install.html

さて当サイトにあるモジュールは上記の参考サイトにあるものと同じようです。
参考サイトはかなり詳しく説明があるので基本その手順に従って進めてみたいと思います。

改造

改造についてはCR2032を使うため充電回路の抵抗のみ切り離しています。

プルアップ抵抗はそのまま残しても当サイトの環境では特に問題ありませんでした。

i2c 有効化
raspi-configからi2cを有効にするか/boot/config.txtの#dtparam=i2c_arm=onのコメントを外して再起動します。
準備ができたらモジュールを接続して電源を入れます。

$ i2cdetect -y 1
この時点では68と表示されると思います。
実際に稼働しているとUUに変わるようです。

正常に認識したら設定に入ります。
設定

$ sudo modprobe -c | grep 3231
alias i2c:ds3231 rtc_ds1307

rtc_ds1307のaliasになっています。ds1307も同じ手順でいけると思います。

$ sudo modprobe rtc-ds3232
$ echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device
ds3231 0x68

ここでlsmodしてみると

$ lsmod | grep rtc_ds
rtc_ds3232              4283  0 
rtc_ds1307             10448  0

カーネルにモジュールがロードされていますが後に再起動するとrtc_ds3232はなくなってしまいます。
ds3232の機能がどんなもんか理解していないのでよくわかりませんがZEROに関しては有効にならないか必要も無いのかもしれません。Pi2,Pi3では試していないのでわかりません。

以上Pi側の設定は正常に認識したら以降は必要ありません。

モジュールから時刻を読み出します。

$ sudo hwclock -r
2000年01月01日 09時12分46秒  -0.651979 seconds

現在のシステム時刻が正しければモジュールに書き出します。

$ date
2017年  7月  1日 土曜日 18:56:39 JST
$ sudo hwclock -w
$ sudo hwclock -r
2017年07月01日 18時56分53秒  -0.583300 seconds

起動時の設定
以上まで正しければntpとfake-hwclockを止めます。
(再度有効にするにはsystemctl enable ntp fake-hwclock)

# systemctl stop ntp
# systemctl disable ntp
# systemctl stop fake-hwclock
# systemctl disable fake-hwclock

起動時にDS3231モジュールから時刻を読みだしシステムクロックにセットします。

/etc/rc.local
echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

exit 0

# poweroffして一応電源ケーブルも抜いておいて少ししてから再度電源投入してみましょう。
ちゃんと時刻は同期しているでしょうか。
RTCから読みだしているかは以下のコマンドで確認できます。

$ timedatectl

Pcの時計は狂います。
時々ネットに接続できる環境であればntpdateをインストールしておきます。

# apt install ntpdate
# ntpdate -v ntp.nict.jp
1 Jul 19:41:42 ntpdate[694]: ntpdate 4.2.6p5@1.2349-o Mon Jul 25 22:35:35 UTC 2016 (1)
 1 Jul 19:41:50 ntpdate[694]: adjust time server 133.243.238.164 offset 0.494363 sec
# hwclock -w

Piの電源はgpioの5V端子に供給しています。

Raspberry Pi ZERO PulseAudioサーバーにする(Part3)

5/1 Pi3をapt updateしたらカーネルのバージョンが4.4.50から4.9.24にアップデートされていました。以前はrpi-updateでカーネルをアップデートしていたのですがJESSIE WITH PIXELあたりからでしょうかapt updateでアップデートされるようになっていますね。
今後は特別の事情がない限りrpi-updateは実行しないほうがよいかもしれません。

さて今回はRaspberry Pi3からPulseAudioサーバーに接続してアプリケーションから試してみたいと思います。

mplayerの出力をpulseaudioにする
最後のao=pulseがデフォルトになります。
/etc/mplayer/mplayer.conf

ao=alsa:device=plughw=0.0
ao=alsa:device=plughw=1.0
ao=pulse

コマンドラインでradikoを実行

自マシンからのコマンドラインでのradikoは再生までのタイムラグも少なくコマンドラインの良さを再認識してしまいます。

Audaciousから再生

pulseaudioにするとmixer-deviceがないというようなエラーがでます。
設定からミキサデバイスをpulseに変更


Audaciousのボリューム調整はpavucontrolでいう出力装置側をコントロールします

youtubeを再生

Chromiumも再生OKです。


Epiphany,MidoriもOK
ブラウザによって多少挙動が違いますが先にpulseaudioが立ち上がってないと音が飛んでいきません。
またアプリケーションによってはpavucontrolを起動していないと再生終了時にpulseaudioもkillする傾向があるようです。

youtube-dlをインストール
Raspberry Pi3でもyoutubeは重量級のソフトウエアです。
気に入った(気になる)音楽や映像はダウンロードしてから再生するようにします。
youtube-dl Download Page
更新が非常に早いのでチェック

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

youtubeの画面から右クリックで動画のURLを取得
$ youtube-dl URLでダウンロードするとmkv形式になります。

音声をダウンロード
Piにとっては無駄に大きいファイルなので映像がアルバムジャケットの静止画であれば音だけでダウンロードします。

$ youtube-dl -f m4a URL

ダウンロードしたm4aはAAC 128kbpsになっています。音質はアップ元次第になりますが当サイトのように古いアルバムしか聴かないものにとっては充分かなと思っています。
再生はAudacious,mplayerから可能です。

映像をダウンロード
映像をダウンロードするにはmp4を指定します。

$ youtube-dl -f mp4 URL

現在のyoutubeの回線はずいぶん太くなっていますね。音楽のアルバム形式でも十秒位でダウンロードしてくれます。流石に大きい映像ファイルは途中で遅くなってしまうようですが。

mp4を再生する
Raspberry Piでmp4を快適に再生するには多分omxplayerだけと思います。
最初は再生する前に音量ボリュームは小さめにまたキーボードからomxplayerを制御する最低限のキー(音量、終了など)を覚えておきます。(+,-.q)
omxplayerでダウンロードしたmp4をpulseaudio経由で再生してみましょう。

$ omxplayer -o alsa "*** *** ***.mp4"

omxplayerは直接ハードを制御するのでXの画面を専有してしまいます。起動したターミナルにハイライトがないとキーボードから制御できません。
pulseaudioで音も飛びますね。

ターミナルからファイルを指定するのは面倒です。
ファイルマネージャーに登録しましょう。

ファイルのプロパティ 開くアプリケーション カスタマイズ
ファイルマネージャーからクリックで実行できます。
ターミナルが映像の裏に隠れてしまうことがあります。
(ハイライトが当たっていれば制御可能です)

やはりyoutubeも音が備わって初めて見るのが楽しくなります。

Top