作品タイトル:GR-CITRUSでMicropython
表示名:ksekimoto
コンセプト・作品説明 |
---|
Micropythonは、今流行りのMicrobitやESP32ベースのM5Stackで使われており、またAdafruitの様々なボード向けにはCircuitPythonという派生の環境が生まれて広く、利用されるようになってきました。 「GR-CITRUS」向けにMicropythonを移植しましたので、簡単に使い方をご紹介したいと思います。 移植した機能は、STM32で実装されたpyboardにほぼ準拠していますが、一部未実装の機能(CANやWDT)、あるいはモジュールやクラスのパラメータが一部異なります。 |
用意するもの
Windows 10が動作するPC
ターミナルソフトウェア(ここではTera Termを使用します。)
GR-CITRUS (またはGR-SAKURA)
WA-MIKANボード (SD-CARDを使用)
MicroPythonの実行ファイル
Githubよりバイナリファイルをダウンロードします。
その他ガジェット
このドキュメントでは、以下のガジェットのサンプルを取り上げます。
サンプル1: MAX71298x8 LED Matrixボード
Aitendo: 8x8マトリックスモジュール(8x8) [M7SEGX1R-7219]
秋月電子:MAX7219使用赤色ドットマトリクスLEDモジュール[SKU-20-111-978]
サンプル2: NeoPixelRing LED12個
スイッチサイエンス: NeoPixel Ring - 12連フルカラーシリアルLED
サンプル3: SPI LCD240x320 (ILI9340コントローラ)
2.2インチ液晶モジュール(SPI) [M022C9340SPI]
インストール方法
右記のURLよりGR-CITRUS用のMicroPythonバイナリファイル(MPY-GR_CITRUS_DD.binまたはMPY-GR_SAKURA_DD.bin) をダウンロードします。
https://github.com/ksekimoto/micropython/raw/rx/rx_releases/gr_citrus/latest/MPY_GR_CITRUS_DD.bin
GR-CITRUSのUSBコネクタとWindow 10 PCのUSBコネクタをUSBケーブルで接続し、Resetボタンを押すと、書き込みモードになります。
そこで、バイナリファイルをGR-CITRUSドライブにDrag & Dropして書き込みます。
書き込み後、MicroPythonのプログラムが起動し、最初の起動時の初期化中はLEDが点灯し、GR-CITRUSのCPUの内蔵フラッシュメモリにFAT32フォーマットの内蔵フラシュドライブを作成し、MicroPythonの初期ファイルなどが作成されます。5秒程度かかります。
GR-CITRUS向けのMicroPythonでは、この内蔵フラッシュドライブへの書き込みが行われると、一時的にRAMメモリ中のキャッシュメモリに書き込まれます。LEDが点灯中はキャッシュ中で内蔵フラッシュドライブには書き込まれていません。数秒後に書き込みデータがキャッシュメモリから内蔵フラッシュに書き込まれ、LEDが消灯いたします。
この内蔵メモリドライブの使い方はこの先で説明いたします。
使い方
GR-CITRUSのRX631 CPUのFlashメモリの一部がPCの外部ドライブとして認識されるとともに、デバイスマネージャのポートでUSBシリアルデバイスとして認識されます。
Tera Termを起動し、認識されたCOMポートを選択し、Setup – Serial portメニューを選択し、Baud rateで115200を選択し、Enterキーを押します。>>というMicroPython REPLプロンプトが表示されるはずです。
このコンソールより、MicroPythonのプログラムを入力、実行できます。
最初のサンプル Lチカ
最初のサンプルとして、GR-CITRUSボード上のLEDを点灯してみます。
下記のプログラムを入力してみます。
LEDをオン、オフを50msごとに無限に繰り返すプログラムです。
import pyb while True: pyb.LED(1).toggle() pyb.delay(50) |
REPLコンソールで入力し、最後にEnterキーを数回入力します。
すると、プログラムの実行が開始されます。
Ctrl-Cキーの入力することでプログラムを停止することができます。
このコンソールは、REPL (Read-Eval-Print Loop)と呼ばれています。
MicroPythonのREPLではPythonプログラムのインデントが自動処理されますので、Cut&Pasteする際には行頭のスペースは入力しません。
よく使うキーとして、プログラム中断のCtrl-Cの他に、ソフトウェアリブートするためのCtrl-Dがあります。
内蔵フラシュメモリドライブの使い方
MicroPythonのプログラムの実行は、REPLコンソールから入力することで行うほか、ファイルから実行することもできます。
内蔵フラシュメモリドライブ(サイズは256KB)には、初期起動時にはboot.py, main.pyおよびREADME.txtファイルが含まれています。
MicroPython起動時には、(SD-CARDが未接続の場合)フラッシュメモリドライブがデフォルトのドライブとして認識され、フラッシュメモリドライブ上のboot.pyが実行され、その後main.pyが実行されます。
初期起動時にはmachineおよびpybモジュールのインポートだけ設定されています。
main.pyを更新することで起動時にプログラムを実行することができます。
新規ファイルはPCで編集したファイルをDrag&Dropでフラッシュメモリドライブにコピーしてください。
現在実装上の制限で8KBを超えるサイズのファイルはコピーできません。
サンプル - MAX7219 8x8 LED Matrix
GR-CITRUSとMAX7219ボードのピンを接続します
MAX7219用のモジュールが入ったファイル(max7219.py)をフラッシュドライブにコピーします。モジュールはGithubのrx_releasesフォルダ以下にあります。
その後、REPLコンソールより、下記のプログラムを入力します。
プログラムの内容は、数字の'1'を表示後、英文字'A'を表示し、最後に、点と縦横の線を表示します。
import max7219 from machine import Pin, SPI spi = SPI(1) cs = Pin.cpu.P43 cs.init(cs.OUT, True) display = max7219.Matrix8x8(spi, cs, 1) display.text('1',0,0,1) display.show()
display.fill(0) display.show() display.text('A',0,0,0) display.show()
display.pixel(0,0,1) display.pixel(1,1,1) display.hline(0,4,8,1) display.vline(4,0,8,1) display.show() |
サンプル – NeoPixel
GR-CITRUSとNeoPixelリングのピンを接続します
NeoPixel用のモジュールが入ったファイル(ws2812.py)をフラッシュドライブにコピーします。モジュールはGithubのrx_releasesフォルダ以下にあります。
以下のプログラムでは、12個のNeoPixel LEDに、1個につき、RGB3色の輝度情報を3バイトの配列として、12回転送しています。
from ws2812 import WS2812 chain = WS2812(spi_bus=1, led_count=12) data = [ (255, 0, 0), # red (0, 255, 0), # green (0, 0, 255), # blue (85, 85, 85), # white (255, 0, 0), # red (0, 255, 0), # green (0, 0, 255), # blue (85, 85, 85), # white (255, 0, 0), # red (0, 255, 0), # green (0, 0, 255), # blue (85, 85, 85), # white ] chain.show(data) |
サンプル – SPI LCD
下図のようにGR-CITRUSとSPI LCD 240x320のピンを接続します。
•WA-MIKANを重ねた場合には、SD-CARDからBMPファイル、JPEGファイルを表示できます。
プログラムは以下の通りです。
from pyb import LCDSPI, Pin c=LCDSPI(lcd_id=3,font_id=1,spi_id=0,baud=24000000,cs=Pin.cpu.P05,clk=Pin.cpu.PC5,dout=Pin.cpu.PC6, rs=Pin.cpu.P40, reset=Pin.cpu.P41, din=Pin.cpu.P42) c c.puts("============================\\\\r\\\\n") c.puts("===== 320x240 LCD Demo =====\\\\r\\\\n") c.puts("============================\\\\r\\\\n")
# WA-MIKANのSDカードを使用した場合 c.disp_jpeg_sd(0,50,'CITRUS00.JPG') c.disp_bmp_sd(0,100,’CITRUS00.BMP’) |
•Lcd_idは0-3まで、3がSPI LCD240x320です。0-2の定義は、ソースファイルで確認ください。
•Font_idは0-3まで、0: 8x8フォント, 1:6x12フォント, 2: 8x8 Unicodeフォント, 3:6x12 Unicodeフォント
•Spi_idは-1, 0-2まで、-1: Software SPI, 0-2: Hardware SPIのチャンネル
このプログラムでは、SPI LCDクラスのピン接続情報などを初期化し、テキスト表示した後、SD CARD上のCITRUS00.JPGファイル(と、CITRUS00.BMPファイル)を表示します。
最後に
使い方の詳細は、MicroPythonのドキュメントを参照してください。
https://docs.micropython.org/en/latest/
移植したソースコードは以下のGithubのrxブランチにあります
https://github.com/ksekimoto/micropython
git clone https://github.com/ksekimoto/micropython -b rx
でクローンしてください。
ビルド済のバイナリファイルは、rx_release フォルダ以下に格納しました。
ビルド方法は、github上のREADME.MDファイルを参考にしてください。
以上です。
最後までお付き合いくださり、どうもありがとうございました。
週末に趣味で電子工作を楽しんでいます。
ちょっとしたものをいろんなCPUに移植することに特にはまっています。
よろしくお願いいたします。