UARTのenable small driverにチェックいれてないのに取りこぼしが起きると思ったら、こいつのせいか。
KIROKAZE
Jules of Nature
Keni

PR's Tumblrdome
Stranger Things
TVSTRANGERTHINGS

★

Love Begins
cherry valley forever
Game of Thrones Daily
AnasAbdin
trying on a metaphor
d e v o n
i don't do bad sauce passes

pixel skylines
🪼

shark vs the universe
2025 on Tumblr: Trends That Defined the Year
ojovivo

izzy's playlists!
seen from United States

seen from United States

seen from United States

seen from T1
seen from United States

seen from Belgium
seen from United States

seen from Türkiye
seen from Germany

seen from France

seen from Malaysia
seen from United States
seen from United States

seen from Malaysia

seen from United States

seen from Canada
seen from United States
seen from United States
seen from United States
seen from United States
@r--k
UARTのenable small driverにチェックいれてないのに取りこぼしが起きると思ったら、こいつのせいか。
いつでもどこでも自宅サーバへアクセス!~DDNSの登録~
いままで自宅サーバの立てかたを紹介してきて、自宅へ接続する場合に自分のグローバルIPアドレスを調べて直接アクセスするという方法を取ってきました。
この方法で長く使っているとたまーにグローバルIPアドレスが変わると思います。
外出中に変わってしまうと自宅へのアクセスができなくなって不便です。
そこで、IPアドレスが変わっても自宅へアクセスできるようにします。
方法として、ダイナミックDNSというサービスに登録して、自分のアドレスまで飛ばしてもらう方法を取ります。
さて、調べてみると無料のダイナミックDNSのサービスというものはたくさんあるのですが、今回は「ieServer.Net」を利用します。
まず「http://ieserver.net/」にアクセスしてください。
「ログイン/IPアドレス登録」をクリックする。
各項目を埋めていき、登録をクリックする。
「登録が完了しました」と出たら、ログインをクリックする。
先ほど登録したのと同じく入力する。
一番上の実行をクリックする。
一致の確認が取れたら登録は完了です。
すでにapacheを導入されている方や、以前投稿したAmpacheの導入方法を実践した方は登録したアドレスをブラウザのアドレスバーに入力してみましょう。
うまく行っていれば「It works!」と表示されるはずです。アクセス出来ない方は
1.反映に時間がかかっている
→時間をおいてアクセスしてみる。反映には結構時間がかかるようです。
2.ポートの開放ができていない。
→使用している「ルータの型番 ポート開放」で検索して80番ポートを開ける
3.ルータが内部からのアクセスを拒否している
→「自宅サーバ チェック」等と検索して外部からアクセスしてくれるサイトで試してみる。
この3つを試してみましょう。これでダメならちょっとわからないです。Ampacheの導入がうまく行ってないのかもしれません。
ApacheのインストールはAmpache導入の部分冒頭を参考にしてみてください。
さて、これで設定したアドレスを入力すれば自宅へアクセスできることが出来ました。
しかし、これで終わりではありません。この状態でIPアドレスが変更になると取得したアドレスにアクセスしても接続できなくなります。
これは、ieServerにはIPアドレスが変更になったことがわからないからです。つまり、IPが変更になるたびに、変更になったことをieServerに知らせる必要があります。「それでは意味が無いじゃないか」と思うかもしれませんが、その登録すらも自動化すれば、登録したアドレスにアクセスすればいつでも自宅サーバへ繋がるわけです。
ではIP登録を自動化していきましょう。
RaspberryPiで以下のコマンドを実行し自動更新ツールドダウンロードします。
wget http://ieserver.net/ddns-update.txt
次にこのファイルに自分の情報を設定していきます。
nano ddns-update.txt
を実行し33-35行目に自分の設定を書き込みます。
例
$ACCOUNT = "otankonasu"; # アカウント(サブドメイン)名設定 $DOMAIN = "moe.hm"; # ドメイン名設定 $PASSWORD = "(設定したパスワードを入力)"; # パスワード設定
「ctrl + o」→「ctrl + x」で保存して終了し、
mkdir /usr/local/bin/ddns_auto_update mv ddns-update.txt /usr/local/bin/ddns_auto_update/ddns-update.pl
を実行し名前を変えます。
これでツールの完成です。
このツールは、実行すると’’ 起動時毎に一回だけ’’その時のグローバルIPアドレスをDDNSに登録しに行くものです。起動時毎に一回なので、このツールは定期的に実行してやる必要があります。そうすることによりDDNSに常に最新のIPアドレスが登録されている状態を保ちます。
その時に使われるのがcronというツールです。これは指定された時間毎に登録されたコマンドを実行するものです。RaspberryPiには最初から入っているのでインストールの必要はありません。
crontab -e
を実行し、一番最後の行に
00 0-23/4 * * * /usr/local/bin/ddns_auto_update/ddns-update.pl
を入力し、「ctrl + o」→「ctrl + x」で保存して終了します。
これで定期的にこのツールが実行されます。
テストとしてAmpacheXから自宅のAmpacheへアクセスしてみましょう。
しばらくブログを更新しない間にAmpacheXも昔の面影がなくなってしまいましたねぇ。
-以下余談-
IPアドレスの更新にはDiceを使うのが定石ですがRaspberryPiではmakeできないためパイソンのスクリプトを使う方法を取りました。クロスコンパイル?なにそれ?
以下書き途中
duty比0のPWMが出力できない!?(AVR)
PWMっていいですよね。何がいいかって言うと、えーっと、あー、、、まぁ、何がいいかはおいておくとして、私はずっとTOP値を0にすればPWMのduty比が0になるんだろうなーと思っていました。しかし、どうやら違うみたいです。
ちょっと検証してみましょう。
プログラムを抜粋して書くと、
//use ATmega88 #include <avr/io.h> int main(void){ //Output PD6 DDRD |= _BV(PD6); PORTD |= _BV(PB6); //Clear OC0A on compare match.Fast PWM Mode. TCCR0A |= _BV(COM0A1) | _BV(WGM01) | _BV(WGM00); //no prescaling TCCR0B |= _BV(CS00); OCR0A = 0; while(1); }
これでPD6(12PIN)の出力をオシロスコープで見てみると
というように100nsちょいのパルスが出ています。(見難いですが1グリッド100nsです。)
8Mhz動作なので100nsちょっとはちょうど1サイクル分です。つまり、OCR0Aに0を入れても出力が出てしまうのです。(ちな、OCR0Aに1を入れると200nsちょいのパルスが確認されました。つまり、これは正常動作ということです。)
PWMを使いたいけど場合によってはパルスを出したくない時に不便です。
そこでPWMを位相基準モードにしてみましょう。
//Clear OC0A on compare match.Fast PWM Mode. TCCR0A |= _BV(COM0A1) | _BV(WGM01) | _BV(WGM00);
の部分を↓のようにする
//Clear OC0A on compare match.Phase correct PWM mode. TCCR0A |= _BV(COM0A1) | _BV(WGM00);
すると、出力からはずっとLoのままになりました。
これは使い分けが大事になってきそうです。
ちなみに友人にこの事を話してみたところ
友「それって説明書に載ってるよ」
とのこと。まじで?
:ATmega88のマニュアルから抜粋(P97)
・・・まじだ。
まぁ、何が言いたかったかって言うと、説明書は読みなさいよってこと。
ちなみに、CTC動作でもパルスが出てくるそうです。
この検証はオシロスコープがなくてもLEDをつなげば検証することができます。私は15mAほど流していましたが、duty0.003でも結構光りますよ。
HDDがひねくれてマウントされる!?
この前RaspberryPiで適当なドライブをマウントしたところ、
$ sudo mount -t ntfs-3g /dev/sda1/ /mnt/Drive/
The disk contains an unclean file system (0, 0). The file system wasn’t safely closed on Windows. Fixing.
というような警告が出ました。
どうやらWindowsで使った時に壊れたファイルが中に残ってしまい、警告が出ているようですな。まぁ、要するにディスクチェックをすればいいわけです。
ちなこれ、SambaなんかでWindowsとLinux両方でディスクを共有していると発生するかもしれません。と言うか、しました。
このドライブはファイルシステムがNTFSなのでディスクチェックをするにはWindowsマシンに繋がないといけないわけですが、面倒くさいのでなんとかこのまま解決できないものかと検索すると、Linuxのみでの解決方法どころかWindowsでディスクチェックをしなさいという方法すらをも出てきません(英語のサイトには載ってるのかもしれませんが、、、)。
ある方は「まぁ、マウントできてるし、このまま使っていっかー」といって使っているようです。「あれ、そうなの?」と思い確認すると、確かにマウントできているし普通のドライブとしてアクセスできる。更にはファイルだって作れてしまう(管理者のみ)。しかし、もともとあったファイルは綺麗サッパリなくなっています。「$df -h」で確認すると使用が80%を超えています。つまり、空き容量の部分のみで運用しているわけですな(RaspberryPiだけの可能性あり)。
いろいろ試してみた結果
————————————————————————————
↓—-とりあえずWindowsマシンにつないでみる。—-↓
すると元あったファイルがきちんと見れる。
↓—-RaspberriPiにつないでみる—-↓
このドライブに適当なファイルを作る
↓—-一旦ドライブを外してPiの電源も切って再接続—-↓
作ったファイルは残っているが、やっぱり元々のファイルは見れない。
↓—-Windowsマシンにつないでみる—-↓
元あったファイルがきちんと見れているがPiで作ったファイルは見れない。
————————————————————————————-
という感じに。どうやらWindowsとLinuxで見えているところが違うみたいです。
ほほぅ、じゃあ、このまま”Windows”でディスクチェックしたらどちらのファイルが生き残るのか・・・?
何事もなかったかのように「あ、もとからあったのもLinuxで作ったの両方使えるようにしておきましたよー」とさりげない気遣いをしてくれるのか、 それとも「俺のファイルはどうでもいい!Linuxのファイルを復活させるんだ!」と男らしいところを見せてくれるのか?無慈悲なWindowsは「え、不良ファイルあるの?あーそれだめっすわー。完全にだめなやつっすわー。全消ししかないっすわー」と血も涙もないのか?やってみましょう。
まぁ、結果Windowsで見れてたファイルのみ復活でLinuxのファイルはキレーさっぱり消え去りました。Piでマウントしても、もうあのファイルは見れません。ああWindows、Linuxにもう少し優しさを・・・
まぁ、何が言いたかったかというと、この警告が出た時にそのまま使い続けてうっかりディスクチェックするとそのファイル全部消えますよって話。気をつけましょう。
ちなチェックは「ファイル システム エラーを自動的に回復する」「不良セクタをスキャンし、回復する」の両方チェック。システムエラーだけだとダメだったよ。
VisualBasic2010で動画プレーヤを作ろう!
今回はRaspberryPiは関係ないです。
自分好みの動画プレーヤを作っていきます。 使う言語はVisualBasic(VB.NET)です。
作っていくというか、以前作ったものがSSDの消失によりすべて消え去ってしまったので備忘録的なものです。詳しく解説はしません。VBの詳しい書き方は親切なサイトがあるのでそちらを見るといいでしょう。この記事は、コピペしてちょっといじるといい感じに動くものを目指します。ちなみに私はプログラム超苦手です。VBなんてコピペしかしたことありません。プログラムの効率?美しさ?なにそれ?
とりあえず欲しい機能は”再生” ”停止” ”コマ送り、コマ戻し” ”しおり” このぐらいでしょうか。
まずDirectShowのライブラリをダウンロードしてきましょう。ここにあります。
次に「プロジェクト」→「参照の追加」→「参照」→「さっきダウンロードした中にある DirectShowLibV2-1\lib\DirectShowLib-2005.dll を選択。」
準備は以上。
フォームはこんなかんじでデザインして
From1
GetMoviePathForm
プログラムは
Form1のソース
Imports DirectShowLib Public Class Form1 '共通のフラグ宣言 Dim startORstop As Boolean = False Dim FirstRun As Boolean = True Dim util_get_filepath As Boolean = False 'ビデオ関係 Public videoFrameStep As IVideoFrameStep Public BasicVideo As IBasicVideo Dim MediaPosition As IMediaPosition Dim mediaControl As IMediaControl 'ビデオステータス Dim flame_time As Double Dim video_time As Double Public filepath As String 'フィルタ? Public fg As FilterGraph Private Sub StartStop_Click_1(sender As System.Object, e As System.EventArgs) Handles StartStop.Click If FirstRun = True Then Dim graphBuilder As IGraphBuilder Dim videoWindow As IVideoWindow Dim hr As Integer fg = New FilterGraph graphBuilder = DirectCast(fg, IGraphBuilder) mediaControl = DirectCast(fg, IMediaControl) videoWindow = DirectCast(fg, IVideoWindow) BasicVideo = DirectCast(fg, IBasicVideo) videoFrameStep = DirectCast(fg, IVideoFrameStep) MediaPosition = DirectCast(fg, IMediaPosition) If util_get_filepath = False Then 'Form2(ファイルパス取得Form)の取得 Dim GetMoviePath As New GetMoviePathForm GetMoviePath.Owner = Me GetMoviePath.ShowDialog(Me) filepath = GetMoviePath.filepath hr = graphBuilder.RenderFile(filepath, Nothing) Else '再生可能なファイルか検査してNGならファイル入力画面へ hr = graphBuilder.RenderFile(filepath, Nothing) If hr < 0 Then 'Form2(ファイルパス取得Form)の取得 Dim GetMoviePath As New GetMoviePathForm GetMoviePath.Owner = Me GetMoviePath.ShowDialog(Me) filepath = GetMoviePath.filepath End If End If 'filepath = "C:\Documents and Settings\Ryo-HEI\My Documents\Downloads\cstest.avi" '再生可能なファイルであった場合 If hr >= 0 Then 'パネルに表示する videoWindow.put_WindowStyle(WindowStyle.Child) videoWindow.SetWindowPosition(0, 0, Me.Panel.Width, Me.Panel.Height) videoWindow.put_Owner(Me.Panel.Handle) '1フレームの時間取得 BasicVideo.get_AvgTimePerFrame(flame_time) MediaPosition.get_Duration(video_time) '再生開始 mediaControl.Run() '各フラグセット FirstRun = False startORstop = True '各ボタンの有効化 LeftButton.Enabled = True RightButton.Enabled = True Save.Enabled = True '表示変更 StartStop.Text = "||" Else util_get_filepath = False End If 'hr >= 0 ElseIf startORstop = False Then mediaControl.Run() StartStop.Text = "||" startORstop = True ElseIf startORstop = True Then mediaControl.Pause() StartStop.Text = "▶" startORstop = False End If End Sub Private Sub RightButton_Click(sender As System.Object, e As System.EventArgs) Handles RightButton.Click videoFrameStep.Step(1, Nothing) '1コマ送る startORstop = False End Sub Private Sub LeftButton_Click(sender As System.Object, e As System.EventArgs) Handles LeftButton.Click '1コマ戻す Dim media_pos As Double mediaControl.Pause() MediaPosition.get_CurrentPosition(media_pos) media_pos = media_pos - flame_time MediaPosition.put_CurrentPosition(media_pos) startORstop = False End Sub Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick Dim sw As New System.Diagnostics.Stopwatch() If FirstRun = False Then sw.Start() Dim now_position As Double MediaPosition.get_CurrentPosition(now_position) TrackBar1.Value = (TrackBar1.Maximum / video_time) * now_position End If End Sub Private Sub TrackBar1_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll MediaPosition.put_CurrentPosition((TrackBar1.Value / TrackBar1.Maximum) * video_time) End Sub Private Sub GoBtn_Click(sender As System.Object, e As System.EventArgs) Handles GoBtn.Click Dim K As Long If Len(TextBox1.Text) = 0 Then Exit Sub End If For K = 1 To Len(TextBox1.Text) If Not Mid(TextBox1.Text, K, 1) Like "[0-9.]" Then Exit Sub Next K MediaPosition.put_CurrentPosition(TextBox1.Text) End Sub Private Sub Panel_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel.DragEnter 'ドラッグされている内容が文字列型に変換可能な場合 If e.Data.GetDataPresent(DataFormats.FileDrop) Then 'コピーを許可するようにドラッグ元に通知する e.Effect = DragDropEffects.Copy End If End Sub Private Sub Panel_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel.DragDrop 'ドロップされた内容を表示する filepath = e.Data.GetData(DataFormats.FileDrop)(0) util_get_filepath = True FirstRun = True End Sub Private Sub Save_Click(sender As System.Object, e As System.EventArgs) Handles Save.Click Dim media_pos As Double Dim timing_data As String ' MediaPosition = DirectCast(fg, IMediaPosition) MediaPosition.get_CurrentPosition(media_pos) timing_data = media_pos & Chr(13) & Chr(10) TimingLog.AppendText(timing_data) 'キャレットを表示したい場合ON 'TimingLog.Focus() TimingLog.ScrollToCaret() End Sub End Class
Form2(GetMoviePathForm)のソース
Public Class GetMoviePathForm Public MainForm As Form1 Public filepath As String Dim ofd As New OpenFileDialog() Private Sub BtnOK_Click(sender As System.Object, e As System.EventArgs) Handles BtnOK.Click filepath = TextBox1.Text Me.Close() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'はじめに表示されるフォルダを指定する '指定しない(空の文字列)の時は、現在のディレクトリが表示される ofd.InitialDirectory = "C:\" '[ファイルの種類]に表示される選択肢を指定する '指定しないとすべてのファイルが表示される ofd.Filter = _ "MOVIEファイル(*.mpg;*.mpeg;*.avi;*.wmv)|*.mpg;*.mpeg;*.avi;*.wmv|すべてのファイル(*.*)|*.*" '[ファイルの種類]ではじめに '「すべてのファイル」が選択されているようにする ofd.FilterIndex = 1 'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする ofd.RestoreDirectory = True 'ダイアログを表示する If ofd.ShowDialog() = DialogResult.OK Then 'OKボタンがクリックされたとき '選択されたファイル名を表示する TextBox1.Text = ofd.FileName filepath = ofd.FileName End If End Sub Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter 'ドラッグされている内容が文字列型に変換可能な場合 If e.Data.GetDataPresent(DataFormats.FileDrop) Then 'コピーを許可するようにドラッグ元に通知する e.Effect = DragDropEffects.Copy End If End Sub Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop 'ドロップされた内容を表示する TextBox1.Text = e.Data.GetData(DataFormats.FileDrop)(0) End Sub End Class
このプログラムは勉強的な側面が強いです。普通だったらフォーム二個もいらないかな。
コマ戻し機能を持ったプロパティ(?)はないので回りくどく一コマ戻しています。
右の「しおり」ボタンを押すと右上のテキストボックスに押した時間が記録されて行きます。
右下のテキストボックスに数字を入力して「GO!」を押すとその位置まで移動します。
「時間を記録→右下のテキストボックスにコピペ→GO!でそこまで移動」という流れです。
▶ボタンを押すとファイル選択画面になりますが、メインのパネルにD&Dでも再生できます。
プログラムをする上で必要な技術は「二個のフォームの連携」「ドラッグ&ドロップ」「モーダルフォーム」「DirectShow」こんなものかな。
名前が適当なのは直すべきですねぇ・・・
参考
MSDN様 http://msdn.microsoft.com/ja-jp/library/cc357031.aspx
DOBON.NET様 http://dobon.net/vb/dotnet/index.html
RaspberryPiから音楽をストリーミング配信
外出先で音楽を聴くときに、プレーヤに音楽を保存しておくのではなくRaspberryPiで自宅にミュージックサーバーを立てて、そこから再生するようにすればプレーヤの容量を気にすることがなくなります。また、RaspberryPiなので電気代も気になりません。
それを実現してくれるアプリケーションが「Ampache」です。
まず必要な物をインストールしていきましょう。
sudo apt-get update
-apacheのインストール-
sudo apt-get install apache2
-PHPのインストール-
sudo apt-get install php5 libapache2-mod-php5
-MySQLのインストール-
sudo apt-get install mysql-server
おこのみでパスワードを設定してください。設定した場合は後で必要になるのでちゃんと覚えておきましょう。
sudo apt-get install mysql-client
-Ampacheのインストール-
sudo apt-get install ampache
「はい」を選択します。
これでインストール完了です。
では次にアプリケーションの設定していきましょう。
まずhttp://(RaspberryPiのIPアドレス)/ampache/にアクセスしてください。
前回のブログのとおりに設定していた場合http://192.168.1.100/ampache/へのアクセスになります。
アクセスすると以下の様なページが表示されます。
ここはこのまま「Start configuration」を押しましょう。(言語設定で日本語にもできるようですが私はは英語でやっていきます。)
「MySQL Administrative Password」で先ほどMySQLで設定したパスワードを、「Ampache Database User Password」では好きなパスワードを入力してください。
「Overwrite Existing」「Use Existing Database」にチェックを入れて「Insert Database」をクリックします。
ここでさっきのMySQLのIDとパスワードを入力して「Whire」→「Download」の順にクリックします。すると「ampache.cfg.php」のダウンロードが開始されると思います。このファイルを「/etc/ampache/」においてください。
SSHでアクセスしている方でSambaの設定が私と同じ場合、まずampache.cfg.phpをネットワークフォルダに移動してSSHから
sudo mv /mnt/samba/ampache.cfg.php /etc/ampache/
と入力すればOKです。
(私がRaspberryPiでGUIを立ち上げてこの作業をしたときはこのダウンロードが正常に行われなかったので、私はSSHから作業を行うことを推奨しています。)
ファイルの移動が終わったら[Recheck Config]をクリックして2つのERRORが消えたら成功です。
このような画面になったら「Continue to Step 3」をクリックしましょう。
Ampacheにアクセスするユーザーネームとパスワードを設定し、「Create Account」をクリックしましょう。
もしかしたらupdate がでるかもしれませんがお好きにどうぞ。
ここでもう一度http://(RaspberryPiのIPアドレス)/ampache/にアクセスすると
このようなページが表示されると思います。ここで先ほど設定したユーザーネームとパスワード入力してログインしましょう。
左上のアイコン(admin)をクリックして音楽の登録をします。「Add a Catalog」をクリックして、「Catalog Name」に管理しやすいような名前を、「Path」に音楽ファイルの場所を入力して「Add Catalog」を押しましょう。ここで「Gather Album Art」にチェックを入れておくとジャケットを自動的に取得します。
これで音楽の追加は終了です。次にAPIからアクセスできるようにしましょう。
設定は適宜変更してください。わからなければ上記の通りに設定すればOKです。
さて、ここで正常に音楽が読み込まれているか確認しましょう。殆どの人は文字化けして読み込まれていると思います。Ampacheにおいて音楽の名前はファイル名ではなく、ファイルに埋め込まれているID3タグのタイトルを読み込んでいます。そのためID3タグの文字コードがS-JISで書かれていると文字化けが置きます。そこでID3Uniを使用してID3タグをUnicodeへ変換してください。
さて、同じネットワーク内(家の中のみ)での使用でしたらこれで端末にアプリをインストールして設定するだけでいいのですが、今回の目標は外から自宅の音楽を聞くことなのでもうひと手間かかります。
いわゆるポート開放といわれる作業なのですが、これは自宅のルータの種類により大きく違うので説明書を読むか、ネットで「ポート開放」で検索して自分のルータのポート開放を行ってください。
設定のパラメータですが、
プロトコル:TCP ポート:80 ローカルIPアドレス:192.168.1.100
です。頑張ってください。
では、次に端末にアプリケーションをインストールしてみましょう。
---------------------------------------------------------------------------------
まずアプリケーションをインストールする前に自分のグローバルIPアドレスを調べておきましょう。Googleで「グローバルIP」と検索すると自分のグローバルIPを表示してくれるサービスが見つかると思いますのでそれを利用します。IPが判明したらメモをして次に進みましょう。(グローバルIPが頻繁に入れ替わる環境も存在します。その場合はDynamicDNSを使用しましょう。)
-android-
JustPlayerが人気だと思いますが、私はAmdroidを使っていました。
私は基本的に軽さ重視です。問題なく使えると思います。
-iOS-
私の把握している限りiOSでのアプリは2つあります。
iAmpacheとAmpacheXです。前者は無料ですが後者は有料(2013/9/30時点では250円)です。
両方使ってみましたが、iAmpacheは使用に耐えられるレベルではないと思います。(日本語がすべて「???」になるので曲の判別が不可能。バックグラウンドでの再生不可。)
AmpacheXにおいても有料ではありますが、あまり使い勝手がいいようには思えません。一応AmpacheXの使い方を以下に示していきます。
これが初期画面です。まず「Settings」をタップしましょう。
「Add new server」をタップ。
http://(グローバルIPアドレス)/ampache/
を入力して、設定したAmpacheログインのIDとパスワードを入力。
この状態から暫く待ちます。
待っても何も起こらない場合はアプリを終了してserverのアドレスを「http://192.168.1.100/ampache/」にして再度試みてみます。これで成功したらポートの開放に失敗しているか、ルータが自分へのアクセスを拒否している可能性があります。とりあえず他のネットワークからアクセスして原因を特定してください。
さて、「Artists」と「Albums」は読み込まれたが「Songs」が読み込まれない状態になります。このまま更に放置して、適当なところをタップして「Find Music」をタップ(Find Musicを更新)すると
となって音楽がちゃんと読み込まれます。音楽再生までに2000曲ぐらいで5分ぐらいかかります。
これがAmpacheXのネックな部分で最初にサーバーの曲をすべて読みに行くので最初の再生までが非常に時間がかかります。さらにキャッシュのようなものはないのでアプリを起動するたびにこの読み込みが発生します。しかし、iampacheと違って1回読みこめばその後の音楽を探す動作は速いです。
また、AmpacheXはプレイリストを読み込んでくれないので音楽の整理ができないことがとても不便です。
以上アプリケーションの設定でした。
-補足-
知っている人はグローバルIPからではなくDynamicDNSを使いましょう。
-駄文-
音楽サーバーを立てるにはAmpacheかSubsonicの二択になると思います。Ampacheは無料で使えますが、Subsonicを使用するには1500円ぐらい(Subsonic:10$+iSub:450円)かかります。個人的にはアプリの使いやすさからAndroidを使っている方はAmpacheが、iOSを使っている方はSubsonicを使用したほうがいいと思います。
-使用感-
私は出先ではWiMAXを使用しています。電車の中では電波がMAXで立つことはないのですが、ひどく悪いというわけでもないと思います。
音楽再生はトンネル等通信状況が悪い状況が続けば途切れもしますが、30秒ぐらいトンネルに入るとかでしたら特に問題無いと思います。
RaspberryPiでsambaサーバーを立てる
今回はRaspberryPiをファイルサーバーにしてみましょう。
RaspberryPiをファイルサーバーにする手順は以下のとおりです。
1.HDDの準備(道具の選定、NTFSを使用可能にする、パーティションの設定、フォーマット、マウント)
2.RaspberryPiの割り当てIPアドレスを固定にする。
3.RaspberryPiにsambaをインストールする
4.他のデバイスから使用可能かどうかの確認(WindowsとLinux)
このぐらいです。では、やって行きましょう。
1.HDDの準備
まず、必要な道具ですが、大容量のデータを取り扱おうとすると、それ相応のUSBメモリやHDDのような記録していくものが必要になります。
私はHDDと外付けHDDケースを使いました。
HDDは家に落っこちてたもので詳細不明です。まぁ、なんでもいいと思います。
HDDケースは慎重に選びましょう。物によってはRaspberriPでは動いてくれない可能性があるからです。とりあえずLinux対応と書かれているものを選んでおきましょう。ちなみに私はそんなこと考えずに安さ重視でこれにしました。ソフマップで\1,580でした。ちゃんとRaspberryPiで動いているようです。
では、RaspberryPiでNTFSでフォーマットされたHDDを使えるようにしましょう。
NTFSフォーマットされたHDDなんか使わないって方は飛ばして構いません。
$sudo apt-get install ntfs-3g $sudo reboot
と入力します。これでRaspberryPiでNTFSファイルシステムが使えるようになります。
次にRaspberryPiにHDDをつなげます。
繋げたら念のためマウントされて無いか調べます。
$df -h Filesystem 1K-blocks Used Available Use% Mounted on rootfs 2588968 1543740 913624 63% / /dev/root 2588968 1543740 913624 63% / devtmpfs 216132 0 216132 0% /dev tmpfs 44880 244 44636 1% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 89740 0 89740 0% /run/shm /dev/mmcblk0p5 57288 18888 38400 33% /boot
のように表示されていれば大丈夫です。
もし
-------
/dev/sda...
-------
のような表示があった場合は
$sudo umount /dev/sda
と入力してアンマウントしておきましょう。
では今接続されているHDDのデバイス名を確認します。
$sudo fdisk -l Disk /dev/mmcblk0: 4024 MB, 4024958976 bytes 4 heads, 16 sectors/track, 122832 cylinders, total 7861248 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00005ab6 Device Boot Start End Blocks Id System /dev/mmcblk0p1 2048 2464843 1231398 e W95 FAT16 (LBA) /dev/mmcblk0p2 2465792 7861247 2697728 85 Linux extended /dev/mmcblk0p5 2473984 2588671 57344 c W95 FAT32 (LBA) /dev/mmcblk0p6 2596864 7861247 2632192 83 Linux Disk /dev/sda: 160.0 GB, 160000000000 bytes 255 heads, 63 sectors/track, 19452 cylinders, total 312500000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x1ecfb89b Device Boot Start End Blocks Id System /dev/sda1 63 312496379 156248158+ 7 HPFS/NTFS/exFAT
と入力して現在接続されているHDDのデバイス名を確認します。USBに接続されているデバイスが1つだけならsda1となっているはずです(二個目以降はsdb,sdcのように最後のアルファベットが変化する)。
この情報から、私の場合は容量160GBで、すでにNTFSでフォーマットされているHDDを使っているのがわかると思います。
次にパーティションの設定をします。
$sudo fdisk /dev/sda
と入力して下記の通りに設定していきます。
Command (m for help): d Selected partition 1 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-312499999, default 2048): 2048 Last sector, +sectors or +size{K,M,G} (2048-312499999, default 312499999): 312499999 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 7 Changed system type of partition 1 to 7 (HPFS/NTFS/exFAT) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
太文字の部分が私が打ち込んだところです。心配な人は「w」の前に「p」と打ち込んで現在の状況を確認しておくといいでしょう。
私は基本的にデフォルトの値を使っています。「default:」と表示されているところは何も打ち込まずにENTERを押すとそのデフォルトの値が採用されます。なので本当はいちいち撃ちこむ必要はありません。細かく設定したい場合は各場合に応じて数値を変えましょう。
では次にフォーマットです。
$sudo mkntfs /dev/sda1
と入力してフォーマットを開始します。
フォーマットが終わったら今度はHDDをマウントします。
$sudo mkdir /mnt/samba $sudo mount -t /dev/sda1 /mnt/samba
最後に「$df -h」でマウントされていることを確認します。
次に、再起動するたびにこのマウントのコマンドを実行するのは面倒なので、起動時に自動でマウントされるようにします。fstabに一行追加するだけです。
$sudo nano /etc/fstab
として、最後に
/dev/sda1 /mnt/samba/ ntfs-3g defaults 1 1
を追加するだけです。では次にIpアドレスの固定をしましょう。
2.RaspberryPiの割り当てIPアドレスを固定にする。
HDDの準備が終わったら終わったら次はIPアドレスを固定します。
まず
$sudo nano /etc/network/interfaces
と入力し、以下を編集します。
befor
----------------
iface eth0 inet dhcp
------------------
after
----------------
iface eth0 inet static
address 192.168.1.100 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.0.255 gateway 192.168.1.1
----------
私は覚えやすいようにアドレスは「192.168.1.100」としました。
ココらへんの数字がよくわからなければ、他のPCの接続情報を移すといいと思います。というか私もよくわかっていません。テキトーです。まぁ、重要なのはaddressの部分です。
保存したら
$ sudo service networking restart
でネットワークをリスタートして[OK]が出れば成功です。
SSHで設定していた場合はこれをすると途中で通信が切れるので最初から成功すると信用して再起動したほうがいいと思います。
これでIPアドレスの固定は終了です。次はいよいよsambaサーバを導入します。
3.RaspberryPiにsambaをインストールする
まずsambaのインストールです
$ sudo apt-get install samba $ sudo apt-get install samba-common-bin
とするだけでsambaのインストールは終了です。
次にsambaの設定をします。
設定ファイルは/etc/samba/smb.confです。細かい設定は詳しい方が他のページ詳しく解説しているので今回は単にHDDを共有するだけに留めておきます。
sudo nano /etc/samba/smb.conf
でファイルの編集をします。このファイルの最後に
----------------
[RaspberryPi_Share_Drive] path=/mnt/samba read only=no browesable=yes guest ok = yes force user = pi
----------------
を追加します。
次にパスワードの設定をします。今回は「raspberry」として話を進めていきます。以下のコマンドを実行します。
$ sudo smbpasswd -a pi
設定ができたら
$ sudo service samba restart
でsambaを再起動します。
これでRaspberryPi側の設定はおしまいです。
次に他のデバイスからアクセスしてみましょう。
4.他のデバイスから使用可能かどうかの確認(WindowsとLinux)
---Windowsの場合---
エクスプローラーの画面で
\\\\192.168.1.100
と入力しましょう。
パスワードを入力すればアクセスできます。
---Linuxの場合---
まず以下のパッケージをインストールします。
samba-client , samba-common , cifs-utils
インストールできたら端末上で
$sudo mksir /mnt/share_drive $sudo mount -t cifs -o username=pi,password=raspberry //192.168.1.100/samba/ /mnt/share_drive
とするだけです。/mnt/share_drive/にマウントできていると思います。
以上です。
お疲れ様でした。
最初のRaspberryPi
RaspberryPiを最低限使えるようにしましょう。
今回は、「NOODS」を導入して、そこから「Raspbian」をインストールします。
私はUbuntuユーザとして話を進めていきます。が、他のOS(Windows等)でもほぼ変わらないです。
まずRSの公式サイトに行ってNOOBSをダウンロードしてきましょう。
ダウンロードサイトは↓です。このNOOBS_vX_X.zipをダウンロードします。(Xは番号。2013/8/8時点ではNOOBS_v1_2.zipとなっている。)
http://www.raspberrypi.org/downloads
ダウンロードしている間に他の準備を済ませましょう。
OSをインストールするSDカードを「FAT」でフォーマットします
→Unityだと左のランチャーからSDのアイコンを右クリック→フォーマット→FATでフォーマットにして実行
フォーマットが終わったらSDカードに先ほどダウンロードしたNOODSを解凍しましょう。
解凍が終わればSDカードへの導入はおしまいです。(OSのインストールはRaspberryPi上でやります。)
さて、次はRaspberryPiにSDカードを挿入し、電源を入れてみましょう。最初虹色の画面が現れてからこのようなOS選択画面になると思います。
今回は「Raspbian」を導入しましょう。一番下の「Raspbian」を選択してエンターキーを押せばインストールが始まります。
インストールが終了し、エンターを押すとrebootがかかり、設定画面に入ります。
上手くインストールができていれば以下の様な画面になった後config画面に自動で移ります
↓
ここからはこれまでの「Raspbian」と変わりません。あるとすれば「Expand Filesystem」をやらなくてもSDカードの容量を最大で認識してくれている点でしょうか。これもNOOBSの便利な点ですね。
するべき設定は「Internationalisation→locale」と「Advanced Options→ssh」ぐらいでしょうか。
これが終わったらFinishを選択して
—————————-
$sudo reboot
—————————-
と入力してrebootしてログインしてみましょう。初期状態のIDとパスワードは
——————————————-
ID:pi
pass:raspberry
——————————————-
です。
うまくログイン出来たと思います。
GUIを表示したい人は
——————
$ startx
——————
とすることによりGUIを表示することができます。
さて、ここで終わりにしてもいいのですが、もう一仕事しましょう。
自動ログインの設定をします。
RaspberryPiの用途は人それぞれだと思いますが、私は主に組み込みシステムとしての利用が多いので電源を入れ直すたびにログインするのは非常に面倒です。なにせディスプレイとキーボードを用意しなければならないですからね。
自動ログインの方法は簡単で「/etc/inittab」を編集するだけです。
まず
—————————————————-
$sudo nano /etc/inittab
—————————————————-
と入力し編集モードに入ります。
そこで
——————————————————————————————-
1:2345:respawn:/sbin/getty —noclear 38400 tty1
——————————————————————————————-
の行をコメントアウト(先頭に#をつける)します。
そして、次の行に
————————————————————————————————
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
————————————————————————————————
と打ち込んで終了です。
最終的にここら周辺が
————————————————————————————————
#1:2345:respawn:/sbin/getty —noclear 38400 tty1
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
————————————————————————————————
となっていると思います。
エディタモードを終了して(ctrl+o(保存)→エンター→ctrl+x(終了))一度rebootして確認してみましょう。
勝手にログインされたら成功です。出来なかったら。。。しらん。
—-余談—-
公式サイトではいままで「Raspbian」というOSをメインに配布していましたが、最近「NOOBS」というものがトップに来ています。
これはRaspberryPi用のOSを寄せ集めたようなもので、これを導入しておけばRaspberryPi上で「ArchLinux」や「RISC OS」など様々なOSを選択、導入できるようになります。
このRaspberryPi”上”というのがポイントです。
例えばクラッシュ等の理由によりRaspberryPiにOSをクリーンインストールしたくなったとします。
その場合今までは他のPCからSDカードにOSをインストールしなければならなかったのが、RaspberryPi立ち上げ時に「Shiftキー」を押し、イントールするOSを選択するだけでよくなります
最初だけ他のPCからNOOBSを導入する必要こそありますが、二回目以降のOSインストールにはRaspberryPiのみで完結することになります。これは便利。
さらに、このNOOBS導入にはコマンド操作は要らないのでかなり初心者にやさしいものとなっています
—-RaspberryPiを使うのに最低限必要な物—-
・RaspberryPi本体
・SDカード(これにOSが入る)
・キーボード(sshを導入すれば最初だけ必要)
・マイクロUSBケーブル(RaspberryPiへの給電用)
・HDMIケーブル or コンポジットケーブル
こんなものでしょうか。
最初の一歩deつまずく
はじまります。
日々作ったものとか構想とかの備忘録的なものを上げていこうと考えています。
最初はRaspberryPiが中心になる予定。
おそらく「買ったはいいけど持て余している」という方がほとんどではないでしょうか。そんなホコリを被ったRaspberryPiにもう一度火を入れるきっかけになるような記事を目指して書いて行きたいと思います。