6 ドルの Raspberry Pi Pico W のおかげで、Raspberry Pi プロジェクトをオンラインで公開することがより安価で簡単になりました。Raspberry Pi Pico W を世界とつなぐには 5 行のコードしか必要ありませんが、コードを共有すると、セキュリティ上の懸念がいくつか生じる可能性があります。
MicroPythonコードには、Wi-Fiパスワード、APIキー、そしてカスタムURLが含まれています。では、データの可搬性を維持しながらリスクを軽減するにはどうすればよいでしょうか?
MicroPythonモジュールを作成することは、プロジェクトコードから機密情報を隠蔽する最良の方法です。このモジュールは他のモジュールと同様にインポートでき、その内容も同じように参照できます。
このプロジェクトに必要なものは
- ラズベリーパイ ピコW
- コンピューター
資格情報用のシークレットファイルの作成
secrets モジュールは、実際には、Wi-Fi アクセス ポイント、Wi-Fi パスワード、Open Weather API キーを参照するオブジェクトを含む標準の MicroPython ファイルです。
1.このガイドに従って、Raspberry Pi Pico W をセットアップします。「LED を点滅させる方法」までの手順に従います。
2.新しい空のファイルを作成します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
3.オブジェクトSSIDを作成し、Wi-Fiアクセスポイントの名前を割り当てます。等号(イコール)は、右側の値をオブジェクトに割り当てます。
SSID = “YOUR WI-FI AP NAME”
4.オブジェクト PASSWORD を作成し、Wi-Fi アクセス ポイントのパスワードを割り当てます。
PASSWORD = “YOUR WI-FI PASSWORD”
5. owm_api オブジェクトを作成し、Open Weather APIキーを割り当てます。Open Weatherにサインアップすると、無料のAPIキーを取得できます。
6.ファイルを secrets.py として Raspberry Pi Pico W に保存します。
7. Pythonシェル(Thonnyのウィンドウ下部)でシークレットファイルをインポートし、Wi-FiアクセスポイントのSSIDを出力します。これで、安全に保管したいすべての詳細情報を含むPythonモジュールが作成できました。
import secrets
print(secrets.SSID)
プロジェクトでシークレットを使用する
secretsファイルの目的は、個人情報や機密情報を含む可能性のあるファイルをプロジェクトのメインコードから排除することです。プロジェクトコードから機密情報を排除することで、他の人と簡単に共有できるようになります。この手順では、secretsモジュールをインポートし、Open Weather APIと組み合わせて使用することで、現在地の天気情報を取得します。
1. Thonny で新しい空のファイルを作成します。
2. 3つのコードモジュールをインポートします。NetworkはPico WをWi-Fiに接続するためのモジュール、Secretsは秘密情報が詰まったファイル、urequestsはリモートデバイス(この場合はOpen WeatherのAPI)へのリクエストを可能にするモジュールです。国際宇宙ステーションに搭乗している宇宙飛行士のデータを取得するために、同じモジュールを使用しました。
import network
import secrets
import urequests
3.オブジェクト wlan を作成し、それを使用してコードから Pico W の Wi-Fi チップへの接続を作成し、Wi-Fi チップをオンにします。
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
4.シークレット モジュールを使用して、SSID および PASSWORD オブジェクトを使用して Wi-Fi アクセス ポイントに接続します。
wlan.connect(secrets.SSID,secrets.PASSWORD)
5. Open Weather APIから返されたデータを格納するためのオブジェクトweatherを作成します。secrets.owm_apiを使用して、URLにAPIキーを挿入します。この特別に作成されたURLは、Open Weatherに位置情報(q=Blackpool,UK)のリクエストを送信します。これは、お客様の所在地に変更できます。また、使用する単位(&units=metric、これはヤードポンド法に変更可能です)も指定できます。
weather = urequests.get("http://api.openweathermap.org/data/2.5/weather?q=Blackpool,UK&units=metric&appid="+(secrets.owm_api)).json()
6.現在の気温をオブジェクト temperature に保存します。返されるデータはJSON形式で、Pythonの辞書型データ型とほぼ同じです。辞書型では、キーと値の形式でデータを保存します。キー ["main"]['temp'] でデータのメインセクションに移動し、気温の値は新しく作成した temperature オブジェクトに保存されます。
temperature = weather["main"]['temp']
7.現在の湿度を対応するオブジェクトに保存します。
humidity = weather["main"]['humidity']
8.現在の全体的な天候を weather オブジェクトに格納します。このデータは JSON オブジェクトの少し深い階層に埋め込まれています。これは辞書、リスト、そして辞書オブジェクトの順になっています。リスト [0] は、Python がゼロからカウントを開始するため、リストの最初の項目を使用していることを示しています。
weather = weather["weather"][0]["main"]
9.返されたデータを、対応するデータを文にドロップする文字列フォーマットを使用して出力します。
print("The weather today is {} with a temperature of {} degrees Celsius and a humidity of {}%".format(weather, temperature, humidity))
10. Raspberry Pi Pico Wにweather.pyという名前でコードを保存します。「 実行」をクリックしてコードを実行します。このコードはOpen Weather APIを使用し、現在地の最新の天気情報をダウンロードし、その情報を含む文をPython Shellに出力します。
完全なコードリスト
import network
import secrets
import urequests
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID,secrets.PASSWORD)
weather = urequests.get("http://api.openweathermap.org/data/2.5/weather?q=Blackpool,UK&units=metric&appid="+(secrets.owm_api)).json()
temperature = weather["main"]['temp']
humidity = weather["main"]['humidity']
weather = weather["weather"][0]["main"]
print("The weather today is {} with a temperature of {} degrees Celsius and a humidity of {}%".format(weather, temperature, humidity))