Nexus7(2012)を文鎮化から回復させる
友人がバージョンアップ中に電源を落としてしまったら起動画面から先に行かなくなってしまった。中身を初期化してもいいから直してくれと依頼があったのでダメ元で試してみた。
①WindowsPCにadbが使えるようインストール
1.1 コマンドプロンプトでadbコマンドが使用できるように「Android SDKツール」を入れる
1.2 環境変数Pathにplatform-toolsのパスを通す。
1.3 コマンドプロンプトでadbが使えることを確認する
②USBドライバを入れてWIndowsからNexus7を認識させる
受け取った当初、PCに接続しても認識しなかったためドライバをインストールした。
③ファクトリーイメージを取得
以下のサイトからNexus7 (2012,Wifi)のイメージを取得。
「nakasi」ってやつをダウンロードする。
④ダウンロードしたフォルダを解凍
⑤Nexus7をリカバリモードで起動
⑥コマンドプロンプトから端末のアンロック
6.1 $ fastboot oem unlock と入力
6.2 LOCK STATE が UNLOCKEDになることを確認する
6.3 ④で解凍したフォルダ内にある「flash-all.bat」を実行
10分ほど放置すると再起動して初期設定画面が表示されるようになった。
OpenCV+libdmtxでDataMatrixを読む
OpenCVのcv::Matデータをlibdmtxの処理に突っ込んで画像内のデータマトリックスを読む方法。
OpenCVにはcv::findDataMatrix()というDataMatrixを読む関数があるけど、なんか調べると3文字までしか読めないとか言われているので外部ライブラリを使用して使えるようにする。
・libdmtxのインストール(ubuntu16.04)
1. ターミナルで以下のコマンドを入力
$sudo apt-get install libdmtx-dev libdmtx-utils
2. /usr/lib/aarch64-linux-gnuの直下にlibdmtx.soがあることを確認。
(環境によって場所は変わるかも)
・Qtプロジェクトで使用する
1. 自分はQt creator使ってるんでプロジェクトファイルにライブラリを追加
LIBS += -L"/usr/lib/aarch64-linux-gnu" \
-ldmtx
2. dmtx.hをインクルード
#include <dmtx.h>
3. 以下のようなプログラムで使用できる。
QString decode( cv::Mat frame )
{
DmtxImage *img;
DmtxDecode *dec;
DmtxRegion *reg;
DmtxMessage *msg;
DmtxTime time;
QString result;
img = dmtxImageCreate( frame.data, frame.cols, frame.rows, DmtxPack24bppRGB );
dec = dmtxDecodeCreate( img, 1 );
time= dmtxTimeAdd( dmtxTimeNow(), 10 );
reg = dmtxRegionFindNext( dec, &time );
if( reg != NULL )
{
msg = dmtxDecodeMatrixRegion( dec, reg, -1 );
if( msg != NULL )
{
result = QString( reinterpret_cast<char*>(msg->output) );
dmtxMessageDestroy(&msg);
}
dmtxRegionDestroy(®);
}
dmtxDecodeDestroy(&dec);
dmtxImageDestroy(&img);
return result;
}
raspberryPiにsambaを導入
前回の記事でraspberryPi2の外付けHDDにあるメディアをDLNAで視聴できるようにした。
しかし、現状では新しく外付けHDDにファイルを追加したい時、母艦のPCからファイルを渡すのが面倒である。
そこで、raspberryPi2にsambaを導入して外付けHDDのフォルダを母艦と共有できるようにしてファイルの更新を簡単にする。
参考にしたのは次のサイト
sambaをインストールして色々設定して母艦から参照できるようにする。
と、ここでDLNAで参照しているフォルダもsambaで共有できるように/etc/samba/smb.confの最後尾に以下を追加する。
[RaspNAS]
comment=USBHDD
path=/var/share/hdd
public = Yes
writable = Yes
guest ok = Yes
force user = pi
これで外部から/var/share/hddを参照できるようになり、ファイルを突っ込めばそのままDLNAでメディアを視聴できるようになる。
RaspberryPi2でDLNAを使う。
RasberryPi2にDLNAサーバーを作成する。
参考にしたのは以下のサイト
---------- DLNAサーバの設定
1.DLNAサーバーソフトの「minidlna」をインストールする。
$ sudo apt-get install minidlna
2.動画、画像、音楽を保存するためのDLNA対応のディレクトリーを作成する。
$ cd /var/lib/minidlna (minidlnaディレクトリーに移動する)
$ sudo mkdir movies (moviesディレクトリーを作成する)
$ sudo mkdir photos (同上)
$ sudo mkdir musics (同上)
3.各ディレクトリーがDLNAに対応するように設定ファイルを編集する。
$ sudo nano /etc/minidlna.conf (minidlna.confを編集する)
minidlna.confファイルの中に、次の行を追記する。
medir_dir = /var/lib/minidlna (minidlna.conf内にこの行を追記する)
4.各ディレクトリーにアクセスできるように所有者をユーザーのpiに変える。
$ sudo chown pi:pi movies photos musics
5.minidlnaを再起動
$ sudo service minidlna restart
ここまでの設定で、/var/lib/minidlnaにあるファイルを視聴することが可能になる。
しかし、rasberrypiのmicrosdの容量は少ないためたくさんのファイルを置くことはできない。そこで、外付けHDDを接続し、HDDに置いたファイルをDLNAで視聴できるようにする。
---------- 外付けHDDの設定
1.USB-HDDを初期化するために情報を表示する。
$ dmesg (USB-HDDのデバイスファイル名等が分かる。通常は、sda)
2.HDDのパーティションを再設定する。
$ sudo umount /dev/sda1
$ sudo fdisk /dev/sda (パーティションsdaの設定を開始)
3.設定を開始する。
pを入力 (パーティションが一覧表示される)
dを入力 (パーティションを削除)
nを入力 (新しいパーティションを作成)
pを入力、1を入力 (Partition typeを決める)
Enterキーを2回押す (パーティションの先頭とサイズを決める)
tを入力、83を入力 (パーティションタイプを指定)
wを入力 (パーティションを書き換える)
4.上記のパーティションにファイルシステムを構築するために、下記を実行する。
$ sudo mkfs.ext4 /dev/sda1
次に、このストレージを特定のフォルダ(ディレクトリー)にマウントする操作を行う。
ここでは、/var/shareの中に新しいディレクトリーhddを作っておいて、/var/share/hdd にマウントすることにします。
$ cd /var/share
$ sudo mkdir hdd
そのために、まずUSB-HDDの識別値UUIDを調べてコピーしておきます。
$ sudo blkid /dev/sda1 (識別値UUIDが表示される)
続いて、マウントの設定fstabを編集するためにエディタで開いて、その末尾にUUIDを追記する。
$ sudo vi /etc/fstab
追記内容は、「UUID=調べたUUID /var/share/hdd ext4 defaults 0 0」
最後に、上記の設定をマウントする。
$sudo mount -a
以上の設定で/var/share/hddにファイルを置くと、外付けHDDにファイルを置かれるようになる。
ビデオ、写真、音楽のフォルダを分ける。
$cd /var/share/hdd
$mkdir Videos
$mkdir Audios
$mkdir Pictures
最後に/etc/minidlna.confを以下のように修正してDLNAサーバの参照先を外付けHDDにする。
$sudo vi /etc/minidlna.conf
medir_dir = V,/var/share/hdd/Videos
medir_dir = P,/var/share/hdd/Pictures
medir_dir = A,/var/share/hdd/Audios
/etc/minidlna.confに設定値はとりあえず下のようにして置く
medir_dir = V,/var/share/hdd/Videos
medir_dir = P,/var/share/hdd/Pictures
medir_dir = A,/var/share/hdd/Audios
port=8200 // ポート番号
inotyfy=yes // yesにしないとforce-reloadした時に反映されない。
notify_interval=1200 // 設定秒毎に情報を更新
これで外付けHDDに保存されているファイルを読みに行く。
追記
サブフォルダを作成した際に、そのサブフォルダ名が全て大文字だとなぜかファイルが存在してもリストに出てこない。原因はわからないけど、サブフォルダ名を小文字にしたら解決した。
Nexus7でAndroid File Transferが使えなくなって困った。
正しくは、MacとNexus7を繋いだ際に、いつもはAndroid File Transferが起動してファイルのやり取りができるんだけど、Nexus7をAndroid 6.0 Mashmallowにしてから(?)できなくなった。
具体的には、「Can't access device storage」と表示される。
設定の開発者向けオプションからUSB設定の変更をMTPに変えても治らなかった。
んで、この現象を治すのに下のサイトが参考になりました。
色々方法はあったけど、僕にとっては
①開発者オプションの「USBデバッグ」の項目をONにする。
②Nexus7の電源をOFFにする。
③USBケーブルを繋げる
④電源をONにする。
⑤Android File Transferを起動する。
の手順で現象が治りました。
でも、昔USBデバッグの項目をONにした気がするんだけどなぁ?別のデバイスと勘違いしてたか?
BlueToothキーボードから操作できるようにする
RaspberryPi2で使用できるUSBの数は4つ。
現状USBWi-Fi,USBキーボード,USBマウスの3つが占領しているので、BlueToothドングルを使用してキーボードとマウスをワイヤレスにしてしまおう。
今回参考にしたのは次のサイト
とりあえずリストを更新
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
Bluetooth関連のパッケージをインストール
pi@raspberrypi ~ $ sudo apt-get install bluetooth bluez bluez-utils
RasPiがUSBBTを認識していることを確認
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 007: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
きちんとBluetooth Dongleが表示されますね。
BDアドレスを取得
次にペアリングしたい対象を接続状態にしてBD(Bluetooth Device)アドレスを取得可能状態にする。対象(今回は無線キーボード)を接続状態にして次のコマンドを入力
pi@raspberrypi ~ $ hcitool scan
Scanning ...
XX:XX:XX:XX:XX:XX mac_cat
XX:XX:XX:XX:XX:XX TK-FBP014series
「XX:XX:〜」のところには16進数の数値がそれぞれ入る。
今回は下のTK-FBP014seriesというのが接続したい無線キーボードのこと。
ペアリング
次のコマンドを入力してペアリングを行う
pi@raspberrypi ~ $ sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX
RequestPinCode (/org/bluez/2183/hci0/dev_XX_XX_XX_XX_XX_XX)
Enter PIN Code: 9876 <---------- 操作側からPINコードを入力
Release <---------- 無線キーボード側から同じ番号を入力
New device (/org/bluez/2183/hci0/dev_XX_XX_XX_XX_XX_XX)
これで認識される。
ちなみに入力にちんたらしていたら下みたいになる
pi@raspberrypi ~ $ sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX
RequestPinCode (/org/bluez/2183/hci0/dev_XX_XX_XX_XX_XX_XX)
Enter PIN Code: 9876
Cancel
Creating device failed: org.bluez.Error.AuthenticationTimeout: Authentication Timeout
はいー。これでbluetoothキーボードを使用できるようになりました。
bluetoothマウスを使用したい場合は同じようにBDアドレスを登録すればいいだけです。
起動時に自動でペアリングする
起動するたびに毎回sshで接続してコマンドを打ってというのも面倒くさいので自動で接続するようにする。
pi@raspberrypi ~ $ sudo bluez-test-device trusted XX:XX:XX:XX:XX:XX yes
pi@raspberrypi ~ $ sudo bluez-test-input connect XX:XX:XX:XX:XX:XX
MacからRaspberryPiをリモート操作(ssh)
前回の記事でMacからRaspberryPiにVNCでリモート接続を行いました。
今回はMacからRaspberryPiにsshでリモート接続を行います。
参考にしたのはこちらの記事。
RasPiはCUIの状態。
RaspberryPiのIPアドレスを調べる
RasPiのIPアドレスを知るために次のコマンドを入力
pi@raspberrypi ~ $ sudo hostname -I
結果として、[111.222.33.44]というような答えが帰ってきます。これがRasPiのIPアドレスなのでメモしておく。
Terminalからssh接続する
Macならばデフォルトでターミナルがあるので起動して次のコマンドを入力
pi@raspberrypi ~ $ ssh pi@111.222.33.44
初めて接続する際には[yes/no]の質問をされるので「yes」を打ち込めば問題ない。
次にパスワードの入力を求められるので入力する。RaspberryPiのパスワードは変えていなければ「raspberry」。
これでMacからssh経由でRaspberryPiにつなげることができました。
ね、簡単でしょ?