Skip to content

BridgePoint GPS Watch project for Raspberry Pi with TM1638 board.

License

Notifications You must be signed in to change notification settings

kuboaki/GPS_Watch

Repository files navigation

Raspberry PiとTM1638ボードで動かす BridgePointのGPS Watch

BridgePoint にサンプルとして付属している GPS_Watch プロジェクトを、TM1638ボードを接続した Raspberry Pi で動かすためにアレンジしました。

1. 関連する記事や講義について

モデルからこのリポジトリにあるソース・コードを生成し、 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 - モデル駆動開発におけるモデル変換の役割

https://codezine.jp/article/detail/10597

2. 必要なもの

  • 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の記事が参考になるでしょう。

3. システムの概要

3.1. システムの外見

オリジナルのサンプルは、 図 1 のような構成です。

GPSWatch_original
図 1. オリジナルのGPU Watchの構成と動作の概要

Raspberry Pi で作る GPS Watch の完成品は、 図 2 のような概観になります。

GPSWatch_raspi
図 2. Raspberry Pi とTM1638ボードで動作している GPS Watch

3.2. コアデバイスの構造

UMLでモデルを作成するコアデバイスは、 図 3 のようなコンポーネント構造になっています。

gps_watch_componentsmerged
図 3. GPS Watch システムを構成するコンポーネント(コンポーネント図)

各コンポーネントはクラスの集まりになっています。たとえば Tracking コンポーネントのクラス図は 図 4 のようになります。

tracking_comp_classes_meged
図 4. Tracking コンポーネント内部の構造(クラス図)

3.3. コアデバイスの振舞い

それぞれのクラスの振舞いはステートマシン図で表します。たとえば、 Tracking コンポーネントの Display クラスのステートマシン図は 図 5 のようになります。

display_class_stm
図 5. Display クラスの振舞い(ステートマシン図)

さらに、それぞれの状態ごとの処理(それぞれの状態の中に書いてあるスクリプト)は、モデルの振舞いを記述するための「アクション言語(OAL: Object Action Language)」を使って書きます。たとえば、Tracking コンポーネントの Display クラスのステートマシン図の「displayDistance」状態のスクリプトは、 図 6 のようになります。

display_distance_state
図 6. Displayクラスの displayDistance 状態の振舞いを書いたアクション言語(OAL)のスクリプト

OALは、汎用のプログラミング言語から独立した「モデルを操作する」ことに特化した言語です。OALで振舞いが書いてあれば、モデル変換によって C/C++、Java、System-C などで「動く」ソース・コードを生成できます。

3.4. 生成されるソース・コード

モデルを入力として次の工程の成果物を生成するのが、モデルコンパイラの働きです。 ここでは、MC3020というモデルコンパイラを使っています。 MC3020は、UMLで作成した構造と振舞いのモデルを入力とし、動作可能な処理を伴う(スケルトンではない)C言語のソース・コードを出力としています。

生成されたソース・コードが、 src ディレクトリにあるコードです。 暗号のようなコードではなく、手書きのコードに近いことがわかりますね。

これらに TM1638ボードを接続した Raspberry Pi 動作させるための手書きコードを追加したのが、このリポジトリにあるC言語ソース・コードになります。

Important

注意が必要なのは、生成したコードはスケルトンではなく、実行可能なコードであるということです。手書きコードを追加するのは、モデルと外部との入出力部分の関数にTM1638ボード用のAPIを書く部分だけです。

4. 利用方法

4.1. Raspberry PiとTM1638ボードの接続

入手した TM1638ボード を、Raspberry Pi に接続します。

Raspberry Pi と TM1638ボード の接続ポートの対応は 表 1 のようになります。

表 1. 接続ポートの対応表
Raspberry Pi TM1638ボード

+3.3V(1)

VCC

GND(6)

GND

GPIO6(31)

STB

GPIO13(33)

CLK

GPIO19(35)

DIO

Raspberry Pi と TM1638ボード の接続の詳細図を 図 7 に示します。

connection_raspi_tm1638_02
図 7. Raspberry Pi と TM1638ボード の接続(詳細)

接続が済んだら、もう一度確認しておきましょう。

4.2. TM1638ボード用ライブラリのインストール

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 でコンパイルエラーが発生した場合の対処

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.hsys/types.h を追加する。

bcm2835.h(562行目付近)
#include <stdint.h>
#include <sys/types.h>   // (1)
#define BCM2835_VERSION 10062 /* Version 1.62 */
  1. sys/types.h を追加した

4.3. GPS WatchプログラムをRaspberry Pi上でビルドする

BridgePoint 上で GPS Watch のサンプルは用意できているものとします。

このリポジトリのコードは、生成したコードに、 Raspberry Pi と tm1638 ボードを使って動かす部分を追加したものです。 src 以下のソースコードを、 Raspberry Pi に転送してくだい。

Makefile は提供されているので、あとはビルドするだけです。

Raspberry Pi 向けに調整したGPS Watchをビルドする
pi@raspi-01:~/Documents/GPS_Watch/Debug $ make all
(略)
Finished building target: GPS_Watch

4.4. Raspberry PiでGPS Watch の動作を確認する

ビルドできたら、動かしてみましょう。

Raspberry Pi で動く GPS Watch の起動手順
  1. PC側でGUI画面を実行しておきます(この手順はもとのGPS Watchと同じです)。

  2. Raspberry Pi のターミナルから、GPS_Watch を起動します。

  3. PC上のGUI画面や TM1638ボード 上の START/STOP ボタンを操作すると、時間を測り始めます。

  4. GUI画面のボタンと TM1638ボード 上のボタンのどちらを操作しても、表示が変化します。

  5. ターミナルで Ctrl-C を入力して、動作を停止します。

BridePoint からの操作でGUI画面が起動しない場合は次の手順でコマンドラインからの起動します。

GUI画面のコマンドラインからの起動方法

{BP} の更新状況や実行環境によっては、 図 8 のようなエラーダイアログが表示されて、GUI画面が起動できないことがあります。このようなときは、コマンドプロンプトから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)
  1. ワークスペースの UI ディレクトリの中の bin ディレクトリに移動する。

  2. WatchGui を起動する。

  3. 実行後は接続待ちになる。

  4. 実行後は接続が切れる。

GUI画面と TM1638 ボードの両方から操作できることが確認できるでしょう。

createing_launch_tab_configration_error
図 8. GUI画面が起動できないときに表示されるダイアログ

4.5. 動作している様子

このシステムが動作する様子は YouTube にアップしてあります。

BridgePointのサンプルのGPS Watchを動かしてみた

BeridgePointのサンプルの GPS Watch を動かした動画。
https://youtu.be/IaVM7KjwQ9w

BridgePointで生成したコードをtm1638ボードをつないだRaspberry Piで動かしてみた

GPS Watch が Raspberry Pi と TM1638ボード の組み合わせ動作している様子。
https://youtu.be/kNXow7kltDM

5. 謝辞

なお、この章で紹介したシステムは、文部科学省が平成29年度に提示した「成長分野を支える情報技術人材の育成拠点の形成(enPiT-Pro)」に早稲田大学が代表校として申請し採択された「スマートエスイー : スマートシステム&サービス技術の産学連携イノベーティブ人材育成」[SMART-SE] の講義「モデル駆動開発」の演習で用いたものです。関係者各位に謝意を表します。

これまで BeridgePoint の開発、販売、コミュニティ支えてきた全てのみなさんに感謝します。とりわけ、 Levi Starrett氏には、スマートエスイーで Raspberry Pi を使うにあたって、 xtUML Days 2018 [XTUML2018] での発表資料 [LAVI-PDF] , [LAVI-V] を利用することに快諾いただきました。一層の謝意を表します。

関連資料

About

BridgePoint GPS Watch project for Raspberry Pi with TM1638 board.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published