BridgePoint にサンプルとして付属している GPS_Watch プロジェクトを、TM1638ボードを接続した Raspberry Pi で動かすためにアレンジしました。
モデルからこのリポジトリにあるソース・コードを生成し、 Raspberry Piで動作させるまでの詳しい手順は、『 Raspberry Pi もっと食べたいレシピ集 』の 第8章「UMLを使って Raspberry Pi アプリを作る」で紹介しています。
- 『Raspberry Pi もっと食べたいレシピ集』ダウンロード版のご購入
- 『Raspberry Pi もっと食べたいレシピ集』書籍購入者向け特典版
- Raspberry Pi もくもく会のグループ
-
Connpass: https://raspberry-pi-moku.connpass.com/
Facebook: https://www.facebook.com/groups/raspimoku/
Slack: https://raspimoku.herokuapp.com/
また、ここで紹介しているシステムは、「enPIT-Pro 早稲田大学スマートエスイー」の講義「 K7 アーキテクチャ 」の演習課題としても利用しています。
BridgaPointやモデル駆動については、「 国立情報学研究所のトップエスイー 」における「モデル駆動開発」の講義について紹介した、次の記事が参考になるでしょう。
- CodeZine - モデル駆動開発におけるモデル変換の役割
-
Raspberry Pi 本体
-
ここでは、Raspberry Pi 3 Model B+を使用。
-
-
TM1638ボード(または同等品)
-
「TM1638 8ビット LEDデジタルチューブ 電子モジュール」といった商品名で販売している。
-
ネットで1枚数百円から1000円位で購入可能。
-
-
BridePoint
-
オープンソースのxtUMLモデリングツール。
-
GPS Watchのサンプルを作るのに必要。
-
また、モデルを編集してコードを再生成したい場合に必要。
-
-
-
Javaランタイムを(JRE)をインストールしたPC
-
BridePointや GPS WatchのGUIの動作に必要。
-
BridePointは xtUML.org から無償で入手できます。 最近のインストールに関しては、次のQiitaの記事が参考になるでしょう。
UMLでモデルを作成するコアデバイスは、 図 3 のようなコンポーネント構造になっています。
各コンポーネントはクラスの集まりになっています。たとえば Tracking コンポーネントのクラス図は 図 4 のようになります。
それぞれのクラスの振舞いはステートマシン図で表します。たとえば、 Tracking コンポーネントの Display クラスのステートマシン図は 図 5 のようになります。
さらに、それぞれの状態ごとの処理(それぞれの状態の中に書いてあるスクリプト)は、モデルの振舞いを記述するための「アクション言語(OAL: Object Action Language)」を使って書きます。たとえば、Tracking コンポーネントの Display クラスのステートマシン図の「displayDistance」状態のスクリプトは、 図 6 のようになります。
OALは、汎用のプログラミング言語から独立した「モデルを操作する」ことに特化した言語です。OALで振舞いが書いてあれば、モデル変換によって C/C++、Java、System-C などで「動く」ソース・コードを生成できます。
モデルを入力として次の工程の成果物を生成するのが、モデルコンパイラの働きです。 ここでは、MC3020というモデルコンパイラを使っています。 MC3020は、UMLで作成した構造と振舞いのモデルを入力とし、動作可能な処理を伴う(スケルトンではない)C言語のソース・コードを出力としています。
生成されたソース・コードが、 src
ディレクトリにあるコードです。
暗号のようなコードではなく、手書きのコードに近いことがわかりますね。
これらに TM1638ボードを接続した Raspberry Pi 動作させるための手書きコードを追加したのが、このリポジトリにあるC言語ソース・コードになります。
Important
|
注意が必要なのは、生成したコードはスケルトンではなく、実行可能なコードであるということです。手書きコードを追加するのは、モデルと外部との入出力部分の関数にTM1638ボード用のAPIを書く部分だけです。 |
入手した TM1638ボード を、Raspberry Pi に接続します。
Raspberry Pi と TM1638ボード の接続ポートの対応は 表 1 のようになります。
Raspberry Pi | TM1638ボード |
---|---|
+3.3V(1) |
VCC |
GND(6) |
GND |
GPIO6(31) |
STB |
GPIO13(33) |
CLK |
GPIO19(35) |
DIO |
Raspberry Pi と TM1638ボード の接続の詳細図を 図 7 に示します。
接続が済んだら、もう一度確認しておきましょう。
TM1638ボード を使うアプリケーションを作るには、 TM1638ボード 用のライブラリが必要です。
下記Webサイトから BCM2835用のライブラリを入手して、インストールしましょう。付属のドキュメント通りにインストールします。
- C library for Broadcom BCM 2835 as used in Raspberry Pi
-
Raspberry Pi のGPIO を使うときに必要となるライブラリです。
http://www.airspayce.com/mikem/bcm2835/
下記Webサイトから TM1638ボード 用のライブラリを入手して、インストールしましょう。こちらも、付属のドキュメント通りにインストールします。
- TM1638 library for the Raspberry Pi
-
TM1638ボード 用のライブラリです。
https://github.com/mjoldfield/pi-tm1638
Raspberry Pi 4 では、ライブラリやサンプルの構築時に次のエラーになる。
gcc -DHAVE_CONFIG_H -I. -I.. -Wall -std=c99 -g -O2 -MT tm1638.o -MD -MP -MF .deps/tm1638.Tpo -c -o tm1638.o tm1638.c
In file included from tm1638.c:75:
/usr/local/include/bcm2835.h:643:8: error: unknown type name ‘off_t’
extern off_t bcm2835_peripherals_base;
^~~~~
make[2]: *** [Makefile:291: tm1638.o] エラー 1
対処として、 bcm2835.h
に sys/types.h
を追加する。
bcm2835.h
(562行目付近)#include <stdint.h>
#include <sys/types.h> // (1)
#define BCM2835_VERSION 10062 /* Version 1.62 */
-
sys/types.h
を追加した
BridgePoint 上で GPS Watch のサンプルは用意できているものとします。
このリポジトリのコードは、生成したコードに、 Raspberry Pi と tm1638 ボードを使って動かす部分を追加したものです。
src
以下のソースコードを、 Raspberry Pi に転送してくだい。
Makefile
は提供されているので、あとはビルドするだけです。
pi@raspi-01:~/Documents/GPS_Watch/Debug $ make all
(略)
Finished building target: GPS_Watch
ビルドできたら、動かしてみましょう。
-
PC側でGUI画面を実行しておきます(この手順はもとのGPS Watchと同じです)。
-
Raspberry Pi のターミナルから、
GPS_Watch
を起動します。 -
PC上のGUI画面や TM1638ボード 上の
START/STOP
ボタンを操作すると、時間を測り始めます。 -
GUI画面のボタンと TM1638ボード 上のボタンのどちらを操作しても、表示が変化します。
-
ターミナルで
Ctrl-C
を入力して、動作を停止します。
BridePoint からの操作でGUI画面が起動しない場合は次の手順でコマンドラインからの起動します。
{BP} の更新状況や実行環境によっては、 図 8 のようなエラーダイアログが表示されて、GUI画面が起動できないことがあります。このようなときは、コマンドプロンプトからGUI画面を起動します。
C:\Users\kuboaki\workspace_bp> cd UI\bin # (1)
C:\Users\kuboaki\workspace_bp\UI\bin>java lib.WatchGui # (2)
Waiting for connection
Connection received from 127.0.0.1 # (3)
Connection closed by client. # (4)
-
ワークスペースの
UI
ディレクトリの中のbin
ディレクトリに移動する。 -
WatchGui を起動する。
-
実行後は接続待ちになる。
-
実行後は接続が切れる。
GUI画面と TM1638 ボードの両方から操作できることが確認できるでしょう。
このシステムが動作する様子は YouTube にアップしてあります。
- BridgePointのサンプルのGPS Watchを動かしてみた
-
BeridgePointのサンプルの GPS Watch を動かした動画。
https://youtu.be/IaVM7KjwQ9w - BridgePointで生成したコードをtm1638ボードをつないだRaspberry Piで動かしてみた
-
GPS Watch が Raspberry Pi と TM1638ボード の組み合わせ動作している様子。
https://youtu.be/kNXow7kltDM
なお、この章で紹介したシステムは、文部科学省が平成29年度に提示した「成長分野を支える情報技術人材の育成拠点の形成(enPiT-Pro)」に早稲田大学が代表校として申請し採択された「スマートエスイー : スマートシステム&サービス技術の産学連携イノベーティブ人材育成」[SMART-SE] の講義「モデル駆動開発」の演習で用いたものです。関係者各位に謝意を表します。
これまで BeridgePoint の開発、販売、コミュニティ支えてきた全てのみなさんに感謝します。とりわけ、 Levi Starrett氏には、スマートエスイーで Raspberry Pi を使うにあたって、 xtUML Days 2018 [XTUML2018] での発表資料 [LAVI-PDF] , [LAVI-V] を利用することに快諾いただきました。一層の謝意を表します。
-
[XTUML] Executable UML. Wikipedia. https://en.wikipedia.org/wiki/Executable_UML.
-
[XTUMLORG] xtUML.org — eXecutable Translatable UML with BridgePoint. https://xtuml.org/.
-
[BPINST] 久保秋. BridgePointのインストール手順. Qiita. http://bit.ly/31oBDl2.
-
[ONEFACT] One Fact Inc. http://onefact.net/.
-
[XTUML2018] xtUML Days 2018 is co-located with MODELS.
https://xtuml.org/xtuml-days-2018-copenhagen/ -
[LAVI-PDF] Starrett, Levi. 1 Application 3 Dialects 5+ Architectures, Platform independence with BridgePoint.
xtUML Days 2018. https://xtuml.org/wp-content/uploads/2018/10/1-3-5.pdf. -
[LAVI-V] Starrett, Levi. GPS Watch multi-platform demo.
https://www.youtube.com/watch?v=TLFNod4Qvnw.