Last Update 2024/04/23

マイコン向けプロトタイピング言語の新定番
MicroPythonプログラミング・ガイドブック

宮田 賢一/角 史生 共著
B5判 192ページ
定価3,080円(税込)
JAN9784789844796
2024年5月1日発行
好評発売中!
MicroPythonプログラミング・ガイドブック

 MicroPythonは,マイコンを搭載する組み込み機器向けにチューニングされたPythonです.Python3と高い互換性を持ち,マイコンに慣れていない初心者でも開発しやすいという特徴を持ちます.OSの支援無しに動作するので,マイコンが持つさまざまなデバイスのインターフェースを直接制御でき,物作りの楽しさを手軽に実感できます.
 本書では,プログラミング言語MicroPythonの言語仕様からプログラミングの仕方までを解説します.前半ではMicroPythonの言語仕様を一通り解説し,後半では実践編として各種デバイスをMicroPythonで制御する方法を紹介します.また,実際の応用例からの逆引きでMicroPythonのプログラムを探せる特別付録も収録しています.
 本書は次のような読者を想定しています.
・普段はC/C++で組み込み機器を開発したり,Arduinoで電子工作をしたりしているが,新規システムをサッと試作したいエンジニア
・製品開発時に,開発のための装置としてデータ記録装置やメカのエージング装置を作りたいエンジニア
・授業や実験でマイコンを学習する必要のある学生
 MicroPython用のライブラリは公式/非公式を問わず,インターネット上に多く公開されています.基本的には車輪の再発明は避けた方がよいので「あるものを使う」というスタンスは大事なことです.しかし,それではMicroPythonという言語の学習には適切ではありませんし,なによりMicroPythonの面白さを体験できません.
 そこで本書では,ありもののライブラリはなるべく使わず,自前でライブラリを作れるようになるための基本的なプログラミング技術を解説します.

本書の各記事は,月刊「Interface」に掲載された記事を再編集,加筆したものです.

目次

言語機能/対話型/メモリ管理/データ構造/ライブラリの取り込み
イントロダクション MicroPythonをお勧めする5つの理由

第1部 MicroPythonのプログラミング環境を準備する

ラズベリー・パイPico/Pico W,ESP32-DevKit-C-32Eですぐ試せる!STM32搭載NUCLEOやRA搭載RA4M1-CLICKERにも対応
第1章 本書で使うマイコン・ボード

Pico/Pico W/ESP32ですぐ試せる!書いたコードを1行ずつ動かせるようにする
第2章 プログラミング環境の構築

ビギナ向け,Pythonの開発環境としても使える
第3章 開発環境Thonnyの使い方

ピン/ネットワーク/ブート…デバイスやボード固有の情報をあらかじめ作り込んでおく
第4章 本書で使うベース・プログラムの準備

第2部 打ちながら覚える言語仕様

基本要素から四則演算,リスト,for文の使い方,インデントのルールまで
第1章 MicroPythonチュートリアル
基本となる要素:関数呼び出し,代入,変数
数値を計算する:演算子,組み込みモジュール
複数の要素を格納する:リスト
複数の要素で同じ処理を繰り返す:for文
プログラムの構造とインデントを理解する

数値型/文字列型/論理値型/None型
第2章 基本的なデータ型
1.1 リテラル…プログラムに値を直接表記したもの
1.2 数値型
1.3 文字列型
1.4 論理値型
1.5 特殊な型「None」

データを格納するために割り当てられたメモリ領域…と考えよう
第3章 オブジェクトと名前
2.1 全てのデータがオブジェクト
2.2 名前はオブジェクトを参照するもの

便利に使える4種類のデータ構造
第4章 リスト/タプル/辞書/集合…コレクションの使い方
3.1 リスト
3.2 タプル
3.3 辞書
3.4 集合

データの表記/生成/参照方法とシフト演算/ビット演算まで
第5章 マイコンでも使う「バイナリ・データ」型とその演算
4.1 データの表記/格納する型/生成
4.2 シフト演算とビット演算

累積代入文と複数の変数への同時代入
第6章 プログラムの代入文
累積代入文
複数の変数への同時代入

実行の流れを制御する複合文
第7章 if/for/while…プログラムの制御構造
6.1 条件判定に使うif文
6.2 繰り返しの処理を行うfor文
6.3 指定した条件まで処理を繰り返すwhile文
6.4 実行中のループの流れを制御するcontinue文とbreak文

引数の扱いから変数共有の方法まで
第8章 関数
7.1 定義や例,引数の扱い方
7.2 関数を呼び出すときの引数
7.3 関数間で変数を共有する方法

定義/使用法/拡張から継承まで
第9章 クラス
8.1 クラスの定義/使用法/拡張
8.2 クラス変数
8.3 クラス継承
8.4 特別な関数/変数名

使い方から作り方まで
第10章 モジュール
9.1 モジュールとは…プログラムを再利用する仕組みの1つ
9.2 使用法
9.3 階層関係のあるモジュール
9.4 モジュールの作り方

疑似的なマルチタスクのメカニズム
第11章 非同期処理
10.1 非同期処理とは
10.2 コルーチン

エラー・メッセージの表示や中断キー対応など
第12章 例外処理
11.1 例外処理とは…プログラムを中断してエラーを通知する
11.2 例外処理の書き方

MicroPython固有の機能やプログラムの記述をシンプルにする構文
第13章 その他の言語仕様
12.1 MicroPython固有の機能
12.2 プログラムの記述をシンプルにする構文

第3部 ネットワーク接続

Pico W/ESP32単体でネットワークに接続する方法
第1章 接続編(1)…直接Wi-Fiに接続する

マイコン(Pico)とモジュール(ESP32)間でUART通信
第2章 接続編(2)…外付けWi-Fiモジュールを使う

UART接続の外付けモジュールでWi-Fi以外の通信もお手軽に使える
第3章 接続編(3)…外付けSigfoxモジュールを使う

双方向通信でLEDのON/OFFを制御
第4章 通信編(1)…MQTT

REST APIを使って天気情報を取得する
第5章 通信編(2)…HTTP

第4部 センサ・データの取得

デバイスの仕様書から必要な情報を読み取ってMicroPythonでプログラム化する
第1章 シリアル通信(I2C)で出力するセンサ

測定データを時間に変換して出力する超音波距離センサHC-SR04で試す
第2章 パルス幅で出力するセンサ

土壌水分センサのアナログ電圧出力をA-Dコンバータで読み取って表示する
第3章 アナログ電圧や電流で出力するセンサ

第5部 データの表示

GPIO操作とタイマ割り込みの基礎
第1章 マイコンI/Oの基本…LED点滅

SPI接続で定番の制御チップSSD1331を操作
第2章 グラフィックスLCDで波形や文字を表示する

第6部 Wi-Fiマイコンの良さを生かしたクラウド連携の製作例

(1)アナログ・センサ計測,(2)小型ポンプ制御,(3)クラウド連携
第1章 自動水やりシステムの製作

付録

Wi-Fi通信/排他制御/MQTT通信/A-D変換/I2C/SPI/GPIO/タイマ割り込みなど
第1章 モジュールのリファレンス

変数値の埋め込み/書式文字列/フォーマット済み文字列リテラル
第2章 文字列のフォーマット

UART接続でHTTPやMQTT通信!ダウンロードから書き込み方法まで
第3章 ESP32をWi-Fiモジュールとして使う方法

MQTT X,Talend API Tester
第4章 MQTTクライアントやREST APIの設定

OpenWeather API,Shiftr.io,Sigfox,スプレッドシート
第5章 天気予報/MQTT/920MHz通信/クラウド表…ウェブ・サービスの設定

特別付録 逆引きMicroPythonプログラム集

コンパイル不要,シンプルな言語仕様,豊富なライブラリ…
イントロダクション MicroPythonがプロトタイプ開発に向く理由

ESP32の基本仕様からファームウェアの書き込み,ファイル転送,Lチカまで
第1章 開発環境を整える

スイッチやボリューム,ロータリ・エンコーダを接続
第2章 入力検出

静電容量,磁気,赤外線(人感),温湿度/気圧の検出
第3章 センサによる測定データの見える化

LED調光,モータ制御,電子音再生
第4章 PWM出力

キャラクタ・ディスプレイやグラフィック・ディスプレイ
第5章 小型ディスプレイによる表示

定番SPI/I2C/UART
第6章 シリアル通信

(1)ESP32同士(2)音声合成ICとESP32
第7章 UART接続の実例

フラッシュ・メモリやSDカードを読み書き
第8章 ファイル・システムの利用

HTMLやMQTTでインターネットに接続する
第9章 ネットワーク接続

消費電流を半分以下に節約
第10章 省電力モードの使い方

現在時刻の表示やウェイト/タイマ処理の使い方
第11章 日時の取得と時間管理

プログラム実行の高速化
第12章 コード改善

使用量の可視化と軽量化
第13章 メモリ管理

本書の各記事は,月刊「Interface」に掲載された記事を再編集,加筆したものです.