ライン

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

ライン

2022年8月27日
最終更新日 2022年10月23日 LEDディスプレイ制御サンプル追加

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

従来バージョン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の互換性があるので、従来プログラムを簡単に動作させることができます。

レイトレーシング

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

写真表示

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

温湿度気圧ロガー

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

波紋表示

水面の波を計算で描画


MachiKania type Pの作り方

 以下の手順で製作します。
 1. ハードウェアの製作
 2. SDカードに必要ファイルをコピー
 3. Raspberry Pi Picoにシステムプログラムの書き込み
 オレンジピコショップで独自の基板と部品キットがあります。液晶ゲームキーボードは別売です。
 その他関連部品

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

 MachiKaniaシリーズは回路図、ソースプログラムとも公開されたオープンなシステムです。プリント基板の作成・頒布も検討中ですが、現在のところ回路図を参考にご自身で基板やブレッドボードなどで製作してください。


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


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

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

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

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


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

製作例

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

回路図

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


部品表
Raspberry Pi Pico本体
グラフィック液晶ディスプレイ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端子のもの


(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の液晶に先ほどコピーしたカード上のファイル選択画面が表示されます。
 パソコン画面上にリムーバブルメモリのウィンドウが表示されない場合、ケーブルが充電専用のものでないか確認してください。
 コピー完了後も液晶画面が正常表示されない場合は、組み立てに問題がないか確認してください。

Raspberry Pi Pico書き込み用ボタン

ボタン押しながらUSB接続


ダウンロード

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

Download
(2022.10.1)
動作に必要なファイルとサンプルプログラム、ライブラリ、ドキュメント一式
phyllosoma.uf2MachiKania type P BASICシステムの実行ファイル本体。Raspberry Pi Picoをパソコンに接続して書き込む
MACHIKAP.INIMachiKania type P BASICシステムの設定ファイル。SDカードのルートにコピーする
「.BAS」ファイルBASICサンプルプログラム。SDカードのルートにコピーする(ルート以外も可)
LIBディレクトリBASICで利用可能な各種クラスファイル集。LIBディレクトリをSDカードのルートにコピーして利用。各クラスの使用方法はそれぞれのディレクトリのhelp.txtファイルを参照
documentsディレクトリドキュメント類
embedディレクトリソースファイル埋め込みツール関連。自動実行プログラムについて参照
pcconnectディレクトリUSB接続したPCからBASICプログラムを更新するツール。PC connect機能について参照
Github自分でビルドする場合に必要なソースファイルなど(Github)

 (2022.8.27)初版公開(Ver1.00)。
 (2022.10.1)PC connect機能に対応したVer1.10公開。サンプルプログラムに立体迷路、スタートレック追加。クラスライブラリにWS2812B追加。


使い方

MachiKania type P BASICシステム

 MachiKania type P BASICシステムの使い方はとてもシンプルです。電源を入れるとSDカード上のファイル選択画面が液晶に表示されるので、上下左右ボタンで実行したいBASICプログラムを選択し、FIREボタンを押すと自動的にコンパイルされ実行されます。
 また、STARTボタンを押すと選択したBASICのソースプログラムが表示され、下向きボタンでスクロールすることができます。このときもFIREボタンを押すと実行でき、STARTボタンを押すと元の画面に戻ります。
 ファイル選択画面でSTARTボタンをしばらく押し続けると、液晶の縦横が変更となります。プログラム実行時もWIDTH命令による指定がなければ、このときの向きで実行されます。

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

入門MachiKania


終了方法

 使用終了時はそのまま電源をオフにして問題ありません。また、別のプログラムを実行したいときはリセットボタンでプログラム選択画面に戻ってください。プログラム終了後(最後まで実行したときやEND命令を実行したとき)にSTARTボタンを押すことでソフトウェアリセットすることもできます。

ファイル選択画面

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


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


縦横変更
STARTボタン長押しで液晶の縦横変更

ペグソリテア
ペグソリテアゲーム



外部接続端子について

 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命令使用時に個別に指定することも可能です。




設定ファイルについて

 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以上)


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機能の使い方の詳細はこちらのサイトをご参照ください。

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

pcconnect



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

 MachiKania type Pでは起動時に自動的に特定のBASICプログラムを実行する機能があります。
 <方法1>
 自動起動したいファイルをSDカードのルートディレクトリに「MACHIKAP.BAS」という名前で保存すると、システム起動時に自動的に読み込まれ実行されます。この名前は設定ファイルMACHIKAP.INIで変更することも可能です。
 <方法2>
 ツールを使うことでMachiKania type P BASICシステム自体に実行したいファイルや設定ファイルを埋め込むことができます。これにより、SDカードがなくても動作可能な組み込み用システムを実現することが可能となります。
 詳細はこちらのサイトをご参照ください。

自動実行

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



キャラクターコード表

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

キャラクターコード表

キャラクターコード表



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チップ接続

 トランジスタ技術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ディスプレイ制御

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

ダウンロード HUB75-1.BAS

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




パックマン

 BASICプログラムではありませんが、MachiKania type P本体で動作するパックマンです。以前こちらで作成したものを、せっかくなのでI/Oポート番号などMachiKania type Pに合わせて作成し直しました。
 MACHIKAP.INIファイルの読み込みも行うので、ボタンの回転指定と液晶の反転を行っている環境でも遊ぶことができます。
 Raspberry Pi Pico上の白いボタン(BOOTSEL)を押しながらUSBでパソコンに接続し、下記ZIPファイルのphyllosoma-pacman.uf2ファイルをRaspberry Pi Picoにドラッグ&ドラップすると自動的にゲームが始まります。


ダウンロード phyllosoma-pacman.zip

PACMAN

PACMAN



Copyright (C) KenKen All Rights Reserved.