SparkFun USB Weather Board V3 を買ってみた
前回の記事で、USB-RH で取得した室温と相対湿度を ZABBIX で記録する件を紹介したが、ここまで記録したらいっそ自宅の気象情報を取りたくなってきた。そこでちょっと調べてみると、SparkFun から出ている USB Weather Board を使うと気温、相対湿度、気圧を取得でき、さらにオプションの Weather Meters を使えば風向・風力および降水量を取得できることが分かった。Strayberry Linux でも取り扱っているが、円高の昨今、サポートさえ気にしなければ個人輸入した方が安くつくかと思う。今回はとりあえず USB Weather Board のみ買ってみた。
いろいろな Tips も載っているので、普段マニュアルを読まない人もデータシートには目を通した方がいいと思われる。
そんな USB Weather Board だが、接続したら Power の赤 LED が点灯後、Status の緑 LED が 3 回点灯すれば正常に稼働していると判断してよい。この後、接続元のホストからは USB シリアルデバイスとして見える。Windows で接続した場合は ここからドライバをダウンロードすればよい。Linux の場合は、Device Drivers → USB support → USB Serial Converter support → USB FTDI Single Port Serial Driver が組み込まれていればよい。ディストリビューションによっては、
modprobe ftdi_sio
でドライバが組み込まれる。ログに
usb 5-2: new full-speed USB device number 8 using uhci_hcd usb 5-2: ep0 maxpacket = 8 usb 5-2: default language 0x0409 usb 5-2: udev 8, busnum 5, minor = 519 usb 5-2: New USB device found, idVendor=0403, idProduct=6001 usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 5-2: Product: FT232R USB UART usb 5-2: Manufacturer: FTDI usb 5-2: SerialNumber: A600**** usb 5-2: usb_probe_device usb 5-2: configuration #1 chosen from 1 choice usb 5-2: adding 5-2:1.0 (config #1, interface 0) ftdi_sio 5-2:1.0: usb_probe_interface ftdi_sio 5-2:1.0: usb_probe_interface - got id ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected usb 5-2: Detected FT232RL usb 5-2: Number of endpoints 2 usb 5-2: Endpoint 1 MaxPacketSize 64 usb 5-2: Endpoint 2 MaxPacketSize 64 usb 5-2: Setting MaxPacketSize 64 usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0 drivers/usb/core/inode.c: creating file '008'
などと表示され、/dev/ttyUSB*
が出ていればok。
データ取得だが、普通にシリアルポートに接続すればよい。Windows の場合は TeraTerm で COM: ポートを指定するだけでデータを読み出すことができる。Linux の場合はシリアルコンソールを使うことになるが、うちでは C-Kermit を使ってみた。デバイスファイルと転送速度を指定してから接続すればよい。
C-Kermit 8.0.211, 10 Apr 2004, for Linux Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/root/) C-Kermit>set line /dev/ttyUSB0 (/root/) C-Kermit>set speed 9600 /dev/ttyUSB0, 9600 bps (/root/) C-Kermit>set carrier-watch off (/root/) C-Kermit>connect
無事接続できれば、デフォルトの設定では 2 秒ごとにデータを計測する。
SHT15 temperature: 67.86 deg F SHT15 humidity: 26% SHT15 dewpoint: 32.15 deg F BMP085 pressure: 1225.62 mbar FAIL BMP085 temperature: 69.84 deg F TEMT6000 light: 1.3% Weather meters wind speed: 0.0 MPH FAIL Weather meters wind direction: -1 degrees FAIL Weather meters rainfall: 0.00 inches FAIL External power: 0.00 Volts FAIL
計測中は Status の緑 LED が点灯しているので、データを正しく取得できているかボードを見ただけで判定できるだろう。
ここで問題がいくつかある。一つは温度表示が摂氏ではなく華氏であること、もう一つは気圧が明らかにおかしいこと。いずれも設定で何とかできる。Ctrl + Z
を送信すると、設定画面に移行する。
SparkFun USB Weather Board V3 firmware version 1.2 free RAM: 138 bytes 1. Data format (ANSI) 2. General units (English) 3. Sample rate (5) 4. Pressure units (mbar) 5. Pressure type (relative) 6. Station altitude (1596 meters) 7. Baud rate (9600 baud) 8. Zero rain counter 9. Weather Meters attached (yes) X. Exit (don't save changes to EEPROM) S. Save (save changes to EEPROM)
上記は SparkFun のサイトにあるファームウェア 1.2 を適用しているが、1.0 でも設定項目は変わらない。まず、華氏を摂氏にするには、2 を押してから 2 を選択する。これで表示が摂氏になる。
1. English 2. SI (metric)
次に気圧が 1,200 hpa を超えている問題だが、これは USB Weather Board に設定された現在の高度を補正し、海抜0mでの気圧表示になっているのが原因になる。問題は、現在の高度のデフォルトが 1,596m になっていることなので、これを現在地の海抜に変更するか気圧の高度補正を外せばよい。現在地の海抜はマピオンか Google Earth で調べられる。(ただし、両者で微妙に差はある) 調べた海抜に USB Weather Board を設置している対地高度を加えた値を 6. Station altitude に設定すればいい。または、高度補正を外すには、5. Pressure type を absolute に設定する。どちらかの設定で正しい数値が表示されるようになる。最後に S で設定を保存すれば上記設定が反映されたものが表示されるようになる。
SHT15 temperature: 20.30 deg C SHT15 humidity: 26% SHT15 dewpoint: 0.19 deg C BMP085 pressure: 1015.53 mbar BMP085 temperature: 21.37 deg C TEMT6000 light: 1.3% Weather meters wind speed: 0.0 m/s FAIL Weather meters wind direction: -1 degrees FAIL Weather meters rainfall: 0 mm FAIL External power: 0.00 Volts FAIL
こんな感じで設定すれば希望のデータがとれるようになる。一通り堪能したらあとはスクリプトで処理しやすいように 1. Data format を CSV にしておくといいだろう。