はじめに
筆者は、これまで主に8ビットPICマイコンを使った電子工作を細々と続けてきました。PICマイコンは、多彩な周辺モジュールを内蔵しており、MPLAB統合開発環境やCコンパイラーもフリーで提供されているので、筆者が作製するようなガジェットは殆ど事足りるのですが、唯一ネットワーク(Wi-Fi)に対応していません。そこで、Wi-Fiモジュールを実装した適当なマイコンを探したところ、Raspberry Pi Pico 2Wと、ESP32-DevKitC-32Eが候補に挙がりました。いずれも2.4GHzのWi-FiとBluetoothを搭載しており遜色ありませんが、仕様や価格その他諸々を比較検討した結果、Raspberry Pi Pico 2W(以下Pico 2W)を選択しました。
概要
下表は、Pico 2Wの主な仕様です。

通信系(UART,SPI,I2C)、ADC、PWMなど一通り必要な機能を備えていますが、目を引くのはCPUがCortex M33 デュアルコア。筆者の電子工作には分不相応な高性能マイコンですが、とにかく使ってみようと思います。
下は、ピン配置図です。

開発環境
この実験では、統合開発環境はThonny、実行言語はMicroPythonで進めていきます。Pico 2WとPCをUSBケーブルでつないで、Thonnyを起動すればすぐ始められます。Thonnyのダウンロードと使い方、MicroPythonプログラミングは、Webや書籍などを参照して下さい。また、Pico 2Wのファームウェアは適時アップデートされるので、各自で最新ファームウェアをダウンロードしてアップデートします。(ファームウェアのダウンロード先 → https://micropython.org/download/RPI_PICO2_W/) アップデート方法は、関連Webなどを参照して下さい。
内容
下は、実験の回路図とブレッドボードに組んだ様子です。

結果
定番のLチカをいくつか試してみました。生成AIに聞けば、模範コードを提示してくれます。
Ⅼチカ実験 -1
下は、オンボードLEDを0.2秒点灯、0.8秒消灯の点滅を繰り返すスクリプトです(動画はここ)。冒頭に、使用するモジュールおよびクラスや関数をインポートし、GPIOを初期化した後、コードを記述します。

メインループ部を次のように記述しても動作は同じです。

等間隔で点滅を繰り返す場合、toggleを使えば1行で済みます。

Ⅼチカ実験 -2
次は、GP20ピン(プルアップ設定)のスイッチ押下で、オンボードLEDを10回点滅させるスクリプトです(動画はここ)。blink_ledは、for文でLEDを10回点滅させる関数です。スイッチ押下をメインループで待ち受け、押下ありでblink_ledを実行します。

関数命名の留意点
*関数名は、英字かアンダーバーで開始する。数字で始まる関数名は許可されない。
*特殊文字(!,@,#,$など)を含む関数名は許可されない。
*同じスペルでも、大文字と小文字は異なる関数として扱われる。
*Python予約語(def,returnなど)は、関数名に使用できない。
Ⅼチカ実験 -3
次は、タイマー割り込みを使ってオンボードLEDを点滅させるスクリプトです。割り込みハンドラ(関数)に割り込み処理を記述し、タイマー初期化でcallbackすると割り込みが始まります。

タイマー割り込みの留意点
*割り込み関数は、タイマー初期化の前に記述する。初期化の後に記述すると、関数未定義エラーになる。
*割り込み関数はできるだけ簡潔にする。(複雑な処理はメインループで行う)
・関数内でのリスト追加、辞書の作成、浮動小数点計算等は禁止
・関数内でのprint関数やsleep関数の使用は避ける
Ⅼチカ実験 -4
次は、Pico 2Wの3.3V(36ピン)を可変抵抗器でAD変換した値から、PWMのデューティを制御して外付けLEDを調光するスクリプトです(動画はここ)。

ADC設定の留意点
*ADC入力電圧が3.3Vを超えないこと。3.3Vを超える場合は3.3V以下になるように分圧する。
PWM設定の留意点
*freq(周波数[Hz])は10以上に設定する。(10以下はエラーになる)
*デューティは[%]ではなく、16ビット整数値(0~65535)で指定する。
Ⅼチカ実験 -5
次は、外付けLEDを徐々に明るく、徐々に暗くするを繰り返すスクリプトです(動画はここ)。for文でPWMのデューティを制御しています。

感想
まだ味見レベルですが、MicroPythonを使ってみた感想は、C言語のような変数のデータ型宣言やコンパイルも不要なので楽チンですが、中括弧ではなくインデントで処理するブロックが区切られるので、インデントの位置によって結果は全然変わってしまいます。また、色々なモジュール/クラスが用意されているので、簡単なコードで機能を使えるのは便利です。一方で、それらを使う上での留意点や、言うまでもなくプログラミングのルールを知っておく必要があります。
– 以上 –
世迷言
正直なところ、還暦過ぎて新しいプログラミング言語を学習するのは億劫です。更に、クラスとかインスタンスとかモジュールとか聞き慣れない様々な横文字言葉が出てきて、理解が全然追いついていません。とにかくコードを書いていけば、少しずつ分かってくるだろうと思います。いつか、Wi-Fiを使ってリモート制御ができるようになりたいと思います。