WifiBoy32でMicroPythonやってみた

https://qiita.com/advent-calendar/2018/micropython

MicroPython AdventCalendar 8日目です。

今年のMicroPythonというとやはりM5Stackかな？と思ってたのですが、今年のMaker Fair Tokyoでこれを購入していたのを思い出しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/4cb2f332-b62c-1c33-3f11-be0f29bbb56f.png)


https://wifiboy.org/
https://wifiboy.club/

ESP32を使用した小型ゲーム機のような製品です。MFTで3000円で入手しました。
台湾の方が作られているようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/914f76cf-0908-6771-aea6-7585806187c1.png)

いざ開封してみると基板、説明書とケーブルが同梱されていていい感じです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/29960be5-a488-b9ac-b64b-60d12504cb8c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/2c5bb3d2-6986-d855-93ed-d771e8c3e51e.png)

wifiboyのサイトからWindows用の環境を落としてきて解凍します。
↓のtest version

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/61aed3df-1af5-63c5-8a21-31aec8b7d396.png)

WifiboyをPCに接続してアプリを起動させてみるこんな感じになります。
スクラッチのようですが、中国語で記載されていてちょっとわかりませんw

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/eee4686d-c1b4-96c2-9d87-ed37b6eb9ee5.png)

```
MicroPython v1.9.4-235-gb488a4a-dirty on 2018-08-02; WiFiBoy32 with ESP32
Type "help()" for more information.
>>> dir()
['uos', '__name__', 'machine', 'gc', 'bdev', 'wb32']
>>> import wb32
>>> dir(wb32)
['__class__', '__name__', 'box', 'cls', 'colors', 'getkey', 'init', 'line', 'rand', 'str', 'ttcolor', 'ttgo', 'ttpenup', 'ttpos', 'ttreset', 'ttrot', 'ttwidth']
```

デフォルトで書き込まれたイメージはWifiboy専用で手が加えられているようです。
tutoarialのページに乗っていたwifiboy_sound_smb2_melody.pyを開いて実行してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/7cdd743b-df96-8a12-c1e3-6724e3522192.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/146663/c04a1a51-7ad4-a2e7-2ce9-9e267682c7a6.png)

デフォのコードにあるwifiboyというモジュールは ImportError: no module named 'wifiboy'
になってしまうのでそれはwb32に変更して実行するとブザーからメロディーが鳴りました。
ブザーのPin番号も4→25で変えて実行しました。

```py:wifiboy_sound_smb2_melody.py
# WiFiBoy MicroPython Melody Engine Demo
# Nov 25, 2016, Derek Lai, derek@wifiboy.org
# "Super Mario 2 Theme" with buzzer tricks

import machine, time, wb32
snd=machine.PWM(machine.Pin(25, 1))

env1=[100,100,100,0,0,0,0,0]
env2=[100,60,30,20,15,10,5,0]
env3=[20,90,20,80,20,60,5,0]
env4=[120,50,30,20,10,0,0,0]

f=[round(110*2**(x/12)) for x in range(51)]

mel1=[23,22,0,21,18,0,15,13,0,12,11,0,0,23,0,0,11,0,0,0,0,0,
      23,0,16,20,0,23,0,0,16,20,0,23,15,19,23,27,0,25,0,0,0,
      0,0,0,23,0,14,18,0,23,0,0,14,18,0,23,0,0,14,18,0,23,17,
      20,21,27,0,25,0,0,0,0,0,27,28,0,27,28,0,25,0,0,28,27,0,
      25,23,0,22,23,0,20,0,0,17,18,0,20,21,0,20,21,0,15,0,0,
      20,18,0,16,0,0,0,0,0,0,0,0,0,0,0,0]

mel2=[16,0,20,0,0,0,23,0,0,25,0,28,0,0,0,0,0,0,25,0,0,16,18,
      0,20,18,0,20,18,0,13,0,0,18,0,0,13,18,13,18,13,18,13,18,
      0,0,0,0,0,0,20,18,0,20,18,0,20,0,0,25,0,0,23,25,0,23,20,
      0,18,16,0,20,0,0,11,16,11,16,11,16,11,16,20,0,0,0,23,19,
      0,15,0,13,0,11,0,0,0,20,0,0,0,23,0,0,25,0,28,0,0,0,0,0,
      0,25,0,23,20,16,18,20,18,0,20,18,0,13,0,0,18,0,0,13,18,
      13,18,13,18,13,18,0,0,0,0,20,18,0,20,18,0,20,0,0,25,0,0,
      23,25,0,23,25,0,23,20,0,16,0,0,0,0,0,10,11,0,12,13,0,16,
      0,0,0,0,0,16,0,0,0,16,0,20,0,0,21,19,0,20,21,0,19,20,0,
      27,0,0,0,24,0,0,21,0,0,20,0,18,20,18,16,15,0,16,18,0,16,
      15,0,16,0,0,0,0,0,16,15,0,0,16,0,0,0,0,18,0,0,0,17,0,0,
      18,0,25,0,0,0,22,0,0,23,0,0,25,0,0,27,0,0,0,0,0,25,0,0,
      0,0,0,24,0,0,0,0,0,23,0,18,15,0,11]

def play(dt, mel, env, shift): # melody engine
    for i in range(0, len(mel)):
        if (mel[i]!=0):
            snd.freq(f[mel[i]+shift])
            ei=0
        for j in range(0, 4):
            if (ei<8):
                snd.duty(env[ei])
            time.sleep(dt)
            ei=ei+1

wb32.cls()
wb32.colors(0xfe0f, 0xfe0f)
wb32.str("WiFiBoy", 10, 10, 1, 3)
wb32.str("Melody Engine Demo", 10, 35, 3, 1)
wb32.str("Super Mario 2 Theme", 10, 60, 3, 1)

play(0.025, mel1, env1, 0)
play(0.025, mel2, env2, 0)
play(0.025, mel1, env3, 0)
play(0.025, mel2, env4, 0)
snd.duty(0)
```


※謝辞です。すみません、イベントスタッフやったり仕事が忙しかったりで記事を書くことができておりませんでした。。。
boochowさん、inachiさん、記事のご投稿ありがとうございました。