はじめに
第1章 mruby/cの小さな世界へ向けて
第2章 まずはmruby/cを触ってみる
第3章 mruby/cを使いこなしてみる
第4章 より深くmruby/cを知ってみよう
第5章 Arduino Unoでmruby/cを動かしてみよう
第6章 mrubyの他にも小さな世界
付録A mruby/cの補足情報
付録B mrubyの補足資料
さいごに
本書を手にとっていただきありがとうございます。本書は、mruby/c1をマイコン上で動かして遊んでみたい人のために書かれた技術書です。
本書の底本を頒布した技術書典5開催時点(2018年10月)には、mruby/cがテーマである本はまだ世の中に存在しませんでした。この本は、自分が知りたいレアな技術こそ読んでみたい!という思いを胸に、mrubyのようなスクリプト言語をマイコンで動かすことに興味がある方々に届けばと思いながら執筆しました。
筆者は、業務で電化製品や工業製品に組み込むソフトウェアを開発しています。その際のプログラミング言語の多くは、やはりC言語やC++です。
C言語以外でもマイコンなどの環境でももっと気軽にプログラムを書きたいと思い、mrubyをずっとウォッチしていました。ただmrubyはマイコンで動かすには少々重すぎるため、これまで本格的に触ることはありませんでした。しかし、mruby/cなるプロジェクトを見つけて、これだ!と感じました。
執筆の1年ほど前から本格的に始めた電子工作とmruby/cを組み合わせたら面白い!そして、そんな技術について書かれた本を自分が読んでみたい!と言う思いからこの本が誕生しました。
本書では、次のような読者を想定しています。
・Rubyをさわったことがある人
・Cをある程度使いこなせる人
・マイコンでRubyのスクリプトを動かしてみたいと思ったことがある人
私のブログで誤記等の訂正や、関連ソースコードへのリンクなどを掲載しています。本書に関する最新の情報は、こちらを参照ください。
・https://silentworlds.info/my-books/
筆者のTwitter(https://twitter.com/kishima)等で直接話しかけて頂いても大丈夫です。
・Rubyの基礎知識
─この本ではRuby自体に関する説明は特に行いません。筆者自身が仕事でバリバリRuby使っているというわけでもないので、それほど高度な知識は必要ないでしょう。ただし、Rubyのプログラミング言語としての仕組みに対する興味は多少あったほうが、読んでいて楽しいかと思います。
・C言語の基礎知識
─本書ではRuby、mruby、mruby/cについて取り上げますが、それらをどう使うか、というよりどうすれば狙った環境で動かせるか、という話題が中心です。mruby、mruby/cはC言語で書かれていますので、本書に出てくる実装の話題は主にC言語がメインとなります。そのため、ポインタ変数や関数ポインタの使い方などの基本的なC言語の知識が必要ですが、特殊なことは行いません。ArduinoはC++がベースですが、基本的には既に存在するクラスや関数を呼ぶだけなので、本書の範囲ではC言語の知識だけで十分です。細かいことを知らなくても、GitHubのリポジトリーからcloneしたソースをビルドするだけで、とりあえず動作を試してみることができます。
・Arduinoやマイコンの基礎知識
─本書では、ArduinoやArduino互換の機能を持つESP32などのマイコンを適用例として解説しています。それぞれのマイコンについては概要の説明に留まるので、細かい使い方などの詳細については各自で調査、学習してください。
・mrubyの知識
─mrubyはRubyと言語的に大きな違いはありません。Rubyについての知識があれば、本書の範囲ならばmruby固有の知識は不要です。mruby固有の情報については、その都度説明します。
・mruby/cの知識
─mruby/cについてはそもそもまったく知らない方も多いでしょう。本書では言語自体についても説明します。本書の目的のひとつは「mruby/cを知ってもらう」なので、その知識がなくても興味をもてる内容を心がけました。
本書の中で使用している環境は次の通りです。
・PC(OS:Windows、他でも可)
─本書では、筆者の環境の都合もあり、Windows+Cygwinの環境で説明しています。Linux/MacOSでは細かい操作は異なりますが、概ね同様に確認可能のはずです。
・Ruby実行環境
─mrubyのビルドのために必要です。本書では、Cygwinのパッケージをそのまま利用しています。
・Arduino IDE
─マイコン用のビルド環境として必要です。
・ESP32搭載ボード
─第2章、第3章で用います。
・Arduino Uno
─第5章で用います。UnoよりROM、RAMが多いその他のArduinoシリーズのボードで代用も可能です。
特に断りがない限り、本書ではmrubyとmruby/cは次のバージョンを参照しています。
・mruby ver1.3
・mruby/c 2018/7時点のもの
本書の構成は次のとおりです。
・第1章
─本書の背景や目的、mruby、mruby/cの概要を説明します。
・第2章
─実際にESP32搭載ボードを利用して、mruby/cを動かしてみるチュートリアルです。
・第3章
─第2章の内容から更に踏み込んで、実際のボードで実用的な開発をするために必須となる、mruby/cの機能拡張方法について説明します。
・第4章
─mruby/cがどのように動いているのか、主にバーチャルマシン(VM)の観点から説明します。
・第5章
─より深く踏み込んで、Arduino Unoにmruby/cを(若干無理矢理に)移植する方法について説明します。
・第6章
─MicroPythonなどの組み込み向けスクリプト言語の紹介を行います。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典5」で頒布されたものを底本としています。
Hello mruby/c world!
本章では本書の目的を確認しつつ、mruby/cがどんなもので、どうしてmruby/cを使いたいのかについて説明します。
本書の目的は、「mruby/cを使ってマイコンを動かしたい!」です。
しかし、なぜmruby/cを選ぶのか?とか、電子工作初心者の方ならば、そもそもマイコンってどんなもの?といった疑問もあるでしょう。そこで、最初に基本的なポイントを確認します。
マイコン(マイクロコントローラ)と一口に言っても、その言葉が指す範囲は曖昧で、人によってイメージする範囲に隔たりがあります。
例えば、有名なRaspberryPiはLinuxも余裕で動く、一昔前のパソコンレベルのスペックを持っています。しかし物理的なサイズは小さいので、人によってはマイコンと呼ぶ方もいるかもしれません。
一方、家電製品など色々な製品に組み込まれている小さな制御用マイコンの中には、搭載しているRAMが1KBもないものもあります。
RaspberryPiは安くて強力です。しかし、大は小を兼ねる、と何にでも適用できるわけではありません。強力な分、メインのチップ以外にストレージやRAMは外付けが必要です。処理性能が高いことのトレードオフとして消費電力も大きいため、電池で長時間動かすような用途には向きません。要は適材適所が大事、ということになります。
本書ではRaspberryPiより小さい、マイコン単体がワンチップでROMとRAMを備えたものをターゲットとしています。このようなマイコンのメリットとして、次のような点があります。
・安い
・小さい(ものもある)
・SDカードをストレージに使うようなものと比較して、プログラムが壊れるリスクが少ない
・自分でマイコンチップを買って、オリジナルハードウェアを作れる
本書では特に、電子工作など個人で物を作りたいひとにとって手に入りやすく、ユーザーが多いものを選択します。具体的には、「ESP32」と「Arduino Uno」です。これらの概要は次のとおりです。
ESP32
モジュールひとつが1000円未満で入手可能。WiFi、Bluetoothを搭載しつつ、大容量のROMとRAMを備えています。最近注目されているマイコンです。
Arduino Uno
Makerブームの火付け役にもなったマイコンボード。ライブラリーが充実しています。互換製品も含め、安くボードを手に入れることが可能です。