keitanakのアイコン画像
keitanak 2024年01月28日作成 (2024年09月14日更新) © MIT
製作品 製作品 閲覧数 455
keitanak 2024年01月28日作成 (2024年09月14日更新) © MIT 製作品 製作品 閲覧数 455

ラズパイZeroで作るウエザーステーション

ラズパイZeroで作るウエザーステーション

ラズパイZeroが1台余っていることから、ウエザーステーションを作ってみました。

機材

  • ラズパイZero

  • 液晶モジュール

  • 電源アダプタ

    • LCD表示の関係で、DC5V 2.5A以上のものが必要です。今回は3Aのアダプタを利用しました。
  • SDカード 8GB

構築手順

ラズパイOSの準備と初期設定

以下のサイトからOS imagerをダウンロードして、SDカードにOSイメージをロードします。
Raspberry Pi OS

機種を選択後、OS画面では、以下のLegacy 32bit版を選択します。
キャプションを入力できます

OSのカスタマイズでは、パスワードや、wifiやSSHの有効化などを設定しました。

HDMIやキーボードは接続せずに、ZeroとLCDを接続してからZeroの電源を入れます。
PCからTeraTermでSSH接続を行います。

キャプションを入力できます

キャプションを入力できます

キャプションを入力できます

無事接続できたら、OS/LCD周りの各種初期設定を実施します。

#まずはアップデートを行います。 sudo apt-get update -y && sudo apt-get upgrade -y # WaveshareのLCD設定です。 git clone https://github.com/waveshare/LCD-show.git cd LCD-show/ chmod +x LCD35-show ./LCD35-show # この再起動後にLCD画面表示するはずですが、なぜか表示されず。以下を実行して再起動したところ表示されました。 ./LCD35-show lite

キャプションを入力できます

Xの画面がLCDに表示されましたが、今回はXは不要なので、起動時にXが起動しないように設定を変更します。

sudo raspi-config

を実行して、以下の要領で設定を変更します。

1 System Optionを選択
キャプションを入力できます
S5 Boot/Auto Loginを選択
キャプションを入力できます
B1 Consoleを選択します。
キャプションを入力できます
再起動を求められるので再起動します。

キャプションを入力できます

再起動後は、LCDにはコンソール画面が表示されました。

キャプションを入力できます

この後必要になるので、日本語ロケールの追加を行います。

sudo raspi-config

を実行して、以下の要領で設定を変更します。

キャプションを入力できます

キャプションを入力できます

キャプションを入力できます
最後の選択肢は、このままでOKをおします。

キャプションを入力できます

日本語フォント(GoogleのNotoSansフォント)もインストールします。

wget -O NotoSansCJKjp-hinted.zip https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip unzip -d NotoSansCJKjp-hinted NotoSansCJKjp-hinted.zip sudo mkdir -p /usr/share/fonts/opentype sudo mv -fv ./NotoSansCJKjp-hinted /usr/share/fonts/opentype/note rm -rfv NotoSansCJKjp-hinted.zip wget -O NotoSerifCJKjp-hinted.zip https://noto-website.storage.googleapis.com/pkgs/NotoSerifCJKjp-hinted.zip unzip -d NotoSerifCJKjp-hinted NotoSerifCJKjp-hinted.zip sudo mv -fv ./NotoSerifCJKjp-hinted /usr/share/fonts/opentype/note rm -rfv NotoSerifCJKjp-hinted.zip sudo fc-cache -fv

既定ではWifiのパワーセーブがonになっており、一定時間時間がたつと通信ができなくなるようです。パワーセーブをoffにします。
ネットの情報を元に、以下設定を行います。
以下コマンド実行

sudo nano /etc/dhcpcd.exit-hook

こちらの内容を張り付けて保存し、終了、再起動します。

[ -n ${disable_pm} ] || return 0 if [ “${interface}” = “wlan0” ]; then case ${reason} in CARRIER | NOCARRIER) iwconfig ${interface} power off ;; STOP | STOPPED) iwconfig ${interface} power on ;; esac fi

ウエザーステーションソフトの導入と設定

基本的にWeatherPiページに記載の通りです。

# 必要なモジュールのインストール sudo apt-get install rng-tools gettext -y sudo apt-get install python3-pygame python3-pillow -y # 本体のコピーと初期設定 git clone https://github.com/miyaichi/WeatherPi.git cd WeatherPi sudo cp WeatherPi_Service.sh /etc/init.d/WeatherPi sudo chmod +x /etc/init.d/WeatherPi sudo chmod +x WeatherPi.py sudo systemctl enable WeatherPi sudo chown -v root:root /usr/bin/python3 sudo chmod -v u+s /usr/bin/python3

この後config.jsonを作成します。

nano config.json

私のconfig.jsonは以下です。
openweather appidは事前に取得しておく必要があります。
addressと、緯度、経度はご自身の情報を入れましょう。

{ "openweather_appid": "入手したappidをここに張り付ける", "google_api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "address": "<市区町村を記載>", "latitude": 緯度を数字で入力, "longitude": 経度を数字で入力, "locale": "ja_JP.UTF-8", "units": "metric", "SDL_FBDEV": "/dev/fb1", "display": [480, 320], "fonts": { "name": "Noto Sans Mono CJK JP", "size": { "large": 32, "medium": 24, "small": 17 } }, "modules": [ { "module": "Alerts", "config": { "rect": [0, 0, 480, 20] } }, { "module": "Weather", "config": { "rect": [0, 20, 410, 120] } }, { "module": "WeatherForecast", "config": { "rect": [0, 120, 480, 90], "forecast_days": 6 } }, { "module": "SunriseSuset", "config": { "rect": [0, 220, 80, 80] } }, { "module": "MoonPhase", "config": { "rect": [80, 220, 80, 80] } }, { "module": "Wind", "config": { "rect": [160, 220, 80, 80] } }, { "module": "Clock", "config": { "rect": [320, 220, 160, 60] } }, { "module": "Location", "config": { "rect": [320, 280, 160, 20] } } ] }

動作状況

自動でサービス起動するようになっているので、再起動を行うと起動後にこのように画面表示がされます。

キャプションを入力できます

天気のアイコンを以下のサイトから入手して変更してみました。
OpenWeahther

キャプションを入力できます

無線LANのパワーセーブのタイミングとバッティングするのか、起動直後にwaiting dataで天気情報が表示されないことがありました。
一旦以下ファイルを開き

sudo nano /etc/initi.d/WeatherPi

変更前

do_start () { log_daemon_msg "Starting system $DAEMON_NAME daemon" start-stop-daemon --start --background --pidfile ${PIDFILE} --make-pidfile --user ${DAEMON_USER} --chuid ${DAEMON_USER} --startas ${DAEMON} -- ${DAEMON_OPTS} log_end_msg $? }

変更後(Sleepを入れました)

do_start () { sleep 20 log_daemon_msg "Starting system $DAEMON_NAME daemon" start-stop-daemon --start --background --pidfile ${PIDFILE} --make-pidfile --user ${DAEMON_USER} --chuid ${DAEMON_USER} --startas ${DAEMON} -- ${DAEMON_OPTS} log_end_msg $? }

として様子を見ています。

参考リンク

こちらが、元祖のウエザーステーションソフトウエアです。
WeatherPi_TFT

こちらは、上記のフォークで独自に改良をされた方の物です。日本語対応もされているので、今回はこちらを利用致しました。
WeatherPi

日本語フォントのインストール方法
ゴシックも明朝もラズパイのフォントはNoto CJK jpでスッキリ統一!

無線LANのパワーセーブ無効化
PC​/RaspberryPi​/Linuxを動かしてみる​/オンボードWiFiが切れないようにする

2024/9/14
OpenWeatherMapのAPI 2.5が廃止になり、3.0を利用することにしました。
WeatherPi.pyの以下を変更することで対応できました。

変更前

resopnse = requests.get( "https://api.openweathermap.org/data/2.5/onecall" + "?appid={}&lat={}&lon={}&lang={}&units={}".format( appid, latitude, longitude, language, units))

変更後

resopnse = requests.get( "https://api.openweathermap.org/data/3.0/onecall" + "?appid={}&lat={}&lon={}&lang={}&units={}".format( appid, latitude, longitude, language, units))

最後に

一旦はフリーで公開されているウエザーステーションを利用させていただき、動作確認もかねて構築しました。
今後の予定としては、BLEセンサーからのIoTデータ取り込み(&クラウドへのゲートウエイー)と表示機能を持たせる予定です。

1
ログインしてコメントを投稿する