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

ラズパイ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が切れないようにする

最後に

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

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