用ESP32打造實體寶可夢圖鑑

前言

很久沒用ESP32/Arduino開發板做有趣的專案了
之前一直想不到可以做什麼專案,又不想要只是為了學怎麼使用去做一些很學習導向的專案
像是讓LED依照順序亮起來、讀卡機讀取後開門之類可以做但沒啥意義的東西
有天早上起來想到這個寶可夢圖鑑的雛形立馬跟AI討論一番寫出計劃書後開始製作

完整的製作細節和程式碼都放在GitHub上:hunglin59638/pokedex

運作原理

整個系統其實不複雜,主要分成三個部分: 簡單來說就是用寶貝球掃描海報中的寶可夢的NFC貼紙
讀取到相應的寶可夢編號會傳送到圖鑑顯示該寶可夢的資訊和GIF動畫

發送端(精靈球造型)

使用Seeed Studio XIAO ESP32C3開發板搭配PN532 NFC模組
當你把貼有NFC貼紙的寶可夢海報靠近時,它會讀取寶可夢的編號
然後透過ESP-NOW無線協定把資料傳送給圖鑑
會使用這個開發板是因為它的尺寸小可以塞到寶貝球裡
寶貝球外殼是買TOMY MB-01的寶貝球,應該很容易買到


接收端(圖鑑本體)

使用Wemos D1 R32開發板搭配3.5吋TFT螢幕
接收到寶可夢編號後,從記憶卡讀取對應的圖片和資料
然後在螢幕上顯示寶可夢的動態圖像

兩者之間使用ESP-NOW通訊,這是一種點對點的無線傳輸協定
不需要Wi-Fi路由器,只需要使用MAC位置就可以進行通訊

外殼我想到可以用拼豆製作圖鑑的樣式,這部分我則是先用gemini生成一些示意圖讓我參考
然後再做些調整

寶可夢海報

用Python寫個腳本從PokeAPI下載了151隻初代寶可夢的資訊(名稱、屬性、身體體重),png 然後排列成A1大小的海報(59.4 × 84.1公分)

海報印出來後,在每隻寶可夢的位置背面都貼上NFC貼紙
這些貼紙事先都用手機的NFC Tool寫入對應的寶可夢編號
例如第6號就是噴火龍,第94號是耿鬼

資料來源:PokeAPI

所有寶可夢的資料都來自PokeAPI
包含寶可夢的名稱、屬性、能力值、圖片、動畫等等

我寫了一個Python腳本來批次下載這些資料
每隻寶可夢會產生三個檔案:

  • JSON檔:包含名稱、屬性等基本資料
  • PNG檔:高解析度的官方圖片(用於製作海報)
  • GIF檔:動態的精靈圖(顯示在圖鑑螢幕上)

這些檔案都會放到記憶卡裡,讓圖鑑隨時可以讀取

電源設計

掃描端使用3.7V鋰電池搭配TP4056充電模組
圖鑑本體則是使用9V typeC充電電池
兩個都可以隨時用USB充電,且都有焊接上開關
雖然續航力不是最理想,大概不到一小吧,但以展示用途來說已經足夠

擴充性

雖然海報只有151隻初代寶可夢
但程式碼其實支援所有世代的寶可夢
只要下載對應的資料檔案並存到SD卡中就可以顯示任何寶可夢(pokeAPI有提供GIF的話)

如果想要製作其他世代的也可,只要指定特點範圍的寶可夢並存到SD卡
或是全部下載到SD卡

bash
1
2
# 下載第152到251號(第二世代)
python pokemon_data_fetcher.py --start 152 --limit 100

後記

前後大概花了3個禮拜製作完成,有了AI的輔助規劃和程式碼的撰寫變得很輕鬆
我想沒有AI的輔助這個超有趣的專案大概就只會在我腦中出現
要不是會花很久才完成不然就是胎死腹中吧XD

還有我會覺得很難想到好點子的另一個原因是,我不想都讓這些電子零件都裸露在外面
真的要做專案的話就得要至少有個可以看的外觀包裝起來
網路上的專案太多都只是半成品還用厚紙板來裝飾一整個美感不行…
好再這個專案外觀部分有現成的寶貝球、海報也是印好NFC貼紙貼在背面也看不到
圖鑑則是想到可以用拼豆這個自由度很高的手作材料,不然3D列印的話難度又要更高了