FlashAirを再読み込みする
このチュートリアルではFlashAirを再読み込みし、Luaスクリプトやupload.cgiで変更したファイルをOSに認識させる方法を解説します。
- 問題点
- 注意点
- Windowsの場合
- Linuxの場合
- macOSの場合
問題点
FlashAirではLuaスクリプトやupload.cgiを使い、ファイル作成や削除を行うことができます。
その際、PCなどのSDメモリカードホスト側のOSがSDメモリカードの内容をキャッシュしていると、その変更をOSが認識する事が出来ません。 その為、SDメモリカードホスト機器とLuaやCGIから同時に変更を行うとFAT不整合が起きる可能性があります。
SDメモリカードホスト機器から一度抜き、再挿入することでSDメモリカードホスト機器にSDメモリカードの内容を再読み込みさせる事が出来ますが、 遠隔地からFlashAirを操作する場合など、直接FlashAirに触れずに再認識したい場合もあるでしょう。
このチュートリアルでは物理的にFlashAirを刺したまま、再マウントし、OSに再読み込みさせる方法を説明します。 Luaスクリプトやupload.cgiでファイル作成や削除をした後にOSからFlashAir上のファイルを読み書きする際は、 今回説明する方法でOSにカードの内容を再読み込みさせると良いでしょう。
注意点
- 後述する方法でFlashAirを再読み込みする間、SDメモリカードホスト側からの書き込みをしたくない場合、upload.cgiにて書き込み制限を掛けることが出来ます。
- この書き込みの制限はFlashAirを再起動し、再読み込みすることで解除されます。
Windowsの場合
devcon.exe
というツールを使い、リムーバルディスクの再接続を行います。
- devcon.exeはWindows Driver Kitに付属する為、まずはWindows Driver Kitを以下URLからダウンロードし、インストールします。
- FlashAirをSDカードリーダーやPC本体付属のSDカードスロットルなどSDメモリカードホスト機器を使い、Windows PCに接続します。
- デバイスマネージャーから接続したSDメモリカードホスト機器のハードウェアIDを調べます。
- デバイスマネージャー上でSDメモリカードホスト機器を右クリックし、プロパティをクリックします。
- 詳細タブ内のプロパティでハードウェアIDを選択し、値をコピーします。
- PowerShellやコマンドプロンプトを管理者として実行し、以下のコマンドを実行してください。
※64bit版Windows 10の例です。パスはインストール環境に合わせ適宜読み替えてください。
cd "C:\Program Files (x86)\Windows Kits\10\Tools\x64"
devcon.exe restart <ハードウェアID>
Linuxの場合
mount、umountというコマンドを使用します。また、SDカードを読み込む為にライブラリをインストールします。
- 以下のコマンドでexFATフォーマットを読み書きする為のライブラリをインストールします。
※既にインストール済みであれば、実施不要です。
- Red Hat系ディストリビューションの場合
sudo yum install exfat-fuse exfat-utils
* debian系ディストリビューションの場合 *sudo apt-get install exfat-fuse exfat-utils
- FlashAirを接続した状態と外した状態でそれぞれ以下のコマンドを実行し、OSに認識されたデバイス名を調べます。
sudo fdisk -l
- 以下の様にデバイスの情報が出力されますので、FlashAirを接続した際と外した際の出力の差分を確認してください。
-
$ sudo fdisk -l (中略) Device Boot Start End Sectors Size Id Type /dev/mmcblkOp1 8192 131971 122880 60M c w95 FAT32 (LBA) /dev/mmcblkOp2 131072 15564799 15433728 7.4G 83 Linux (中略) Device Boot Start End Sectors Size Id Type /dev/sdb1 8192 30228479 30220288 14.4G c w95 FAT32 (LBA)
- 上記の場合、FlashAirは
/dev/sdb1
として認識されています。
- FlashAirをマウントします。自動でマウントされている場合は、この手順をスキップしてください。
- マウントされてるか調べる為、
df
コマンドを実行し、上記で調べたデバイス名があるか確認してください。 - マウントされていない場合は次のコマンドを実行して、マウントします。この例では
/dev/sdb1
のデバイスを/mnt/flashair
にマウントすることとします。 sudo mkdir /mnt/flashair
mouont /dev/sdb1 /mnt/flashair
- マウントされてるか調べる為、
- 以下のコマンドを順に実行することで、FlshAirを再接続します。
umount /dev/sdb1
mount /dev/sdb1 /mnt/flashair
macOSの場合
diskutilというコマンドを使い、デバイスを再接続させます。
- FlashAirを接続した状態でターミナルから以下のコマンドを実行し、OSが認識しているデバイス名を調べます。
diskutil list
-
$ diskutil list /dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *251.0 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_APFS Container disk1 250.8 GB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +250.8 GB disk1 Physical Store disk0s2 1: APFS Volume Macintosh HD 160.0 GB disk1s1 2: APFS Volume Preboot 21.3 MB disk1s2 3: APFS Volume Recovery 517.8 MB disk1s3 4: APFS Volume VM 3.2 GB disk1s4 /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *15.5 GB disk2 1: Windows_FAT_32 NO NAME 15.5 GB disk2s1
- 上記の場合、FlashAirのデバイス名は
disk2s1
として認識されています。 - 以下のコマンドを順に実行することで、FlshAirを再接続します。
diskutil umount <デバイス名>
diskutil mount <デバイス名>