Edited at

M5Burner for macOS


M5Burner for macOS (Python 2.7, Python 3.6, 3.7)

M5Stack.com にて M5Stackにファームウェアを書き込むツール M5Burner for Windows が公開されていますが、macOS用に欲しくなったのでスクリプトを書きました。

M5Stack.comからM5Burner-for-windows-v.0.0.x.zipをダウンロードて解凍したのち、firmwareフォルダと同じディレクトリに以下のスクリプトを配置して実行してください。


m5burner.py

#!/usr/bin/env python

# -*- Coding: utf-8 -*-

from __future__ import print_function
import os, sys
import json
import subprocess
port = '/dev/cu.SLAB_USBtoUART'
baud = 921600
PYTHON_VERSION = os.sys.version_info[0]

# ----- read firmware.json -----
working_dir = os.getcwd()
sub_dir = 'firmwares'
json_file = os.path.join(working_dir,sub_dir,'firmware.json')
with open(json_file, 'r') as f:
fw_list = json.loads(f.read())

# ----- select firmware to write -----
fw_names = [x['name'] for x in fw_list]
for i,x in enumerate(fw_names):
print(i, x)
try:
num = int(input('Select No = '))
if not ( 0 <= num < len(fw_list) ):
print('Error !')
exit()
except ValueError:
print('Error !')
exit()

path = os.path.join(working_dir, sub_dir, fw_list[num]['path'])
table = {'%port':port, '%baud':str(baud), '%PATH':path, '\\':'/'}
cmds = ['esptool.py --chip esp32 --port %port --baud %baud erase_flash']
cmds += ['esptool.py ' + x for x in fw_list[num]['commands']]
cmd = '\n'.join(cmds)
for k,v in table.items():
cmd = cmd.replace(k,v)

# ----- write firmware -----
if PYTHON_VERSION == 3:
q = input('Write firmware: {0} (y/n) '.format(fw_list[num]['name'])).lower()
elif PYTHON_VERSION == 2:
q = raw_input('Write firmware: {0} (y/n) '.format(fw_list[num]['name'])).lower()
cmd = cmd.encode('ascii').replace('\\','/')

cmds = cmd.split('\n')
if q == 'y':
for cmd in cmds:
subprocess.call(cmd.split())

exit()


エラー処理とか、手抜きです。


  • Python 2.7.15とPython 3.6.6で作動確認しました。

  • あらかじめesptoolが導入されている必要があります。


参考


追記


  • よく確認したら解凍したzipファイルの各ディレクトリに書き込み用のflash.shファイルがあるじゃないですか!スクリプトを書く必要が無かった。orz

  • でもボーレートが間違って961200になっている箇所があるので良しとしよう。