スキップしてメイン コンテンツに移動

【入門】ESP32 × MicroPython ファームウェア書き込み ~ Pmod KYPD (キーパッド)を使ってみる

 今回は何度か扱ってきたESP32にファームウェアを書き込んでMicroPythonを使ってPmodKYPD(キーバッド)を使っていきたいと思います。

MicroPythonの書き込みなどは思ったよりも簡単でしたが所々躓いた事なども説明していきたいと思います。

1. 動作環境

2. 使ったもの

3. MicroPythonの書き込み

書き込みはとても簡単で特に気を使う場面はありませんでした。 と言うのも、公式が日本語の書き込み手順を出してくれているからです。公式のリファレンスに則って進めれば問題ありませんので下にそのリンクを貼っておきます。

  • 注意:MicroPythonのファームウェアを書き込む際に、使用しているPCにPythonがインストールされている必要があります。本記事ではPythonのインストールに関しての詳しい記述は省いて説明します。

ファームウェアの書き込みまでの説明は、公式リファレンス通りに進めた場合の補足になりますのでリファレンスと併せて作業してください。

micropython-docs-ja.readthedocs.io

ファームウェアのダウンロードの補足

強いて気を付けるべき場所はファームウェアのダウンロードです。ファームウェア入手 の項に記載があるようにMicroPythonのファームウェアに毎日ビルド版、安定ビルド版、SPRAMサポート付きビルド版の3つの種類があると記載がありますが、執筆現在(2021.03.17)だとバージョン3系では更新が止まっていて毎日ビルド版がないようです。

それに加え執筆現在(2021/3/17)では、バージョンも3.Xと4.X代の2種類が存在し、3.Xと4.X代の違いはダウンロードサイトに記載があります。表にまとめたようにLAN(Wi-Fi)の対応の有無になっています。どちらもBLE(Bluetooth Low Energy)とPPP(Point-to-Point Protocol)は使えるようで、3.X代が3つすべてに対応しているようです。

本記事では初心者でも安心して3つの機能を使えるようにするためにバージョンは3.X代の安定ビルド版をお勧めします。 ダウンロードは以下のリンクからできます。

micropython.org

以下の画像にあるように私はesp32-idf3-20210202-v1.13.binをダウンロードしました。

この時ダウンロードしたファイルはこの後使うのでデスクトップなどに移動しておきましょう。

  • 注意:執筆現在(2021/3/17)より時間がたってしまうと、日々更新されるものなので変わることがあります。またバージョン3系ではないと思いますが、BLEやWi-Fiなどの機能も、更新によって状況が変化することがあるので注意してください。ダウンロードするときに十分確かめてください。安定版にはファイル名にunstableが入っていないこととシンプルな名前を選ぶのがコツかもしれません。(これも時期によって変わる場合があります)

ファームウェアの配備の補足

次に公式リファレンスのファームウェアの配備の項に書かれている書き込みに必要なesptool.pyの入手の補足になります。
リファレンスにはGit Hubからクローンする方法とpipでインストールする方法が記載されていますがリファレンス通りpipで入れていきます。

pip install esptool

バイスのポートを調べる

リファレンスに載っているコマンドにはデバイスのポートを指定しなければならないものがあるので調べ方を説明します。

バイスマネージャーから確認

手順:

タスクバーの検索ボックスにデバイスマネージャーと入力⇒アイコンクリック⇒ポート(COMとLTP)の項目をクリックで表示される

ESP内の掃除とファームウェアの書き込み

まずはESPの中身のデータをきれいにしてからファームウェアを書き込むことが推奨されているのでそのコマンドを実行します。

まずはコマンドプロンプトを開き、次のコマンドを実行します。

私の場合は前の項で調べたデバイス名の最後に(COM3)と出ているので、公式リファレンスのコマンドを書き換えた例はこちらになります。

esptool.py --port COM3 erase_flash

次はファームウェアを書き込むので先ほどダウンロードしたファームウェアがデスクトップにあるものとして説明を進めます。

コマンドプロンプトでデスクトップに移動して、ファームウェアの書き込みをします。

二つ目のコマンドでは先ほどのポートの書き換えと、最後のesp32-idf3-20210202-v1.13.binの部分をダウンロードしたファームウェアの名前に合わせる必要があります。

説明したのと同じものをダウンロードしている場合は最後の書き換えは必要ありません。

cd Desktop
esptool.py --chip esp32 --port COM3 write_flash -z 0x1000 esp32-idf3-20210202-v1.13.bin

4. プログラムの書き込み

ファームウェアの書き込みが終わったら次に自分が作ったプログラムを書き込みみについて説明していきます。
これにも私が知る限りでWindowsの場合は4つは方法が存在まします。
全て説明すると長くなっていしまうので最も簡単なものを紹介して、他は先人たちの知恵がありますのでそちらの参考リンクを貼っておきます。

方法1:REPLのみ

WIndowsの場合、Mac OSLinuxでは使えるscreenコマンドは使えないので別のプログラムなどをインストールしなければREPLプロンプトは使用できないようです。
なので公式にもあるように無料のPuTTYを使う方法の説明です。
REPLプロンプトの表示についての公式リファレンスはこちらです。↓micropython-docs-ja.readthedocs.io

まずは下のリンクにアクセスし、画像の赤枠をのようになっているので、お使いのPCのbit数に対応したものを選んでダウンロードしてください。

www.chiark.greenend.org.uk

ダウンロードしたものをインストールしたら開いて

画像のように入力し、ESP32のリセットボタンを押すと

このようなREPLプロンプトが開かれます。
これでMicroPythonを対話的に実行できます。
しかし、これだとコードの量が大量になった場合、手でいちいち打ったり、Ctr + Eで貼り付けモードにもできますが別の方法で書き込むことが出来るので方法2で説明します。

方法2:REPL + ampy

大量のプログラムの時はファイルごと書き込んでしまうのが一番だと思います。その方法を説明していきます。
使っているPCのコマンドプロンプトを開き

pip install adafruit-ampy

と打ち込みampy(Adafruit MicroPython Tool)をインストールしていきます。ampyは簡単に説明するとAdafruit社が出しているシリアル通信でファイル転送を行ってくれるツールのことです。
これでプログラムファイルの転送が出来るようになります。

それぞれのコマンドを説明していきます。

ファイルの転送

ampy -p /COM3 put ファイル名

転送済みファイルの確認(boot.pyはもとから転送されています)

ampy -p /COM3 ls

転送済みのファイルの中身を見る

ampy -p /COM3 get /ファイル名
  • 注意:/COM3の部分は各PCで割り当てられるデバイスのポート名に変更してください。デバイスのポートを調べるの項で調べたものにあたります。私の場合はCOM3だったので例のようになっています。以下のCOM3の部分は各PCで割り当てられるデバイスのポート名に変更してください。

これで転送した後に方法1で説明したREPLで

import ファイル名

でプログラムをインポートして実行することが出来ます。
キーパッドを使う際には公式の使い方に最も近く、かつある程度簡単な方法なのでこちらの方法を使って説明していきます。

方法3:VSCode

こちらの方法では使い勝が良い反面、初心者には難しく、最初からだと工程が多くなってしまうのでVSCodeを普段使っている方にお勧めです。
説明すると長くなってしまうので参考にさせて頂いた先人のリンクを貼っておきます。

qiita.com

方法4:uPyCraft

こちらの方法はVSCodeよりかは使い勝手がよくはありません(人による)がArduinoIDEのような感覚で使えます。方法2よりこちらの方が一つにまとまっていて良いのですが、なるべく公式のリファレンスに沿って説明したかったので紹介程度にしておきます。 こちらも参考にさせて頂いた先人のリンクを貼っておきます。

blog.boochow.com

以上がプログラムを書き込む4つの方法です。
複数回書き込んだり、使い込んだりするときは自分に合った方法を選ぶのがよさそうです。

5. キーパッドを触る

まずは動かしてみましょう。

配線

キーパッドの回路図は下のリンクにあります。

https://akizukidenshi.com/download/ds/digilent/pmodkypd_sch.pdf

画像のように配線してください。表も用意しておきました。

  • 注意:ESP32ボードの種類によってピン配列が微妙に違うものがあるので表を参考に対応するピン同士で接続するようにしてください。

プログラム

from machine import Pin

COL_PIN_NUM = [12,14,27,26]#COL:[1,2,3,4]PIN
ROW_PIN_NUM = [34,35,32,33]#ROW:[1,2,3,4]PIN
COL_NUMS = len(COL_PIN_NUM)
ROW_NUMS = len(ROW_PIN_NUM)
KEY_MAP = [
    [1,  2,   3,  'A'],
    [4,  5,   6,  'B'],
    [7,  8,   9,  'C'],
    [0, 'F', 'E', 'D'],

COL_PINS = []
ROW_PINS = []
COL_PINS = [Pin(i, Pin.OUT, value=1) for i in COL_PIN_NUM]
ROW_PINS = [Pin(i, Pin.IN) for i in ROW_PIN_NUM]

def get_code():
    re_key = 'none'
    for i in range(COL_NUMS):
        COL_PINS[i].off(
        for j in range(ROW_NUMS):
            if ROW_PINS[j].value() == 0:
                re_key = KEY_MAP[j][i]
        COL_PINS[i].on()
    return re_key

def run():
    while True:
        print(get_code())

実行方法1

プログラムの書き込み方法1の操作をしたうえで、プログラムをコピペしてREPLプロンプトにCtr + Eをすることで貼り付けモードにします。右クリックするとペーストされ、その後はCtr + Dで入力が完了します。先のプログラムを実行するには入力完了後に以下を入力することで実行できます。

キーパッドの押されているキーを一度だけ返す(入力なしはnone)

get_code()

キーパッドの押されているキーを連続で無限回返す(get_code()の連続)Ctr + Cで終了

run()

しかしこの方法だとESP32をリセットしたりすると内容が初期化されてしまうので何度も同じペーストをしないといけません。すぐに実行は出来ますがいちいち手間がかかってしまいます。それを改善するのが実行方法2です。

実行方法2

プログラムの書き込み方法2の操作をしたうえで、既に開かれているREPLプロンプトがあれば一度ウィンドウを閉じておいてください。
その後、デスクトップにファイルを作成しkp.py(kp=key padの略)と名前を付けてプログラムをコピペした場合は

cd Desktop
ampy -p /COM3 put kp.py

と、二つのコマンドをPCのコマンドプロンプトに入力・実行することでファイルの転送が完了します。
転送し終えたらREPLプロンプトを起動しなおしてそこに

kp.pyのインポート

import kp

キーパッドの押されているキーを一度だけ返す(入力なしはnone)

kp.get_code()

キーパッドの押されているキーを連続で無限回返す(get_code()の連続)Ctr + Cで終了

kp.run()

その他の実行方法

プログラムの書き込み方法3とプログラムの書き込み方法4での実行方法はそれぞれ参考リンクに記述があるのでそちらを参考にしてください。

まとめ

プログラム書き込み方法1と2でPuTTYを紹介したのですが、よく考えたらターミナルエミュレータを使えば何でもよかったのでRaspberry PiでおなじみのTera Termを使えばよかったと後悔しています。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)