LEGO SPIKE prime のファームウェア更新に失敗するときの対処法

# この記事で直せるSPIKE prime の不具合
- ファームウェアの更新が何度も表示される
- ファームウェアの更新に失敗する
- ハブを起動しても音が鳴らず、中央ボタンだけが白く光る
::: note warn
この記事の手順でも上記の不具合解決できない場合があります。
:::

# 対処法 その1　バッテリーを外して更新する
バッテリーを外した状態でハブとPCを接続し、SPIKE アプリを起動しファームウェアを更新します。

::: note warn
バッテリーを外した状態で接続の際、起動音がならなかったり、ライトマトリスクが表示されませんが正常に接続できます。
:::


# 以降の手順について
::: note alert
　その2以降の手順は、公式でサポートされていない手順となります。
:::
※本記事の手順を実施し、故障あるいはその他不具合等が発生した場合、当方は責任を負いかねます。

# 対処法 その2　手動でファームウェアを書き込む

:::note alert
リンクのサイトがアクセスできなくリったため、この手順はできません。(2023/1/23)
代わりに、下記の記事を参考にファームウェアを書き換えてください。
https://qiita.com/Atomin/items/30136878e08d58cf0fd3
:::

## 1. ファームウェアを用意
下記のサイト(リポジトリ)からファームウェアをダウンロードします。
https://github.com/ATworks-np/at-apikef

サイトにアクセス後、「Code」から「Download ZIP」をクリックしてPCに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/0f506d1e-6dec-99cb-607a-2a8bbe739406.png)
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/12e0a5c1-a9ce-889c-8cc8-485c122c8f2a.png">

zipファイルがダウンロードされますので展開します。

## 2. ファームウェアを書き込む
### 2.1 ハブをDFUモードでPCに接続
下記のwebサイトにアクセスします。

https://dfu.pybricks.com/

このwebサイトをPCで表示しながら、DFUモードでSPIKE primeをPCにUSBケーブルで接続します。


::: note info
DFUモードでの接続の仕方

>初回接続の際にはドライバーのインストールが必要です。
次の「ドライバーのインストール方法」を参考にドライバーをインストールします。

1. ハブの電源を切る
2. Blueroothボタンを押しながらUSBケーブルでPCに接続する。
3. Bluetoorhボタンの色が赤→緑→青のようにカラフルに点滅するまでBluetoorhボタンを押し続ける。
4. 上記のwebサイトの「Find device」ボタンを押すとデバイスの選択するポップアップが表示されるので、「LEGO Technic Large Hub in DFU Mode」を選択して接続する。
:::

::: note warn
### ドライバーのインストール方法
次のwebサイトにアクセスし、ページ中ごろのDownloadより「Zadig 2.7」をクリックしダウンロードします。

https://zadig.akeo.ie/ 

「zadig-2.7.exe」がダウンロードできますのでダブルクリックで実行します。
実行すると次のようなポップアップが表示されるので「はい」を押します。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/c50a1839-fdba-155b-aaf7-cc4fbfcdfcc4.png">
ドライバーをインストールできるウィンドウが表示されます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/b8ae83ee-55ce-177f-6047-7bc2af555307.png">
この状態で、上記の「DFUモードでの接続の仕方」のStep 3. まで行い、その後「Install WCID Driver」をクリックします。
しばらくするとドライバーのインストールが完了します。
完了したらUSBケーブルを抜いて「DFUモードでの接続の仕方」の再度Step 4. まで行いDFUモードで接続します。

:::

### 2.2 ファームウェアを書き込む
「ファイルを選択」ボタンを押して、先ほど保存したファームウェアのファイルを選択して開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/e115f72e-7921-cd19-ef15-8df8826af879.png)
「Install」ボタンを押して、ファームウェアの書き込みを開始します。
数分程でファームウェアの書き込みが完了し、自動的にハブが再起動します。
これでファームウェアの書き込みは終了です。

### 2.3 SPIKE prime アプリに接続
SPIKE prime アプリを開き接続を確認します。
場合によってはOSの更新がなされますが、正常に更新できます。

::: note alert
対処法を実行しても改善しない場合は、ハブ自体に不具合があり、現在直す方法は確認できていません。
この不具合がある場合、バージョン2系のアプリを使用することが現在は不可能となっています。
ただし、この不具合が生じてもバージョン3系, バージョン1系を使用できることを確認しています。
:::

# 対処法 その3　バージョン3系でSPIKEを使う
次のバージョン3系のSPIKE primeアプリを開き、ハブを接続します。

https://spike3.legoeducation.com/

プログラムを作成する画面で、左上のハブボタンを押し、下の画像に示すウィンドウの右下の「White Update now」を押しファームウェアをバージョン3系にアップデートします。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513482/f2cd6c1a-1672-ca12-3a1f-aeb521ef7d30.png">

正常にアップデートが完了するとハブのボタンが緑の状態でハブが起動します。

::: note warn
不具合の影響により起動音などの音が出ない場合がありますが、プロジェクトは正常に書き込んで実行できます。
:::
::: note warn
現在、バージョン3系はベータ版であるため、プログラムの実行が不安定である可能性があります。また、バージョン2系と比較すると使える機能が限られています。
:::

# 対処法 その4　バージョン1系でSPIKEを使う
「対処法 その2　バージョン3系でSPIKEを使う」を実施後、「対処法 その1　手動でファームウェアを書き込む」を参考にバージョン1系のファームウェアを書き込みます。
その後、バージョン1系のSPIKEアプリを起動し、アプリ上でファームウェアを更新します。
更新完了後、ハブから起動音が流れれば、ファームウェアの更新に成功です。
バージョン1系のSPIKEアプリでプログラムを書き込んで利用できます。