Raspberry Pi Pico W (ソーラー駆動) リモート・ウェザーステーション
Raspberry Pi Pico Wの特別な機能のひとつにSoftAP機能がある。
SoftAPはソフトウェア対応アクセスポイントの略で、Raspberry Pi Pico WからWiFiネットワークをブロードキャストすることができます。
これが、私たちがこのソーラー・プロジェクトを選んだ理由だ。
太陽光発電プロジェクトとSoftAPの交わり方
これが問題だ。
もし、自宅から離れた場所でデータを測定するプロジェクトを作りたかったら、そのデータをワイヤレスで取得できないことに気づくだろう。
このシナリオでは、ワイヤレス機能が使えないので、通常のピコを使った方がいいかもしれない。
太陽光発電プロジェクトは、日光を浴びる場所、つまり通常は屋外に設置する必要があることから、おそらくそのひとつだろう。
そこでSoftAPの出番だ。例えば、外の天気を知りたいとしよう。そしてRaspberry Pi Pico WがブロードキャストしているSoftAPに接続し、データを表示するIPアドレスにログインする。
これは、Raspberry Pi Pico Wの長所をどのように生かすことができるかという、ほとんど最良のシナリオだ。
つまり、LTEアドオンや長距離無線アドオンを購入することは可能だが、その場合はピコWのチュートリアルとは言えない。
Raspberry Pi Pico WのBluetoothはどうですか?
Bluetoothが使えれば最高ですが、このチュートリアルが公開された時点では、Raspberry Pi Pico WではBluetoothは有効になっていません。
2022年7月1日、Raspberry Piエンジニア兼フォーラム・モデレーターのjamesh氏は、「我々はすでにBTのソフトウェアに着手している。ソフトウェアのテストとチュートリアルの作成が必要です。"
部品
- Raspberry Pi Pico W
- ソーラーパネル6V
- TP4056 USB-C充電モジュール
- NR18650リチウムイオンバッテリー3.6V
- BME688ブレイクアウトボード
- タイプ18650用バッテリーホルダー
- ショットキーダイオード
- Pico WおよびBME688用ヘッダー
- ブレッドボード
Raspberry Pi Pico Wのファームウェアをアップデートする
Raspberry Pi Pico Wのファームウェアは常に進化しているので、最新のファームウェアを使うのがベストでしょう。例えば、最初に公開されたPico W用のMicroPython UF2には、ネットワークが常にオープンであるため、セキュリティにいくつかの問題があります。
このリンクから更新方法をご覧ください。 このリンクでは、独自のWiFiネットワークをブロードキャストするためのクイックスタート方法も紹介している。
ソーラーセットアップ
ソーラーパネルは少なくとも6ボルト、150mAを出力する必要がある。
バッテリーは公称電圧3.7Vの18650シリーズのリチウムバッテリーでなければならない。
TP4056モジュールはバッテリーを保護し、Pico Wに電力を供給する。
天候追跡装置
このプロジェクトでは 自社設計のBME688ブレークアウトボード。
DHT11やDHT22など、どんなウェザーセンサーでも使えますが、この記事のコードと配線は、実際にはBME688用です。
配線
Pico WとBME688をブレッドボードに置きます。
接続するピンは 4 つある:BME688の3.3V、GND、SCL、SDAです。
これが私たちが使ったものだ:
ピコW's GP1 に接続する。 SCL;
GP0 に接続する。 エスディーエー;
GND に接続する。 GND;
これら3つのピンは、マイクロUSBスロットの隣に並んでいるはずだ。
3V3 に接続する。 3V3これはボードの反対側にある。
TP4056 USB-C充電モジュール
TP4056にワイヤーをはんだ付けする必要があります。
プラス接続には赤、マイナス接続には黒のワイヤーをはんだ付けするのが良い方法だ。
USB-Cコネクタの隣にあるピンは、ソーラーモジュールのような外部電源接続用だ。
これらのピンをソーラーパネルに接続する。
反対側には、電源出力用のピンがある。B+とB-と書かれたピンはバッテリーに接続する必要がある。
回路を変更する必要がある場合に備えて、バッテリーホルダーとTP4056をクランプで接続することにしたが、バッテリーホルダーをTP4056に直接ハンダ付けすることもできる。
ショットキーダイオード
Pico W の VSYS ピンにショットキーダイオードを接続する。
ダイオードのグレーのリングがピコWの方を向いていることを確認し、もう一方の端がブレッドボードのプラス・レールに接続されていることを確認する。
USBとソーラーシステムの2つの電源入力でPicoに電力を供給するので、ショットキーダイオードを使う必要がある。
ショットキーダイオード 逆電源を防ぎ、2つの電圧で使用できます。詳細はこちら。
TP4056をブレッドボードに接続する
TP4056のプラス出力を、ショットキーダイオードがあるブレッドボードのプラスレールに接続する。
次に、TP4056のマイナス出力をRaspberry Pi Pico Wのマイナスピンに接続する。
Raspberry Pi Pico W ウェザーステーションを動かすコード
すべてのコードを Githubリポジトリはこちら。
以下は Pico Wにファイルをアップロードする方法のガイドです。
上記のようにコンポーネントを接続すれば、コードを変更することなく実行できる。
とはいえ、変更したほうがいい点がいくつかある。
bme68x.py
このスクリプトはBME688の出力を変更する。
正確な温度と高度の測定値を得るには、太字で強調されているこれらの行を修正する必要がある:
# change this to match the location's pressure (hPa) at sea level
# bme68x.sea_level_pressure = 1013.25
<strong> self.bme68x.sea_level_pressure = 1013</strong>
# You will usually have to add an offset to account for the temperature of
# the sensor. This is usually around 5 degrees but varies by use. Use a
# separate temperature sensor to calibrate this one.
<strong>self.temperature_offset = -9</strong>
main.py
main.pyファイルはアクセスポイントを起動し、接続した人にHTMLファイルを配信するサーバーも実行します。
HTMLファイルでは、BME688の測定値を見ることができます。
ソケット経由で)接続を受けると、Pico Wはindex.htmlファイルを送信しますが、送信する前にBME688から取得したデータでいくつかの文字列を置き換えます:
data = {
'T': 0,
'P': 0,
'A': 0,
'H': 0,
'G': 0,
}
...
def get_html(html_name):
with open(html_name, 'r') as file:
html = file.read()
return html
...
sensor = bme68x.BME68X()
...
response = get_html('index.html')
data = sensor.save_data('data.json')
blink_onboard_led(1, 0.2)
response = response.replace('id_temp', str(data['T']))
response = response.replace('id_pres', str(data['P']))
response = response.replace('id_alti', str(data['A']))
response = response.replace('id_humi', str(data['H']))
response = response.replace('id_gas', str(data['G']))
print_data(data)
conn.send(response)
conn.close()
ご覧のように、次のように書かれています。 data = sensor.save_data('data.json') センサーのデータを取得し、温度、圧力、高度、湿度、ガス伝導率の正しい測定値をHTMLファイルに修正する。
3秒ごとに自動更新される。
以下は、Raspberry Pi Pico Wでアクセスポイントをブロードキャストするために必要なコードのブロックです:
essid = 'Pico-W-Weather-Station'
password = '#FreeThePicoW'
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=essid, password=password)
while ap.active() == False:
pass
print('Connection successfull')
print(ap.ifconfig())
# Create sensor object
sensor = bme68x.BME68X()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(3)
blink_onboard_led(3, 0.2)
注:オリジナルのファームウェアを使用している場合、アップデートしないとSSIDのリネームやワイヤレスセキュリティができなくなります。2022年7月15日のナイトリービルドでテストしたところ、ようやくうまくいきました。 他にもいくつかの癖やバグがあるので、こちらのチュートリアルをぜひ読んでほしい。
こちらをクリックしてください。 WiFiネットワークのブロードキャスト(SoftAPアクセスポイント)
Pico Wアクセスポイントへの接続
APのブロードキャストに成功すると、Pico Wは提供されたコードで3回点滅します。
APに接続する。 ピコ・ウェザー・ステーション
パスワードを入力する #FreeThePicoW
IPアドレスを使ってPicoに接続する。Thonnyから実行した場合は、シェルにIPアドレスが表示されます。
そうでなければ、次のことを試してみてほしい。 192.168.4.1 これがPico WのIPアドレスで、右のスクリーンショットが表示されるはずです:
もう終わりだ
このプロジェクトでは、Raspberry Pi Pico WのSoftAP機能からネットワークをブロードキャストする方法を学びました。また、ソーラーパネルとバッテリーをPico Wに接続する方法も学びました。
ピコWについてもっと知りたいなら、 メガ記事はこちら
こちらをクリックしてください。 Raspberry Pi Pico Wについて知っておくべきすべてのこと
TP4056のスペックには、電圧入力を5.5Vか6Vに保つようにと書いてある。私はこの点について混乱しています。明確にしていただけますか?
ありがとうございます。
私はこのプロジェクトを実行し、非常に正確な測定値を得ることができた。しかし、10~15分ほどしか動作せず、その後停止してしまうという問題が発生しました。jsonファイルを削除すれば、再び動作するようになります。
データを保存せず、データだけを送信する方法はありますか?
よくやったと言わざるを得ない。
bme68x.py のメソッド save_data が Jason ファイルに行を追加し続けます。ある時点で大きくなりすぎているのでしょう。ファイルを保存する前に、data_listの最後のx行だけを保存するように変更することができます。そうすればファイルは十分小さくなる。
4.104文字の後、「data.json」は小さなピコのメモリーをいっぱいにする。
質問:上記のプロジェクトを機能的に仕上げるために、これをどのように制限するか?
例やコードの追加(アップデートとして)があれば非常にありがたい!
TiA-そして良い仕事を続けてくれ...。
追記:GitHub Repoの対応するIssueも公開された。
このようなプロジェクトにTP 4056を使用するのは効果的な解決策ではない:
https://www.best-microcontroller-projects.com/tp4056.html
建設的なデザインは、WaveshareのようなMPTTセットスイッチを使うことだろう、
説明はこちら:
https://www.waveshare.com/solar-power-manager.htm
乾杯
素晴らしいプロジェクトのアイデアだ!どなたか3Dプリントでケースをデザインした方、いらっしゃいませんか?
こんにちは。
マニュアルをありがとう。
TP4056仕様に基づく LED色:赤(待機時)、LED色:青(待機時、待機時なし)
私の場合、ソーラーパネルを直射日光の下に置くと、TP4056のLEDが両方ともオンになります。これは意図的なものですか?
バッテリーをソーラーから充電し、同時にピコに電力を供給することは可能ですか?