BMS(BatteryManagementSystem)とシリアル(UART)通信を行い、Webサーバで公開するサーバをセットアップします。今回はRaspberryPi のセットアップから、シリアル通信が成功するまでを紹介します。
用意するもの
Raspberry Pi 本体 | Raspberry Pi Zero WH 省エネのWebサーバを立てたかったので選択。どうせHAT側のはんだ作業は必要だったのでWでも良かったんですが売ってなかったのでWHを選択。 |
microSDカードリーダライタ | microSDカードの読み書きに使用します。 |
microSDカード | 予備で買ってあった16GBを使用します。GUI無しなのでもっと少ない容量でも問題ありません。 |
USB電源 | Zero WHは最大でも1.2Aしか流れないようなので今どきのスマホ用充電ケーブルなら大丈夫そうです。今回は3 modelBで使っていた2.5Aのものを使用しています。 |
パソコン | ダウンロード & SSH接続用です。今回はWindows10で行っています。 |
Wi-Fiルータ | Raspberry Piと外との通信はWi-Fiで行いますので、Wi-FiルータのSSIDとパスワードをメモっておきます。 |
UART接続先 | 今回はBMSを監視します。 |
UARTケーブル | 接続ケーブルは今回は自作します。 |
UARTケーブル接続用HAT | 接続ケーブルをRaspberry Piに接続する部分になります。着脱を考慮してコネクタを付けます。 |
必要ファイルのダウンロード
OS(raspbian)イメージ
標準的なOSであるraspbianをダウンロードします。今回は対話的な操作はせずサーバとして利用するので、左下の「Raspberry Pi OS (32-bit) LITE」を選択してダウンロードします。
SDカードフォーマッター
買ったばかりのSDカードはフォーマットされていることもありますが、不要なトラブルを避けるため公式ツールでSDカードをフォーマットをしておくのが無難です。フォーマッターをダウンロードします。
OSイメージ Flashツール
ダウンロードしたOSをSDカードに書き込むためのツールをダウンロードします。
OSイメージ書き込み
これでセットアップに必要なファイルはそろったのでセットアップを始めます。
SDカードフォーマット
まずは先ほどダウンロードしたSDカードフォーマッターを起動してSDカードをフォーマットします。
OSイメージ書き込み
SDカードのフォーマットが終わったら次は、ダウンロードしたOSイメージをSDカードに書き込みます。
先ほどダウンロードしたEtcherを起動します。画面左の「Flash from File」をクリックしてダウンロードしたOSファイルを指定します。
画面真ん中のSDドライブが正しいことを確認し、「Flash!」をクリックします。
OSイメージの書き込みが終わるとSDカードのドライブ(今回はLドライブ)がいったん見えなくなっているので、SDカードを指しなおします。
接続用ファイルの配置
これでOSは起動しますが、今回はキーボード、ディスプレイを繋がずにセットアップをしますのでパソコン(Windows10)とSSH接続できるようにしておく必要があります。
2つファイルを準備します。
SSH接続用ファイル
SDカードドライブ(今回はLドライブ)のルートに ”ssh”という中身のないファイルを置きます。
これでsshが許可されます。
Wi-Fi設定用ファイル
外と繋ぐための無線LANの設定をします。SDカードドライブのルートに”wpa_supplicant.conf”というファイルを作成します。中身は以下のようになります。メモっておいたSSID名とパスワードを書き込みます。
(xxxxxxxxxx:SSID名、yyyyyyyyyy:接続用パスワード)
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="xxxxxxxxxx" psk="yyyyyyyyyy" }
2つのファイルが準備できるとSDカードのルートフォルダは以下のようになっているはずです。
これでSDカードの準備も整いました。
SDカードをパソコンから外し、Raspberry Piにさして起動します。
Raspberry Piに電源ボタンはないので、USB充電ケーブルをさすと起動します。
Raspberry Piの設定
最初に設定しておきべき設定をいくつかします。(一般に公開するサーバではないので最低限です)
ssh接続
USB電源を繋いで画像左上のLED点滅が落ち着くのを見計らってPCからssh接続します。
PCのコマンドプロンプト(cmd)を起動し、”ssh pi@raspberrypi.local”と打ち込みます。
パスワードを聞いてくるので ”raspberry” (デフォルトパスワード)と入力します。
ログインに成功するとpiユーザのプロンプトに変わりますので、”sudo raspi-config”と入力して設定画面を開きます。
以下の項目を設定します。
1.Change User Password | piユーザのパスワードをデフォルト(raspberry)から変更しておく |
2.Network Options N1.Hostname | hostname(いわゆるコンピュータ名)をデフォルト(raspberry)から変更しておく |
4.Localisation Options I1.Change Locale | リストの中から、”ja_JP.UTF-8″を選択(Spaceキー)し、Default localに指定する |
4.Localisation Options I2.Change Timezone | “asia” → “tokyo” |
4.Localisation Options I4.Change Wi-Fi Country | “JP Japan” |
5.Interfacing Options P6.Serial | シリアル通信はデフォルトでは許可されていないので使えるようにします。2つの質問に答えます。 “~login shell~”:<no> “~serial port hardware~”:<yes> |
8.Update | このツール(rasp-config)のアップデートを実施しておきます |
ツールを終了し、”sudo reboot”で再起動します。
もう一度ssd接続
先ほど同様ssh接続を行います。
host名とユーザーパスワードを変更したので “ssh pi@xxxxxx.local” (xxxxxxは新たなhost名)と入力し、パスワードも新しいものを入力します。
serial port確認
“ls /dev/serial*” と入力して、”/dev/serial0″が返ってきていればOKです。
UART接続
ここからはUART接続機器(BMS)と接続する物理的な準備に入っていきます。
HAT準備
Raspberry Pi Zero用のプロトタイプ基板にピンソケット、XHソケットを半田付けしていきます。
UART接続に必要なのは、GND、TX、RXなので、GPIOの6、8、10を使用します。
サンハヤトのものはPINアサインも刻印されていて使いやすかったです。
ケーブル準備
HAT側は3ピンXH、BMS側は4ピンXHなので、接続ケーブルを作成します。
組み立て・・・の前に温度確認
HATで覆ってしまうと基板の状態に見えにくくなるので通常状態の温度を確認
至近距離での撮影なので通常のレンズと赤外線用レンズの差で重ね合わせがずれていますが、40℃前後でした。(室温30℃)
組み立て
組み立てというほどではないですが、Raspberry Pi 本体、HAT、ケーブル、BMSを接続します。
画面上の銅板が付いてるのがBMSです。とりあえずRaspberry Piは BMSの放熱板の上に置いています。BMSの下にバッテリ(リン酸鉄リチウムイオンバッテリ)があり、画面下の青いのはDC-ACインバータです。
SoftWare インストール
nodejs、npm インストール
Raspberry Pi へ sshで接続し以下のコマンドを実行します。
sudo apt-get update
sudo apt-get install -y nodejs npm
(2行目のインストールは数分かかります)
インストールが終了すると “node -v”、”npm –version”でそれぞれのバージョンが確認できます。
pi@bmschecker:~ $ node -v
v10.21.0
pi@bmschecker:~ $ npm –version
5.8.0
接続確認アプリインストール
Node.js上で動く簡単なプログラムを使って動作を確認します。
“serialport” で /dev/serial0 をオープンして データを取得して、”express”で作ったWebAPIでLAN上に公開する感じです。
ただ、肝心の”serialport”がすんなり入らず、 “–unsafe-perm”をつけないとインストールできませんでした。
BMS監視ソフトは別の機会に紹介します。
接続確認
実行すると、BMSからバッテリの電圧値、残り容量、各セルの電圧、温度 などが取得できていることがわかります。
1秒に1回 BMSと通信し、結果をファイル出力し、WebAPIをたたかれれば答えるだけのプログラムですが、CPU使用率は20%ほどなので実用に耐えそうです。
コメント