昨年のMaker Faire Tokyo 2017などで展示されていたSPRESENSE™が7/31に発売されました。当社でも販売しています。6コアのプロセッサと小さい基板に興味を持っている方もいると思います。プログラムを作るのにArduino IDEが使えるので、新しいツールを導入するのはちょっとなーと思っている方も手を出しやすいですね。
Arduino IDEでスケッチ(プログラム)を作成して動作させてみたので一連の流れを記事にしました。
インストール
まずはSpresense Arduino Libraryなど、最初に必要なインストールを行います。インストール手順は公式リポジトリのドキュメントの手順通りです。 Spresense Arduino Library の使い方 なお、インターネット接続が必要です。
ドキュメントにあるLEDのスケッチが動作するところまで行ったら、次はオリジナルのスケッチを書いてみましょう。オリジナルのArduino UNOとの違いがいくつかあるので、そこは注意する必要があります。違いはSpresense Arduino Library 開発ガイドにまとめられています。
Arduinoとの違い
目立つ違いと言えば、シリアルポートが2つ用意されていてUSBシリアルとして使える(Arduino IDEからシリアルモニタで見える)ポートとデバイスとの通信に使えるポートが分かれていることと、EEPROMやFLASH ROM関連のクラスが使えないことでしょうか(FLASH ROM自体は搭載されていますが、Arduinoと同じクラスは使えません)。後述しますが有機ELデバイスを使って表示しようとした時に苦労しました。
基板を作りました
環境センサBME280と128×32dotの有機EL(OLED)が搭載できる基板を作りました。
BME280の接続
BME280はBoschのセンサで、温度、湿度、気圧がまとめて測れるので大変便利です。I2Cで接続してデータを読み出して加工することにより値が取れます。また1.8Vでも動作するのでSPRESENSEに直接つなげられるので使いやすいです。
今回はすでに公開しているBME280のライブラリを使いました。まったくサンプルスケッチに手を入れずに動作したので拍子抜けしました。
有機ELの接続
SPRESENSE用には何もせずにつながったBME280に比べて苦労したのが有機ELでした。前に書いたとおり、SPRESENSEではFLASH ROM関係のクラスが使えません。しかし有機ELのライブラリはAVRマイコンの少ないメモリにフォントを格納するためにFLASH ROMを使っているものがほとんどなのです。試した限りでは、AdafruitのSSD1306ライブラリとu8g2ライブラリがそうでした。
SPRESENSEはRAMがたくさんあるのでこれらのライブラリのFLASH ROM依存部分をRAM用に書き換えるという方法もあったとは思いますが時間がかかるかなと思いました。そもそも有機ELに何かを表示できればよかったのでI2Cでコマンドを一つずつ流し込んで何かしら表示させることにしました。
有機ELで表示
コントローラとしてSSD1306を使った有機ELモジュールに対して直接コマンドを送って画像を表示するブログ記事をmgo_tecさんが書かれていました。有機EL ( OLED ) SSD1306 を再検証してみました ( I2C 通信用 )
この記事のスケッチを一部使わせてもらい、Adafruitのライブラリのパラメータ設定を参考にしてスケッチを書いてまずは特定のピクセルを表示できるようになりました。
せっかく環境センサが載っているので、次は文字を表示したいと思いました。表示用のデータをどうやって作ろうかと思っていたら、美咲フォントを抜粋してArduboy用に変換したemutyworks / 8x8DotJPFontリポジトリがあるのを見つけました。このデータはフォントのデータを配列として書いてあるだけではなく、SSD1306で使いやすい縦横変換されたデータになっているのです。そこで、このデータから必要な部分を抜き出して自分のスケッチに埋め込みました。
また、スイッチサイエンスのロゴマークっぽいドット絵を描いてデータを拾って表示させました。8×8ピクセルで2階調なのでかなりガクガクになってしまいましたが、なんとなくそれっぽいものが作れたかなと思います。
今回のスケッチは github.com に公開しました。興味のある方はぜひご覧ください。