今回は、Raspberry Pi Picoを使って、MicroPythonでマルチタスクプログラムを作成する方法について解説します。
マルチタスクは、1つのマイコンで複数の処理を実装することができ、組込みアプリケーション開発では必須の知識となりますので、ぜひ挑戦してみてください。
なぜRaspberry Pi Picoなのか?
Raspberry Pi Picoは、手頃な価格で高性能なマイクロコントローラです。MicroPythonというPythonのサブセットを使用することで、初学者でも簡単に組み込みプログラミングを学ぶことができます。
また、現在最新のRaspberry Pi Pico Wでは無線LANが搭載され、IoTのアプリケーション開発にも活用できるようになりました。
MicroPythonの開発環境
Raspberry Pi Pico、Raspberry Pi Pico Wで動作するMicroPythonのプログラムを開発する環境として、Thonnyを使用します。
Thonnyを使用することで、コーディングからファイルの転送、Raspberry Pi Picoでの実行を全てツール内で行うことが可能です。
Thonnyのインストールから使用方法までを、以下の記事で解説しています。

Raspberry Pi Pico Wの入手先
Raspberry Pi Pico WはAmazon等で2,000円以下という低価格で入手することができます。

またはんだ付けの道具をお持ちでない場合や、はんだ付けが面倒という方向けには「Raspberry Pi Pico WH」という製品名でピンヘッダ実装済みのものが販売されています。

マルチタスクプログラムとは?
マルチタスクプログラムは、複数のタスクを同時にまたは交互に実行するプログラムです。これにより、システムが効率的に動作し、リアルタイムでの応答が可能になります。
マルチタスクとプライオリティ(優先度)の重要性
マルチタスクは、システムの効率を大幅に向上させることができます。しかし、すべてのタスクが同じ優先度を持つ場合、重要なタスクが適切な時間に実行されない可能性があります。
これを解決するために、各タスクにプライオリティを設定します。プライオリティが高いタスクは、プライオリティが低いタスクよりも頻繁に実行されます。これにより、システムは重要なタスクを優先的に処理し、全体のパフォーマンスと効率を向上させることができます。
作成したMicroPythonコード
ここからは、実際にMicroPythonを使ってマルチタスクを構成する具体的な実装方法について解説します。
コード解説
このプログラムでは、3つの異なるタスクを協調マルチタスクで実行します。それぞれのタスクは、特定の間隔で実行されるように設計されています。それぞれのタスクは、一定の間隔(100ミリ秒、300ミリ秒、500ミリ秒)が経過した後に実行されます。
task1
は、最も高い優先度を持つタスクで、100ミリ秒ごとに実行されます。これは、他のどのタスクよりも頻繁に実行されるタスクです。task2
は、中程度の優先度を持つタスクで、300ミリ秒ごとに実行されます。これは、task1
よりは少なく、task3
よりは頻繁に実行されるタスクです。task3
は、最も低い優先度を持つタスクで、500ミリ秒ごとに実行されます。これは、他のどのタスクよりも少なく実行されるタスクです。
全体のMicroPythonコード
作成した全体のソースコードは以下の通りです。
import utime
# タスク1: 高優先度タスク
def task1(last_run):
if utime.ticks_diff(utime.ticks_ms(), last_run) > 100: # 100ミリ秒ごとに実行
print("Task 1: High priority")
return utime.ticks_ms()
return last_run
# タスク2: 中優先度タスク
def task2(last_run):
if utime.ticks_diff(utime.ticks_ms(), last_run) > 300: # 300ミリ秒ごとに実行
print("Task 2: Medium priority")
return utime.ticks_ms()
return last_run
# タスク3: 低優先度タスク
def task3(last_run):
if utime.ticks_diff(utime.ticks_ms(), last_run) > 500: # 500ミリ秒ごとに実行
print("Task 3: Low priority")
return utime.ticks_ms()
return last_run
# タスクの最後の実行時間を記録
last_run1 = utime.ticks_ms()
last_run2 = utime.ticks_ms()
last_run3 = utime.ticks_ms()
# タスクを無限ループで実行
while True:
last_run1 = task1(last_run1)
last_run2 = task2(last_run2)
last_run3 = task3(last_run3)
実行結果
以下がマルチタスクのプログラムを実行した結果です。

高優先のタスクの間に低優先のタスクが実行されていることが確認できました。
組込みソフトウェアの知識を仕事に活かすには

趣味でマイコンのプログラムを書いてるから、仕事でも活かしたいなあ。
でも自信が無い…



そんな時は、一度スクールで体系的に基礎を学ぶといいよ。
趣味のプログラミングスキルを活かしたいけど、「実務レベルで通用するか不安」という方には、プログラミングスクールを受講してみるのがおすすめです。
プログラミングスクールのカリキュラムは、企業の研修などでも利用されており、実践的で即戦力となるスキルを習得することが可能です。
Winスクールでは、Web系や機械学習、データサイエンスなどに加え、プログラミングスクールでは珍しいハードウェアを扱うC言語組み込みシステムやハードウェアとクラウドを連携させたIoTシステムの講座が非常に充実しています。
授業内容も受講者に対して組み込み用マイコンボードやRaspberry Piを用意し、実機を使いながら学べる本格的なカリキュラムが用意されています。
また、受講者のスケジュールやロケーションに応じて、対面授業とオンライン授業を選択、もしくは組み合わせて受講できるため、プログラミング初心者の方でも安心です。
家電や自動車業界などへの転職を目指したい方に非常におすすめです。
また近年、クラウドソーシングのプラットフォームにも、マイコンボードを使った組み込みソフトウェアの開発案件も多く募集されており、副業でマイコンのソフトウェア開発を行う方も増えています。



クラウドワークスなどで「Raspberry Pi」と検索すると、開発や解説記事作成などの案件が出てくるよ。



スクールで基礎をしっかり押さえておけば、安心して案件に応募できるね。
プログラミング言語 | Python, C, C#, Java, JavaScript(React.js), Ruby, PHP, 他 |
授業形式 | 対面&オンラインが選択可能 |
学習期間 | 90分×40回(60時間)(C言語&組込みシステム開発(マイコンボード)コースの例) |
費用 | 353,100円~(C言語&組込みシステム開発(マイコンボード)コース例) |
補助金、給付金 | 一部の講座が教育訓練給付制度対象 |
転職支援 | 個別の就職カウンセリング、無料の就職支援セミナー |
実績・信頼性 | 年間17,000人以上の受講者、年間1,484社の企業研修実績 |
\ Winスクール公式サイトを見てみる! /
まとめ
Raspberry Pi PicoとMicroPythonを使って、マルチタスクを構成する方法について解説しました。今回紹介したプログラムの関数の中身を実行させたい処理に書き換えることで、いくつもの処理を切り替えて実行することができますので、ぜひ活用してみてください。
それでは、また次の記事でお会いしましょう。



