ライン

I/O機器制御にも対応 Raspberry Pi PicoでBASICプログラミング MachiKania type P

ライン

2022年8月27日
最終更新日 2024年3月20日 ポリゴングラフィックを公開

 MachiKania type Pは、安価なRaspberry Pi Picoを利用してBASICプログラムを動作させることができる、オープンプラットフォームです。
 BASICプログラムは実行時に自動的にコンパイルされるので高速動作を実現しています。従来のMachiKania type ZやMachiKania type Mとも互換性があるため、過去のプログラムも簡単に動作させることができます。I/O機器制御にも対応しているので、組み込み用途にも適しています。ぜひ一度お試しください。

(2023.9.30) WiFi対応のRaspberry Pi Pico Wにも対応し、様々なネットワーク機能を利用できるようになりました。

PIC32MX版最上位モデルMachiKania type M」はこちら
MachiKania type Z」はこちら

トップ画像


MachiKania type Pとは

 MachiKaniaシリーズはKM-BASICの作者Katsumi氏と共同開発したBASICマイコンシステムです。
 MachiKania type Pでは以下のようなことができます。
 ・BASICコンパイラによりBASICプログラムを高速動作させることができます。
 ・ハードウェアもソフトウェアも公開されているので、全て自分で製作することができます。
 ・MMCやSDカードにプログラムやデータを保存したり、パソコンとやり取りしたりできます。
 ・320×240ドットのカラーグラフィック液晶画面に自由に描画が可能です。
 ・多数の入出力ポートを備え、BASICから外部接続機器の制御ができます。
 ・割り込みやタイマーの利用が可能なため、リアルタイムな機器制御が可能です。
 ・32ビット単精度の浮動小数点演算をBASICでサポートし、各種の数学関数が使えます。
 ・構造化プログラミングに対応しており、GOTO文を使わないプログラムが作れます。
 ・オブジェクト指向プログラミングが可能です。
 ・簡単に使える様々なライブラリを用意しています。ライブラリはBASICで記述し、ユーザによる追加も可能です。
 ・従来のMachiKaniaシリーズとBASICの互換性があるので、従来プログラムを簡単に動作させることができます。
 ・PCにUSB接続してプログラムを更新したり(Ver1.10以降)、USBキーボードを接続して直接プログラムを作成することが可能です(Ver1.20以降)
 ・WiFi接続によるネットワーク対応プログラムを作成できます(Ver1.30以降、Raspberry Pi Pico W利用時)

レイトレーシング

I/O誌1986年7月号(吉森昌弘氏作)から移植

写真表示

SDカードの写真ファイルを表示

温湿度気圧ロガー

温湿度・気圧センサをつなぎ気象ロガーを作成

波紋表示

水面の波を計算で描画


MachiKania type Pの作り方

 以下の手順で製作します。
 1. ハードウェアの製作
 2. SDカードに必要ファイルをコピー
 3. Raspberry Pi Picoにシステムプログラムの書き込み
 オレンジピコショップで独自の基板と部品キットがあります。液晶ゲームキーボードは別売です。
 その他関連部品
注意 キットに付属のRaspberry Pi Pico互換ボード YD-RP2040ではUSBキーボード接続ができません。USBキーボードを利用する場合はRaspberry Pi Picoボードを別途ご用意ください。なお、基板上のUSB-KBコネクタ端子(タイプA)は使用できません。キーボードはRaspberry Pi PicoのUSB端子(マイクロB)に接続してください。
 WiFi接続機能を利用する場合Raspberry Pi Pico Wボードをご用意ください。

(1)ハードウェアの製作

 MachiKaniaシリーズは回路図、ソースプログラムとも公開されたオープンなシステムです。回路図を参考にご自身で基板やブレッドボードなどで製作するか、上述のオレンジピコショップ版をご利用ください。


液晶について
 利用可能な液晶ディスプレイは、解像度320x240ドット、コントローラがILI9341でSPI接続のものとなります。
 参考 本ページ掲載写真の使用品はこちらです。


電源について
 Raspberry Pi Picoの基板には電源回路が搭載されており、以下のいずれかの方法で給電が可能です。

 USB端子から給電
  Raspberry Pi Pico基板上のマイクロUSB端子にスマートフォン充電用ACアダプタなどで5V給電

 VSYS端子から給電
  VSYS端子(39番ピン)に1.8V〜5.5Vを加えることで内蔵DC-DCコンバーターが電源供給

 VBUS端子から給電
  USBコネクタにUSBキーボードを接続する場合、VBUS端子(40番ピン)に5.0Vを加えることでUSBキーボードおよび内蔵DC-DCコンバーターに電源を供給。PCとUSBケーブルで接続する際には電源オフすること

 いずれの場合にも3V3(OUT)端子(36番ピン)から3.3Vの出力が得られますので、液晶ディスプレイや消費電力の小さい機器への電源供給に利用できます。消費電力の大きい外部機器を接続する場合は適宜別の電源をご用意ください。


ボタンについて
 操作用の上下左右とFIRE、STARTの6個のボタンは作例では外付け基板に配置し、ケーブル接続していますが、液晶含む本体基板上に配置することも可能です。液晶の縦横変更で上下左右の向きが変わりますが、後述の設定ファイルにより液晶の向きに合わせボタンの縦横を自動で入れ替えることができます。

製作例

製作例 (クリックで拡大)

回路図

回路図 (クリックで拡大)


部品表
Raspberry Pi Pico本体。WiFi接続する場合Raspberry Pi Pico W
グラフィック液晶ディスプレイILI9341搭載QVGA(320x240)でSPI接続のもの
SDカードスロット液晶ディスプレイ背面に搭載のものでも可
タクトスイッチ上下左右、FIRE、START用計6個
リセット用1個
抵抗10KΩ x1(PULL UP用)
1KΩ x1(ブザー用)
コンデンサ積層セラミック 0.1μF x1(パスコン用)
ブザー圧電スピーカなど自動発振しないもの
電源5V ACアダプタなど(USB端子からの給電も可)

その他必要なもの
パソコンRaspberry Pi Picoへの書き込みやプログラム作成に必要
MMCまたはSDカード容量は1GBもあれば十分
SDカードリーダライタパソコンで読み書きできるもの
USBケーブルRaspberry Pi Picoとパソコンを接続ために必要。充電専用ではないマイクロUSB端子のもの
USBキーボードVer1.20以降でUSBキーボード接続版を利用する場合のみ
USB On-The-Go変換アダプタVer1.20以降でUSBキーボードを利用する場合必要
WiFiルータVer1.30以降でRaspberry Pi Pico Wでネットワーク接続する場合


(2)SDカードに必要ファイルをコピー

 空のSDカードに以下のファイルをパソコンからコピーしてください。
 ・LIBディレクトリ
 ・MACHIKAP.INI
 ・その他実行したいBASICソースプログラム
  およびサンプル画像ファイル

 MACHIKAP.INIファイルは起動時の設定を行うファイルです(詳細は後述)。
 LIBディレクトリはBASICプログラムから利用可能なクラスライブラリ集です。

SDカードにファイルコピー

SDカードにファイルコピー

(3)Raspberry Pi Picoにシステムプログラムの書き込み

 Raspberry Pi Pico基板上の白いボタンを押しながら、パソコンのUSB端子とRaspberry Pi PicoのマイクロUSB端子をケーブルで接続します。(基板に直接電源供給する機能がある場合はオフの状態で行ってください。)
 液晶画面が白く光ればボタンから手を離します。その後パソコン画面上にリムーバブルメモリのウィンドウがRPI-RP2ドライブとして表示されるので、ダウンロードしたphyllosoma.uf2ファイルをドラッグアンドドロップでコピーします。コピーが終わると自動的にリムーバブルメモリのウィンドウが消え、MachiKania type Pの液晶に先ほどコピーしたカード上のファイル選択画面が表示されます。
 パソコン画面上にリムーバブルメモリのウィンドウが表示されない場合、ケーブルが充電専用のものでないか確認してください。
 コピー完了後も液晶画面が正常表示されない場合は、組み立てに問題がないか確認してください。

 (2023.1.28追加) USBキーボードを接続する場合は、phyllosoma_kb.uf2ファイルをドラッグアンドドロップしてください。最初はキーボードが接続されていないため、キーボードが見つからないというメッセージの後ファイル選択画面が表示されますが、ケーブルを外してUSBキーボードを接続し、電源オンすることでエディタ画面が表示されます。

Raspberry Pi Pico書き込み用ボタン

ボタン押しながらUSB接続


ダウンロード

 ここまでに紹介したシステムに関するファイルをダウンロードできます。

Download
(2024.2.17)
動作に必要なファイルとサンプルプログラム、ライブラリ、ドキュメント一式
[pico_ili9341]
および
[pico_w_ili9341]
ディレクトリ

Raspberry Pi Pico WのWiFi機能を利用する場合、pico_ili9341_wディレクトリのものを使用
phyllosoma.uf2MachiKania type P BASICシステムの実行ファイル本体。Raspberry Pi Picoをパソコンに接続して書き込む。PC connect機能対応によりパソコンからBASICプログラムを書き込み可能
phyllosoma_kb.uf2USBキーボードが利用可能なMachiKania type P BASICシステムの実行ファイル本体。Raspberry Pi Picoをパソコンに接続して書き込む。内蔵エディタとUSBキーボードでプログラム作成と実行が可能
[embed]ディレクトリソースファイル埋め込みツール関連。自動実行プログラムについて参照
MACHIKAP.INIMachiKania type P BASICシステムの設定ファイル。SDカードのルートにコピーする
[samples]ディレクトリBASICサンプルプログラム。SDカードのルートにコピーする(ルート以外も可)
[LIB]ディレクトリBASICで利用可能な各種クラスファイル集。LIBディレクトリをSDカードのルートにコピーして利用。各クラスの使用方法はそれぞれのディレクトリのhelp.txtファイルを参照
[documents]ディレクトリドキュメント類
[pcconnect]ディレクトリUSB接続したPCからBASICプログラムを更新するツール。PC connect機能について参照
Download
(2024.2.17)
ILI9488搭載LCDやSeeed XIAO RP2040でUART機能を使用するための実行ファイル集。詳細はreadme参照
Github自分でビルドする場合に必要なソースファイルなど(Githubにジャンプ)

 (2022.8.27)初版公開(Ver1.00)。
 (2022.10.1)PC connect機能に対応したVer1.10公開。サンプルプログラムに立体迷路、スタートレック追加。クラスライブラリにWS2812B追加。
 (2023.1.28)USBキーボード接続に対応したVer1.20公開。BASICバージョンKM-1502。C言語で作成したHEXファイルの実行にも対応。
 (2023.9.30)Raspberry Pi Pico WのWiFi接続機能に対応したVer1.30公開。BASICバージョンKM-1503。ILI9488搭載LCDやSeeed XIAO RP2040対応版も公開。
 (2023.10.28)浮動小数点表示時の不具合修正とEmbed化時のファイル対応を強化したVer1.31に更新。
 (2024.2.17)ファイル関連命令の追加とファイル選択画面を強化したVer1.40を公開。BASICバージョンKM-1505。


使い方

MachiKania type P BASICシステム

 MachiKania type P BASICシステムの使い方はとてもシンプルです。電源を入れるとSDカード上のファイル選択画面が液晶に表示されるので、上下左右ボタンで実行したいBASICプログラムを選択し、FIREボタンを押すと自動的にコンパイルされ実行されます。
 また、STARTボタンを押すと選択したBASICのソースプログラムが表示され、下向きボタンでスクロールすることができます。このときもFIREボタンを押すと実行でき、STARTボタンを押すと元の画面に戻ります。
 ファイル選択画面でSTARTボタンをしばらく押し続けると、液晶の縦横が変更となります。プログラム実行時もWIDTH命令による指定がなければ、このときの向きで実行されます。
 Ver1.40以降ではSTARTボタンの長押しでファイルのサイズと更新日時表示切り替えも行われます。また、FIREボタンの長押しでファイルの表示順の切り替えを行います。MACHIKAP.INIファイルで初期状態の設定が可能です。(2024.1.7)

 MachiKania type Pに搭載のBASICシステムは、Katsumi氏作成の構造化プログラミングに対応したBASICコンパイラ KM-1500(KM-BASIC)です。
 BASICのソースプログラムはパソコン等で作成し、SDカードに保存してMachiKania type Pで実行します。利用可能なファイル名は英数8文字以内+「.BAS」となります。大文字小文字の区別はありません。
 KM-BASICの使い方詳細は、こちらの資料を参考にしてください。

入門MachiKania


(2023.1.28追加、Ver1.20以降で対応)
 C言語で作成したプログラムのHEXファイルを選択して実行する機能を追加しました。HEXファイルの作成には専用のリンカースクリプトを使用してビルドする必要があります。詳細はこちらをご参照ください。

  サンプルプログラム
   パックマン テトリス VELUDDA

ファイル選択画面

上下左右ボタンでファイル選択し、FIREボタンで実行


ファイル選択画面2
Ver1.40以降では更新日時やファイルサイズも表示可能
FIREボタン長押しで並び順を変更


ソース表示
STARTボタンでソース表示


縦横変更
STARTボタン長押しで液晶の縦横変更
Ver1.40以降ではファイル更新日時の表示/非表示も切り替え



USBキーボード接続

(2023.1.28追加、Ver1.20以降で対応)
 Ver1.20からUSBキーボードが利用できるようになりました。これにより、PCなどを使用せずMachiKania type Pのみでプログラムを作成し、SDカードに保存や実行ができるようになりました。また、BASICのプログラムからもキー読み取りができるようになりました。
 USBキーボードを利用する場合、専用の実行ファイルをRaspberry Pi Picoに書き込む必要があります。実行ファイル名は「phyllosoma_kb.uf2」です。従来の「phyllosoma.uf2」と同様の方法で書き込みを行ってください。
 USBキーボードはRaspberry Pi PicoのマイクロUSBコネクタに、USB On-The-Go(USB OTG)変換ケーブル(変換アダプタ)を介して接続します。また、Raspberry Pi PicoのVBUSピン(40ピン)に+5Vの電源を供給する必要があります。
 【注意】 Raspberry Pi Pico互換ボードでVBUS端子がない場合、USBキーボードは利用できません(YD-RP2040など)。純正Raspberry Pi Picoをご用意ください。
 またUSBキーボードの種類によっては認識しないものもあります。その場合は別のキーボードをお試しください。

 USBキーボードを接続した状態で起動すると、エディタ画面が起動します。ここでBASICのプログラムを入力し、F4キーを押すことでコンパイルと実行ができます。実行が終了すると再びエディタ画面に戻ります。作成したプログラムは必要であればF2キーでSDカードへの保存を行ってください。なお、プログラム実行時に一時ファイルとしてBASICプログラムは保存され、プログラム終了時に一時ファイルは削除されます。何らかの理由でプログラム終了しないままシステムを終了すると、次回起動時にこの一時ファイルが読み込まれますので、必要に応じて名前を付けて保存してください。
 エディタ上で使用できる特殊キーは右表の通りです。Shift+矢印キーで範囲選択しコピー/ペーストする機能もあります。ただしコピーできるのは1画面に収まる範囲内に限定です。
 実行中のBASICプログラムはEND命令やプログラムの最終行に到達することで実行終了となりますが、プログラム実行中に「Pause」キーを押すことで強制終了が可能です。ただし、実行中の内容により効かない場合があります。
 USBキーボード接続版でキーボードを接続せずに起動すると、ボタンによるファイル選択画面が起動します。また、キーボードの種類によっては電源オン時やリセット時にUSBキーボードが認識されない場合があり、この場合もボタンによるファイル選択画面が起動しますが、何度か電源オンやリセットを繰り返すことでキーボードが認識されることがあります。ただし、キーボードの種類によっては全く認識されないものもありますので、その場合は別のキーボードをご用意ください。

USBキーボード接続

USBキーボード接続

エディタ画面
エディタ画面

エディタ使用キー一覧
エディタ使用キー一覧



終了方法

 使用終了時はそのまま電源をオフにして問題ありません。また、別のプログラムを実行したいときはリセットボタンでプログラム選択画面に戻ってください。プログラム終了後(最後まで実行したときやEND命令を実行したとき)にSTARTボタンを押すことでソフトウェアリセットすることもできます。
 USBキーボード接続時にエディタ画面からプログラム実行した場合、END命令や「Pause」キーでプログラム終了すると再びエディタ画面に戻ります。必要に応じてSDカードにファイルを保存してから、電源オフしてください。

ペグソリテア

ペグソリテアゲーム



外部接続端子について

 MachiKania type Pでは16個の汎用入出力ポートが使用可能で、bit0〜bit15と番号を割り振っています。BASICの命令から1ビット単位、8ビット単位、16ビット単位で入出力が可能です。bit10以降はRaspberry Pi PicoのGPIO番号と異なりますのでご注意ください。
 また、bit8〜bit13の6ポートは操作ボタンと共有、bit15は音声出力と共有しているため、組み込み用途などでボタンや音声出力をなくしたシステムの場合を除き、汎用的に使用可能なポートは9個となります。
 これらのポートはBASICの命令から3チャンネルのPWM出力やI2Cインターフェイス、シリアル入出力(UART)、3チャンネルのアナログ入力(AD変換)としても利用可能です。右図のようにポートが割り振られています。
 このほかにSPIインターフェイス専用端子があります。SDカードアクセスと共有のため、CS(チップセレクト)による使い分けを行う必要があります。CS端子は標準ではbit3を使用しますが、SPI命令使用時に個別に指定することも可能です。




設定ファイルについて (2024.2.17更新)

 MachiKania type P BASICシステムでは、SDカードのルートディレクトリに「MACHIKAP.INI」というファイルがあると、起動時にその内容に従って初期設定を行います。行頭に#記号を付けるとコメントアウトされます。

MACHIKAP.INIファイル設定項目
項目名設定内容
AUTOEXEC自動起動ファイルの指定
HORIZONTAL
LCD0TURN
液晶画面横長で起動
VERTICAL
LCD270TURN
液晶画面縦長で起動
LCD180TURN液晶画面横長(上下反対)で起動
LCD90TURN液晶画面縦長(上下反対)で起動
ROTATEBUTTONS画面回転時に上下左右ボタンを入れ替える
NOROTATEBUTTONS画面回転時に上下左右ボタンを入れ替えない
USBSERIALONUSB端子にシリアルデータを出力する
USBSERIALOFFUSB端子にシリアルデータを出力しない
LCDOUTON液晶への出力する
LCDOUTOFF液晶への出力しない
DEBUGWAIT2500デバッグモード起動時に2.5秒待つ
NODEBUGWAIT2500デバッグモード起動時のウェイトなし
LOOPATENDBASICプログラム終了後STARTボタンでリセットする
RESETATENDBASICプログラム終了後すぐリセットする
STARTWAITリセット後の待ち時間(ミリ秒、500以上)
WAIT4KEYBOARDUSBキーボード認識の待ち時間(ミリ秒)
106KEY日本語キーボードに設定
101KEYUSキーボードに設定
NUMLOCK起動時Num Lockキーオン
CAPSLOCK起動時Caps Lockキーオン
SCRLLOCK起動時Scroll Lockキーオン
SPIMISO
SPIMOSI
SPICLK
SPI関連命令で使用するGPIO番号を指定
RTCFILESDカード書き込み時にRTCの日付、時刻を書き込み
TIMEZONEタイムゾーンを指定
USEWIFIWiFi機能を利用
WIFICOUNTRYWiFi接続の国コード(JPまたはUS)
WIFISSID
WIFIPASSWD
接続先WiFiのSSIDとパスワードを指定
HOSTNAMEネットワークホスト名を指定
NTPSERVERNTPサーバを指定
INITIALNTP起動時にNTPサーバに接続しRTCを初期化
SHOWTIMESTAMPファイル選択画面で更新日付等を表示
FILESORTBYファイル選択画面での表示順初期値設定


MACHIKAP.INIファイルのサンプル



PC connect機能について

(2022.10.1追加、Ver1.10以降で対応)
 MachiKania type PをPCにUSB接続しておくことで、PC上からBASICのソースプログラムを新規作成、更新することができます。
 PC上でPC connectツールを立ち上げた状態でMachiKania type Pをリセットすると、指定したディレクトリのファイルがMachiKania type P上のSDカードに転送されます。転送後は通常通りファイル選択画面が表示されますので、更新されたファイルを選択し実行できます。
 この機能によりBASICプログラムの開発が大変容易になります。エディタは普段使い慣れたものを利用することができ、
   エディタでプログラム修正
   上書き保存
   MachiKania type Pのリセット
   プログラムを選択して実行
を繰り返してBASICプログラムの開発を進めることができるようになります。
 使い方は、まずPC上の適当なディレクトリにPC connect関連ファイル(Windows版ではa.exe, cygwin1.dll, connect.ini)を保存し、その配下にmachikapディレクトリを作成します。このmachikapディレクトリの中に転送したいファイルを置き、PC connectを起動、MachiKania type PをUSBで接続(接続済みの場合リセット)すると、ファイルがSDカードに転送されます。ファイルは複数あっても構いません。
 利用する際、最初にMachiKania type Pの接続先をconnect.iniファイルで指定する必要がありますが、右図の方法で簡単に見つけることができます。USBの接続場所を変えた場合なども同様にして指定を変更してください。また、SDカード上のMACHIKAP.INIファイルで起動時間を少し長めに設定しないと認識できない場合もあります(STARTWAIT=700などに変更)。
 MachiKania type PをリセットしてもPC上で認識されなくなった場合、ツール一度終了し起動し直してください。
 PC connect機能の使い方の詳細はこちらのサイトをご参照ください。
(2023.1.28)USBキーボード接続版(実行ファイル:phyllosma_kb.uf2)ではPC connect機能は利用できません。

PCからの接続先の見つけ方

pcconnect



自動実行プログラムについて

 MachiKania type Pでは起動時に自動的に特定のBASICプログラムを実行する機能があります。
 <方法1>
 自動起動したいファイルをSDカードのルートディレクトリに「MACHIKAP.BAS」という名前で保存すると、システム起動時に自動的に読み込まれ実行されます。この名前は設定ファイルMACHIKAP.INIで変更することも可能です。
 <方法2>
 ツールを使うことでMachiKania type P BASICシステム自体に実行したいファイルや設定ファイルを埋め込むことができます。これにより、SDカードがなくても動作可能な組み込み用システムを実現することが可能となります。
 詳細はこちらのサイトをご参照ください。
 (2023.1.28)USBキーボード対応版についてはconvert_kb.phpファイルを起動してphyllosoma_kb.uf2ファイルに組み込む形となります。出力されるファイルはresult.uf2で同様です。
 (2023.9.30)外部端子の少ないRP2040搭載小型基板でも使いやすいように、SPI関連命令で使用するGPIO番号を設定ファイルで指定できるようになりました。またSeeed XIAO RP2040でUARTが使える個別のuf2ファイルを用意しました。

自動実行

SDカードやボタンがない最小システム上で
埋め込みBASICプログラムを実行しSPI接続LEDマトリクスに表示


XIAO RP2040
Seeed XIAO RP2040にBASICプログラムを組み込んで実行した例



WiFi接続対応

(2023.9.30追加、Ver1.30以降で対応)
 WiFi接続に対応したRaspberry Pi Pico Wを使用すると様々なネットワーク機能を利用することが可能となります。ピン互換があるので、同じ回路で単純に差し替えることができます。
 WiFi関連機能を利用するには、Raspberry Pi Pico Wへの専用実行ファイル(.uf2ファイル)の書き込みと、MACHIKAP.INIファイルへの項目追加を行います。設定項目の詳細はダウンロードしたMACHIKAP.INIファイルのコメントを参照ください。

 ネットワーク接続に関する基本的な命令や関数のほか、簡単に利用するためのクラスライブラリを用意しました。

<NTPクライアント機能>
 設定ファイルに記述追加することで起動時に指定の時刻サーバに自動接続し、チップ内蔵のリアルタイムクロック(RTC)を設定することができます。また、SDカード上のファイルのタイムスタンプ機能にも対応しました。

<TCP/TLSクライアント機能>
 HTTP、HTTPSサイトへの接続を簡単に行うWGETクラスにより、各種Webサービスを利用したアプリケーションの作成ができます。
 サンプルプログラム
 利用例
 ・世界の気象情報を取得して表示
 ・環境センサで取得した情報をサーバに送付

<TCPサーバ機能>
 簡易Webサーバ機能を提供するHTTPDクラスにより、PCやスマートフォンなどからMachiKania type Pに接続した機器を制御することができます。
 利用例
 ・PCからメッセージを送信し、MachiKania type Pに接続したLED表示器に表示 製作サンプル
 ・MachiKania type PのSDカード内のファイルをPCのブラウザ上で一覧表示しダウンロード プログラム例

WiFi関連設定

MACHIKAP.INIへの設定追加例


起動画面
WiFi接続有効時の起動画面、時刻サーバに接続


気象情報提供サービスから取得
WGETクラスを使用し気象情報提供サービスから取得


簡易Webサーバ
簡易WebサーバでブラウザにSDカード内ファイル表示とダウンロード



キャラクターコード表

 MachiKania BASICシステムのキャラクターコード表は右画面のようになっています。NEC製の往年の名機「PC-8001」とほぼ同じです。フォントについても参考にして作りました。
 グラフィック文字($80〜$9F、$E0〜)はキーボードから入力する機能がありませんが、この表を参考にしてCHR$関数を使うことで利用可能です。
 また、PCG(ユーザ定義文字)機能を使えば、全てのキャラクターのフォントパターンを自由に変更することができます。1キャラクターのサイズは8×8ドットです。ゲームのオリジナルキャラクター作りにも応用できます。

キャラクターコード表

キャラクターコード表

ILI9488搭載液晶対応

(2023.9.30追加、Ver1.30以降で対応)
 MachiKania type Pの表示デバイスは解像度320x240ドットのILI9341搭載液晶ですが、480x320ドット表示できるILI9488搭載液晶も利用できるようになりました。利用するにはダウンロードしたZIPファイルから、ILI9488用の実行ファイル(uf2ファイル)を書き込んでください。BASIC命令もそのまま利用可能です。なお表示ドット数が2倍となり、またILI9488の仕様上1ドット当たりの転送ビット数が増えるため、表示速度がILI9341の液晶に比べて遅くなります。

320x480ピクセルLCD

解像度2倍の480x320ドットILI9488搭載LCDでリスト表示





MachiKania type P使用サンプル

 MachiKania type Pを使ったサンプルを紹介します。ダウンロードしたソースプログラムは、SDカードにそのままコピーしてご利用いただけます。
 今後随時増やしていく予定です。

円周率1000桁計算

 クラスライブラリにある長倍数演算ライブラリ「BIGNUM」クラスを使用して、円周率を1000桁計算します。マチンの公式に基づいた計算をしています。
 SDカードのLIBディレクトリ配下にBIGNUMディレクトリがあることを確認してください。

ダウンロード PI.BAS

円周率1000桁




LEDマトリクス表示

 LEDコントローラMAX7219搭載のLEDマトリクスを8連結した表示器を作成し、SPI接続してBASICから制御しました。
 SPI関連命令があるのでで簡単に制御することができます。4連結の場合はSPIWRITE命令で8個並んでいる引数を4個にしてください。
 <接続>
  VCC -- +5V(外部電源、3.3Vでも動作します)
  GND -- GND
  DIN  -- GP19 SD-DI(MOSI) / SPI TX(25番pin)
  CS  -- GP3 I/O bit3 / SPI CS(5番pin)
  CLK -- GP18 SD-SCLK / SCK(24番pin)

ダウンロード MAX7219.BAS

SPI接続LEDマトリクス




I2Cサンプル

 MachiKania type PのKM-BASICにはI2Cのマスターとしての機能があります。
 I2C接続の温湿度センサーAM2320と8×2キャラクター液晶AQM0802を同時に接続し、キャラクター液晶画面に温度と湿度を表示します。I2C接続の場合、プルアップ抵抗が必ず必要ですが、AQM0802のキット基板の抵抗(10KΩ)を利用する場合は省略可能です。(特にこの液晶はプルアップ抵抗値が低いと正しく動作しません。)
 I2Cは各装置に固有のアドレスがあるため、複数の周辺装置に対して2本の線(SCLとSDA)で通信することができます。
 MachiKania type PではSCL(クロック線)をIObit7、SDA(データ線)をIObit6に接続することで、BASICでI2C機器と通信することができます。簡単な使い方は下記でサンプルプログラムをダウンロードして参照ください。
 Raspberry Pi PicoのI2Cは通信時にアドレスのほか、必ず1バイト以上のデータが必要です。プログラム13行目のI2CWRITE命令でAM2320の起動を行っていますが、アドレス$5Cの後ろにダミーで0を1つ付けています。このとき実際にはAM2320はNACKを返し、ダミーデータは送られません。

ダウンロード I2CSAMPP.BAS

半角カナを使用しているので、表示すると文字化けする可能性があります。リンク先をファイルに保存してください。

AM2320/AQM0802
回路図
接続図




WiFiチップ接続

WiFi接続可能なRaspberry Pi Pico Wが発売される以前に行った実験です。
 トランジスタ技術2016年9月号を参考に、WiFi機能搭載マイコンESP WROOM-02をシリアル(UART)接続しました。WiFiアクセスポイント経由で5秒おきに時刻サーバから日付と時刻を読み出して画面表示します。
 ソースプログラムは以前MachiKania type M用に作成したものそのままです。
 118行目のAT+CWJAPコマンド行の「ssid」「password」は実際のアクセスポイントのものに変更してください。  接続はWROOM-02のTxDをMachiKania type PのUART RX(GP5/7番ピン)、RxDをUART TX(GP4/6番ピン)に直結してください。

ダウンロード WROOM-02.BAS

接続図

WiFi接続

画面表示




温湿度気圧ロガー

 温湿度センサーAM2320および気圧センサーBMP280を利用した実用的な温湿度気圧ロガーです。
 接続はどちらもI2Cで行い、一定時間ごとに測定した結果をグラフ描画します。また同時にファイルにも記録を行います。(TPHLOG.TXT)
 測定間隔はソースプログラム9行目の変数Wの値で設定します。(60分のW秒間隔)
 縦軸の目盛りは温度と気圧は自動的に適切な目盛りを計算して描画します。湿度は0%〜100%固定です。また最新の測定結果は画面上部にテキスト表示もします。グラフが画面右端まで到達すると、スクロールして左端の描画は消えますが、ファイルには記録が残ります。

ダウンロード TPHLOGER.BAS

半角カナを使用しているので、表示すると文字化けする可能性があります。リンク先をファイルに保存してください。

接続図
BMP280のピン配置は製品によって異なるので注意

温湿度気圧ログ

温湿度気圧ログ




アナログ温度センサ

 アナログ出力タイプの温度センサLM61BIZの出力を内蔵ADコンバーターで読み取り、1秒おきに温度を画面表示するシンプルなサンプルです。
 MachiKania type PではANALOG関数で、Raspberry Pi Picoの内蔵12ビットADコンバーターを簡単に利用することができます。
 ANALOG関数の引数は内蔵ADコンバーターの番号で0〜3を指定可能です。戻り値は0〜4095となります。

ダウンロード LM61BIZP.BAS

接続
LM61BIZ -- MachiKania
  +Vs ---- VDD
  Vout ---- IO bit14/ADC1 (32番ピン)
  GND ---- GND
TO-92パッケージでは正面から見て1番左が+Vs端子です。

アナログ温度センサ

アナログ温度センサ




LEDテープ制御 (2022.10.2追加)

 近年、街中でもよく見かけるフルカラーのLEDテープをMachiKania type Pで制御するサンプルです。
 Worldsemi社のWS2812Bを数珠つなぎに接続したNeoPixelとも呼ばれるLEDテープは、LED1つずつにマイコンを内蔵しており、データ線にかかる信号のパルス幅で1と0を区別して24ビット分の色情報を受け取ります。データを受け取った次からは後ろのマイコンに信号を送ります。
 MachiKania type Pに標準で提供しているWS2812Bクラスライブラリを使うことで、簡単にこのLEDテープを制御することができます。サンプルプログラムでは色相環を表示し回転させています。LEDの数は変数Nで設定変更できます。
 利用する際には、SDカードのLIBディレクトリ配下に「WS2812B」ディレクトリがあることを確認してください。

ダウンロード NEOPIX-1.BAS

NeoPixel
NeoPixel




LEDテープパックマン (2022.10.9追加)

 LEDテープを使ってパックマンのデモ画面っぽいものを表現してみました。
 利用する際には、SDカードのLIBディレクトリ配下に「WS2812B」ディレクトリがあることを確認してください。

ダウンロード LEDPACMA.BAS


NeoPixel




LEDディスプレイ制御 (2022.10.23追加)

 最近街中でよく見かけるLEDディスプレイのパネルを制御しました。実験には64x32ドットのマトリクスのものを使用しています。HUB75と呼ばれるインターフェイスで詳細はこちらの実験記事を参照ください。RGB各2ビット(消灯含め4階調)で計64色を表現できるようにしました。サンプルプログラムでは、色のついた長方形および円を高速に描画しながら割り込みで常時信号出力を行っています。
 高速処理が必要なため、信号出力は直接レジスタを制御しています。高速I/O処理の参考にしてください。  HUB75Eと呼ばれる縦のドット数が倍のパネルにも簡単に変更できるようにプログラムは書かれています。ただし、チラつきをなくすには割り込み処理間隔を縮める必要があり、画面の書き換え処理などを行う時間がほとんどなくなってしまいます。
 信号出力端子としてIO bit8〜13も使用しているため、上下左右、START、FIREのボタンを使用することができません。ボタンのない組み込み環境での使用を想定しています。プログラムの起動はファイル名を「MACHIKAP.BAS」として自動起動するように設定してください。通常環境で実験する場合はボタンを押さないよう気を付けてください。

ダウンロード HUB75-1.BAS

LEDディスプレイ
ボタンは押さないように注意
接続図
接続図




WiFi対応LEDメッセージボード (2023.9.30追加)

 Raspberry Pi Pico WのWiFi接続機能を利用して、MachiKania type Pに接続したLEDマトリクスにPCやスマートフォンから送信したメッセージを表示します。
 HTTPDクラスを利用してMachiKania type Pで簡易Webサーバを立ち上げ、SDカード内の特定のディレクトリに保存したHTMLファイル(拡張子は.HTM)を配信し、フォームに入力されたパラメータ取得します。
 LEDマトリクスはMAX7219搭載8x8ドットのものを8個連結したものを使用し、右記のように接続します。
 動作にはまずMachiKania type PのSDカードに下記2ファイルを保存し、HTTPLED.BASを実行しておきます。その後、PCやスマートフォンなどから「http://xxx.xxx.xxx.xxx/TEXTFORM.HTM」にアクセスしフォームにメッセージ(半角英数字)を入力して送信します。(xxx.xxx.xxx.xxxはMachiKania type PのIPアドレス)

ダウンロード
 HTTPLED.BAS
 TEXTFORM.HTM 右クリックで保存し、SDカードの/HTTPROOTディレクトリにコピー

WiFi対応LEDメッセージボード

 <LEDマトリクスの接続>
  VCC -- +5V(外部電源、3.3Vでも動作します)
  GND -- GND
  DIN  -- GP19 SD-DI(MOSI) / SPI TX(25番pin)
  CS  -- GP3 I/O bit3 / SPI CS(5番pin)
  CLK -- GP18 SD-SCLK / SCK(24番pin)




IoTデータ可視化サービス利用 (2023.10.7追加)

 I2C接続のデジタル温湿度センサDHT20を読み取り、Raspberry Pi Pico WのWiFi機能を用いてIoTデータ可視化サービスAmbientにデータ送信して、PCのブラウザに温湿度の推移のグラフ表示する実験を行いました。
 Ambientは無料で利用可能なWebサービスです。利用にはユーザ登録が必要です。登録ができたらチャネルを作成してください。チャネル作成するとチャネルIDとライトキー、リードキーが生成されます。このIDとキーを用いて、サーバーのチャネルにJSON形式でデータを送信することで、サーバにデータが保存されます。PC等のブラウザでそのチャネルにアクセスすると動的にグラフを表示させることが可能となります。

ダウンロード DHT20.BAS

 本プログラムでは1分ごとにDHT20から読み出した温度と湿度のデータをAmbientの指定されたチャネルに送信しています。この時間間隔はRTCで時刻を読み取って判断しているので、システム起動時のNTPへの接続を有効とするよう、INIファイルの設定を行ってください。
 xxxxxx....部分はチャンネルに対して指定されたライトキーに、yyyyy部分はチャネルIDに書き換えてください。
 また、WGETクラスライブラリを使用していますので、SDカードにWGET.BASを保存しておいてください。

 このサンプルでは温度と湿度の2つの値の推移を折れ線グラフで表示させていますが、Ambientのサービスではデータは8種類まで送信可能で、様々な種類のグラフ表示を行うことが可能なようです。
 自宅から離れた場所の環境管理や、留守中の自宅の状況監視など実用的な利用もできると思います。

DHT20接続図
接続図

DHT20接続
Ambient画面
Ambientサービスにアクセスしブラウザでグラフ表示




温湿度・気圧センサBME280 (2023.12.23追加)

 秋月電子の「BME280使用 温湿度・気圧センサモジュールキットAE-BME280」を利用する実験を行いました。
 I2C接続するため、J1/J2/J3をはんだでジャンパ接続します。またはJ2/J3をジャンパ接続しない場合SDI、SCKを4.7KΩ程度でPULL UPしてください。
 実験プログラムでは約10秒ごとに、気圧、温度、湿度を浮動小数点数でテキスト表示します。BME280のセンサ読み取り値から求めたい気圧、温度、湿度への変換はやや複雑な計算が必要ですので、参考にしてください。これを応用することで液晶画面へのグラフ表示やCSVファイルでの保存、ネットワークサービスへの送信なども可能となります。

ダウンロード BME280.BAS

※本プログラムを実行する際には、MachiKania type PシステムVer1.31(KM-1504)以降をご利用ください。

AE-BME280接続図
AE-BME280接続図

AE-BME280利用写真




ファイルマネージャ (2024.2.17追加)

 MachiKania type Pで利用可能なファイル管理ツールです。SDカード上のファイルに対してコピーや移動、名前変更、削除などが可能です。ディレクトリの新規作成、名前変更、移動、削除も行えます。
 キー操作は上下矢印キーで目的のファイルを選択しCtrl+Cでクリップボードにコピー、コピー先のディレクトリに移動した後Ctrl+Vでクリップボードから貼り付けというようにWindowsライクなものとなっています。ディレクトリを選択してEnterキーでサブディレクトリを表示、親ディレクトリに戻るにはF4キー(またはCtrl+上矢印)を押します。
 また、F3キーでファイル一覧の表示順をファイル名、更新日付、ファイルサイズそれぞれ昇順、降順に順次切り替えることができます。
 ファイル選択しEnterキーでファイルの中身をテキスト表示します。大きいファイル表示中に何かキーを押すとスクロールが一時停止します。また、Shift+Enterでファイルのバイナリ表示が可能です。このときも何かキーを押すことでスクロールが一時停止します。
 その他詳細なキー操作はF1キーで表示されるヘルプ画面をご確認ください。

ダウンロード FILEMAN.BAS

※本プログラムを実行する際には、MachiKania type PシステムVer1.40(KM-1505)以降をご利用ください。またUSBキーボードが必要です。

ファイルマネージャメイン画面
ファイルマネージャメイン画面

ヘルプ画面
ヘルプ画面




ポリゴングラフィック (2024.3.20追加)

 3Dグラフィックの一種、ポリゴンを使ってワイングラスを描画するプログラムを作成しました。
 以前ワイヤーフレーム用に作成した回転体のエッジデータから面情報を計算し、光の当たり具合から明るさに応じて色合いを変えています。また、表面と裏面のどちらが見えているかを区別し違う色で描画するようにしました。
 上下左右ボタンで回転させることができます。奥側から順番に描画するよう工夫したことで隠れた面は上書きされ最終的に見えている面だけが残ります。

ダウンロード POLYGON.BAS

ポリゴングラフィック
ポリゴングラフィック




パックマン

 BASICプログラムではありませんが、MachiKania type P本体で動作するパックマンです。以前こちらで作成したものを、せっかくなのでI/Oポート番号などMachiKania type Pに合わせて作成し直しました。
 MACHIKAP.INIファイルの読み込みも行うので、ボタンの回転指定と液晶の反転を行っている環境でも遊ぶことができます。
 Raspberry Pi Pico上の白いボタン(BOOTSEL)を押しながらUSBでパソコンに接続し、下記ZIPファイルのphyllosoma-pacman.uf2ファイルをRaspberry Pi Picoにドラッグ&ドラップすると自動的にゲームが始まります。
 MachiKania BASICシステムに戻る場合は、元のuf2ファイルを書き込んでください。
(2023.1.28追加) MachiKania type P BASICシステムのファイル選択画面で選択して実行できるpacman.hexを追加しました。この場合uf2ファイルの書き換えは不要です。Ver1.20以降で利用可能。


ダウンロード phyllosoma-pacman.zip

PACMAN

PACMAN




テトリス

 これもBASICプログラムではありませんが、以前作成したRaspberry Pi Picoの液晶接続環境で動作するテトリスを、I/Oポート番号などMachiKania type Pに合わせて作成し直しました。
 MACHIKAP.INIファイルの読み込みも行うので、ボタンの回転指定と液晶の反転を行っている環境でも遊ぶことができます。
 下記ZIPファイルの中にあるphyllosoma-pacman.uf2をRaspberry Pi Pico上の白いボタン(BOOTSEL)を押しながらUSBでパソコンに接続してRaspberry Pi Picoにドラッグ&ドラップすると自動的にゲームが始まります。MachiKania BASICシステムに戻る場合は、元のuf2ファイルを書き込んでください。
 また、tetris.hexファイルはMachiKania BASICシステムのファイル選択画面から実行可能です。(Ver1.20以降)この場合、RAM上で実行するので、リセットすると元のBASICシステムに戻ります。


ダウンロード phyllosoma-tetris.zip

テトリス
Pico互換ボードでも動作
テトリス




回転スクロールシューティングゲーム VELUDDA (2023.9.30追加)

 画面が回転スクロールするオリジナルのシューティングゲームです。元々PIC32MX用テレビゲームとして製作しましたが、Raspberry Pi Picoの液晶出力版も製作しました。ゲームの詳細はこちらを参照してください。
回転スクロールシューティングゲーム VELUDDA
MACHIKAP.INIファイルの読み込みも行うので、ボタンの回転指定と液晶の反転を行っている環境でも遊ぶことができます。
 下記ZIPファイルの中にあるveludda_pico.uf2をRaspberry Pi Pico上の白いボタン(BOOTSEL)を押しながらUSBでパソコンに接続してRaspberry Pi Picoにドラッグ&ドラップすると自動的にゲームが始まります。MachiKania BASICシステムに戻る場合は、元のuf2ファイルを書き込んでください。
 また、veludda.hexファイルはMachiKania BASICシステムのファイル選択画面から実行可能です。(Ver1.20以降)この場合、RAM上で実行するので、リセットすると元のBASICシステムに戻ります。


ダウンロード veludda_pico.zip

VELUDDA

VELUDDA




XEVIOUSもどき (2023.12.30追加)

 DOZAN氏による完成度の高いXEVIOUSもどきのMachiKania type Pのハードウェアそのままで動作するものが公開されました。使用する液晶はもちろんSPI接続したILI9341搭載のものです。
 液晶を縦置きにして画面いっぱい使用するものと横置きでプレイするものが公開されています。また音声出力が単純なポートのオンオフのNORMAL版と高音質のPWM版がありますが、PWM版はアンプを通さないと音が小さいので注意が必要です。
 MachiKaniaのBASICシステムは使っていないので、uf2ファイルを直接Raspberry Pi Picoに書き込んでください。SDカードはなくても動作しますが、起動時にSDカードのチェックを行い、MACHIKAP.INIのボタンの回転指定と液晶の反転指定に対応しているようです。

  ダウンロードはこちらから
例)VERTICAL → Normal → Xevious_lcd_9341.uf2

MachiKania type Pでゼビウス
液晶縦置き版
MachiKania type Pでゼビウス
液晶横置き版



Copyright (C) KenKen All Rights Reserved.