M5Stack CoreMP135を買ったので味見した話
記事のゴール
- だいたい公式と同じ開発環境セットアップし、サンプルプログラムをビルドする。
トラブルがあったため暫定対応で動作することを確認した。
初めに
公式の開発環境構築方法などは以下のリンク先に乗っています。
この通りに完了できればこの記事は不要です。
(2024.09.16 追記)
筆者環境ではwindows11以下ではいまだにすんなり行きませんが、Ubuntu上ではスムーズに進みます。VMware上にUbuntuを用意し、公式ページ(develop)に沿ってUbuntu環境で進めることをお勧めします。
検証環境
- PC
windows11
有線LANに接続できるポートが必要
gitがインストールされていること - 電源 USB type-C 5V3A
- LANケーブル
この記事ではwindows11以下で確認していますが、公式ドキュメントを見るとlinuxでも行けそうです。
電源を入れるまで
OSのセットアップ
Descriptionに以下のコメントがあります。
The host comes with a MicroSD card preloaded with Debian system, ready to use upon booting.
Debian入ったSDが付属している!素晴らしい!
記事作成時点では、発売されたばかりなのでOSを更新する必要はないでしょう(多分)
将来書き換えたい状況になったり、別の環境をいれたSDカードを作る場合のやり方は
CoreMP135 image burning
に記載されています。
電源投入
では電源をいれるだけなので早速通電します。
電源はいくつかの方法で入れることができます。
- DCIN 12V/2A
- RS485 9~24V (記載はないですが電流値2A以上は用意しておきたいところ)
- USB Type-C 5V/3A
ほかにもバッテリーソケットがあったりします。
やってないですが、
M5Stack用電池モジュール
をそのまま重ねたり、バッテリーだけ外してこっちに流用できそうですね。
そのうち試します。
(回路図見るとほかにも行けそうな経路がありますが、自己責任で...)
今回の記事では、業務PCに使うためのUSB type-Cが卓上に出てたのでこれを使いました。
起動
電源を指すと勝手に起動します。
電源を切るときは、電源ボタンを長押しするとオフになります。
電源を指しっぱなしにしているときは、電源ボタンを押すと再び起動します。
リモートログインしてみる
ネットワーク環境の設定
SDカードのOSが初期状態のままであれば、IPアドレスはDHCPで設定できます。
パソコンをDHCPサーバ機能を持つルータに接続し、同じルータにCoreMP135を接続するといいでしょう。
筆者は手元にルータがなかったので、PC上でDHCPサーバを動作させたうえで、LANアダプタとCoreMP135を直結して作業しています。
このとき、DHCPサーバからどんなIPアドレスが割り振られているかは
起動後に表示されるデモのETHERNET TESTから確認することができます。
ちなみに、DHCPサーバはRockwell AutomationのBootP DHCP EtherNet/IP Tool を使用しました。
SSHでアクセスしてみる
Windowsのコマンドプロンプトで以下のコマンドを実行します。
以下は私の環境の場合す。CoreMP135側のIPアドレスは環境ごとに異なる可能性があるため、@以降のIPアドレスは適切に読み替えてください。
ssh root@192.168.2.212
デフォルトのユーザ名とパスワードは両方ともrootです。
警告
インターネットに接続できる構成で利用する場合は、なるべくパスワードやユーザ名を変更しておいたほうが無難です。
(オプション) 取り急ぎパスワードを変更する方法
SSHでログインした後、以下を実行し、指示に従ってください。
passwd root
変更した後はCoreMP135の再起動を行ってください。以降の操作では新しいパスワードを利用します。
ビルド環境のセットアップ
ここではwindows環境について説明します。
Linuxについては公式ページ(develop)をご確認ください。
windowsもそのページみたらいいじゃん。というコメントはその通りです。
Python 3をインストールする
ここは公式ドキュメントに準拠しますが、仮想環境等で作成しても変わらないはずです。
Python.orgから最新のPython 3(DownlordにあるLatestのところから飛ぶ)をインストールします。
筆記時点ではPython 3.12.3でした。
画面下部のWindows installer (64-bit)を使ってインストールしてください。
ビルドツール周りをセットアップする
コマンドプロンプトと記載していますが、PowerShellでも可能です。適宜読み替えてください。
はじめに以下をWindowsのコマンドプロンプトで実行します。
pip install parse windows-curses scons pexpect paramiko scp
筆者の環境の場合
個人の自由ですが、私の場合は上のコマンドの代わりに以下でインストールしました。
理由がなければ上のコマンドをそのまま実行してください。
py -m pip install parse windows-curses scons pexpect paramiko scp
ライブラリをクローンする
次に適当な作業フォルダを作成します。
経験上、フォルダ名に日本語は含めないこと、階層は深くしないことがおすすめです。
C:\project\M5
くらいがいいと思います。
コマンドプロンプト上で作成した作業フォルダに移動して以下を実行。
git clone https://github.com/m5stack/M5Stack_Linux_Libs
問題なければM5Stack_Linux_Libs
ができているはずです。
クロスコンパイル用のツールチェーンを取得する
公式ページ(開発環境構築)にある
gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf
をダウンロードし、作業フォルダの中で展開します。
サンプルプロジェクトのビルド
注意
この章については公式の手順で進められなかったので適当にやっています。
そのうち正しい方法でできるように整理されると思います。
起きたトラブル(読まなくても良い)
公式手順のとおりscons menuconfig
を実行すると、
scons: Reading SConscript files ...
Loaded configuration '<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world\build\config\global_config.mk'
など表示された後、設定画面に移動せずに処理が終了してしまう。
そのためツールチェーンまでの絶対パスを設定することができない状態になってしまった。
ツールチェーンまでのパスを設定する
まず、
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world
まで移動し、以下のコマンドを実行します。
scons -j4
すると、ビルドしようとして失敗しますが、
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world\build\config\global_config.mk
が生成されているはずです。
方法は何でもいいので
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world\build\config\global_config.mk
を開き、
CONFIG_TOOLCHAIN_PATH
を
\gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf\bin
までの絶対パスに置き換えます。
以下は例になります。
(解凍の仕方やフォルダ構成によって、パスの内容は変わるので注意してください。)
CONFIG_TOOLCHAIN_PATH="<作業フォルダ>\gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf\gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf\bin"
ほかの行はそのままで良いです。
ビルドする
コマンドプロンプトで
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world
に移動した後、以下を実行します。
scons -j4
errorがなければビルド完了です。
CoreMP135上にプログラムを転送して動かす
ビルドした結果をCoreMP135上に移します。
方法はなんでも良いのですが、ここでは公式ドキュメントに従いSConsを使ってビルドした結果をCoreMP135に送ります。
送信設定
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world
の中に、setup.ini
を作ります。
(<作業フォルダ>\M5Stack_Linux_Libs\examples\hello_world
の中にあるsetup.ini
をコピーして持ってきても良いです。)
ファイルの中身は以下になります。
IPアドレスを実態に合わせるのはもちろんのこと、
sshに使うやユーザ名やパスワードを変更している場合は適切な内容に変更しておきましょう。
[ssh]
local_file_path = dist
remote_file_path = /root
remote_host = 192.168.2.212
remote_port = 22
username = root
password = root
CoreMP135に送信する
次に、SConsを使ってプログラムをCoreMP135に送信します。
前述のリモートログインできる環境が構成されており、実際にSSHで接続可能な状態であることを確認してください。
コマンドプロンプトで
<作業フォルダ>\M5Stack_Linux_Libs\examples\lcd_hello_world
にいる状態で、以下を実行します。
scons push
success!と表示されたら成功です。
権限を付与して実行する
コマンドプロンプトからCoreMP135にsshでログインします。
ログインしたら、setup.ini
remote_file_pathとして設定しているパスに移動します。
chmod +x lcd_hello_world
./lcd_hello_world
うまくいっていればサンプルプログラムが起動します。
なお、画面上部には起動時のデモプログラムの時計表示等が出てきます。
公式のドキュメントを参考に以下の手続きでデモプログラムを停止させることができます。
CoreMP135にsshでログインしている状態で、次のコマンドでプロセスを確認します。
ps | grep "start_ui"
/usr/local/m5stack/dist/core135_start_uiに対応した番号を探します。
次に、
kill <調べた番号>
で停止します。
まとめ
- サンプルプログラムをビルドして動かすことができた
- scons menuconfig 周りがうまくいかなかったので力技になってしまっている
最後に
公式ページ(develop)には紹介していない便利機能(debugportとか)が乗っています。絶対に目を通すようにしましょう。