SlideShare a Scribd company logo
MicroPythonの
Cモジュールを作ってみる
インターフェース オフ会 @ CQ出版
2019/05/17
Kenta IDA (@ciniml)
自己紹介
•井田 健太 (@ciniml)
•仕事:FPGAの論理設計
•使用言語:Verilog
HDL,SystemVerilog,C++,Python
• 元は組み込み?ソフト屋
• 最近はなぜかGoのコードを書いている…
2019/5/20MicroPythonのCモジュールを作ってみる
特集の担当部分
•インターフェース2019年5月号
• 第2部
• 第1章 マイコン用Python高速化の方法
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonとは
•組み込み向けのPython実装
• Python3.4の文法+標準ライブラリの一部
• Python3.5の文法の一部
•様々なマイコン、OSで動作
• 元々はSTM32F4向け (PyBoard)
• ESP32, ESP8266, PIC24, nRF51822(micro:bitとか)
• Unix, Windows, Zephyr
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonはOSなのか?
•OSが提供する機能
• ファイル、スレッド、ターミナル
•OS向けにポーティングされた物はOSの機能を利用
• Unix, Windows, Zephyr
•ベアメタル・RTOS上の場合は同等の機能を実装
• 各マイコン向け実装
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonの便利ポイント
•REPL環境で試しながら作れる
• TeraTermとか
• ちゃんと入力補完も効く
•スクリプトが止まるとREPLに戻る
• →デバッグに使える!
2019/5/20MicroPythonのCモジュールを作ってみる
Pythonの実行速度
•Pythonの実行速度はそんなに速くない
• バイトコード・インタプリタ (CPython)
• 一部処理系はJITコンパイル (PyPy)
•MicroPythonも(基本的に)バイトコード・インタプリタ
• 一部例外あり
2019/5/20MicroPythonのCモジュールを作ってみる
Pythonの実行速度
•配列操作する処理が(Cと比べて)遅い
• 添え字の値を計算
• 添え字の範囲チェック
→Cと比較して数十倍くらい差がある
•反復回数の多いループだとかなり影響がある
2019/5/20MicroPythonのCモジュールを作ってみる
対策 (PCの場合)
•PyPyを使う
• JITコンパイルしてくれるのでそこそこ速い…はず
• ただしPython2系
•C言語で書かれたモジュールを呼び出す
• 呼び出しのオーバーヘッドを除けばC言語そのもの
• numpyとかはこれ
• 計算処理はC/FORTRANのライブラリ呼び出し
2019/5/20MicroPythonのCモジュールを作ってみる
対策 (MicroPythonの場合)
•ネイティブコード・エミッタを使う
• バイトコードでは無く機械語を出力して実行してくれる
• 命令保持用のメモリ数倍くらい使う
•C言語で書かれたモジュールを呼び出す
• PCと同じ
•ESP8266/ESP32ではネイティブコード・エミッタ使えない!
•なので、C言語モジュールを作る
2019/5/20MicroPythonのCモジュールを作ってみる
C言語モジュールの欠点
•MicroPythonのビルドが必要
•モジュールの動的追加はサポートされていない
• MicroPythonのissueでも何度か議論されている
• OSが無いプラットフォームで動的ロードとかできない
• そもそもPosition Independentな
コードを出せないプラットフォームもある
• 現時点では難しいという判断
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonのビルド
• コンパイラやビルドツールが動く環境が必要
• 各種Linux
• Windowsの場合はWSLでUbuntu動かすのが楽
• msys2でもシンボリック・リンクの設定をすればビルド可能
• GitHubから持ってきてmakeするだけ
• $ git clone
https://github.com/micropython/micropython.git -b v1.10
$ git submodule update --init
$ cd ports/unix
$ make -j12
2019/5/20MicroPythonのCモジュールを作ってみる
Cモジュールの追加
•モジュール本体のファイル追加
•数個のファイルの編集
• モジュール一覧に追加
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonのディレクトリ構成
2019/5/20MicroPythonのCモジュールを作ってみる
Cモジュールの構造
// 加算処理の本体
STATIC mp_obj_t mod_fastmath_add(mp_obj_t a_in, mp_obj_t b_in) {
mp_int_t a = mp_obj_get_int(a_in); // 引数を整数に変換(失敗するとエラー)
mp_int_t b = mp_obj_get_int(b_in); // /
return mp_obj_new_int(a + b); // 加算結果を表すintオブジェクトを作って返す
}
// 加算関数を呼び出すための関数オブジェクトを定義
// 引数が2つなので MP_DEFINE_CONST_FUN_OBJ_2 を使う
// 0~3引数の関数まで定義できる
// それ以上は可変引数関数として定義する必要がある
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_fastmath_add_obj, mod_fastmath_add);
// モジュールに含まれる関数などの名前とオブジェクトの対応関係を保持する辞書の要素を定義する
STATIC const mp_rom_map_elem_t mp_module_fastmath_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_fastmath) }, // __name__
{ MP_ROM_QSTR(MP_QSTR_add), MP_ROM_PTR(&mod_fastmath_add_obj) }, // add(a, b)
};
// ↑の要素を持つ辞書オブジェクトを定義する
STATIC MP_DEFINE_CONST_DICT(mp_module_fastmath_globals, mp_module_fastmath_globals_table);
// fastmath モジュールのオブジェクトを定義する
const mp_obj_module_t mp_module_fastmath = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&mp_module_fastmath_globals,
};
2019/5/20MicroPythonのCモジュールを作ってみる
処理本体
モジュールの定義
どういった関数があるのかなど
MicroPythonのビルドと実行
•unixポートならビルド環境上で実行できる
•ハードウェアに依存しない
モジュールを開発環境で試すことが出来る
2019/5/20MicroPythonのCモジュールを作ってみる
MicroPythonのビルドと実行
•unixポートならビルド環境上で実行できる
•ハードウェアに依存しない
モジュールを開発環境で試すことが出来る
2019/5/20MicroPythonのCモジュールを作ってみる
構成
2019/5/20MicroPythonのCモジュールを作ってみる
構成
•pyndarray
• MicroPythonスクリプトでの配列・行列演算の実装
•fastmath
• C言語での配列・行列演算の実装
•テストスクリプト
• pyndarray, fastmathを呼び出して実行時間を測定
2019/5/20MicroPythonのCモジュールを作ってみる
•式があっているかどうかの確認
• 簡単に書いて確認できるので
•C実装との処理速度比較用
行列積の実装 (Python)
2019/5/20MicroPythonのCモジュールを作ってみる
単純な3重ループでの実装
•Pythonと同様の3重ループでの実装
行列積の実装 (C言語)
2019/5/20MicroPythonのCモジュールを作ってみる
動作確認
•unixポート
•esp32
2019/5/20MicroPythonのCモジュールを作ってみる
まとめ
•MicroPythonは試しながら開発するのに便利
• REPLがとても便利
•Cモジュール追加はそんなに難しくない
• まずはPythonで書いて動作確認
• Cモジュールとして移植
•残りの部分は書きやすいPythonで書いて楽をする
2019/5/20MicroPythonのCモジュールを作ってみる
おしまい
2019/5/20MicroPythonのCモジュールを作ってみる

More Related Content

What's hot

C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
 
AWS + MLflow + SageMakerの環境を動かしてみたお話
AWS + MLflow + SageMakerの環境を動かしてみたお話AWS + MLflow + SageMakerの環境を動かしてみたお話
AWS + MLflow + SageMakerの環境を動かしてみたお話
ItohHiroki
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
 
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と ChannelASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
Joni
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
H2O Space. Co., Ltd.
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
Ayana Yokota
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
 
【論文読み会】Self-Attention Generative Adversarial Networks
【論文読み会】Self-Attention Generative  Adversarial Networks【論文読み会】Self-Attention Generative  Adversarial Networks
【論文読み会】Self-Attention Generative Adversarial Networks
ARISE analytics
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
Drecom Co., Ltd.
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
Takayuki Shimizukawa
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
 

What's hot (20)

C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
AWS + MLflow + SageMakerの環境を動かしてみたお話
AWS + MLflow + SageMakerの環境を動かしてみたお話AWS + MLflow + SageMakerの環境を動かしてみたお話
AWS + MLflow + SageMakerの環境を動かしてみたお話
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と ChannelASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
【論文読み会】Self-Attention Generative Adversarial Networks
【論文読み会】Self-Attention Generative  Adversarial Networks【論文読み会】Self-Attention Generative  Adversarial Networks
【論文読み会】Self-Attention Generative Adversarial Networks
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 

Similar to MicroPythonのCモジュールを作ってみる

ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
sekikazu
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
Takuya Nishimoto
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめ
Kenta IDA
 
Code igniter + ci phpunit-test
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-test
ME iBotch
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy
敦志 金谷
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
Shinya Okano
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
genroku
 
chibi:bitとMicroPythonで始めるフィジカルコンピューティング
chibi:bitとMicroPythonで始めるフィジカルコンピューティングchibi:bitとMicroPythonで始めるフィジカルコンピューティング
chibi:bitとMicroPythonで始めるフィジカルコンピューティング
Minoru Inachi
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
gree_tech
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
kashew_nuts
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もう
Akira Nonaka
 
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
Kir Chou
 
Botkit4.x Has Come!
Botkit4.x Has Come!Botkit4.x Has Come!
Botkit4.x Has Come!
Hikaru Uchiyama
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
Yuki Nagai
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
Atomu Hidaka
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
Takuya Nishimoto
 
Io t,ai時代のソフトウェア
Io t,ai時代のソフトウェアIo t,ai時代のソフトウェア
Io t,ai時代のソフトウェア
Toshiaki Kurokawa
 

Similar to MicroPythonのCモジュールを作ってみる (20)

osakapy 2014.05 LT
osakapy 2014.05 LTosakapy 2014.05 LT
osakapy 2014.05 LT
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめ
 
Code igniter + ci phpunit-test
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-test
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
Why python
Why pythonWhy python
Why python
 
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
 
chibi:bitとMicroPythonで始めるフィジカルコンピューティング
chibi:bitとMicroPythonで始めるフィジカルコンピューティングchibi:bitとMicroPythonで始めるフィジカルコンピューティング
chibi:bitとMicroPythonで始めるフィジカルコンピューティング
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もう
 
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
 
Botkit4.x Has Come!
Botkit4.x Has Come!Botkit4.x Has Come!
Botkit4.x Has Come!
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
Io t,ai時代のソフトウェア
Io t,ai時代のソフトウェアIo t,ai時代のソフトウェア
Io t,ai時代のソフトウェア
 

More from Kenta IDA

M5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたM5StackにFPGAをつないでみた
M5StackにFPGAをつないでみた
Kenta IDA
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
Kenta IDA
 
カスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするカスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にする
Kenta IDA
 
Using SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonUsing SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPython
Kenta IDA
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かす
Kenta IDA
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2
Kenta IDA
 
EC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGEC2 F1 Virtual JTAG
EC2 F1 Virtual JTAG
Kenta IDA
 
PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)
Kenta IDA
 
PSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニットPSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニット
Kenta IDA
 
Windows10 IoT CoreとBLE
Windows10 IoT CoreとBLEWindows10 IoT CoreとBLE
Windows10 IoT CoreとBLE
Kenta IDA
 
おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能
Kenta IDA
 

More from Kenta IDA (11)

M5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたM5StackにFPGAをつないでみた
M5StackにFPGAをつないでみた
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
カスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするカスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にする
 
Using SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonUsing SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPython
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かす
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2
 
EC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGEC2 F1 Virtual JTAG
EC2 F1 Virtual JTAG
 
PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)
 
PSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニットPSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニット
 
Windows10 IoT CoreとBLE
Windows10 IoT CoreとBLEWindows10 IoT CoreとBLE
Windows10 IoT CoreとBLE
 
おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能
 

MicroPythonのCモジュールを作ってみる