目次

はじめに

想定する読者
サポートページ
あったほうが良い知識
なくても良い知識
必要環境
本書で参照するソースコードのバージョン
本書の構成
免責事項
表記関係について
底本について

第1章 mruby/cの小さな世界へ向けて

1.1 この本の目的〜どんなことができるようになりたいか〜
1.2 対象とするマイコン
1.3 対象開発言語(なぜmruby/cなのか?)
1.4 開発環境
1.5 本書のゴール

第2章 まずはmruby/cを触ってみる

2.1 ESP32環境の準備
2.2 Arduino IDE環境の準備
2.3 Hello mruby/c World!

第3章 mruby/cを使いこなしてみる

3.1 機能追加の必要性
3.2 機能拡張の方法
3.3 Remote mirbを作ってみよう

第4章 より深くmruby/cを知ってみよう

4.1 mruby/cの構造
4.2 mrubyバイトコードのバイナリ構造
4.3 mrubyバイトコードとmruby/c VMの関係
4.4 mruby/cのオブジェクト表現
4.5 グローバルに管理される情報
4.6 opcodeの実行
4.7 基本的なopcode

第5章 Arduino Unoでmruby/cを動かしてみよう

5.1 Arduinoとは
5.2 micro-mruby(mmruby)への道
5.3 実装してみる
5.4 さあ、動かしてみよう

第6章 mrubyの他にも小さな世界

6.1 MicroPythonと比較してみよう
6.2 MicroPythonとは?
6.3 MicroPythonの特徴
6.4 他にも小さな世界
6.5 どんな言語を使って開発するべきか?

付録A mruby/cの補足情報

A.1 Arduino向けmruby/cライブラリーの作り方

付録B mrubyの補足資料

B.1 mrubyのopcodeとmruby/cの対応範囲

さいごに

謝辞
技術書典5後日譚

はじめに

 本書を手にとっていただきありがとうございます。本書は、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」で頒布されたものを底本としています。

1. 「えむるびーすらっしゅしー」と読みます

第1章 mruby/cの小さな世界へ向けて

Hello mruby/c world!

本章では本書の目的を確認しつつ、mruby/cがどんなもので、どうしてmruby/cを使いたいのかについて説明します。

1.1 この本の目的〜どんなことができるようになりたいか〜

 本書の目的は、「mruby/cを使ってマイコンを動かしたい!」です。

 しかし、なぜmruby/cを選ぶのか?とか、電子工作初心者の方ならば、そもそもマイコンってどんなもの?といった疑問もあるでしょう。そこで、最初に基本的なポイントを確認します。

1.2 対象とするマイコン

  マイコン(マイクロコントローラ)と一口に言っても、その言葉が指す範囲は曖昧で、人によってイメージする範囲に隔たりがあります。

 例えば、有名なRaspberryPiはLinuxも余裕で動く、一昔前のパソコンレベルのスペックを持っています。しかし物理的なサイズは小さいので、人によってはマイコンと呼ぶ方もいるかもしれません。

 一方、家電製品など色々な製品に組み込まれている小さな制御用マイコンの中には、搭載しているRAMが1KBもないものもあります。

 RaspberryPiは安くて強力です。しかし、大は小を兼ねる、と何にでも適用できるわけではありません。強力な分、メインのチップ以外にストレージやRAMは外付けが必要です。処理性能が高いことのトレードオフとして消費電力も大きいため、電池で長時間動かすような用途には向きません。要は適材適所が大事、ということになります。

 本書ではRaspberryPiより小さい、マイコン単体がワンチップでROMとRAMを備えたものをターゲットとしています。このようなマイコンのメリットとして、次のような点があります。

 ・安い

 ・小さい(ものもある)

 ・SDカードをストレージに使うようなものと比較して、プログラムが壊れるリスクが少ない

 ・自分でマイコンチップを買って、オリジナルハードウェアを作れる

 本書では特に、電子工作など個人で物を作りたいひとにとって手に入りやすく、ユーザーが多いものを選択します。具体的には、「ESP32」と「Arduino Uno」です。これらの概要は次のとおりです。

ESP32

モジュールひとつが1000円未満で入手可能。WiFi、Bluetoothを搭載しつつ、大容量のROMとRAMを備えています。最近注目されているマイコンです。

Arduino Uno

Makerブームの火付け役にもなったマイコンボード。ライブラリーが充実しています。互換製品も含め、安くボードを手に入れることが可能です。

試し読みはここまでです。
この続きは、製品版でお楽しみください。