「基礎から学ぶ TinyGoの組込み開発」を書きました

↓↓↓ お知らせ (2022/11/18) ↓↓↓

ネットワーク部 (RTL8720DN) のファームウェアアップデート方法の修正があるため必ず確認してください。 具体的には、

$ git clone https://github.com/Seeed-Studio/ambd_flash_tool

ではなく

$ git clone https://github.com/Seeed-Studio/ambd_flash_tool --branch JP

を使うようにしてください。 この情報を含め、正誤表を更新していっていますので、ご確認ください。

tinygobook/correct.md at main · sago35/tinygobook · GitHub

↑↑↑ お知らせ (2022/11/18) ↑↑↑


2022/11/12 に「基礎から学ぶ TinyGoの組込み開発」(C&R研究所) が全国書店、 Amazon 等で販売開始となります。
※早いところは 2022/11/10 だそうです

上記ツイートにも書いたように TinyGo の組込みを扱う本として最高の一冊に仕上げました。 是非手に取って、実際に手を動かしてみて TinyGo での組込み開発にトライしてみてください。

目次とか

3 章では「Goの基本」ということで、 TinyGo で必要となる Go の基本を短くまとめています。 3 章は 66 ページと短くまとめつつも unsafe に 6 ページ、 cgo に 9 ページと、いわゆる通常の Go の本ではありえない比率になってます。 cgo は Go と C 言語資産と連携するためのもので、 TinyGo に限らず使える話なので、あまり触ったことが無い人もさらっと目を通すと良さそうです。

5 章では「各ペリフェラルの使い方」ということで、 TinyGo が対応している各ペリフェラルの使い方や、 I2C / SPI を用いたドライバーの書き方のさわりの部分などをコードとともに説明しています。 本書でターゲットとしている Wio Terminal のうち、 TinyGo が対応しているほとんどの機能を説明しています。 この章の内容は Raspberry Pi Pico の RP2040 などから TinyGo を使いたいときにも参考になるはずです。

6 章「ディスプレイに表示する」では、最初にパソコン上の Simulator である sago35/tinydisplay でコードを書き、同じコードを Wio Terminal で動かす形で進めます。 パソコン上で画面の構成要素などを作りこむことができるので快適に開発することができます。

7 章「ネットワークに接続する」では、 Wio Terminal に搭載された RTL8720DN を用いてネットワークに接続します。 Go の net/http が直接動くわけではないですが、 tinygo.org/x/net/http を使って、ほぼ同じように動作させることができます。 もちろん goroutine を使って並行動作させることができます。

8 章「アプリケーション作成」は、それまでの章で学んだことを組み合わせてアプリケーションを作成します。 「福笑い」を作った後は、是非 Twitter に投稿してください。

  • Chapter 1 TinyGoとは
  • Chapter 2 開発環境のセットアップ
  • Chapter 3 Goの基本
  • Chapter 4 TinyGo Internals
  • Chapter 5 各ペリフェラルの使い方
  • Chapter 6 ディスプレイに表示する
  • Chapter 7 ネットワークに接続する
  • Chapter 8 アプリケーション作成
  • 付録 デバッグ

Twitter の hashtag

Twitter に投稿する時の hashtag は #tinygo と #tinygobook を使ってください。

twitter.com

サポートサイト

本書のサポートサイトは以下にあります。 よくある質問と回答や、正誤表、8 章のソースコードなどがあります。

執筆時のあれこれ

自分自身が TinyGo の中の人 (コントリビューター) であり、機能追加をいろいろしていることにより、割と大変でした。 書籍内で説明しにくい部分などは、分かりやすくなるように TinyGo 本体側を変更したりしました。 また USB まわりの書き換えはかなり大事だったので、自分自身の USB への理解度が上がって嬉しかったけどそれなりに大変でした。 USB 周りも GopherCon EU (2022/07/30) で RP2040 のボードで使いたいから、と、 Wio Terminal (ATSAMD51) とは関係のないボードへのコントリビュートを無限にしてた記憶。

  • USB CDC のみ対応だった状態から USB HID や USB MIDI への対応を追加した
    • もとは、別の人が PR 作ってくれていてそれに乗っかって書籍を書く予定だった
    • が、割と難航していたのもあり、自分でまきとって PR を作成し 2022/07/頭 ぐらいにようやくマージとなった
  • 書籍の変更ができるギリギリのタイミングで TinyGo 0.26 がリリースされてしまった
    • 原因は、 tinygo monitor および tinygo flash -monitor というシリアルポートモニター機能追加がマージされたこと
    • これは、自分自身が minicom や Tera Term の説明が面倒で作成したものだが、 GopherCon Chicago (2022/10/06) で使いたいからと速やかにリリースされた
    • なお、書籍変更の〆は 2022/10/17 でした・・・

発売日などなど

書店だと早いところは 2022/11/10 ぐらいから買えるようになるようです。 なお、C&R研究所のオフィシャルストアでは、 PDF / EPUB が 2022/11/10 から購入可能となるようです。

まとめると以下のような感じです。

なお、 EPUB 版はすべて画像形式となっているそうなので、検索したい場合は PDF が良いらしいです。

代表的なリンクは以下です。

本書とは別売りのもの

最小限で行くなら Wio Terminal だけ買っておくと良いです。

その他必要なものは以下。 デバッガーは 基礎から学ぶ 組込みRust で既に作ったものがある場合は流用できます。 あるいは、 jlink などの他の CMSIS-DAP デバッガーを持っている場合はそれを使うことができます。

書籍執筆の経緯

いつか技術書書きたいなぁ、と思っていたのを忘れていたぐらいだったのですが、ある日 Twitter DM で「TinyGo の本書きませんか? (意訳)」 という話がありました。 組込みRust本の中の人 (@tnakabayashi@ciniml) に「TinyGo に詳しい人」という枠で紹介してもらったことがきっかけです。 当時国内で TinyGo と言えば私か、 @nobonobo か、という感じではあったけど、とても驚いたし嬉しかったです。 Wasm のことは書かないよ、組込みを題材とする形でいいですか?という部分で OK いただいたので、無事執筆となりました。

なお、技術書を書いてて「技術書出版に関わる人 / 会社というのは OSS にものすごく貢献している」と感じました。 技術書の執筆者に対価を払うという直接的な形で OSS にスポンサーしていることになるわけですから。 TinyGo の USB 機能の再設計が出来たこと、 RP2040 の USB 対応が実現できたこと、 tinygo monitor 機能、などは、 C&R研究所 および リブロワークス のおかげ、という側面があります。 本当にありがとうございます。

最後に

2022/11/12 に「基礎から学ぶ TinyGoの組込み開発」(C&R研究所) が全国書店、 Amazon 等で販売開始となります。 是非手に取って、実際に手を動かしてみて TinyGo での組込み開発にトライしてみてください。