📖

「基礎から学ぶ TinyGoの組込み開発」を読んだ感想

2024/09/24に公開

はじめに

どうも、セカンドセレクション前野です。

弊社は、IoTシステムをメインに開発しており、近頃では組み込み機器の情報をクラウドへ一気にデータをあげることが多くなっております。

そのためか、以前はC言語のみというのが多かったのですが、クラウドと組みあわさってきたせいかリアルタイム性より開発の手間を減らすことを重視してPythonが多くなってきております。

利便性と要員を集めるにはPythonはよいのですが、やはりリアルタイム性を求めるとC言語と言うこととなってしまいます。
しかし、このごろはRustのようにリアルタイム性を担保しつつメモリーリークに対処する言語が出てきています。

しかし、Rust言語の敷居は高くなかなか導入が進みません。
先日、Rustで言語を作る本の作者の方もRustは自分用のツールを作るぐらいにしか使っていないとおっしゃっていました。

で、組み込みで使えるGO言語TinyGoの出番となります。

GO言語自身たくさん機能があるわけでなく、比較的単純な言語という認識でいます。メモリー管理はGCを使って管理しています。

Rustほど速くはないけどPythonより速いと言うところでしょう。

そんな単純なGO言語からリッチなライブラリを削って組み込み向けにしたものがTinyGoです。

すべてのマイコンのすべての機能をサポートできているわけではないですが、日々拡充していっています。

ちなみに本の作者は、TinyGo大好きでコントリビューターにまでなってしまった人なんで、この本を読めばTinyGo愛が十分感じられます。

https://www.amazon.co.jp/基礎から学ぶ-TinyGoの組込み開発-高砂正哲/dp/4863544006

https://sago35.hatenablog.com/entry/2022/11/04/230919

本の感想

本は、大きく分けて下記の構成となっています。

  1. セットアップの方法
  2. GO言語の基本
  3. TinyGoでマイコンを制御する

セットアップの方法

当方はまだTinyGoをセットアップしたことがないので、わかりません。
LinuxとWindowsでやってみようかと考えていますが、Linux方が簡単じゃないのかなと見受けられます。

GO言語の基本

この章は64頁となっていますので、そんなに難しくない言語と言って差し支えないでしょう。

ループはforしかありませんし、クラスもありません。
簡素で並列処理を簡単に行えるようにしているのが目的のように見受けられます。

TinyGoでマイコンを制御する

この本ではマイコン(Wio Terminal)を使って例題を書いています。

Wio Terminalを使っているのもなかなか絶妙で、Raspberry Pi picoに比べて、液晶画面や入力ボタン、いろいろな入力出力を備えています。

それに一通りの入力出力をもっているので、初心者向きといえるでしょう。

よくあるエルチカ(LEDチカチカ光らす)だけで終わらずに、I2CやSPIでデータを取得して結果を画面に表示できると「俺すげー」と思えるようになります。

でも電気という見えないものを相手に七転八倒するのも勉強になります。どうやったら電気が見えるんだろうと考えていたら、オシロスコープやデジタルスコープを買っていました。

近頃ではRaspberry Pi Picoで簡易的なオシロスコープもありますので、是非とも製作して電気の世界を覗いてみましょう。楽しいですよ。

後、Wio Terminalは下記のGitHubを参照してください。

https://seeedjp.github.io/Wiki/Document_Guide/Wio_Terminal.html

気をつけておいた方がいいのは、I2Cというインタフェースはハマると抜け出せないことがあります。
というのも、信号線2本を抵抗器で電源へつなぐ必要があるのですが、抵抗の値によっては、信号が1や0になりきらなくてエラーとなってしまう場合があります。
I2Cで通信エラーが発生したら抵抗の値を大きくしたり小さくしてみるのもありです。
オシロスコープで信号線の波形を見れば一発でわかるのですが、初心者にはハードル高いですよね。

なるべく推奨する抵抗器の値を使うのが吉です。

最後に

これほど読みやすい組み込み本は見受けられませんので、初心者の方におすすめします。
できれば、Wio Terminalで1つずつ実行しながら試していくのがよいです。

この本を新人教育やインターン教育に使えたらいいなあと考えますが、なかなか難しいです。
その前にコンピュータという概念を教育しないといきなりは大変です。

TinyGoについては、M5StackでWi-Fiをサポートしてくれるとすごく嬉しいです。できていないものは自分で何とかするのがいいんですが、なんとかなるもんなんでしょうか。
そこには沼が待っているような気がしてならないのですが、やってみたいのはやってみたいです。

セカンドセレクション

Discussion