まずはOSとしてRaspbianをインストール
昨今ラズパイにはOSをMicroSDに焼くのに新しいツールが用意されています。
これを使うと最新のOS(ラズビアン)をダウンロードしながら焼けるし、カードのフォーマットなどもできます。
でも使いたいOSイメージがネットワーク上の別の場所に置かれているような場合(過去バージョンのイメージなどを使う場合)はbalenaEtcherなどが必要になります。
Raspberry Pi Imager for Windowsを使ってみます。
ダウンロードしてインストール後、起動して、使いたいOSを選びます。
Desktop版(通常コチラ)
Lite版を選択する場合
焼くMicroSDカードを選びます。Lite版なら1.3GB程度のサイズなのでたいていのカードは使えます。
Desktopは3~5GBくらいあります。
焼きます。
WRITE->VERIFYはLite版は5分程度、Desktop版は25分くらいで終了。
ダウンロードしながら焼くので回線状況によって変動しますけど。
SSH接続の準備
このままでは、Tera Termなどで接続しようとしてもおそらく拒否されます。
Raspbianを焼いたMicroSDをエクスプローラで開きます(最初に見えているのは/bootです)。
sshというフォルダー(または 拡張子なしのsshという空ファイル)を作成します。
もしディスプレイとキーボードが使えるなら….
sshを起動
sudo systemctl start ssh
恒久化
sudo systemctl enable ssh
PCからSSHで接続
TeraTermなどを使います。
初期状態では以下でログイン
ユーザー名:pi
パスワード:raspberry
設定
1 2 |
sudo apt update sudo apt upgrade -y |
設定を変更するためにraspi-configを実行します。
1 |
sudo raspi-config |
以下のような画面が開きます。
1でパスワードを変更しておきます。
2で言語設定とWi-Fiを使えるようにします(お手持ちのルーターのSSIDとパスワードを確認しておきましょう)。
4でタイムゾーンを設定、Asia->Tokyo
VNCでデスクトップを表示したい場合は
5のIntterfacing Optionsを選んで、VNC -> enabled ?でYESを選択すればOK。
外部のViewerでDesktopを表示できるようになります。
とりあえずこんなもんで。
で、Wi-Fi設定ではパスワードは平文(プレーンテキスト)で表示されていると思います。
1 |
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf |
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=”<SSID>”
psk=”<パスワード>”
}
暗号化しておきたい場合は、
1 |
sudo wpa_passphrase <SSID> <パスワード> >> /etc/wpa_supplicant/wpa_supplicant.conf |
network設定が追記されますので、wpa_supplicant.confを開いて、前の設定を削除しておきます。
IPアドレスを固定します。
例えば、有線を192.168.0.30、Wi-Fiは192.168.0.35にしておきたい場合
domain_name_serversの表記は例です、確認する場合は以下を実行
sudo systemd-resolve –status | grep “DNS Servers”
または
cat /etc/resolv.conf
1 |
sudo nano /etc/dhcpcd.conf |
最後尾に追記
interface eth0
static ip_address=192.168.0.30
static routers=192.168.0.1
static domain_name_servers=122.197.254.137
interface wlan0
static ip_address=192.168.0.35
static routers=192.168.0.1
static domain_name_servers=122.197.254.137
アドレスは有線、無線とも同じにしていもいいです。
ラズパイを再起動
ラズパイにGPSモジュールをセットして現在地を測位
通常GPSモジュールはこんな感じです。大体3000円から6000円くらいのもんです。
でもこの手の電子工作モジュールはたいがい「半田付け」という手間が必要なものが多いです。
まぁ「電子工作」というぐらいですから….。
ただ管理人のように超がつく不器用もんには敷居が高いです。
で、これ!ビットトレードワンのGPSCAP、組立済みの文字がうれしいですねぇ(7128円でしたけど)。
これはラズパイマガジンとの連動企画もんだったようです(2017年4月~)、が単体でも販売されています。こういう形態のモジュールは通常「HAT」と呼ばれますが、このGPSCAPはその要件を満たしていないので「CAP」と名乗っているそうです(CaptureのCAPかと思ってました….^^)。
少々詳しい紹介はコチラのページ参照(各種実行コードもダウンロードできます)
で、どこかで紹介されていたとおり、このモジュールはラズビアンOSのDesktopを前提に構成されています。GPIOのヘッダーピンに差し込んで使います。
他のOS(Ubuntuなど)で使えないか試してみましたが、モジュールをセットした時点でネット接続ができない状態になるので諦めました。
で、初期設定なしの場合は、LCDは点灯するものの真っ白な状態です。
Desktopの場合
このページからダウンロードしたGPSCAP.tarターボールを解凍してフォルダーごとラズパイにSAMBAなどでコピーしてフォルダー内のsetupGPS3.sh(ラズパイ2ならsetupGPS2.sh)を実行して再起動すれば、LCDに日付が表示され、LED1が点滅して使用可になります。
Liteの場合
GPSCAP.tarターボールを解凍してフォルダーごとラズパイにSAMBAなどでコピーしておくのはいっしょ。
GPSモジュールはラズビアンOSのDesktopを前提にしているのでLiteではそのままでは動きません。
以下のように必要なライブラリを追加してからsetupGPS3.sh(ラズパイ2ならsetupGPS2.sh)を実行します。
1 2 3 4 5 6 7 8 9 |
sudo apt-get install python3-rpi.gpio sudo apt-get install python3-smbus sudo apt-get install python3-serial cd GPSCAP ./setupGPS3.sh sudo reboot |
LCD表示は茶色いスィッチをポチポチ押せば、Date->JST->Latitude->Longitude….という具合に順次表示が変わります。
モジュールは衛星を補足しやすいように、開けた場所で使います、それでも初期段階での測位は少々時間がかかります。
茶色いスィッチを5秒以上長押しするとOSはhaltします(茶色いスィッチの右側にあるLED1が消灯します)。
このLED1はシェルスクリプト実行中も消灯します。ただ実行中に他のシェルスクリプト(onLED1.sh、offLED1.sh、initLCD,sh、printLCD.sh ‘Hello!’)を実行すると反応しますので回路はオープンされているようです。LED1やLCDを他の目的で使えると思います。
また、何かの理由でLED1が消灯して茶色いスィッチも機能しないことがあります(理由不明)。モジュールが停止しているのか?と思えても機能中であることがあります。jst.shなどを実行して戻り値があれば生きています。
元に戻す場合
1 2 3 |
cd ~/GPSCAP ./gps.py & |
測位したデータを見てみます(測位用のPythonプログラムは2で書かれていますが、Busterには2用のserialライブラリをうまく入れることができませんでした、なのでシェルスクリプトを使っています)
日付(date.sh)2020年8月5日の表記 [DDMMYY]
050820
時刻(utc.sh)8時13分57秒~ [HHMMSS.xxx]
081357.000
081358.000
081359.000
緯度・経度(tude.sh)Latitude[DDMM.MMMM] Longitude[DDDMM.MMMM]
3444.3235,N 13530.0165,E
3444.3235,N 13530.0163,E
3444.3236,N 13530.0164,E
変換
60進
DDMM.MMMM ー> DD°MM′SS″
SS = .MMMM * 60
10進
DD + (MM * 60 + SS)/3600
高度(altitude.sh)[m]
113.6
113.7
113.7
捕捉衛星数(satellites.sh)
3
より詳しいことは「ラズパイマガジン」の2017年4月号参照(中古本なら1000円くらい)
提供されているPythonコードはversion2のものです。3で使う場合は以下のように修正。
例1:date.py
1 2 3 4 5 6 7 8 9 10 |
#! /usr/bin/python3 import serial ser = serial.Serial('/dev/serial0', 9600) while True: line = str(ser.readline()) if "$GPRMC" in line: list = line.split(',') print(list[9]) ser.close() |
例2:tude.py
1 2 3 4 5 6 7 8 9 10 |
#! /usr/bin/python3 import serial ser = serial.Serial('/dev/serial0', 9600) while True: line = str(ser.readline()) if "$GPGGA" in line: list = line.split(',') print(list[2], list[4]) ser.close() |
モバイルバッテリを使う場合
ラズパイ3 B/B+ で運用する場合は5V/2.4A以上の出力のバッテリが望ましいです。
ケーブルもその出力に対応したものが必要です(5V/2.4A対応は100均でも売ってます)。
そうでないと測位が不安定になったり、途中でモジュールが停止する場合がありました。
Next
測位したデータを使って、OpenStreetMapのタイルサーバーで現在地を表示
Leave a Reply