本記事は、BD7IPAの先生から転載許可を得ています。
原因:アウトドアでのハイキング活動において、現在地、経路、方向などの機能が必要ですが、スマートフォンには十分な機能が備わっていますが、バッテリーの寿命や4G/5Gの電波状況、一部の山岳地帯における電波の弱さなどにより、実用性に欠ける場合があります。そのため、無線APRSという形式で現在地の報告を行うことを検討しています。また、遠方に住む家族に対しては、自分の現在地をリアルタイムで把握することができ、万が一の場合に救援を支援することも可能です。アウトドア活動を楽しむ人々にとって、スマートフォンでは代替できない価値があります。
目的:ラズベリーパイ + USBオーディオカード + 無線機を使用して、ゲートウェイ、中継、追跡機能(位置特定)を統合した小型基地局を構築する。
以下のようなことが可能になります。
* 人が携帯用の基地局を持ち込み、車内に設置する(または、4G/5Gの電波が届きやすく、開けた場所や標高の高い場所で設置する)。
- 手のテレポーテーションの位置情報は、基地局のゲートウェイからAPRSマップサーバーに送信されます(基地局はWi-Fiや有線ネットワークに対応する必要がありますが、屋外での有線接続は現実的ではありません)。ご家族は、地図サーバーを通じてあなたの位置を知ることができます。
- 2台のハンドヘッダー間において、電波状況によっては相互通信できない場合でも、基地局のレピーター機能を活用して、お互いの位置情報を交換することで、屋外での活動やチームメンバーとの連絡を円滑に行うことができます。
- 基地装置自体には位置情報機能があり、定期的に自身の座標を外部に送信することで、アウトドアでの地図が利用できない場合や道に迷った場合に、明確な目標の方向を示すことができます。
最初は、咸鱼で入手したある大佬の自作キットだが、Wi-FiやGPS機能は搭載されていなかった。自分でGPSを追加する過程で、徹底的に調整を行った。OSのインストールからソフトウェアのコンパイル、オーディオカードの交換、デスクトップPCの改造、GPSモジュールの追加まで、すべての手順を一つずつ試していく中で、多くの問題に直面した。そこで、ハム精神を持って、このプロセス全体を整理し、興味のある方々が自作する際に、同様のトラブルを避けることができるようにした。
それでは、具体的な内容に入る前に、必要なハードウェアとソフトウェアをまとめます。
- ハードウェア:
a) ラズベリーパイ(1Bでも十分です。ただし、OSやコンパイルソフトウェアのインストールは少し時間がかかります。私も4Bを試しましたが、コンパイル速度が向上する以外は、他の点は特に違いはありませんでした。ネットで「香橙派」というものも使えると書かれていましたが、私にはありませんので、実際に試していません。理論上、Linuxをインストールできれば問題ないと思います)。
b) USBオーディオインターフェースは、淘宝などで10数千円で購入できます。「CM108」などのキーワードで検索すると見つかります。フルサイズとミニサイズの両方を試しましたが、どちらも問題なく動作しますので、お好みのものをお選びください。
c) 手機は、最初に購入した際に既に付属していたものでしたが、より便利に利用するため、宝峰 UV5R に変更しました。これにより、手動での周波数設定や、双方向の受信が可能になり、アウトドアでの使用がより容易になります。また、他の登山仲間との通信において、周波数を簡単に変更することができます。
d) GPSモジュール:淘宝で購入した「VITE スマート」のGPS+北斗モジュール(外部アンテナ対応版)
e) 3.3Vのリレーモジュール(必ず3.3Vのリレーを使用してください。ラズベリーパイのGPIOポートは3.3Vのみを提供し、5Vのモジュールでは動作しません)。PTTを制御するために使用します。ヤフーオークションで購入した際、三極管と抵抗でPTTに接続されていましたが、その後UV5Rに交換した際に、何らかの原因で送信音のカードがリセットされ、プログラムが終了してしまいました。その後、リレーによる制御に変更したら問題なく動作しました。ただし、毎回リレーを吸合させる際にノイズが発生することがありますので、静電容量リレーなどを検討してみてください。
f) DC-DC調整型降圧モジュール(2つ)。私は12V電源を使用しており、Raspberry Piには5V、ハンドヘルドデバイスには7.4Vの電源が必要なため、2つ使用しています。
g) USB無線LANカードとして、私は箱の底にありましたRTU8188SUチップのカードを使用しています。これはAmazonなどで購入できますが、Linux環境では別途ドライバをインストールする必要はありません。
h) 音声変換ボード:淘宝で「APRS無線機 携帯電話変換ボード (BH4TDV 工作品)」を検索。TDVさんの製品として、TNCゲートウェイなどのAPRS関連機器の完成品も販売されており、自分で組立てるのが面倒な場合はこちらから購入できます。
i) 無線機用ヘッドセットケーブル。
- ソフトウェア:
a) オペレーティングシステム:DietPi。DebianをベースにしたミニOSで、低スペックのPCに適しています。公式サイト: https://dietpi.com/
b) Direwolf: Dire Wolfは、オープンソースのソフトウェア「音声カード」AX.25データパケットモデム/TNCおよびAPRSエンコーダー/デコーダーです。単独で使用してAPRSのトラフィックを監視したり、追跡装置、ディジペーター、APRS-ttゲートウェイ、またはインターネットゲートウェイ(IGate)として使用できます。公式サイト:https://github.com/wb2osz/direwolf/
次に、私があなたをゼロからステップバイステップでこの小型基地局の構築方法を説明します。このプロセスでは、簡単な手作業(配線溶接など)と、Linuxの基本的な知識が必要です。もし基礎的な知識があれば、よりスムーズに理解できますが、全くの初心者でも、段階を踏んで進めていけば成功できるはずです。問題が発生した場合は、インターネットで検索するのが最も効率的です。国内ではAPRSを遊ぶ人は少ないかもしれませんが、これは政策上の理由による可能性があります。しかし、海外では多くの人が楽しんでいますので、海外のウェブサイトで情報を収集することで、より簡単に問題を解決できます。
まず、全体図を2枚掲載します。これにより、より分かりやすく理解していただけます。


まず、ハードウェアの構築です。
- 直流12Vの電源が入った後、まず2つの降圧モジュールを通して、それぞれラズベリーパイと携帯端末に電力を供給します(携帯端末は、淘宝などで購入した電力変換器を使用することも可能です。その内蔵には12Vから7.4Vへの降圧機能が備わっています)。
- ラズベリーパイの2つのUSBポートのうち、1つに無線LANカードを接続し、もう1つにはUSBオーディオインターフェースを接続しています。オーディオインターフェースの後ろに3.5mmステレオジャックを接続する必要があるため、スペースが限られていたため、直接配線を溶接してオーディオインターフェースのUSBポートに接続しました。
- ラズベリーパイのGPIOポート:
a) 5V + GND は、GPSモジュールの VCC + GND
b) GPIO14、GPIO15 は GPS モジュールの RxD、TxD に対応
c) GPIO18、3.3V、GND はリレーモジュールの IN、DC+、DC- に対応する。
d) GPIO23 + GND は、ケース上の1つのLEDに接続され、LEDのプラス側とGPIO23の間で680Ωの抵抗を直列につなぐ。
e) 音声カードとネットワークカードのインジケーターを、それぞれ延長ケーブルでケースに固定された1つのLEDに配線する。
f) K型のケーブルを製作し、ケーブルの順番に基づいて図を作成し、それをオーディオ変換ボードに実装する。



次に、ソフトウェアに関する内容です。
まず、オペレーティングシステムのインストールを行います。
- 8GB以上のSDカードを用意してください(もしラズベリーパイ4B/3Bを使用する場合は、TFカードを使用します。操作方法は完全に同じなので、それに従って進めてください)。
- DietPiの公式サイトからシステムイメージをダウンロードします。(ご自身のラズベリーパイのボードに合わせてダウンロードしてください)。ダウンロード後、展開してバックアップとして保存しておきます。ファイル名は「DietPi\_RPi-ARMv6-Bookworm.img」または「DietPi\_RPi-ARMv8-Bookworm.img」(ラズベリーパイ4の場合)とします。

- システムへの書き込み:Rufusの携帯版をダウンロードしてください(公式サイト:https://rufus.ie/zh/)、SDカードを挿入し、Rufusを開きます。
a) SDカードを選択してください。複数のUSBメモリやSDカードをパソコンに接続している場合は、誤ったものを選択していないか確認してください。
b) 展開したばかりのシステムイメージファイルを選択する
c) その他の設定はデフォルトのままで、開始ボタンをクリックし、書き込みが完了するのを待ちます。
d) SDカードを書き込み終えたら、慌てずにSDカードを取り出すのではなく、Windowsのメモ帳でSDカード内のdietpi.txtファイルを開き、
`AUTO_SETUP_NET_WIFI_ENABLED=0` の行を、`0` を `1` に変更し、ファイルを保存して閉じます。これにより、初回起動時に Wi-Fi が自動的に有効になります。
e) その後、dietpi-wifi.txtファイルを開き、
`aWIFI_SSID[0]=''` の行で、等号の右側にあるシングルクォート内に、あなたのWi-Fiの名前を入力してください。(ただし、大文字・小文字を区別する可能性があるため、必ずしも日本語に対応していない場合がある。英語表記のネットワーク名を使用することをお勧めします。)
aWIFI\_KEY\[0]='' この行では、等号の後にシングルクォートで囲まれた部分に、あなたのWi-Fiパスワードを入力してください。
f) その他の項目は変更不要で、ファイルを保存して閉じます。

- SDカードをパソコンから取り出し、ラズベリーパイに挿入し、電源を入れる。
- 数分ほど待って、ルーターに接続し、「DietPi」という名前の機器がIPアドレスを取得しているか確認してください。そのIPアドレスをメモしておいてください。
- SSHツール(例:PuTTY)を使用してラズベリーパイに接続し、ログイン名:root、パスワード:dietpi
- この場合は、しばらく待つ必要があります。初回起動時には、多くのスクリプトが実行されますので、基本的に操作は不要です。ただし、初回起動時にGitHubに接続して最新バージョンを取得します。自宅で利用しているNTTの回線の場合、場合によっては接続できないことがあります。何度か試すか、異なる時間帯を試してみてください。どうしても接続できない場合は、VPNなどの方法をご検討ください。具体的な手順については、別途ご自身で検索してください。
- その際、簡単な質問をいくつかお伺いします。例えば、「ユーザー調査への参加」や「デフォルトパスワードの変更」などです。ご自身に必要な情報を確認し、画面上の指示に従って選択してください。
- その後、ソフトウェアとハードウェアの設定を行うよう求められます。この場合は、すべての設定を元の状態のままにし、「システムインストール」を選択してください。(例:[画像])

- 準備が整ったら、以下のような画面が表示されるはずです。これにより、DietPiシステムが正常にインストールされたことを確認できます。

次にソフトウェアのインストールを行います。以降の手順は、すべてルート権限で実行されます。
まず、USBオーディオインターフェースとシリアルポートを開きます。
dietpi-config
以下の画面が表示された場合、「オーディオオプション」を選択してください。> サウンドカード


「hw:0,0 Device USB Audio」を選択し、Enterキーを押してインストールしてください。

作業が完了したら、常に「Back」キーを押して最上位まで戻り、一旦終了せずに次の設定に進みます。その後、GPSとラズベリーパイが正常に通信できるようにシリアルポートの設定を行います。
上位の階層で「詳細設定」を選択する。

「シリアル/UART:利用可能なデバイスの管理」を選択する

画像の指示に従って、コンソールをオフ、デバイスをオンに設定してください。

完了後、画面全体を「Back」で一番上に戻し、「Exit」で終了します。
この状態で、サウンドカードが正しく認識されているか確認するために、以下のコマンドを実行して、オーディオ再生および録音デバイスが正しく認識されているかどうかを確認できます。
aplay -l
arecord-l
以下の画面が表示された場合、サウンドカードは正常です。

その後、国内のソースを設定することで、ソフトウェアのインストールをより迅速に行うことができます。
nano /etc/apt/sources.list
ファイルの内容を以下の形式に変更してください。
#deb http://raspbian.raspberrypi.org/raspbian/ bookwormmain 貢献 非無料
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/bookworm メイン 非無料 貢献
その後、以下のコマンドを実行してアップデートを行います。
```
apt update
```
完了後、ソフトウェアのインストールを開始し、以下のコマンドを実行してください。
apt で以下のパッケージをインストールしてください。
cmake
make
build-essential
libasound2-dev
libudev-dev
git
libgps-dev
gpsd-clients
このプロセスは時間がかかる可能性があります。なぜなら、これは最初のRaspberry Piモデルだからです。根気よく待つことが重要です。もしRaspberry Pi 4Bを使用した場合、はるかに早く完了します。
すべてのインストールが完了したら、GPSDサービスの設定を開始できます。
nano /etc/default/gpsd
内容は以下の通りに変更されました:
START\_DAEMON="true"
USBAUTO="true"
DEVICES="/dev/ttyAMA0"
GPSD\_OPTIONS="-n"
GPSDを自動起動設定する
gpsd の再設定
実行:
gpsd の起動を許可する
gpsd を開始する
次に、GPSモジュールが正常に動作するかどうかを確認するために、以下のコマンドを入力できます。
まず、シリアルポートのボーレートを115200に設定します。
`/dev/ttyAMA0` を 115200 bps で設定する。
次に、GPSクライアントを実行して、GPS情報を確認してください。
cgps
もし、多数の出力が連続的に表示されれば、シリアルポートとGPSモジュールが正常に通信できていることを意味します。「q」キーを押してソフトウェアを終了してください。
次に、direwolfをダウンロードしてコンパイルし、以下のコマンドを順番に実行してください。
cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
この場合、GitHubとの接続がうまくいかないことがありますが、何度か試してみると繋がる場合があります。
ダウンロードが完了したら、コンパイルとインストールを行うことができます。以下のコマンドを順番に実行してください。
build ディレクトリを作成する
build ディレクトリに移動する
cmake -DUNITTEST=1 ... を実行する <— 注意、この手順で「..」を忘れずに実行してください。
make -j4
make test
make install
make install-conf
ラズベリーパイ1Bのコンパイルは時間がかかるため、上記のすべてのコマンドを実行するには約1時間かかります。根気よく待つことで完了します。1つのコマンドが完了したら、次のコマンドに進みます。一方、ラズベリーパイ4Bの場合は非常に早く、数分で完了します。
完了後、動作確認のために以下のコマンドを実行してみてください。
direwolf –c direwolf.conf
以下のような情報が表示されれば、ソフトウェアとハードウェアが正常に動作していることを確認できます。 表示されている多数の警告メッセージは無視して構いません。これは、「ルート権限で実行しない」という注意を促すものであり、時間のある方は、通常ユーザーとしてプログラムを実行してみることを推奨します。

まず、Ctrl+Cで終了してください。
次に、設定ファイルを調整して、システムが私たちの希望する動作をするようにします。以下のコマンドを実行してください:
direwolf.conf を direwolf.conf.bk にコピー
まず、元の設定ファイルを別の名前で保存し、バックアップとして残します。
次に、新しい設定ファイルを作成します。
nano direwolf.conf
次に、それぞれの意味を一つずつ説明します。
#GPSDサービスの使用
GPSD
#スマートビーコンを使用する場合、以下の設定は、速度が60km/hを超えた場合に、2分ごとにビーコンを送信し、5km/h以下の場合には15分ごとに送信することを意味します。
#後続の設定は、方向角度に関連している可能性があります。詳細については、公式マニュアルを参照してください。興味があれば確認してください。不要な場合はコメントアウトしてください。
SMARTBEACONING 60 2:00 5 15:00 15:00 30 255
#ログ設定、/rootディレクトリに手動でlogフォルダを作成し、毎日ログファイルが作成されます。
LOGDIR .
LOGDIR log-files
LOGDIR /root/log
#以下の設定は、正式データパケットの送信前後の空時間などを設定するパラメータです。
#ラズベリーパイの問題により、USBサウンドカードで一定のランダムな遅延が発生することがあります。これにより、正式データパケットのヘッダーが切り捨てられることがあります。
#この場合、TXDELAYの値を手動で調整できます。具体的な値はシステムデフォルトですが、実際に試して確認してください。
DWAIT 50
#x10 mSec per unit = 100 mSec.
SLOTTIME 10
#送信後の確率。
PERSIST 63
#x10 mSec per unit = 300 mSec.
TXDELAY 30
#x10 mSec per unit = 100 mSec.
TXTAIL 10
#半二重複。
FULLDUP OFF
#サウンドカード設定、上記のステップに従って操作した場合、0,0が正しいです。複数のサウンドカードがある場合は、実際の状況に合わせて設定してください。
ADEVICE plughw:0,0
#モノラルまたはステレオ、ここではモノラルを使用します。ステレオの場合は2
ACHANNELS 1
CHANNEL 0
#コールサインの設定
MYCALL NONAME
#モデムレート、ほとんどのトランシーバーでは1200が適切です。変更する必要はありません。
MODEM 1200
#PTT制御ポート、上記のハードウェア接続に従った場合は18、それ以外の場合は実際の状況に合わせて変更してください。
PTT GPIO 18
#データキャリア指示ポート(ビーコンを受信したときに点灯します)。上記のハードウェア接続に従った場合は23、それ以外の場合は実際の状況に合わせて変更してください。
DCD GPIO 23
#APRSクライアントを使用してこのデバイスに接続する場合、ここにポートを設定します。
AGWPORT 8000
KISSPORT 8001
#APRS無線ビーコン
#TBEACONはGPSビーコンで、GPSが正常に位置を取得した後に送信されます。
#delayはソフトウェア起動後、何分からビーコンを送信を開始するかを指定します。ここでは1分です。「1:00」とすることも可能です。
#everyは送信頻度を指定します。ここでは5分ごとですが、「5:00」とすることも可能です。
#symbolは地図上に表示されるアイコンです。
#alt=1は標高情報を送信します。送信しない場合は0に設定してください。
#freq は
#commentは追加情報で、ユーザーマニュアルでは頻度情報をここに書かないように推奨されています。頻度情報はfreqパラメータで設定します。
TBEACON delay=1 every=5 symbol="CAR" alt=1 freq=144.640 comment="APRS DIGIPEAT From RaspberryPi 1200bps"
#PBEACONは固定ビーコンで、GPSビーコンよりもlat、long、heightなどの位置情報が含まれています。
#TBEACONまたはPBEACONのどちらを使用するかは、自由に選択できます。
#PBEACON delay=0:30 every=1 symbol="CAR" lat=23^10.120344N long=113^17.119954E height=420 freq=144.640 power=05 gain=6 comment="APRS DIGIPEAT from RaspberryPi 1200bps"
#中継設定、中継機能を有効にするには、このパラメータが必要です。
DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12] TRACE
#ゲートウェイサーバーの設定
IGSERVER asia.aprs2.net:14580
#ログインサーバーのコールサインと認証コード。
IGLOGIN BD7IPA 123456
#ゲートウェイに送信するビーコン情報、APRS無線ビーコンパラメータ設定と同じように調整できます。
#sendto=IGというパラメータが追加されていることに注意してください。これは、このビーコンをインターネットに送信することを意味し、手元のトランシーバーには送信されません。
TBEACON sendto=IG delay=1 every=5 symbol="CAR" alt=1 freq=144.640 comment="APRS iGate From RaspberryPi"
#PBEACON sendto=IG delay=0:30 every=1 symbol="CAR" lat=23^10.120344N long=113^17.119954E height=420 freq=144.640 power=05 gain=6 comment="APRS iGate from RaspberryPi 1200bps"
#ゲートウェイへの送信設定。そのままコピーして、修正は不要です。
IGTXVIA 0 WIDE1-1,WIDE2-1
#送信制限:チャンネルの過剰な使用を防ぐための制限
#2つのパラメータは、1分および5分以内に許可される送信回数を表します。
#ここでは、1分以内に6回、5分以内には10回までと設定しています。必要に応じて調整してください。
IGTXLIMIT 6 10
このソフトウェアには、設定できるパラメータが多数あります。興味のある方は、公式サイトからダウンロードして、IGFILTERなどのパラメータを活用することで、例えば、中継装置が特定のコールサインの情報を受信するように制限することができます。
https://github.com/wb2osz/direwolf/tree/master/doc
その後、すべてが正常に動作する場合は、以下のコマンドを実行してください。
direwolf –c direwolf.conf
しばらくすると、aprs.cnなどのサイトで自分のビーコンが表示されるようになるはずです。
最後に、起動時に自動で実行するように設定しましょう。
まず、screenソフトウェアをインストールしてください。
apt で screen をインストールする
インストール後、以下のコマンドを実行して、スケジュール実行ファイルの編集を行います。
crontab -e
以下の2行を追加してください:
@再起動時、stty -F /dev/serial0 115200
* * * * * /root/dw-start.sh >/dev/null 2>&1
最初の行は、毎回起動時にシリアルポートのボーレートを115200に設定することを示しています。
2行目は、1分ごとにスクリプトを実行し、`direwolf` がすでに実行されている場合は終了します。そうでない場合は、30秒後に `direwolf` を起動します。
これにより、プログラムが予期せず終了した場合でも、自動的に再起動されることが保証されます。
起動後、以下の方法で:
画面 -D -r direwolf
このコマンドは、プログラムの実行状況を確認できます。
この場合は、絶対にCtrl+Cで終了しないでください。そうするとプログラムが中断されます。
画面を正常に終了したい場合は、`Ctrl + A` を押してから `d` キーを押してください。
上記は、ゼロからAPRSゲートウェイを構築するための手順です。皆様が簡単にご自身のゲートウェイを構築できるよう願っています。
73 BD7IPA