おは代々木ダイアリー

いろいろ試したメモを書きます。このブログはアフィリエイトを使用したプロモーションを含みます

ESP32_Core_board_V2 や Arduino UNO といったシリアル通信に使えるボード

機器の状態を見たりするときに重宝する「シリアル通信」を、マイコンの開発ボードを利用してパソコンから行う方法をご紹介します。

はじめに

動作している機器の状態を把握するのにシリアル通信を行ってログを確認するのはとても有用な手法です。従来であればRS232CといったCOMポートを積んだマザーボードなどもありましたが、最近ではめっきり見なくなったような気がします。

最近では、USB接続で使用できるシリアル通信用のモジュールがデファクトとなっていますが、プラグアンドプレイなので抜き差しでリセットできたり、確かに合理的だなという感じです。が、一方でわざわざ買わないと手に入らないものとなってしまったこともまた事実かなと思います。

今回はそんな、急にシリアル通信をしたくなったときにも使用できる、マイコンの開発ボードを代替として利用する方法をご紹介します。

代替①: Arduino UNO

おそらくもっとも初心者向けで、持っている人も多いのではないかと思われる「Arduino UNO」です。

メインであるチップ ATMEGA328P-PU と通信をするために使われるシリアル通信ポートをそのまま使ってしまおうというものです。

このように、RESETGND を短絡することでATMEGA328P-PUを動作させなくして使うことができます。(ATMEGA328P-PUを抜いてもいいということですが、それはおっかないので短絡するのがいいんじゃないかと思います)

ArduinoUNOをシリアル通信に使う(RESET-GND短絡)

代替②: ESP32_Core_board_V2

ちょっとこれは持っている人限られてしまいますが、ESP32 Core boardというものがあります(たまたま手元にあったのはV2と銘打たれているものでした)。ピンが2.54mmのピッチで配置されていて、ブレッドボードに刺して使うことができるマイコン ESP-WROOM-32 の開発ボードです。

こちらのボードもArduino UNOと同様、メインのチップ ESP-WROOM-32 とシリアル通信を行うための CP2102 というチップが積まれていて、それを利用することができるので代用してみます。Arduino UNO同様、ENGND を短絡することで、メインのチップを無効化しつつシリアル通信を行うことができます。

ESP32_Core_board_V2をシリアル通信に使う(EN-GND短絡)

メリット

今まではArduino UNOを使用していましたが、ESP32_Core_board_V2を使用してみて、便利だなと思った点はブレッドボードと組み合わせて使うと周辺の拡張もそこに入れることができてコンパクトにまとまるという点です。

ArduinoUNO(上)とブレッドボードに刺したESP32開発ボード(下)

今回は、Hが3.3Vであるチップとの通信(単方向)を行いたかったため、別途3.3V→5Vの変換を行うレベルシフト回路をブレッドボードに付け加えています(NPNトランジスタ2SC1815Lを使用したエミッタ接地を使っています)が、このコンパクトさ。そしてUSB TypeBからmicroUSBに変更となってケーブルの面でも比較的使いやすくなったかなと思っています。

おまけ: シリアル通信の動作確認

今回、正しくシリアル通信できるかを確認するために、以下の方法で確認を行っています。

  • RXとTXを短絡する
  • cuコマンドでターミナルからシリアル通信を開始する(例: cu -s 115200 -l /dev/ttyUSB0
  • 適当にタイプする(タイプしたものが画面に表示される)

終わりに

今回は、USB-to-TTL 変換を行うシリアル通信モジュールの代替品としてマイコンの開発ボードを使うというネタで書かせていただきました。ちゃんと解析するのであれば、ロジックアナライザを購入すべきかなとは思うのですが、Amazonでポチってからのタイムラグを考えると手元にあるもので何とか試したいと思ってしまい、ついつい代用品で賄ってしまいます・・・(そしていつまでも買わない)。

今調べてみると買っても大した値段ではないですね(1000円しない)。

まぁでも死蔵しているよりはマシかなと思うので、みなさんもぜひ死蔵している開発ボードがありましたらシリアル通信に使用してみるといいのかなと思います。

GMKtec nucbox3 を購入しました。ファンレス Celeron J4125 マシンはメモリ16GBの夢を見るか

性懲りもなくまたCeleron J4125のファンレスPCを購入しました。

はじめに

筆者はCeleron J4125のファンレスミニPCを何度か購入していますが、今回ネットで以下のように「Celeron J4125を積んだPCには16GBメモリに対応したものもある」といった内容の投稿を見かけました。

実際に16GBメモリを積んだCeleron J4125搭載PCは販売されており、ネットの噂とはいえワンチャン動くのでは?という期待が持てました。

そして最近知ったのが、メモリがオンボードでなく換装可能なファンレスミニPC 「GMKtec nucbox3」の存在。ちょうどいい感じに家にDDR4 16GB SODIMMなメモリが転がっていたので試してみない手はないと思い購入しました。引用したツイートの人は「1スロットじゃダメ」といったことを言っていますが、果たして・・・

公式的には最大メモリは8GB

とはいえ、16GBメモリ対応は公式にうたわれているわけではありません。実際に以下のintelのサイトを見てみてもCeleron J4125が対応しているのは最大8GBメモリとなっています。

www.intel.co.jp

「GMKtec nucbox3」の商品紹介ページを見てみても、16GB積めるといった内容は書かれていません。

www.gmktec.com

ですので、ここからの内容は 公式にサポートされている内容ではなく、壊れたとしてもメーカーからサポートが得られる保証はありませんので、お試しになる際は自己責任にてお願いいたします。

GMKtec nucbox3 購入所感・レビュー

とまぁ、能書きはこの程度にして、写真などをぺたぺた貼りつつ、所感を書きたいと思います。

GMKtec nucbox3 結構デカいぞ?!

GMKtec nucbox3。意外と大きい

まず最初に思ったのは、デカい ということです。「nucbox」という名前の通り、NUCに準拠したサイズなのかなとは漠然と思っていましたが、NUCを過去に購入したことのない自分にとっては大きく感じました。

左から CHUWI Larkbox, MeLE Quieter2Q, GMKtec nucbox3

同じCPUを詰んでいるミニPC「CHUWI Larkbox」「MeLE Quieter2Q」と並べて撮影してみましたが、やはり大きさが際立ちますね。ファンレスPCということで大きさ(ヒートシンクの)は正義なわけなんですが、小さいのが欲しいって人にNUCは大きいんじゃないの~?という感想を抱きました。

Core i7でNUCのサイズ!」だとインパクトありますが、J4125だしなあ・・・

nucbox3大きさ比較

iPhoneと並べると大きさのイメージ掴みやすいかな?と思い並べてみました。サイズ感的にはやっぱMeLE Quieter2Qが好きだなあ自分は。

GMKtec nucbox3 推しポイント「12V DC IN」

サイズ感で早速マイナスポイントを書いてしまいましたが、nucbox3にも推せるポイントがあります。それはACアダプタの仕様。

GMKtec3 nucbox3の電源仕様は推せる

個人的にほかの中華PCにありがちな「偽USB-C(12V)」な電源って大嫌いで、買うたびに辟易していたんですが、nucbox3のシンプルな電源ポートは推せます。径や極性を揃えればほかのACアダプタを使用できますし、12V出力のモバイルバッテリーでポータブル構成も取りやすい。ほかのミニPCも見習ってくれ・・・

GMKtec nucbox3 推しポイント「換装可能なメモリ」

ミニPCはそのサイズ感の達成のためにメモリを直接マザボに実装されているオンボードな構成が多いのですが、このGMKtec nucbox3はメモリが換装可能となっています

nucbox3 はメモリ換装可能!

つまり、自分でブランド・性能・容量を選んでカスタマイズすることができるということ。まぁ今回の検証ではメモリを16GBに載せ替えたいわけなので、マストな仕様ですが。

(公式ページの画像↓は大嘘ですけどね。)

公式より引用 https://www.gmktec.com/products/nucbox-3-mini-pc-windows-11-home-os

nucbox3のメモリを16GBに換装しよう

というわけで、さっそくメモリを16GBに換装してみます。

今回使用したのはコチラのCrucial DDR4-2666 SODIMMなメモリ。確かThinkpad e495買ったときに増設用に2枚買ったんですが、32GB構成だとKP41で突然死するので抜いたやつ。

nucbox3 に Crucial PC4-2666 16GB SODIMM 装着

BIOSで確認

イエーイ。2400 MHz で動作しているようです。

16GB RAM on GMKtec nucbox3

Windows上からも認識

Windowsからも16GBで認識されていますし、いけてそうですね

GMKtec nucbox3 はいいぞ

ファーストインプレッションでは「大きいなあ」というネガティブなイメージを抱いてしまいましたが、ほかのミニPCにはない以下のような特徴がありそうです

  • 最大メモリ容量は 16GB (公式でサポートされたものではない)
  • 電源は高い互換性のある12Vの2極端子

しかもめちゃくちゃ安い。購入を決心するまでに「16GBメモリで動かなかったらQuieter2Qと同じスペックのミニPCが増えるだけ」「そもそも16GBメモリ積んでも使い道あるの?」といった迷いがありましたが、最終的に背中を押してくれたのはAmazonでめちゃ安くなっているという事実でした。

今ではちょっと値上がりしてしまいましたが、最盛期では15000円を切る値段で売っており破格でした。

終わりに

というわけで、Celeron J4125なミニPCには16GB RAMが認識するものがある(すべてが認識される保証はない)」 という仮説が証明されたわけですが、これからも発熱などの面で実用に足るのか注意深く見ていく必要がありそうですね。

自分の用途ではデスクトップ用途ではたぶん使わないのでLinuxを入れてサーバーとしてこれから活躍してもらおうかと思います。(せっかくWindows 11 Pro積んでるのでHyper-Vで遊ぶのも楽しそう)

おまけ: パワーリミットでさらに実力を引き出そう

ファンレスミニPCにありがちな「CPUのパワーリミット」。GMKtec nucbox3も例に漏れずBIOS上で設定されていますので、もっとパワーが必要な人はコチラを見直してみるのもいいかもしれません。冷却を忘れずに!(自己責任で!)

MIXI Mのリアルカードを作りました

ポイント貯めるのが大好きなポイントジャンキーに人気なMIXI M(ミクシィエム)ですが、2023年5月16日にリアルカードの申し込みをスタートしました。

ずっと「新規発行停止中」の状態が続いており、MIXI Mにリブランドされる前の6gram時代にリアルカードを発行しそびれた人たちにとってはやっと始まったか、と言ったところでしょうか。

かくいう自分もリアルカードを発行できておらず、常々リアルカード欲しいと思っていたところですので、今回発表されてからすぐに申し込みました。

着弾!

というわけでMIXI Mのリアルカードが到着しました。カード自体は普通郵便で届き、スマホNFCを活用してアクティベートすると使えるようになる仕掛けでした。

届いたのは普通郵便の封筒

MIXI M リアルカード黒の透け具合はこんな感じ。見る人が見ればわかる

今回申し込んだのは黒で、見る人が見れば「あー透けてるね」となるかなと言った具合の透け具合です。6gram時代のカードはスケスケでしたから、デザインは一新された形です。

ツイートにも書きましたが、「MIXIM」って左右対称で裏から見てもMIXIMに読めるんですね。山本山市川市みたいですね(笑

何がうれしいのか

さて、ここまで書いておいてなんですが、MIXIMのリアルカードを持っていることで嬉しいことは何でしょうか。

それを説明する前に、MIXIMをなぜ使うのか、というところの説明が必要になってくるのですが、簡単に解説すると「エポスゴールド」と組み合わせることで様々な利用先でポイント還元率が実質2.5%になるというワザを使うことができるからです。

そのワザというのが、エポスゴールドにある「3つの利用先での還元率を2.5%にできる」という特典を使用するもので、その利用先としてMIXIMの運用元である「mixi」を選択しておくと、MIXIMへのチャージで2.5%付き、さらにMIXIMはプリペイドカードとして様々なサービスで使うことができるのでエポスゴールドの2.5%還元の対象を3以上に実質増やすことができるというものです。

MIXI Mの「M」は「間」を表すエムと言われており、確かに決済の間に入ることで還元率を底上げしてくれるというのは名の通り「間」として機能しているんだなぁと感心します。)

しかし、実際にはその「MIXIMを使用することができるサービス」というのがなかなか見つからないという問題があります。なんといっても素の状態では実態のないバーチャルカードなわけですので、以下に限定されるわけです。

  • QUICPayが使用できるところ
  • 通販サイトのようにクレジットカード番号を手打ちで使用することができるところ
  • ApplePay経由で使用できるところ
  • (PayPayが使用できるところ。これからは不可能)

QUICPayが使用できるところについては、私は常時5%還元のエムアイゴールドを持っているわけで、わざわざ2.5%還元のMIXIMを使用する理由がありません。

ohayoyogi.hatenablog.com

となると、MIXIMの利用先は2番目のようなオンラインサービス系か、3番目のApplePay経由で使用できるところに限定されてしまうわけで。そういう背景から弱点である「バーチャルカードのみ」という状況を打開するために、リアルカードが求められているんですね。

採算は取れるのか?

MIXIMのリアルカードが発表されたときに話題となったのがその価格設定です。1枚発行につき1000円という価格設定は、MIXIMの弱点を補完してくれるとはいえ結構悩ましい価格になっていると思います。

というのも、ポイント還元率を底上げするために使用しているMIXIMで追加費用1000円が発生してしまうと実質還元率が下がってしまうとも考えられますので、1000円をペイするぐらいリアルカードを活用できるか?という観点が重要になってくると考えられます。

私個人としてはそこを踏まえた上で今回はリアルカード発行に至ったんですが、以下に理由を述べます

アルカードを発行した理由その1: 3選の枠を空けられる

MIXIM(旧6gram)のリアルカードを持っていなかった自分は、とある利用先で物理カードを要求され、泣く泣く3選に入れてエポスゴールドの物理カードを利用していました。この状況は、MIXIMのリアルカードによって解決可能であるため、リアルカード発行には3選を空けて他の利用先を入れられるようになるメリットがあると考えました。

アルカードを発行した理由その2: 単純にほしかった

これは完全に好みの問題と言えますが、リアルカードに単純に興味があったというのがあります。6gramのリアルカードからしてかなり攻めたデザインにしてくるのはわかっていたので、かなり興味がありました。

あとは、リアルカード発行することでしか開けない新しい使い方が見つかるのではないかという興味です。これはまだ見つかってませんが、なにか良い使い方が見つかるといいなぁと考えています。

アルカードを発行した理由その3: VISAのタッチ決済にも対応

これは正直微妙かもしれませんが、リアルカード発行によって実はQUICPayだけではなく、「VISAのタッチ決済」に対応することになります。まーーーーーーあんまQUICPay対応してなくてVISAのタッチ決済に対応しているお店って見たことない(しかも普通は物理カードにも対応している)ですが、一応は利用先として増えるかも?という期待はありますね。

終わりに

以上、リアルカードを発行した報告でした。MIXIM、今年度入ってから状況が変わってきていますので、これからどうなるのか非常に楽しみです。そのためのお布施1000円なんて安い安い!!!

今年始めるサブスクとやめようと思うサブスク

新年明けてから3週間ほど経とうとしていますが、2023年使うサブスク・やめるサブスクを整理していきたいと思います。

とかいってたら下書きの肥やしになって、早くも6月になってしまいました。後述しますが、私も利用しているMicrosoft 365が値上がりしますので、急遽書き上げて公開しようと思った次第です。

なお、冒頭にもあるとおり、これは1月中旬に書きかけた内容であり、ここにある内容はすでに検討を終え、始めるものは始め、終わらせるものは終わらせてあります。

使うサブスク

Microsoft 365

今までOffice系のアプリって使う必要性に迫られたことがなく、Drawioだったり、Googleドライブのスプレッドシートで何とかしてたんですが、ついに必要になったので加入しました。(サブスク、、、だよね?)

適当な買い切り版のOfficeがプリインストールされたノートパソコンを買ってもよかったんですが、以下のような理由から総合的に考えるとMicrosoft 365も安くね・・・?」と思えたので、導入に踏み切りました。

  • OneDrive 1TBが使える(→Amazon Photosが要らなくなる)
  • Officeが更新できるかつ、複数台導入できる(プリインだとそうもいかない)

という感じです。つまりMicrosoft365を単にサブスク版Officeと考えると高く感じますが、「複数台に導入できるOffice + クラウドストレージ」と考えると価格に見合った価値はあるんじゃないのかなと思えました。

あと、Office 365 Familyだと家族で使えるのが便利ですね。家族5人まで1TBずつのOneDrive容量をもらえるので、データのやり取りに重宝すること間違いなしです。

Microsoft 365って加入することで得られる内容が多く、まだ全容を把握できていませんがOutlookなんかも気になっています。Outlook独自ドメインメールアドレスを使うプレミアムの機能があるらしいですが、それは今年2023年の11月までらしいです。

Microsoft 365 の電子メール機能とストレージの変更 - Microsoft サポート

2023年6月から値上げ

インフレの影響を受けてか、Microsoft 365の値上げが発表されました。値段に文句があるわけではないですが、安く手に入れられるなら手に入れたいというのが正直なところですので、加入するなら値上がりする前の今がチャンスってことで1月に加入(1年分購入)した私ですが、追加で更に2年分購入しました!!

というのも、楽天スーパーDEALでポイントモリモリで購入することができたためです。最近は楽天Payでの税金支払いにポイントが使えたり、楽天ポイントの価値もだいぶ高まってきたので積極的にために行くようにしています。

Spotify

いままでAmazon Prime Musicを使用しておりずっと無料プランを貫いてきていたんですが、軽い気持ちでUnlimitedの4か月オタメシに入ったらもう音楽サブスクがないと生きていけない体になってしまいました。

そして追い打ちのようにきた Amazon Prime Musicのクソ仕様化

Unlimitedやめて無料のPrime Musicを使ってみようとしたらビビりましたね。アルバムを勝手にシャッフルして再生するとかアルバム作ったアーティストへの冒涜もいいところ・・・

というわけでSpotifyに加入しました。

ドコモのSamsung端末ユーザーはSpotify 6か月無料の特典を得ることができます!

【ドコモ限定】対象のGalaxyスマートフォンなら、Spotify Premiumが初回6ヶ月無料! | Samsung Japan 公式

普通にお金払って入ろうとしたらこんなの↑出てきてハッピーでした。

やめるサブスク

Amazon Prime

写真容量無制限のAmazon Photosをヘビーユースしていたり、Prime Videoでいろんな映画を無料で見たりしていたんですが、この際Primeをやめることにしました。

というのも、最近動画のバックアップをしたいなと思ってきて、そうなると写真はPrime Photoでは役不足で、OneDriveに一本化したくなったためです。Prime Videoにしても最近大抵見尽くしてしまって、見たいものを探すというよりサブスクを使うために見るものを探すようになってしまい、動画の見放題サービスへの関心が薄れてしまいました。

Amazon Primeの本来の通販におけるお急ぎ便無料サービスなども、今となってはヨドバシやビックカメラのサービスがかなり向上してきているのもあり、無料で翌日配送してほしかったら普通にヨドバシで買うわ…となって要らんなとなりました。非プライム会員となった今ではむしろ金払わないと翌日配送しないぞというスタンスは利用者の離脱に繋がらないか?と冷静に思ってしまいました。

終わりに

んーーーーなんかもっとやめたサブスクがあった気がするんですが、6ヶ月(!!!)も放置していたら完全に忘れてしまいました。書こうと思ったら書ききらないとダメですね〜〜〜

やめたといえば「dカードゴールド」をやめたんですが、なんでやめたかも忘れてしまいました。そもそもなんでゴールドにしたんだったか…

【Pentel ENERGEL】エナージェルのリフィルに使えるホルダを探す【ZEBRA SARASA・無印良品】

今回はボールペンの話です。ぺんてるのENERGELというボールペンが好きで愛用しているという話を書きたいと思います。

はじめに

ぼくはよくプログラム書くにあたって考えたことをノートとか裏紙に書き出すという行為をするんですが、その行為にストレスがあると捗らなくなるので、書きやすいボールペンを日々探しています。

気分によって「油性ボールペン」がいい日もあったり、「水性ボールペン」がよい日があったり。まぁ基本的に殴り書きしたいときは油性ペン、ペタペタカリカリじっくり書きたいときは水性ペンって感じの使い分けをしていますかね。ちなみによく使う油性ボールペンは「ジェットストリーム」もしくは「タプリ」。

今回は水性ボールペンの話です。

ENERGEL はいいぞ

ENERGEL (ぺんてるホームページ https://www.pentel.co.jp/products/ballpointpens/gelink/nockenergel/ より)

みなさん、ENERGEL(エナージェル)ってご存じでしょうか?

私は普段JetStreamなどの油性ボールペンを使っているのですが、ある時に宛名書きで水性ボールペンで綺麗に書きたいなと思い、このエナージェルというボールペンに出会いました。

エナージェルは価格設定も200円という(SARASAなどに慣れていると)高く感じるボールペンで、ちょっと高級なイメージがあって避けていた(そもそも水性ボールペンを普段から使っていなかったというのもある)のですが、買って以来は普段のメモ書きでも使用するぐらいにお気に入りになりました。

ENERGEL 20周年!

去年の10月ごろにエナージェルが20周年ということで、6種類もの黒インクを販売したりもしていました

20周年キャンペーン(20周年記念特集ページ https://www.pentel.co.jp/special/12495/ より)

6種類もの黒インク!(20周年記念特集ページ https://www.pentel.co.jp/special/12495/ より)

もちろん私は「チャコールブラック」「ボルドーブラック」「オリーブブラック」の3色を買いました。

ENERGELのホルダが好きじゃない問題

インクでペタペタ書くような感覚ですごくエナージェル好きなんですが、唯一気に入らないのが無駄に太いホルダです。

そして20周年モデルの黒いホルダはシックでかっこいいですが、通常のモデルはメタリックでちょっとダサいなというのが正直です。

さらには替え芯は80円ぐらいで売っているのにホルダとセットになると200円近くするという。このホルダのために120円かーというのが正直ガックリきますね。

というわけで、あんまイケてないホルダをしぶしぶ使っていたわけなんですが、ある時エナージェルのリフィルがSARASAと互換性があるということがわかりました。

SARASA互換なボールペンたち

これは(もちろん)公式に言われている内容ではないんですが、前述の通りエナージェルのリフィル(替え芯)はSARASAなど他社ボールペンのリフィルと入れ替えて使うことができます。(これをぼくは「SARASA互換」と一人で呼んでいます)

SARASA互換であることはつまり、SARASA互換なリフィルとホルダを好きなように組み合わせて自分だけの最強のボールペンを編み出すことができるということ!これでエナージェルのホルダがイケてない問題は解決だ!!!!

というわけで、ちょっと探してみました。

ZEBRA SARASA R

SARASA Rカッコイイですね。本家ZEBRAが出している水性ボールペンで、もちろんSARASA互換。

サラサR|ゼブラ株式会社

全身ブラックでめっちゃかっこよかったので買いました。SARASAは安定ですね。自分も小学生ぐらいのころから使っています。

SARASA R

ホルダがかっこよかったので買いましたが、かっこいいだけなのであんまり使っていません。

無印良品 さらさら描けるゲルインキボールペン

無印良品の水性ボールペンが「SARASA互換」なのはずっと昔から知っていましたが、まさかこんなところで役に立つとは!!というわけで売り場を探してみましたが、昔とはだいぶ変わって「ザ・無印良品といった見た目をしています。

www.muji.com

無印良品のゲルインキボールペン ノック式

昔はもっと「SARASAインスパイアード!」というような見た目をしていた記憶があります(当時もSARASAとは一味違う見た目で面白いのでリフィル入れ替えて使っていました。)

スタイリッシュな形が気に入ったので、エナージェルのリフィルをこれに入れて使っています。これでおとなしい見た目しておきながらエナージェル由来のドバドバインク出ますみたいな書き味のボールペンのできあがり。グリップがないのでリングノートの輪っかに差し込んでも引っかかったりしない のがサイコーにGOOD。

終わりに

これ去年の5月ぐらいに書こうと思って用意していたんですが、途中で書くの飽きてやめてしまっていました。それを最近、なんと無印良品の「ゲルインキボールペン キャップ式 0.5mm」が店頭で投げ売りをされているのを見つけてしまって衝動買いし、書ききることを決意しました。

最近は投げ売りのコスパに圧倒されてしまい、「キャップ式」のゲルインキボールペンからリフィルを取り出して「ノック式」の本体に詰め替えて使っているので、無印良品のボールペンをただ使っている人 に成り下がってしまいましたが、この記事で何が言いたかったかというとボールペンの使いやすさってインクとかペン先だけで決まるわけではなく、ホルダ(外側)も大事なんだよということですね。その点、この「SARASA互換」(と言っていいのか?)なボールペンはいろんなメーカーが商品を出していて組み替えられるので楽しいぞということでした。皆様もよきボールペンライフを。

SARASA互換(?)なボールペンたち

(久々にエナージェルのホルダを引っ張り出してみましたが、加水分解してベタベタ…つらひ…)

VitaでJavaで画面を出す【vitasdk / miniJVM】(前編)

前回記事ではVita用にminiJVMというJVMをビルドして動作させてみるという内容で記事を書きました。

今回はそのJVMを利用して、画面を出すということをしてみたいと思います。

はじめに

前回記事ではVitaでminiJVMが動いたよ~~~という記事を書きました。

ohayoyogi.hatenablog.com

とはいってもまだまだHello Worldが出せただけで、Javaでprintfが叩けただけという話になります。

やっぱりVitaでプログラムを動かすうえでは、コントローラーを使ってGUIをグイグイ動かしていきたいと思うわけなので、グラフィックをやっちゃおうかなと思います。

まずはCで…

というわけで、Vitaで本当にグラフィック書けるのかいな??ってところですが・・・まずはC言語で書いてみて動くことを確認しました。

VitaSDKではすでにSDLをVita向けにビルドしたものが提供されていて(すごい!)、以下のサンプルコードを動かせば赤い矩形が表示されるプログラムを組むことができます。

samples/sdl2/redrectangle at master · vitasdk/samples · GitHub

自分はここにイベントを処理するコードを追加して、矩形が上下左右にコントローラーでぐりぐり動かせることも確認しました。もうこれで簡単なゲームなら作れますね(笑

SDLについてご存じない方向けに説明すると、マルチメディアを取り扱うにあたって各クロスプラットフォームにおける差異を吸収(抽象化)して取り扱えるようにしてくれるライブラリになります。ぼくも10年ぐらい前に触ったな・・・また出会うことになるとは(遠い目)

Javaでグラフィックを表示できるようにする

というわけで、C言語での練習を経て、Javaでのグラフィック表示を実装していきたいと思います。コチラについてはJavaSDL叩けるようにJNIでライブラリを書けばいいのかなと思っていますが、果たして。なお、2023年2月現在、Java Bindingsについては提供されていない模様。

Simple DirectMedia Layer - Language Bindings

まずはWindowsでビルドできるようにする

ターゲットはVita環境ですが、現在のままだとデバッグもしづらいので開発環境で動かせるようにすることでデバッグしやすくしたいと考えました。

Support for building on MSVC by ohayoyogi · Pull Request #19 · digitalgust/miniJVM · GitHub

というわけで、Visual Studioで開発できるように修正してみました。これ今見るとプルリク取り込んでもらえたみたいなので、Visual Studio使って開発することができるようになりました。(cmakeでVisual Studioのソリューションファイルを生成したりするのは他をググってください)

WindowsSDLを叩くライブラリを書く(JNI)

DLLのロードの仕方が違うなどの問題はあるので、そのままは適用できないと思いますが、最低限度デバッグはできると考え、SDLを使ってみるところまでコードを書いてみたいと思います。

まずは普通にJavaからJNIでSDLを使ってみるコード。コード書いてて気づいたんですが、どうもSDLを起動したスレッドじゃないとイベントハンドリングしちゃだめっぽいので、「スレッド1)初期化・開始・イベントループ・終了」「スレッド2)描画ループ」みたいな感じで関数分けようかなと。ライブラリの中でスレッド立ち上げるのは正直怖いので、Java側でスレッド分けて、C言語(JNI)でInit, Start, EventLoop, End, Paint みたいな関数を用意することにしました。

ちなみに、JNIとはJava Native Interfaceの略で、他の言語で書かれたネイティブなライブラリをJavaから呼べるようにする規格です。昔の自分が聞いてもちんぷんかんぷんでしょうけど、今なら書ける、書けるぞ!!!

インタフェースの仕様はわかりやすく、簡単なお作法を覚えれば動くところまではいくかなという感想です。ただ、まぁ注意して書かないと特定環境でしか動かない代物ができてしまいそうでチョット怖い。

miniJVM用のJNIに書き換えてみる

ノーマルのJVMで動くことが確認出来たらそれをminiJVMに移行していきます。

ここで注意が必要なのは、miniJVMはオレオレJNI仕様 となっていることです。ライブラリをロードしたときに JNI_OnLoad 関数が呼ばれる、ここまではいいんですが、読み込ませたい関数を native_reg_lib 関数で jvm に登録してあげる必要があります。

ここら辺の仕様についてはminiJVMのOpenGLのラッパ関数実装(以下リンク)を見てあげるのがよいかなと思います。引数に配列を取る場合やlongを返す場合など参考になるコードを読むことができます。

miniJVM/jni_gl.c at master · digitalgust/miniJVM · GitHub

というわけで動作するようになったものがこんな感じ↓

何もわからないと思うけど、miniJVMからSDLを使ってWindowを出してみた

終わりに

と、ここまでで相当長くなってしまった(というかここから先に進むのに時間がかかりそうな)ので、今回はここまでとしたいと思います。

今回思ったのはJNIのロードまわりを改善していくといいのかなと。ここら辺がOpenJDKの仕様と合わせられるとプリプロセッサで分けるなどの必要がなくなりますし、、、、ちなみに今回はこんな感じで書いてます(地獄

#ifndef _FOR_MINIJVM
JNIEXPORT void JNICALL Java_org_hoge_piyo_SDLAdapter_End
  (JNIEnv *jenv, jclass cls) {
#else
JNIEXPORT int JNICALL Java_org_hoge_piyo_SDLAdapter_End
  (Runtime *runtime, JClass *cls) {
  JniEnv *jenv = runtime->jnienv;
#endif
    printf("SDL_End");
#ifndef _FOR_MINIJVM
  }
#else
  return RUNTIME_STATUS_NORMAL;
  }
#endif

ここら辺がスッキリすると非常に良いのではないかなと!まー寄り道してると自分のやりたいことの実現が遠のくので、達成してから還元は考えたいと思います。

PSVitaでJavaでHello Worldができるようになりました【VitaSDK / miniJVM】

できました。しかもJVMで!

はじめに

前回記事では、PSVitaの開発環境を整える方法について記載しました。

ohayoyogi.hatenablog.com

VitaSDKのサンプルなども動かし、Vitaのホーム画面から立ち上がるアプリが作れることがわかりました。

さて、これからどうする??ということなんですが、やはり「誰もまだやっていない何かを移植する」というのが楽しいのかなと思い、しばらく移植できるネタを探していました。

miniJVM

そこで見つけたのがminiJVMというJVMJava Virtual Machine)です。JVMとはJavaの実行環境ですね。

github.com

Javaに詳しくない人向けに説明すると(ぼくも詳しくないけど)、Javaコンパイルされるとクラスファイルというものに一度変換されます。それらをJVMが解釈して動作するので、クラスファイルさえ作れればJVMがある環境でならどこでも動作させられるということになり、それがJavaの「クロスプラットフォーム」と言われる所以という感じですね。

「クラスファイルを解釈して動作させる」 ことができれば、過去作られた様々な資産を流用できることになるので、JVMを作るというのはとても偉大なことだなぁと思います。なんか調べてみるとPHP上でJVMを再現している人とかもいるそう。すごすぎ。

miniJVMはそこら辺をオープンソースでやっていて、すでにLinux, Mac, Windows, iOS, Androidで動作実績があるそう(すごい!)。ここにVitaも入れてやろうというのが今回の目論見です。

Vita向けに改造していく中で困ったこと

結論から言うと、動くようにはなってきたので、何ができて何が足りないのかは薄々とわかり始めてきてはいます。

壁その①: POSIX準拠

miniJVMの中でさらに利用されているSLJITというJITコンパイラがあるんですが、これのコンパイルエラーに苦しめられました。

GitHub - zherczeg/sljit: Platform independent low-level JIT compiler

VitaSDKで利用可能になるライブラリ類はPOSIXAPIをすべて満たしているわけではないので、そういうAPIをゴリゴリに利用しているライブラリには他のVitaで使える関数を使って同様の処理を実装してあげる必要があります。これはなかなか途方に暮れるというか、解決できそうにないものは飛ばすしかないという感じで、なかなか苦しかったです。

壁その②: プラットフォーム依存の吸収

次に、Vita特有の癖を吸収するのに実装が必要で、なかなか気づきづらく苦労しました。

例えば、ユーザーの保存領域にアクセスするために「ux0:data/hogehoge/file」みたいなパスを書くんですが、これのせいでことごとくクラスパスが読めなかったり、いろいろ動作しなくなっていました。

ソースコードよく読んでればハマらなかった部分でもあるので、プリプロセッサなどを見て、特にプラットフォーム依存を吸収している部分には注意する必要がありそうです。

壁その③: stdin, stdout 使えない問題

デバッガなども使えない環境で動かないものを動くようにするのは大変です。今回は標準入出力(stdin, stdout)を見る方法がわからなかったので(どなたかご存じでしたら教えてください)、System.out.printlnを叩いて動くところまで確認するみたいな方法が取れず苦労しました。

とりあえず、System.out.printlnした内容がファイルに出るように変更して内容を確認できるようにしました。これのおかげでだいぶ捗ったので、オススメです。

壁その④: クロスコンパイル環境キビシー!!!

x86 Linux の上で開発しているんですが、今回のターゲットはarmhfのVita(BSDベース?)という環境になります。で、今までVSCodeを使ってきたのでVSCodeで今回も余裕だろと思ってたんですが、謎に #define __linux__ されていたり、ろくにプリプロセッサ周りのIntellisenseが誤動作していました…

もう後半ではIDEの表示は信用しなくなってしまい、心の目で #ifdef や #ifndef を捌いていました。良いIDEあったら教えてください!!!

今後はどうする?

苦労したポイントはこの辺にして、今後やっていきたい内容を書こうと思います。

まずは、「ちゃんとコードを整理してどこかにアップする」です。今回のプログラムは自己満足で書いている部分も多いんですが、ちゃんと公開したいと思います。なぜならベースとなっているのはオープンな公開技術ですし、お世話になった分自身でも公開して貢献していきたいと考えるためです。Vita向けのJVMなんてニッチすぎて需要なさそうだけど・・・

そして、どこまで動かせるようになるか確認もしていきたいと思います。第一歩を踏み出すことができたので、ここから先さらにどんなJavaプログラムを動作させていけるか見ていきたいと思います。絵が出たりコントローラー使えるところまでできたらいいな・・・誰かゲーム作ってくれないかな、なんて。

参考にしたもの

Vita向けにプログラムを書くにあたって参考になったものを挙げていきます。

終わりに

以上、Hello World on JVM on Vita の報告記事でした。

こんなに早くVita開発の記事第二弾を書くことになるとは思いませんでしたが(そもそも第二弾を書いたことに驚き)、これからもぼちぼち触っていこうと思います。

コード整理するまで時間かかると思いますが、一緒に開発したいという方いらっしゃったらぜひ声かけてください!Twitterもフォローお願いします。

↑頑張って英語でツイートしました(笑