« Feather-M4-ExpressボードでTinyGOを動かす | トップページ | Adafruit-IOのMQTT(REST-APIも含む)を利用してみる »

2020年6月 2日 (火)

CircuitPythonでNeoFlashにテキストを表示する

2020/6/2

CircuitPython NeoFlash Disp Text

CircuitPython NeoFlash Disp Text

概要

CircuitPythonで以下のNeoFlashにテキストを表示する。 ここでは、Feather-M4-ExpressのCircuitPythonを使用する。なお、NeoFlashは、M5StickC用であるが、neopixel互換なので neopixelとして動かす。 (以下、ホストPCとしてはubuntuを想定している)

M5StickC NeoFlash Hat

接続

以下のように接続する:

NeoFlash FeartherM4
GND GND
5V0 3.3V
G26 D4

本来、5V動作のようだが、3.3Vでも動作する。

準備

フォントデータfont5x8.binをCIRCUITPYのディレクトリにコピーする:

# framebufで使用するフォントをダウンロードする wget https://github.com/adafruit/Adafruit_CircuitPython_framebuf/blob/master/examples/font5x8.bin cp font5x8.bin CIRCUITPY/

デモ・スクリプト

disp_text_neoflash.py

# disply text on NeoFlash import time import board import neopixel pixel_pin = board.D4 num_pixels = 126 ORDER = neopixel.GRB pixels = neopixel.NeoPixel( pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER ) #----------------------------- # framebuffer related import adafruit_framebuf # pixel size for display WIDTH = 18 HEIGHT = 7 fbuf = bytearray(round(WIDTH * HEIGHT / 8)+2) fb = adafruit_framebuf.FrameBuffer(fbuf, WIDTH, HEIGHT,adafruit_framebuf.MVLSB) #------------------------------- # buffer to NeoFlash(Neopixel) def buffer2pixels(the_fb,fcolor,bcolor): pos = 0 for y in range(the_fb.height): for x in range(the_fb.width): if fb.pixel(x, y): pixels[pos]=fcolor else: pixels[pos]=bcolor pos += 1 pixels.show() #------------------------------- # (for debug) Ascii printer for very small framebufs! def print_buffer(the_fb): print("." * (the_fb.width+2)) for y in range(the_fb.height): print(".", end='') for x in range(the_fb.width): if fb.pixel(x, y): print("*", end='') else: print(" ", end='') print(".") print("." * (the_fb.width+2)) # clear framebuffer def clear_fbuf(): for i, _ in enumerate(fbuf): fbuf[i] = 0 #---------------------------------- print("Text test: ") clear_fbuf() fb.text("ABC", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(15,0,0),(15,15,15)) time.sleep(1) clear_fbuf() fb.text("012", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(15,0,0),(15,15,15)) time.sleep(1) clear_fbuf() fb.text("345", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(0,15,0),(15,15,15)) time.sleep(1) clear_fbuf() fb.text("678", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(0,0,15),(15,15,15)) time.sleep(1) clear_fbuf() fb.text("9AB", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(int(255/4),int(213/4),int(40/4)),(0,0,0)) time.sleep(1) clear_fbuf() fb.text("abc", 0, 0, 1) print_buffer(fb) buffer2pixels(fb,(128,0,128),(0,0,0)) time.sleep(1)

framebufferを利用してテキストを表示している。 framebufferのフォーマットとしてRGB565を使用したかったが未実装のようなのでMVLSBを使用した。

なお、デバッグ用にREPL画面にframebufferの内容を「*」を使ってテキスト表示している。

参照情報

M5Stack Docs - Neoflash HAT

Adafruit Feather M4 Express PINOUTS
Adafruit Feather M4 Express Overview

Adafruit-Feather-M4-ExpressにCircuitPythonをインストールする

Build CircuitPython
Adding Frozen Modules

Adafruit CircuitPython API Reference(v5.x)

CircuitPython Essentials
Example Code

以上

|

« Feather-M4-ExpressボードでTinyGOを動かす | トップページ | Adafruit-IOのMQTT(REST-APIも含む)を利用してみる »

linux」カテゴリの記事

CircuitPython」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« Feather-M4-ExpressボードでTinyGOを動かす | トップページ | Adafruit-IOのMQTT(REST-APIも含む)を利用してみる »