ラズベリー・パイ Pico/Pico W攻略本

書籍情報

発売日 : 2023年03月15日

著者/編集 : Interface編集部

出版社 : CQ出版

発行形態 : 単行本

書籍説明

内容紹介

小型マイコン・ボード「ラズベリー・パイPico,Pico W(Wi-Fi対応版)」について,仕様から製作例までを幅広く解説.

目次

本書は月刊『Interface』2021年8月号に掲載した記事を中心に加筆・再編集したものです.

☆目次

●はじめに

◎51×21mmの小さなボディにデュアル・コアCPUと高機能I/Oコントローラを凝縮
●第1章 これがラズベリー・パイPicoだ

◎カメラやLCDを搭載するAI向け高機能タイプも
●第2章 RP2040搭載ボード&Pico用拡張ボード図鑑
RP2040搭載マイコン・ボード
ラズベリー・パイPico対応拡張ボード

◎1200円で買える無線マイコン・ボード!CとMicroPythonでLチカ&HTTPクライアントを試す
●第3章 PicoのWi-Fi版「Pico W」
ボード構成
ハードウェア仕様
C/C++SDK
MicroPython

◎搭載マイコン・チップRP2040は単体でも販売されるから製品開発にも使える
●Appendix1 今マイコンを始めるならコレ!Picoがお勧めな理由

◎ラズベリー・パイやPCのI/Oボードとして活躍しそう!そうなれば強力なIoT端末が作れそう
●Appendix2 Picoマイコンの立ち位置

◎教育/試作/業務まで幅広く使える
●Appendix3 公式の開発言語はC/C++とマイコン用Python
標準的な開発環境が公式から提供されている
MicroPython実行環境としてのラズベリー・パイPicoの特徴
初心者はCircuitPythonという選択肢もある

☆第1部 開発のための基礎知識

◎開発環境の構築方法からPico C/C++SDK付属サンプル・プログラムの試し方まで
●第1章 開発環境1…ラズベリー・パイ4を使った公式推薦のプログラミング
公式ウェブ・サイトから情報入手
開発環境の構築
任意…PCからラズベリー・パイ4Bの遠隔利用
サンプル・プログラム1…定番「Lチカ」
サンプル・プログラム2…UART通信
サンプル・プログラム3…A-D変換
サンプル・プログラム4…温度/湿度/気圧センサ
サンプル・プログラム5…時計機能RTC
サンプル・プログラム6…小型液晶ディスプレイ

◎ラズパイ4向けの公式C/C++ SDKをWindowsやLinuxで使う
●第2章 開発環境2…PCだけでPicoをプログラミング
PCだけでPicoの開発ができる
環境構築
サンプルを動かしてみる
新規プロジェクトの作成
PC同様にデバッガも使える
デバッグ環境の構築
Picoprobeでデバッグしてみる
統合開発環境を使ってGUIでデバッグ操作する

◎VS Codeからリモート接続!メインPC環境に手を入れずに公式SDKが使える
●第3章 開発環境3…PCからラズパイ経由でPicoをプログラミング
きっかけ…ラズパイ上の公式SDKをPCから快適に操作したい
セットアップの手順

◎Arduino IDEで開発したスケッチをステップ実行!ブレーク・ポイント設定や変数などの情報を見える化
●第4章 汎用デバッガ×VS Codeで構築するデバッグ環境
ステップ1:Arduino IDEにPicoの開発環境を追加する
ステップ2:汎用デバッガJ-LinkとPicoの通信を試す
ステップ3:J-Link×VS Codeでスケッチをデバッグする

◎新たな後継マイコンが登場してもアプリ側で対応しやすい
●第5章 公式C/C++ SDKの構造とRP2040ハード機能の使い方
SDKの階層構造
ボードの定義
RP2040のハードウェア機能を使うには

◎流入/流出電流値や内部プルアップ/プルダウン抵抗値など
●第6章 実験でチェック! I/O端子の実力
GPIOを動かす前に知っておきたい基礎知識
実験① GPIO端子はどれくらいの電流を流せるのか
実験② GPIO端子はどれくらいの電圧を出せるのか
実験③ GPIO端子にはどれくらいの電圧を加えられるか
実験④ プルアップ/プルダウン抵抗の効果

◎多数ある拡張ボードを利用してサクッと試作
●第7章 Arduino互換ボード利用のススメ
Arduino Uno系の基板のピン配置
Arduinoシールドのピン配置
Picoの互換基板のデザイン
Arduino IDEによる動作確認

◎新定番になりうるのか?スペックの違いから特徴が生きる用途を考える
●Appendix1 700円マイコンESP32とPicoを比べてみた
Picoの特徴
こんな用途に

☆第2部 変幻自在プログラマブルI/O

◎ハードウェア詳細とC/C++ SDKによる開発
●第1章 使い方完全マニュアル
PIOのハードウェア
プログラムには専用のアセンブリ言語を使う
PIOアセンブリ命令
実装例1:UARTを実装してみる
実装例2:PIO版ウォッチドッグ・タイマを実装してみる

◎正確なタイミングの高速I/Oを作れる
●第2章 プログラマブルI/Oの機能と簡易ライブラリ
プログラマブルI/O機能のメリット
C言語による開発環境の構築
まずはLチカで動作確認
I/Oピンを経由した信号出力
Armプロセッサとの接続や信号入力
異なるプログラムの並列実行

◎GPIOにはできない速度!リアルタイムがうれしい
●第3章 簡易ライブラリで複数のRCサーボや測距センサを動かす
作例1:SPI入出力の処理
作例2:PCからのRCサーボモータ制御
作例3:PCへの距離センサ測定値伝送
作例4:PCのパラレルI/Oポート

◎PIOアセンブリ・コードが手軽に作れる
●第4章 実機がなくてもデバッグできる簡易PIOエミュレータ
開発のきっかけ
エミュレーションの行い方
PIOアセンブリ・コードの書き方
実機での動かし方
複数のステート・マシンを使うアプリの作成方法

☆第3部 ホストにもデバイスにもなれるUSB機能

◎USBホスト&デバイスのサンプル・プログラムを動かす
●第1章 USB周りのハードウェア概要とライブラリTinyUSBの使い方
各機能ブロックの役割
PicoはオープンソースのUSBライブラリを使う
ホスト側サンプル・プログラムを動かす
デバイス側サンプル・プログラムを動かす

◎PCからはHIDデバイス&マス・ストレージとして見える
●第2章 USBキーボードをCircuitPythonでサッと作る
USBキーボードの構成
PicoでCircuitPythonを使う手順
押されたキーを判別する仕組み

☆第4部 リアルタイムOSを載せる

◎アマゾンのバックアップで機能が充実!複数の処理もマルチタスクでシンプルに書ける
●第1章 FreeRTOSを載せる方法
開発環境
製作…電光掲示板を例にマルチタスク・プログラミング

◎安定性や対応マイコンの多さなどから試作に使いやすい
●第2章 ITRON仕様OS TOPPERS/ASPの載せ方
TOPPERS/ASPのPico対応
ビルドの前に
TOPPERS/ASPのビルド
動作実験

☆第5部 人工知能を載せる

◎開発環境のセットアップからマイコン向けサンプルの試し方まで
●第1章 フレームワークTensorFlowの準備
Pico用のTensorFlowリポジトリがある
ビルド環境として利用するラズパイ4のセットアップ
hello_worldで動作確認
hello_world以外のサンプルを試す際にはセンサの実装が必要

◎加速度センサの値からスクワットやダンベル動作を推論する
●第2章 オリジナルの学習済みモデルを動かす
ハードウェア
マイコン向けのAIサンプル・アプリケーションを入手する
データ収集のための変更点
データ収集
学習済みモデルを作る
推論環境を作る
推論を実行する

☆第6部 限界突破!開発事例

◎ちょっとしたデバイスをサッと動かすのにPicoは便利
●第1章 受信モジュールを利用したFMラジオの製作
ハードウェア
ソフトウェア
Picoラジオを組み立てる
コラム Picoとラジオ・モジュール間の消費電流を下げるヒント

◎固定小数点演算/フィルタ/オシレータの工夫で
●第2章 リアルタイム処理のために軽量化!シンセサイザの製作
ハードウェアの構成
開発環境
シンセサイザ3つの主要部品
プログラム① 浮動小数点演算で信号処理
プログラム② 固定小数点演算で信号処理
プログラム③ 軽量化のための工夫① オシレータを軽量化1
プログラム④ 軽量化のための工夫② オシレータを軽量化2
プログラム⑥ 軽量化のための工夫④ フィルタを軽量化2
プログラム⑦ さらなる軽量化のための工夫⑤ フィルタを軽量化3
プログラム⑧ 軽量化のための工夫⑥ フィルタを軽量化4
プログラム⑨ 軽量化のための工夫⑦ アンプを軽量化
軽量化のまとめ
プログラム⑩ USB通信に対応
コラム シンセサイザの制御

◎前章に改良を加える
●第3章 音の時間変化に対応したシンセサイザ作り
開発環境
プログラム1:オシレータ/フィルタ/アンプをモジュレーションに対応させる
プログラム2:LFOの実装
プログラム3:EGの実装
プログラム4:制御処理を軽量化1
プログラム5:制御処理を軽量化2
プログラム6:USB通信に対応させる

◎リアルタイムOS TOPPERS/ASPを利用する
●第4章 128×128ドット・マトリクスLEDによる掲示板
PIOを使ってマトリクスLEDに出力するサンプルhub75
製作する電光掲示板
ハードウェア
ソフトウェア
ビルド環境の構築

☆第7部 Windowsでマイコン直たたき!RP2040の本質に迫る

◎C/C++でHello world!&Lチカ
●第1章 自前のプログラムをビルドする
サンプル・プログラムをビルドする
自前のプログラムをビルドする

◎WindowsのPowerShell内でmake一発でプログラムをビルドしたい
●第2章 公式SDKを使わずにLチカとUART通信
公式SDKを使いたくない
ブート・シーケンスのおさらい
スタートアップ・ファイルを作る
メイン・プログラムを作る
実行形式のバイナリ・ファイルを生成
UARTを使う
コラム SIO以外のレジスタもビット単位に書き込めないのか?

◎マルチコア・プログラムを公式SDKを使わずにアセンブラから書き下ろす
●第3章 LチカとHello World!を2コアで並列動作させてみた
公式SDKを利用しないプログラム作り
2つのコアを動かす
コラム 盲腸のようなコードは何のため?

◎PIO専用アセンブラを使ってPWMパルス生成とUART通信
●第4章 噂のプログラマブルI/Oはこう使う
ステート・マシンの命令
2つのステート・マシンを同時に動作させる
PCとUART通信する
サイドセットを使ってみる

☆第8部 Picoのプロトタイプに! MicroPython

◎MicroPythonと相性抜群のThonnyで始める
●第1章 開発環境を構築する
実行環境をPicoに書き込む
開発環境Thonnyを導入する
Thonnyが便利なポイント
サッと動かす…Importして数行書くだけ

◎シリアル通信/PWM/ウォッチドッグ・タイマなど
●第2章 GPIO活用リファレンス
Picoのペリフェラルの使い方
Pin:GPIOにアクセスする
ADC:アナログ値を読み取る
UART:シリアル通信その1
I2C:シリアル通信その2
SPI:シリアル通信その3
PWM:パルス幅変調信号を出力
WDT:ハングアップを監視
Timer:タイマを利用
Signal:正論理/負論理を意識したI/O制御

◎浮動小数点演算とマルチスレッドの実行時間を他のマイコン・ボードと比較
●第3章 MicroPython×Picoの実力検証
PicoのMicroPythonの実力を検証
コラム 小さい数値の内部表現

◎ライブラリ一覧とプログラム開発のポイント
●第4章 PIOプログラミング[導入編]
MicroPythonにはPIO用のライブラリも用意されている
命令を効率よく実行する仕組み
移植性を高めるためにGPIOの割り当てを抽象化
MicroPythonからPIOでLチカしてみる
コード・サイズを削減する工夫
コラム1 正確なディレイ・サイクルの作り方
コラム2 PIO向け関数のコンパイル処理

◎定番Lチカからスイッチ入力,ロータリ・エンコーダ用ドライバまで
●第5章 PIOプログラミング[事例集]
プログラム① NOP命令だけを実行する
プログラム② LED点滅
プログラム③ MicroPythonからLED点灯を制御
プログラム④ スイッチON/OFF状態をPIOから取得する
プログラム⑤ IRQを利用しステート・マシン間で処理を同期化する
プログラム⑥ ロータリー・エンコーダ用ドライバの作成

◎ESP32向けに書いたMicroPythonプログラムをPico向けにCircuitPythonで書いてみた
●第6章 CircuitPythonの特徴と互換性
2つの言語の使いやすさ
入手可能なバージョン
プログラミングの観点で2つの言語の相違点,ソースコードの相互利用について
ESP32版MicroPythonで作成したサンプルからの移植

☆第9部 C++を利用してPico用のMyicroPython拡張モジュールを作る

◎STM32向けを流用して,ラズベリー・パイPicoとRZマイコンで試す
●第1章 開発の準備…環境構築とビルド&拡張の手順
MicroPythonの内部アーキテクチャ
MicroPythonの開発ツール
GitHubリポジトリのフォルダ構成
ソースコードのビルド
拡張モジュールを作るには
OpenOCDによるデバッグ

◎Arduino用C++ライブラリを改造してPico用MicroPythonの拡張モジュールに作り替える
●第2章 拡張事例1…8×8マトリクスRGB LED
拡張機能の実装
実際に表示させる

①フォント描画,②SPI通信,③ファイル・システム
●第3章 拡張事例2…SPI接続のLCD
拡張機能の実装
LCDへの画像ファイルの転送

◎ESP8266を利用しクラウドAWSにMQTTでトピックをパブリッシュするまで
●第4章 Wi-Fiネットワークの追加
MicroPythonのネットワーク・アーキテクチャ
Wi-Fiネットワーク・ドライバの実装
クラウドへのアクセス

◎LCDやカメラの拡張モジュールを作る
●第5章 おまけ…ルネサス・マイコンでの事例
GR-MANGOボードの仕様
GR-MANGO向けのMicroPythonを作るには
マイコン・レジスタにアクセスするモジュールを作る
MicroPythonでRZマイコンの汎用入出力ポートを操作する
LCDおよびカメラ関連の周辺機能を用意する
Pico向けに作ったLCD拡張クラスとDISPLAY拡張クラスの実装
CAMERA拡張クラスの実装
コラム MicroPythonのプログラムの学び方

☆第10部 Pico W活用事例

◎せっかくだからPico Wを簡単なウェブ・サーバにしてみた
●第1章 公式サンプルの活用法
Picoからのハードウェアの変更点
Picoからのソフトウェアの変更点
サンプル・プログラムのコンパイル
サンプル・プログラムを動かす
main.pyの自動起動方法

◎Pico Wファームウェア書き込み/Wi-Fiルータ接続プログラムの入手/HTTP通信
●第2章 Wi-Fiのアクセス・ポイントに接続して通信する

◎Eclipse Mosquitto/MQTT Explorer/Grafanaの導入
●第3章 Pico Wで得たセンサ・データをWi-Fi経由で取得する
ブローカ/クライアント・ツールのインストール
設定後にできるようになること
データの可視化には「Grafana」を使う

◎デバイス証明書/キーファイル/署名ファイルを整える
●第4章 AWS IoTへ接続しMQTTメッセージを送信する

◎プログラムをネットワーク経由で編集/実行できる
●第5章 MicroPythonのWebrepl機能を使うための設定と実行方法

◎pico sdk関連のライブラリやpico_wフォルダ中にあるサンプルの紹介
●第6章 Pico W用のサンプル・プログラムをビルドする

●Pico Wを使う際には技適特例申請が必要です(2023年1月時点)

著者情報

CQ出版株式会社
Interface編集部