2017年08月29日

ラズパイ+LuaJIT でゲーム

 ラズパイ+LuaJIT でゲームを作ってみました。

 大昔に8ビットマイコン用に作ったゲームのリメイクです。といっても誰も覚えてないけど。

 ジョイスティックを使って操作できるようになっています。キーボードでも遊べるけど、めっちゃ不便。

20170829-1.jpg

 ソースリストは https://github.com/toshinagata/rpi-ljsc にあります。cd examples; luajit fish.lua でどうぞ。

posted by toshinagata at 23:23| 日記

2017年08月20日

福岡・長崎旅行

 福岡・長崎に家族旅行に行ってきました。

 博多駅前に前泊。朝は西日本新聞。地元の新聞を読むのはいつも楽しみです。

20170820-1.jpg

 初日は、博多駅バスターミナルから西鉄バスで太宰府へ。バスは非常に混んでいました。高速を走るのに立ち客がいっぱいいたけど、いいのか? なお、半分ぐらいはアジア系の外国人だった。

 太宰府天満宮の太鼓橋。

20170820-2.jpg

 本殿への参道。

20170820-3.jpg

 お土産をいろいろと購入したあと、巡回バス「まほろば号」に乗って、竈門(かまど)神社に移動。ここが一味違った雰囲気で、たいへんよろしゅうございました。めちゃにぎわっている天満宮とは対照的に、ほとんど参拝客がいない。

20170820-4.jpg

 不思議な文が刻まれた参道の石碑。右に「春秋厳祭享」、左に「上下肅容儀」。意味はわからないが、「祭享」は祭り、「容儀」は容姿、「肅」はおごそかなさまを表すようだ。「春秋の祭事の時には身なりをちゃんとせい」みたいな意味なんでしょうか?

20170820-5.jpg

 このあと、太宰府市内に戻って、九州国立博物館を見学した。メイン建物の写真を撮り損ねたので、ホームページのスクリーンショットにてご勘弁。

20170820-6.jpg

 特別展(ラスコー展)はパスして常設展示だけを見たが、非常に面白かった。いわゆる「国立博物館」(=国立文化財機構直轄の博物館)の中では唯一の歴史系博物館ということだが、太宰府市の歴史的な位置付けも踏まえて、大陸との関連に多くのスペースが割かれている。

 2日目は特急かもめで長崎へ移動。

20170820-7.jpg

 ちゃんぽん発祥の店とされる「四海樓」で昼食。とても混んでいて、席につくまで40分ぐらい、注文してから運ばれてくるまでさらに20分ぐらい待ったかな。ちゃんぽんの味は、可もなく不可もなく、といったところ。麺はおいしいんだけど、スープがなんだか単調な味だった。もっとおいしいちゃんぽんを出す店が長崎にはあると思う。なお、窓際の席だったので、長崎港が一望できました。豪華客船が泊まっていた。

20170820-8.jpg

 路面電車を乗り継いで平和公園へ。ここに来るのは2回目なんだけど、前回は雨が降ってたんだよな。平和祈念像の背景は、やはり雲ひとつない青空がふさわしい。

20170820-9.jpg

 坂の上から浦上天主堂を望む。

20170820-10.jpg

 原爆死没者追悼平和祈念館に移動。坊が「ここも水なんだね」と一言。平和公園の入り口の「平和の泉」とモチーフが共通だ、ということ。原爆被害者にとって「水」が特別な意味を持つことに気づいてくれてよかった。

20170820-11.jpg

 再び路面電車を乗り継いで思案橋に移動、夕食にした。「ごまさば」が絶品。博多でもごまさば丼を食べたのだが、こちらの方がずっと鮮度が高い感じだった。博多あたりの鮮魚は長崎から送られているものも多いので、長崎の人は「魚のうまさでは福岡には絶対負けない」と思っているとのこと。ちなみに、サバの生食は九州独自の文化のようですね。

 ホテルに一旦戻った後、バスで稲佐山ロープウェイの登り口に移動して、稲佐山の夜景を鑑賞。天気が良くて、非常によく見えました。パノラマ写真を撮ってみた。ピントがイマイチだけど。

20170820-12.jpg

 翌日は、大浦天主堂からグラバー園へ。旧三菱第2ドックハウスから長崎港を望む。

20170820-13.jpg

 その後、眼鏡橋を見学。

20170820-14.jpg

 橋はほかにもいっぱいあるのに、眼鏡橋ばかりが有名なのは、なんだか不憫な感じがする。たとえばこの橋だって素敵じゃないですか。2つ北側にある東新橋。

20170820-15.jpg

 昼食は皿うどんのつもりだったが、予定を変更してトルコ風ライスのお店へ。コミックでも紹介されたという「ビストロ・ボルドー」に行った。11:30 過ぎに入ったのだが、40 分ぐらい待った。店主が一人で調理も接客も後片付けもやっているので、回転が非常に遅い。昼過ぎに行ったらまず入れないだろう。店主も客も心得た様子で、「1時間ぐらい待ってもらうけどいい?」「あ、じゃあやめとく」というような雰囲気だった。味は、すこぶる上品な味付けで、たいへんよろしかった。店主のにこやかな様子がまたいい。

 帰りは、特急かもめ、新幹線のぞみを乗り継いで、9時過ぎに名古屋に到着。今日は休んで疲れをとって、明日から仕事再開です。

タグ:お出かけ
posted by toshinagata at 14:41| 日記

2017年08月16日

Alchemusica をビルドし直した

 ラズパイで音を出す実験をしていて、音サンプルの作成に Alchemusica を立ち上げたら、なんかめちゃくちゃだった。一応動くのだが、画面が乱れたり、メニューがおかしくなったり。10.8 では大丈夫だったので、10.10 あたりからおかしくなったのかな。

 とりあえず、10.11 対応の Xcode 8.2.1 でビルドし直したところ、不具合は減ったみたい(なくなったかどうかはわからん)。10.5 はもう手元に動かせる環境がないので、10.6 で試したところ、こちらも動いている様子。ビルド時に 100 個以上警告が出ているので、じっくり見直した方がいいのだけど、時間がないな…。そもそもニーズがあるのかどうかもよくわからないし。

タグ:Mac
posted by toshinagata at 01:30| 日記

2017年08月14日

ラズパイ+AVR:自動水やり器完成

 自動水やり器、一応完成しました。別記事を書きました。→「自動水やり器の製作

20170814-1.jpg

 2日間ほど試験運用してみたところ、ちゃんと1日2回水やりができている模様。お盆の帰省中も、ちゃんと動いていてくれた。

 作ってから気がついたのだけど、水をやる設定時間がプログラム中にハードコーディングされているので、変更ができない。これは変更できるようにすべきだったな。小さいタクトスイッチ1個ぐらいなら追加できそうだから、「スイッチを長押ししたら時間設定モード」という仕様にはできるはず。まあ、今シーズンは今のままいけると思うので、来シーズンに向けての課題ということで。

posted by toshinagata at 19:06| 日記

2017年08月12日

さくらブログのスマホ対応(改良)

 以前にこのブログをスマホ対応にしたのだけど、いつの間にか、うまく見えなくなっていた。スマホで見ると、自動転送が無限ループしたような状態になってしまう。仕様が変わったんかなあ?

 少し試行錯誤して、一応見られるようにはなった。前と同様に、スマホサイトの「コンテンツ」は「自由形式」のみとして、その中身を下のように変更。

<SCRIPT LANGUAGE="JavaScript">
<!--
var url = location.pathname + "?from_sp";
if (document.referrer) {
  var ref = "referrer=" + encodeURIComponent(document.referrer);
  url = url + "&" + ref;
}
location.href = url;
// -->
</SCRIPT>

 ブログのパス名 (http://blog.d-alchemy.xyz/) に "?from_sp" をつけると PC 向けのサイトに誘導されるらしい。詳しくはよくわからないのだが、以前はクッキーでスマホ向けと PC 向けを区別していたのを、"?" 以下の文字列で区別するようになったのかな? とにかく、一応動くようになったので、しばらくこれで運用してみる。

 08/13 追記:やっぱりうまくいかない。これが正解か?

<SCRIPT LANGUAGE="JavaScript">
<!--
var url = location.pathname;
url = url.replace(/\/s\//, "/");
url = url + "?from_sp";
if (document.referrer) {
  var ref = "referrer=" + encodeURIComponent(document.referrer);
  url = url + "&" + ref;
}
location.href = url;
// -->
</SCRIPT>
タグ:ブログ
posted by toshinagata at 16:46| 日記

2017年08月09日

ラズパイ: Luajit で OpenVG を使う

 ラズパイ上のスクリプト言語の一つとして、Jun Mizutani さんに倣って、luajit を試してみた。これはいいですね。C のインターフェイスを内蔵していて、OS の共有ライブラリを直接呼べるのがいい。

 低レベル入出力関数の open() なんかも、こんな風に直接呼び出せるわけです。

local ffi = require "ffi"
ffi.cdef[[
  int open(const char* filename, int flags);
  int close(int fd);
]]
local O_RDONLY = 0
fd = ffi.C.open("/dev/input/event0", O_RDONLY)

 前にやった OpenVG のグラフィック描画 を、luajit で試してみた。Jun Mizutani さんの LjES を参考にした(一部コードを使わせていただいた)。

20170809-1.jpg

 昔の 8 ビットマイコンゲーム風動画。まだキャラクタが動いているだけだけど。

 コードはこちらに置いておきます。ラズパイ上でダウンロードして、tar xvfz ljsc_sample.tar.gz で展開して、cd ljsc_sample; luajit fish.lua で実行できます。

posted by toshinagata at 17:49| 日記

2017年08月06日

ラズパイのタッチパネル液晶:tslib を使う

 「ラズパイの液晶タッチパネルを使う」の続き。自前でキャリブレーションのプログラムを書いていたのだが、tslib を使えばいいじゃない、と今さらながら気がついた。ということで、再トライしてみた。液晶は前と同じで、Waveshare 3.2inch RPi LCD (B), 320×240

 まず、tslib のインストール。

pi@raspberrypi:~ $ sudo apt-get install evtest tslib libts-bin

 evtest でデバイス番号を確認。/dev/input/event0 だった。

pi@raspberrypi:~ $ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:	ADS7846 Touchscreen
Select the device event number [0-0]: 0

 ts_calibrate でキャリブレート。+印が5箇所に順に表示されるので、スタイラスでタッチする。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate
20170805-1.jpg

 ts_test でテスト。やっぱりX方向はノイジーで、ときどきポインタが飛んでしまう。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_test
20170805-2.jpg

 C で使おうとすると、もう一手間かかる。tslib のライブラリは /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0 なのだが、これをフルパスで指定する必要があるみたい。また、tslib.h がどこにもインストールされていないので、必要な宣言をソースに埋め込む。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
struct tsdev;
struct ts_sample {
  int x, y;
  unsigned int pressure;
  struct timeval tv;
};
extern struct tsdev *ts_open(const char *dev_name, int nonblock);
extern int ts_config(struct tsdev *);
extern int ts_read(struct tsdev *, struct ts_sample *, int);
extern int ts_close(struct tsdev *);

int main(int argc, const char **argv)
{
  struct tsdev *ts;
  ts = ts_open("/dev/input/event0", 1);
  if (ts == NULL) {
    printf("Failed to open /dev/input/event0.\n");
    exit(1);
  }
  if (ts_config(ts) != 0) {
    printf("Failed to configure touchscreen.\n");
    exit(1);
  }
  while (1) {
    struct ts_sample samp;
    if (ts_read(ts, &samp, 1) == 1) {
      printf("%d %d %d\n", samp.x, samp.y, samp.pressure);
    }
  }
  return 0;
}

 コンパイルして実行してみた。

pi@raspberrypi:~ pi@raspberrypi:~$ gcc -o tstest tstest.c /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0
pi@raspberrypi:~$ ./tstest
133 180 65063
132 180 65104
131 180 65116
132 180 65114
135 186 0
^C
pi@raspberrypi:~$ 

 ここまで来れば簡単に使えるのだが、道のりが妙に長いな。Raspbian のパッケージで tslib をもう少しちゃんとサポートしてくれたら、楽に使えるんだけどな。

タグ:Raspberry Pi
posted by toshinagata at 11:01| 日記