投稿

MicroPythonで使うWio Terminal - gc

MicroPythonで使うWio Terminal - 目次 ガーベージコレクションを制御するモジュールですが、mem_alloc() と mem_free() で使用メモリ/空きメモリを知ることができて便利です。 MicroPythonの公式ドキュメント  gc -- ガベージコレクションの制御 >>> import gc >>> help(gc) object <module 'gc'> is of type module   __name__ -- gc   collect -- <function>   disable -- <function>   enable -- <function>   isenabled -- <function>   mem_free -- <function>   mem_alloc -- <function>   threshold -- <function> >>> gc.mem_free() 162736 >>> gc.mem_alloc() 13152 >>>  MicroPythonで使うWio Terminal - 目次

MicroPythonで使うWio Terminal - ファイルの読み書き

MicroPythonで使うWio Terminal - 目次 簡単なファイルの読み書き例 # Wio Terminal io, osのサンプル # MicroPythonの公式ドキュメントに説明がある # https://micropython-docs-ja.readthedocs.io/ja/latest/library/io.html # https://micropython-docs-ja.readthedocs.io/ja/latest/library/os.html # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月27日 佐藤恭一 https://kyoutan.jpn.org import os f = open ( "myfile.txt" , "w" , encoding = "utf-8" )   # 書き込むファイルを作成する f . write ( "1:abcdefg \r\n " )   # 何か書き込んでみる f . write ( "2:0123456789 \r\n " ) f . write ( "3:hijklmn \r\n " ) f . write ( "4:opqrstu \r\n " ) f . close ()   # ファイルクローズ print ( os . listdir ())   # ファイル一覧表示 f = open ( "myfile.txt" , "r" , encoding = "utf-8" )   # 読み取るファイルを開く print ( f . readline ())   # 一行読んで表示 f . seek ( 0 )             # ファイル先頭にシーク print ( f . readline ())   # 一行ずつ読んで表示 print ( f . readlin

MicroPythonで使うWio Terminal - time

MicroPythonで使うWio Terminal - 目次 time 時間関連の関数使用例 # Wio Terminal timeのサンプル # MicroPythonの公式ドキュメントに説明がある # https://micropython-docs-ja.readthedocs.io/ja/latest/library/time.html # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月20日 佐藤恭一 https://kyoutan.jpn.org import time # 遅延 time . sleep ( 5 )   # 5s 時間待ち time .sleep_ms( 500 )   # 500ms 時間待ち time .sleep_us( 500 )   # 500us 時間待ち # 経過時間 (値は多分符号付き32bit整数 最大 0x3fffffffを超えると 0に戻る) print ( "ticks_ms   {} " . format ( time .ticks_ms()))   # 稼働時間 ms print ( "ticks_cpu {} " . format ( time .ticks_cpu()))   # 稼働時間 cpuクロックではなく msと同じ値 print ( "ticks_us   {} " . format ( time .ticks_us()))   # 稼働時間 us # 経過時間の計算 start = time .ticks_us()   # 1000ミリ秒時間待ちする間をマイクロ秒単位で計測する time .sleep_ms( 1000 ) # 2つのticks値の差を求める。値が最大値を跨いでも正しく計算する # 経過時間を計算できる elapse = time .ticks_diff( time .ticks_us(), start ) print ( "ticks_diff {} us" . format ( elapse

MicroPythonで使うWio Terminal - machine.UART

イメージ
MicroPythonで使うWio Terminal - 目次 machine.PWM の使用例 # Wio Terminal machine.UARTのサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月20日 佐藤恭一 https://kyoutan.jpn.org import time from machine import UART, Pin, Map # UART1とUART2があるけど、40ピンコネクタに接続されているのはUART1 # TXD(pin 8)とRXD(pin 10)をジャンパー線で接続して通信テストした(ループバック) uart = UART(Map.UART1, 115200 , UART.config.SERIAL_8N1)   # 初期化 uart = UART(Map.UART1, 115200 )   # これでもよい print ( "write test" ) uart .write( 'hello world!' )   # 書き込む。戻り値は書き込んだ数 txdata = bytearray ( b "0123456789" )   # メモ:bytearray 値の変更可能 / bytes 値の変更不可能 uart .write( txdata , 3 )     # バッファの先頭から3バイト書き込む。戻り値は書き込んだ数 uart .write( txdata , 5 , 4 )   # バッファの5番目から4バイト書き込む。戻り値は書き込んだ数 time . sleep ( 1 )           # UARTの送信が完了するまで待つ print ( "rxdata {} " . format ( uart .any()))   # 受信バッファにあるデータ数 print ( uart .read())   # バッファのデータをタイムアウトするまで全て読んで表示する # 受信バッファは 255バイト # タイムアウトは

MicroPythonで使うWio Terminal - machine.PWM

イメージ
MicroPythonで使うWio Terminal - 目次 machine.PWM の使用例 # Wio Terminal machine.PWMのサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月19日 佐藤恭一 https://kyoutan.jpn.org from machine import PWM, Pin pwm0 = PWM(Pin( 13 ))   # pin13 PWM0 # PWM以外のピンでは使用できない。エラーは出ず動かないだけ # 設定できる周波数は 460, 1830, 7330, 29300, 58600, 117000, 234000, 470000 [Hz] pwm0 .freq( 7330 ) pwm0 .duty( 511 )   # デューティ比は 0-1023 pwm1 = PWM(Pin( 16 ), freq = 1830 , duty = 200 )   # 一行で書くこともできる """ >>> help(pwm0) object PWM(Arduino Pin(13), freq=1000, duty=512) is of type PWM   init -- <function>   deinit -- <function>   freq -- <function>   duty -- <function> """ 周波数とディユーティ比を指定すれば PWMピンから波形が出てきます。 いろいろな数値を指定して波形を観測してみたところ、設定できる周波数の段階が荒くて、460, 1830, 7330, 29300, 58600, 117000, 234000, 470000 [Hz] の8段階でした(数値はおよその値)。この数値から外れた値を指定した場合、低い方の値に設定されます。 デューティ比は 0~1023で指定します。 PWMで使用できるピンは、13, 16, 23

MicroPythonで使うWio Terminal - machine.DAC

イメージ
MicroPythonで使うWio Terminal - 目次 machine.DAC (D/Aコンバータ)の使用例 # Wio Terminal machine.DACのサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月19日 佐藤恭一 https://kyoutan.jpn.org import time from machine import DAC, ADC, Pin, Map, LCD lcd = LCD() lcd .fillScreen( lcd .color.BLACK) lcd .setTextColor( lcd .color.WHITE) lcd .setTextFont( 6 ) adc = ADC(Pin(Map.A0)) # DACを使用したアナログ出力 dac = DAC(Pin(Map.DAC0))   # DAC0 と DAC1 ふたつのDACがある dac .resolution( 12 )   # resolutionで分解能を指定できる。初期値=最大値 12bit dac .resolution( 10 )   # ADCと同じ 10bitに設定 # dac.reference(0)  # 0 初期値。値を増やすと出力電圧が上がるのだけど、法則がわからない。 dac = DAC(Pin(Map.DAC0), resolution = 10 , reference = 0 )   # 一行でも設定できる # DAC0の出力をADC0で読み取ってみる # DAC0(pin11)とADC0(pin13)をジャンパ線で接続する for output in range ( 0 , 1023 , 20 ):     dac .write( output )   # アナログ出力     lcd .drawString( " {0:>04d} " . format ( adc .read()), 0 , 5 )   # 上段計測値     lcd .drawString( " {0

MicroPythonで使うWio Terminal - machine.ADC

イメージ
MicroPythonで使うWio Terminal - 目次 machine.ADC (A/Dコンバータ)の使用例 # Wio Terminal machine.ADCのサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月19日 佐藤恭一 https://kyoutan.jpn.org import time from machine import ADC, Pin, Map, LCD lcd = LCD() lcd .fillScreen( lcd .color.BLACK) lcd .setTextColor( lcd .color.WHITE) lcd .setTextFont( 6 ) while True :     adc = ADC(Pin( 13 ))   # pin13 : A0     adc = ADC(Pin(Map.A0))   # ピン番号は Mapで指定することもできる     # ピン番号はコネクタのピン番号 1 ~ 40     # アナログ入力は A0 ~ A8 まである     # adc.read()でアナログ値を読むことができる (10bit 0V:0 ~ 3.3V:1023)     lcd .drawString( " {0:>04d} " . format ( adc .read()), 0 , 5 )     time .sleep_ms( 100 ) """ >>> help(machine.ADC) object <class 'ADC'> is of type type   read -- <function> """ ADCは値を読み取るだけなので簡単に使えます。 得られる値は 10bit 0~1023、0~3.3Vの電圧を計測することができます。 ピン番号はコネクタのピン番号(1~40)を使用します。 MicroPythonで使うWio T

MicroPythonで使うWio Terminal - machine.Pin (GPIO)

イメージ
MicroPythonで使うWio Terminal - 目次 machine.Pin (GPIO) の使用例 # Wio Terminal machine.Pin (GPIO)のサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月19日 佐藤恭一 https://kyoutan.jpn.org import time from machine import Pin, Map # 出力 led = Pin( 50 , Pin.OUT)   # 内蔵LEDが接続されている50番のGPIOを出力に設定 led = Pin(Map.LED_BUILTIN, Pin.OUT)   # 内蔵デバイスは machine.Mapで定義されているので、こう書くとらくちん led = Pin(Map.LED_BUILTIN, value = 1 )   # 初期化と同時に出力値を指定することもできる led .init(Pin.IN, Pin.PULL_UP)   # ピンの設定を変更する。入力出力を切り替えたりとか led .init(Pin.OUT) led .on()       # on / offでGPIOを操作できる time . sleep ( 1 ) led .off() time . sleep ( 1 ) led .value( 1 )   # valueでもGPIOを操作できる time . sleep ( 1 ) led .value( 0 ) # 入力 buttonC = Pin(Map.WIO_KEY_C, Pin.IN)   # GPIOを入力に設定(KEY_Cは左側のボタン) buttonC = Pin(Map.WIO_KEY_C, Pin.IN, Pin.PULL_DOWN)   # プルダウンを指定することができる buttonC = Pin(Map.WIO_KEY_C, Pin.IN, Pin.PULL_UP)   # プルアップを指定することもできる count = 0 while True :   # ボタンが押されてる時

MicroPythonで使うWio Terminal - machine.Sprite

イメージ
MicroPythonで使うWio Terminal - 目次 machine.Spriteの使用例 RAM上にスクリーンバッファ(仮想画面)を確保して描画処理を行った後、一気にLCDへ転送します。 # Wio Terminal machine.Spriteのサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年6月18日 佐藤恭一 https://kyoutan.jpn.org # # 透明色の指定はあり。拡大・回転する関数は無いようだった。 # 文字や図形の描画関数は machine.LCDと同じ https://kyouichisato.blogspot.com/2022/05/micropythonwio-terminal.html from machine import LCD from machine import Sprite lcd = LCD() lcd .fillScreen( lcd .color.BLUE) sprite = Sprite( lcd )                   # Spriteの描画先を指定する(引数間違っているかもしれない) width , height = 32 , 32 sprite .createSprite( width , height )     # サイズを指定してSpriteを作成 sprite .fillScreen( sprite .color.GREEN)   # Spriteを塗りつぶし sprite .fillSprite( sprite .color.BLACK)   # fillScreenも fillSpriteも同じ動作のようだった x = sprite .width // 2 y = sprite .height // 2 r = sprite .width // 3 color = sprite .color.RED sprite .fillCircle( x , y , r , color )     # 円を描く x , y = 0 , 0 sprit

MicroPythonで使うWio Terminal - MicroPython (ArduPy) を使う準備

イメージ
MicroPythonで使うWio Terminal - 目次 MicroPythonの良いところ MicroPythonはインタプリタなので、マイコンにファームウェアを書き込んでしまえば、あとはテキストエディタだけがあればプログラムを書いて実行できます。開発環境をインストールする手間がないのでちょっと使ってみるような場合に便利で、手軽に試してみることができます。 ちょうど 8bitパソコン(ホビーパソコン)の BASICのような感じで使うことができます。ソースコードをテキストファイルに書いて実行することもできるし、対話モード (REPL) で一行ずつ入力して実行することもできる。ちょっと関数の動作を確かめてみるために1行だけ書いて実行してみることもできる。 最近のマイコンは1,000円以下で買えるような安価なものでも、32bitで 100MHz以上の速度で動作してとても高速なので、インタプリタでも速度が遅くて困ることは少なくなりました。 ESP32や Raspberry Pi Picoでも MicroPythonが使えるので、一度覚えるとほかのマイコンでも同じように利用できるのも良い。 MicroPython のインストール seeed studioの  ArduPy Get Started にガイドがあるので、これを見ながら作業しました。Wio Terminalは、PCにUSBで接続するとUSBメモリとして認識するので、ファームウェアをドラッグ&ドロップするだけの簡単な作業です。 STEP.1 ブートローダーに入る USBケーブルで Wio TerminalをPCに接続する Wio Terminalを「ちょんちょん」と素早く2回リセットしてブートローダに入る Wio Terminalが「Arduino」という名前のUSBメモリとして認識される STEP.2 ArduPy UF2 ファームウェアをダウンロードする ArduPy Get Started  STEP.2 Download ArduPy UF2 Firmwareの For Wio Terminal のリンクからファームウェアをダウンロードする STEP.3 ArduPy ファームウェアを Wio Terminalに書き込む

ESP32ラインナップメモ

メーカーwebサイト https://www.espressif.com/en ESP32-WROOM 基本製品 ESP32-WROVER WROOMにPSRAMを追加 ESP32-MINI フラッシュメモリを統合した製品 ESP32-S2 USB-OTG付き、BluetoothLE無し ESP32-S3 USB-OTG付き、BluetoothLE有り、PSRAM付き ESP32-C3 CPUコアにRISC-Vを採用した製品、ESP-WROOM-02に近い性能 いろいろ種類があって買うときに迷うので作ったメモ。

MicroPythonで使うWio Terminal - LCD 図形描画

イメージ
MicroPythonで使うWio Terminal - 目次 Wio Terminalの  ArduPy で使える、LCD描画関数の利用例と実行結果一覧を作りました。 サンプルコード全体。コピペして実行してみてください。 # Wio Terminal 液晶画面表示のサンプル # This code is provided under a CC0 Public Domain License. # http://creativecommons.org/publicdomain/zero/1.0/ # 2022年5月21日 佐藤恭一 https://kyoutan.jpn.org # LCDへの図形描画関数一覧 # # color16to8(color)                                # 16bitカラーから8bitカラーへ変換 (RRRGGGBB) # color565(R, G, B)                                # 24bitカラーから16bitカラーへ変換 (RRRRRGGGGGGBBBBB) # fillScreen(color)                                # 画面の塗りつぶし # drawPixel(x, y, color)                           # 1pixelの点を描く # drawLine(x1, y1, x2, y2, color)                  # 直線を描く # drawFastVLine(x, y, height, color)               # 垂直線を描く # drawFastHLine(x, y, width, color)                # 水平線を描く # drawRect(x, y, width, height, color)             # 四角形を描く # fillRect(x, y, width, height, color)             # 塗りつぶした四角形を描く # drawRoundRect(x, y, width, height, r, color)     # 角が丸い四角形を描く # fillRound