MySQL道普請便り

第87回 MySQLでケーキを焼いてみる

この記事を読むのに必要な時間:およそ 2 分

Arduinoを制御する

今回はarudino_filmataというRubyのライブラリを使ってArduinoを制御していきます。まずは,ArduinoにPCと通信するためのプロトコルを解釈するプログラムを書き込みます。ファイル->スケッチ例->Firmata->Standard Firmataとすると,Firmataプロトコルを解釈するためのスケッチが出てくるので,そちらを書き込みます。

続いて,Rubyのライブラリをgemコマンドを使ってインストールしましょう。gem install arduino_firmata とすることでインストールができます。

ここまでうまく行っているかどうかは,お手持ちのLEDなどをArduinoの12ピンとGNDに差し込んで,以下のコマンドを試してみることで確認できます。

LEDで制御がうまく行っているか確認

LEDで制御がうまく行っているか確認

コマンドを実行すると,12ピンに電流が流れ始めます。

$ arduino_firmata digital_write 12, true

以下のプログラムを実行すると,12ピンに流れていた電流が止まります。

$ arduino_firmata digital_write 12, false

ということで,これらを読んであげるUDF(User Defined Function)を作っていきます。

ちなみにですが,13ピンと接続すると表面実装されたLEDとも同期するため,通信の開始にスイッチが入ったり消えたりして慌てることになるので注意しましょう。

UDFを使って焼いてみる

UDFは,「第70回 UDFを動かしてみよう」で紹介したMySQLを拡張するための仕組みです。まずは呼び出される側のコードを用意します。

require 'arduino_firmata'

arduino = ArduinoFirmata.connect

begin
  arduino.digital_write 12, true
  sleep 60 * 15
ensure
  arduino.digital_write 12, false
end

次にこれを呼び出すUDFを用意します。

#include <mysql.h>

extern "C" {
bool bake_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void bake(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
void bake_deinit(UDF_INIT *initid);
}

bool bake_init(UDF_INIT *initid, UDF_ARGS *args, char *message){
    return 0;
}

void bake(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){
    system("ruby /usr/local/bin/bake.rb");
}

void bake_deinit(UDF_INIT *initid){
}

ということでUDFをコンパイルして組み合わせてみましょう。今回はsleepする時間は固定で15分となっています。なので実行すると,12ピンが15分間オンになります。

その他の解決策

「第3回 MySQLのバグかな? と思ったその時は」の記事で紹介されているMySQLのバグトラッキングシステムmysqlbugsの2番目に,「Does not make toast」(トーストが焼けない)というチケットがあります。これに対して,UDFとオーブントースターとリレーつき電源とRaspberry piを利用するという,今回参考にさせていただいた構成で対応する解決策があります。今回は直にArduinoを利用したので利用しませんでしたが,Raspberry piとそれを制御するUDFに関してはGitHubにコードが公開されているのでそちらをベースに進めても良いかもしれません。

実際にケーキを焼いてみました

今回はホットケーキミックスを利用してパウンドケーキを焼きます。レシピに関しては省略しますが,通常のホットケーキミックスにちょっとバターをアクセントとして加えております。

生地のセッティング

生地のセッティング

このようにセットをしてbakeコマンドを使ってみましょう。大体20~30分程度で焼き上がります。

焼き上がり

焼き上がり

今回はちょっと焦げてしまったのですが,そうなりそうな場合はアルミホイルをかぶせるなどして対応してください。

というわけで,MySQLでケーキを焼くことができました!

まとめ

MySQLはトーストも焼けるしケーキも焼けるしおもちだって焼けます!(ただし効率的かは保証しません)⁠ ちょっと異色な記事だったかもしれませんが,ぜひ皆さんも焼いてみてはいかがでしょうか。それでは皆さん良いお年を!

著者プロフィール

木村浩一郎(きむらこういちろう)

GMOメディア株式会社 技術推進室所属のWebアプリケーションエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。趣味は将棋。好きな戦法は四間飛車。

Twitter:@kk2170