猫にコ・ン・バ・ン・ワ猫にコ・ン・バ・ン・ワ猫とコンピュータとIT関連(最近は電子工作)に関するメモ的なブログです。素人の趣味のレベルの内容です。(火)M5Stackで日本語表示(2)M5Stackでの日本語表示の続きです。前回とは別の自作ライブラリをM5Stack対応の修正を行いました。利用ライブラリ・Arduino-KanjiFont-Library-SDArduino用のマルチサイズ漢字フォントを利用するためのライブラリ(SDカード版)https://github.com/Tamakichi/Arduino-KanjiFont-Library-SDライブラリを使って、「吾輩は猫である」の文書を表示してみました。動いている様子8ドットから24ドットのフォントサイズを変えて繰り返し表示しています。動画を見れば分かると思いますが、表示はあまり速くないです。逐次、SDカードから読んでいるためかと思われます。スケッチ表示の高速化のため、M5Stackで利用されている液晶パネルILI9341のWindows機能を利用してフォントの表示を行っています。drawPixel()を使うよりもコマンド送信数が少なくて済むので多少は速くなると思います。SDカードアクセスが遅いためあまり効果としては現れませんね。期待通りに動きませんでした。プログラム的には、指定座標のピクセル色を読んで、1文字分上に表示でスクロールさせようとしたのですが..「何故だろう..?」と調べると、なんとMISO(LCDからデータを読む)が使われていません。(回路図は公式サイトより入手し引用)これでは、物理的にデータの取得は出来ないですね。65535の値が返されます。一点、ウィンドウ設定でsetAddrWindow()を使っているのですが、setWindow()だと正しく表示出来ませんでした。setAddrWindow()は、内部的にsetWindow()を読んでいるのですが、SPIの設定を行ってからsetWindow()が呼び出されています。SPIがSDカードのアクセスと共用のため、SPIの設定が必要だったのだと思われます。ウィンドウ設定の関数が用意されているのが分かったのは収穫でした。追記MOSIを双方向にてデータを読む方法があるようです。TFT_eSPIの最新版を取り込んで利用可能になると思います。Arduino用に作成したMML文演奏ライブラリをM5Stackにて利用してみました。M5Stackにて、単音演奏をやってみました。数日前にやった、「M5Stackのビープ音、Tone音の爆音対策」を適用して音量が出来るようにもしました。MML_Playhttps://github.com/Tamakichi/MML_Playライブラリ本体は、ESP32ではコンパイルエラーが発生したため修正&更新しました。ついでに、M5Stack用のサンプルスケッチ(本記事のスケッチ)を追加しました。動いている様子スケッチ(ライブラリに添付)演奏操作は、ボタンAで演奏開始(または先頭から演奏しなおし)、ボタンBで演奏中断、ボタンCで中断した演奏を途中から再開です。音量は最低にしているため、小さめです。音量を上げるには、MML文先頭のv1の値を1~9(爆音)の範囲で調整して下さい。ノイズ等もなくとりあえずは、まともに演奏出来ているようです。効果音的な何かには使えると思います。標準のAPIを使ってビープ音やTone音(周波数を指定して鳴らす)を簡単に鳴らすことが出来ます。これには、ちょっと困りました。鳴らすとやかましいです。ググってみると、多くの利用者が同様に困っているようです。何とかならないかなぁ、と思い試行錯誤してみました。結論としては、とりあえず、何とかなりました。単音440Hz(ラ)の音を音量指定して鳴らしてみました。サンプルスケッチ音量指定できる新しいtone関数、toneEx()を作成しました。音の大きさの制御は、デューティ比を操作で制御しています。9(最大)の指定にて音量を指定することが出来ます。サンプルスケッチでは、M5Stackの左ボタンで最小音、真ん中ボタンで3、左ボタンで5を指定して音を鳴らすことが出来ます。耳で聞いた感じでは、いい感じで音量制御出来ています。最小の1でも十分聞こえ、ちょうど良いかもしれません。次の段階として、Arduino用に作成したMML演奏ライブラリを試してみます。0.3.1で行われているようです(動作未確認)この記事を参考にして、らびやんさんがプルリクして本家に組み込まれたようです。Uno用に作成したフォントライブラリをM5Stackで試してみました。教育漢字・内部フラッシュメモリ乗せ版https://github.com/Tamakichi/Arduino-misakiUTF16とりあえず、LCDにライブラリ無修正で利用出来ました。ノーマルのサイズでは、文字が小さすぎて読めません。3倍角にして表示してみました。8ドットフォントなのでこんなもんでしょう。動いている様子コントラストの関係で動画が綺麗に取れないため、背景色を青に変更しました。8ドットフォントを1~4倍にして繰り返し表示しています。ものを修正して作成しました。フォント表示については、他の自作ライブラリの動作も検証したいと思います。(木)M5Stack始めましたM5Stackを購入しました。これからESP32関連もやっていきたいと思います。ESP8266を試してみました」の続きです。ESP8266)間でファイルのやり取りの方法の質問があり、私も知りたいと思っていたので、ちょっと調べてみました。その際の調査のメモです。方法としては、XMODEMプロトコルを使う方法があります。XMODEMは昔、電話回線(モデム利用)でパソコン通信をやっていた頃にファイル転送手段として使っていました。cpm8266では、CP/Mの標準コマンドXMODEMコマンドが正常動作しないようで、cpm8266の開発者さんが別途、専用コマンドを用意しています。下記のリンク先に、コマンドの使い方が解説されています。下記のサイトのページの一番下にTeraTermで転送出来ている記載があるので私の環境に問題がある可能性もあります。コマンドをインストールして使ったところ、転送出来ました。lrzszminicomの使い方、XMODEMの使い方については、下記の情報を参考にしました。Ubuntu+minicom日本語環境の場合、セットアップメニューが崩れるのでLANGを変更して起動した方が良いです。-s-sオプションを付けて起動すると、初期画面にメニューが表示されます。管理者権限で起動しないと、シリアルポートのアクセスに失敗します。選択してシリアルポートの設定を行います。/dev/ttySnの対応となります。Minicom]にて一旦、終了します。minicom日本語環境でも動作しますが、メニューボックス内の表示が崩れるため英語モードでの利用を推奨します。日本語環境では画面下のステータスバーが表示出来ないようです。起動後、ENTERキーをたたくと、起動メッセージが表示されます。終了する場合は、CTRL-A入力後、Xキーを押します。F:test.txt2minicomによるファイル転送とりあえず、今月のカレンダーを送ってみます。test.txtと実行し、ファイルを作成しました。minicomにて、CTRL-X入力後、Sキーを押します。カーソルキーでxmodemを選択し、ENTERキーを押します。ファイル選択状態となります。カーソルキー[↑][↓]でファイルを選択、スペースキーで確定、カーソル[←][→]で下のメニューのコマンドの選択、ENTERキーで実行します。[OKay]選択&ENTERキーで転送開始です。転送状況が表示され、完了したら何かキーを押します。転送されたファイルを確認すると、ちゃんと転送出来ていました。転送自体は上手くいっています。10(Ubuntu)試しに、GドライブにあるBIO.BASを転送してみます。g:bio.basこれで、cpm8266側は送信待機状態となります。2minicom側での受信minicomにて、CTRL-X入力後、Rキーを押します。カーソルでxmodemを選択し、ENTERキーを押します。ファイル名を入力し、ENTERキーを押します。これで転送が始まります。転送中は、その状況が表示されます。完了したら、何かキーを押します。転送が正常の場合は、次のメッセージが表示されます。別端末画面にて、カレントホームにファイルがちゃんとあるのを確認します。minicomを管理者権限で実行したため、アクセスが権限がないためsudoコマンドでheadコマンドを実行して、先頭の10行を表示しています。これで、パソコンとのファイルのやり取りが出来るようになりました。これで、もう少し使い込めるようになりました。XMODEMプロトコル、組み込みマイコン用に使いには意外と良いプロトコルかもしれません。ArduinoにもXMODEMライブラリがあるようなので、ちょっと調べてみたいと思います。豊四季タイニーBASICでのファイル転送の手段として利用価値がありそうです。(日)ESP-01モジュールにcpm8266を載せてみました前回の続きです。エミュレータを動かしてみました。技適無しのため放置していました。手持ちの4MバイトのフラッシュメモリW25Q32に置き換えてみました。W25Q32はeBayで購入しました。はんだ吸い取り線ではんだを吸い取りピンセットで横ひねりして取外せました。幅が広いですが、乗っかりました。WiFiは使わないので、アンテナ部をカットします。サイズも小さくなりました。USBシリアルモジュールにて書き込みを行いなす。接続には一緒に買っていた、アダプターを使いました。結線表cpm8266の書き込みフラッシュメモリも認識されて、ちゃんと書き込めました。結線を下記に修正し、RESETはワイヤーの抜き差しでGND接続⇒切り離しでリセットしました。あとで、ちゃんとタクトスイッチでリセットボタンをつけることにします。マイクロソフトBASICも問題なく動作しました。動くのはすごいですね。ESP8266)を試してみました。cpm8266の存在もDEKOさんのSNSでの投稿記事で知りました(感謝!)。追記DEKOさんがcpm8266のコンパイル手順を分かりやすくまとめています。チャレンジする方は、こちらの手順を参考にした方が良いでしょう。追記cpm8266では、フラシュメモリの容量が4Mバイト必要みたいです。3,750kバイトESP-WROOM-2は、フラッシュメモリが4Mバイトから2Mバイトに変更があったので最近流通しているESP-WROOM-2では利用出来ないかもしれません。ESP8266)https://github.com/SmallRoomLabs/cpm8266先に結果をいうと、完成が高く、問題なく動作しました。Running」の手順に従て行いました。10上で動くUbntu環境(WSL)を利用しました。管理者権限が必要なコマンドはsudoで実行していきます。libtool-binesp-open-sdkのコンパイル結構時間がかかりました。i5マシンではこのコンパイルに1時間かかりました。10上のUbuntuは若干パフォーマンスが悪いかもしれません。10上のUbuntu環境では、公開サイトの手順ではうまくいきませんでした。esp-open-sdkのバージョンアップに対応するためにパッチを当てる必要がありました。10に接続した際のシリアルポートをLinux形式で指定します。10からみて、COM6の場合、数字の6をttySの後ろに指定します。/dev/ttySnの対応となります。アクセス権限も一般ユーザーが利用出来るように変更します。次にパッチを当てます。そのままではコンパイルエラーとなります。当ててからコンパイルします。fullこれで、コンパイルとボードへの書き込みが行われます。シリアルポートはデフォルトでは9600bpsに設定されています。設定を変更すれば良いようです。fullでコンパイルと書き込みを行います。私は115200bpsに変更しました。私の利用しているボードでは書き込み後、TeraTermにて接続すると起動時が不安定なのか、次のような画面になってしまいます。TeraTermにて次の操作を行うことで正常に利用出来るようになりました。[Enter]キーを2~3回たたくこれで、利用可能状態になりました。改行コードは下記の設定にしています。CP/Mについては、私は知識がないので、MS-DOSのノリで操作してみました。試行錯誤の上、マイクロソフトBASICが利用出来ました。う~ん、いい感じかなり、まともに動作します。TeraTermでの動作が確認できました。以前試したプロペラマイコンのVT100エミュレーション(VGA出力とPS/2キーボード)を利用してパソコン無しで動かしてみました。ブレッドボードのプロペラマイコンシリアルポートを接続して、起動すると問題なく動作しました。全体はこんな感じです。小型のVGAモニタ、PS/2キーボードを接続しています。部品点数も少なく意外とシンプルな構成です。マイクロソフトBASICでスタートレックのゲームプログラムを実行している様子ユニバーサル基板に実装すれば、コンパクトなCP/Mマシンが実装出来そうですね。ケースなんかも作れば小型パソコンが出来そうです。本来の目的のIoTをボチボチとやり始めました。IDEのサンプルソースのSDWebserverを修正して簡単なLED制御プログラムを作って見ました。スマートフォンにてESP-WROOM-02にて稼働するWebサーバーに接続してLEDを制御しています。機能の提供2)接続したスマートフォンにIPアドレスの配布(DHCP)3)Webサーバー4)WebコンテンツをSDカードから配信5)URL名前解決(DNSサーバー)6)LEDの制御てな感じです。ESP-WROOM-02がWiFiアクセスポイントになっているので、既存ネットワークが無くてもスマートフォンから接続することが出来ます。動画見ると分かりますが、表示レスポンス等、Webサーバーとしてはさすがに遅いです。ボタン操作によるLED制御は、非同期通信を使ってページ更新が発生しないようにしました。microSDカードモジュールのCSに接続microSDカードの接続・使い方はスイッチサイエンスさんの記事ESP-WROOM-02を使ったWi-Fi機能付き温度ロガーを作る(1)が参考になると思います。server.handleClient();}Webページとりあえず、トップ画面のみ掲載します。ファイルはSDカードに入れています。SDカードライブラリの制約でファイル名は8.3文字となります。スマートフォンに表示されているページや画像はSDカードに入れています。ページは2ページ構成です。簡単な説明スマートフォンからは、まずssidがesp8266のアクセスポイントに接続します。password);でやってます。アクセスしてLED制御画面を(index.htm)を表示します。生成したDNSサーバーがやってくれています。コンテンツの配信は下記のコードでやっています。handleLED);です。LED消灯のアクセスでやっています。