📘 MMDVMHost構築手順書(OLED表示・ログ出力・DMR ID対応)20250619版

🗓 作業日:2025年6月19日
👤 作業者:pi@idtab
📡 コールサイン:JJ2YYK
📍 運用場所:Owariasahi-City, Aichi pref.
🔧 モデム:STM32_MMDVM_HS_HAT Rev1.7(GPIO)
📶 周波数:438.710 MHz / DMR ID:4401505


🔧 システム構成

項目内容
SBCRaspberry Pi Zero 2 W
OSRaspberry Pi OS Legacy Lite(32bit)
表示OLED(I2C, Type=3)
通信UART /dev/ttyAMA0
モードDMR専用(他モード無効)
ログ/var/log/pi-star/MMDVM-YYYY-MM-DD.log
ID表示DMRIds.dat を使用

✅ ステップ1:依存パッケージのインストール

sudo apt update
sudo apt install -y git build-essential libusb-1.0-0-dev libasound2-dev i2c-tools libi2c-dev

✅ ステップ2:UARTとBluetoothの解放

sudo systemctl disable hciuart
sudo systemctl disable bluetooth
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo systemctl mask serial-getty@ttyAMA0.service
sudo reboot

✅ ステップ3:raspi-configでI2CとUARTの有効化

sudo raspi-config
  • Interface Options → P6 Serial Port → 「コンソールを使わない」→「シリアル通信を使う」
  • Interface Options → P5 I2C → 有効化

✅ ステップ4:MMDVMHostの取得とビルド

mkdir -p ~/DMRTools
cd ~/DMRTools
git clone https://github.com/g4klx/MMDVMHost.git
cd MMDVMHost
make -j2

✅ ステップ5:OLEDライブラリの導入とインストール

git clone https://github.com/hallard/ArduiPi_OLED.git
cd ArduiPi_OLED
make -f Makefile.Pi.OLED CFLAGS='-O3 -Wall -DBCM2835_USE_GPIOMEM'
sudo make install

✅ ステップ6:GPIOアクセス権限の設定

echo 'KERNEL=="gpiomem", GROUP="gpio", MODE="0660"' | sudo tee /etc/udev/rules.d/99-gpiomem.rules
sudo addgroup gpio
sudo usermod -a -G gpio pi
sudo reboot

✅ ステップ7:MMDVM.iniの主な設定

[General]
Callsign=JJ2YYK
Id=4401505
Display=OLED
LookupFile=/usr/local/etc/DMRIds.dat

[Log]
DisplayLevel=1
FileLevel=1
FilePath=/var/log/pi-star
FileRoot=MMDVM

[Modem]
Port=/dev/ttyAMA0
TXInvert=1
UARTPort=/dev/ttyAMA0
UARTSpeed=115200

[DMR]
Enable=1
ColorCode=1
Id=4401505

[OLED]
Type=3
Rotate=0
Scroll=0
Brightness=0

✅ ステップ8:RSSI.dat 警告の回避

sudo mkdir -p /usr/local/etc
sudo touch /usr/local/etc/RSSI.dat

✅ ステップ9:ログ出力ディレクトリの作成と権限設定

sudo mkdir -p /var/log/pi-star
sudo chown pi:pi /var/log/pi-star

✅ ステップ10:MMDVMHostの起動

cd ~/DMRTools/MMDVMHost
sudo ./MMDVMHost MMDVM.ini

ログ確認:

tail -f /var/log/pi-star/MMDVM-2025-06-19.log

✅ ステップ11:DMR IDデータベースの導入

1. CSVダウンロード

wget https://radioid.net/static/user.csv -O /usr/local/etc/user.csv

2. PythonスクリプトでDMRIds.datを生成

convert_csv_to_dmrids_dat.py:

#!/usr/bin/env python3

import csv
import struct

CSV_FILE = "/usr/local/etc/user.csv"
DAT_FILE = "/usr/local/etc/DMRIds.dat"

def main():
    entries = []
    with open(CSV_FILE, encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            try:
                id = int(row["ID"])
                callsign = row["Callsign"].strip().upper()
                name = row["Name"].strip()
                city = row["City"].strip()
                state = row["State"].strip()
                country = row["Country"].strip()
                info = f"{name}, {city}, {state}, {country}".strip(", ")
                entries.append((id, callsign, info))
            except Exception:
                continue
    with open(DAT_FILE, "wb") as f:
        f.write(struct.pack("<I", len(entries)))
        for entry in entries:
            id, callsign, info = entry
            f.write(struct.pack("<I", id))
            f.write(callsign.encode("ascii").ljust(16, b"\x00"))
            f.write(info.encode("utf-8").ljust(64, b"\x00"))
    print(f"Converted {len(entries)} entries to {DAT_FILE}")

if __name__ == "__main__":
    main()

実行:

chmod +x convert_csv_to_dmrids_dat.py
./convert_csv_to_dmrids_dat.py

✅ ファイル構成

/usr/local/etc/
├── user.csv
├── DMRIds.dat
├── RSSI.dat
/home/pi/
└── convert_csv_to_dmrids_dat.py
~/DMRTools/MMDVMHost/
├── MMDVMHost
├── MMDVM.ini
/var/log/pi-star/
└── MMDVM-2025-06-19.log

✅ 自動更新用コマンド(任意)

wget -q https://radioid.net/static/user.csv -O /usr/local/etc/user.csv && /home/pi/convert_csv_to_dmrids_dat.py

以上が2025年6月19日時点の、Raspberry Pi + MMDVMHost構成によるDMRホットスポットの全手順です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です