がじぇっとるねさす

ホビーとエレクトロニクスを繋げるサイト

がじぇるね工房

作品タイトル:GR-CITRUSでMicropython

表示名:ksekimoto

GR-CITRUSでMicropython

コンセプト・作品説明
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して書き込みます。

GR-CITRUS USBストレージ
書き込み後、MicroPythonのプログラムが起動し、最初の起動時の初期化中はLEDが点灯し、GR-CITRUSのCPUの内蔵フラッシュメモリにFAT32フォーマットの内蔵フラシュドライブを作成し、MicroPythonの初期ファイルなどが作成されます。5秒程度かかります。
GR-CITRUS向けのMicroPythonでは、この内蔵フラッシュドライブへの書き込みが行われると、一時的にRAMメモリ中のキャッシュメモリに書き込まれます。LEDが点灯中はキャッシュ中で内蔵フラッシュドライブには書き込まれていません。数秒後に書き込みデータがキャッシュメモリから内蔵フラッシュに書き込まれ、LEDが消灯いたします。

この内蔵メモリドライブの使い方はこの先で説明いたします。

MicroPython 初期ファイル

 

####

使い方

GR-CITRUSのRX631 CPUのFlashメモリの一部がPCの外部ドライブとして認識されるとともに、デバイスマネージャのポートでUSBシリアルデバイスとして認識されます。

MicroPython シリアルポート

Tera Termを起動し、認識されたCOMポートを選択し、Setup – Serial portメニューを選択し、Baud rateで115200を選択し、Enterキーを押します。>>というMicroPython REPLプロンプトが表示されるはずです。
 

Teraterm COMポート

teraterm baud rate

repl console

このコンソールより、MicroPythonのプログラムを入力、実行できます。

 

 

 

####

最初のサンプル Lチカ

最初のサンプルとして、GR-CITRUSボード上のLEDを点灯してみます。

下記のプログラムを入力してみます。

LEDをオン、オフを50msごとに無限に繰り返すプログラムです。

Lチカサンプルプログラム

import pyb

while True:

    pyb.LED(1).toggle()

    pyb.delay(50)

 

REPLコンソールで入力し、最後にEnterキーを数回入力します。

すると、プログラムの実行が開始されます。

Ctrl-Cキーの入力することでプログラムを停止することができます。

Lチカ実行コンソール出力

このコンソールは、REPL (Read-Eval-Print Loop)と呼ばれています。

MicroPythonのREPLではPythonプログラムのインデントが自動処理されますので、Cut&Pasteする際には行頭のスペースは入力しません。


REPL Cut&Paste

よく使うキーとして、プログラム中断のCtrl-Cの他に、ソフトウェアリブートするためのCtrl-Dがあります。

Ctrl-D Soft Reboot

 

####

内蔵フラシュメモリドライブの使い方

MicroPythonのプログラムの実行は、REPLコンソールから入力することで行うほか、ファイルから実行することもできます。

内蔵フラシュメモリドライブ(サイズは256KB)には、初期起動時にはboot.py, main.pyおよびREADME.txtファイルが含まれています。

MicroPython起動時には、(SD-CARDが未接続の場合)フラッシュメモリドライブがデフォルトのドライブとして認識され、フラッシュメモリドライブ上のboot.pyが実行され、その後main.pyが実行されます。

初期起動時にはmachineおよびpybモジュールのインポートだけ設定されています。

main.pyを更新することで起動時にプログラムを実行することができます。

boot.py

main.py

新規ファイルはPCで編集したファイルをDrag&Dropでフラッシュメモリドライブにコピーしてください。

現在実装上の制限で8KBを超えるサイズのファイルはコピーできません。

####

サンプル - MAX7219 8x8 LED Matrix

GR-CITRUSとMAX7219ボードのピンを接続します

MAX7219接続

MAX7219用のモジュールが入ったファイル(max7219.py)をフラッシュドライブにコピーします。モジュールはGithubのrx_releasesフォルダ以下にあります。

その後、REPLコンソールより、下記のプログラムを入力します。

プログラムの内容は、数字の'1'を表示後、英文字'A'を表示し、最後に、点と縦横の線を表示します。

MAX7219 8x8 LED Matrix

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()

 

LED Matrix

####

サンプル – NeoPixel

GR-CITRUSとNeoPixelリングのピンを接続します

NeoPixcel接続

NeoPixel用のモジュールが入ったファイル(ws2812.py)をフラッシュドライブにコピーします。モジュールはGithubのrx_releasesフォルダ以下にあります。

ws2812.pyコピー

 

 

以下のプログラムでは、12個のNeoPixel LEDに、1個につき、RGB3色の輝度情報を3バイトの配列として、12回転送しています。

NeoPixel 12 Ring表示

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)

NeoPixel 12 Ring

####

サンプル – SPI LCD

下図のようにGR-CITRUSとSPI LCD 240x320のピンを接続します。

•WA-MIKANを重ねた場合には、SD-CARDからBMPファイル、JPEGファイルを表示できます。

SPI LCD ピン接続

プログラムは以下の通りです。

LCDへのテキスト、Bitmap、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ファイル)を表示します。

SPI LCD表示

 

 

 

####

最後に

使い方の詳細は、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ファイルを参考にしてください。

以上です。

最後までお付き合いくださり、どうもありがとうございました。

ksekimoto

週末に趣味で電子工作を楽しんでいます。

ちょっとしたものをいろんなCPUに移植することに特にはまっています。

よろしくお願いいたします。
 

フォローする

share

ページトップへ