PythonとVHDLについて、ざっくり習得する。
Windowsの場合、Python 3.8.7の下のほうにある、Windows installer (64-bit)
からインストーラーをダウンロードしてPythonのランタイムをインストールする。
現時点(2021/1/20)での最新版は3.9系だが、別途インストールするパッケージ(ライブラリ)が対応していなかったりするトラブルが発生する可能性があるので、ひとつ前の3.8系のものをインストールするのが良い。
インストールしたら環境変数PATH
にC:\Python38
とC:\Python39\Scripts
があることを確認する。
確認の方法は、コマンドプロンプトなら以下のコマンドで確認できる。(>
は入力不要で、コマンドの入力部分を示す)
PowerShellを使用している場合はecho $env:PATH
で同等の表示ができる。
> echo %PATH%
C:\Python38\Scripts\;C:\Python38\; ... (なんかたくさん表示される)
このコマンドは環境変数PATH
の内容を表示するもので、PATH
は;
を区切りにして複数のディレクトリを指定している。
このため、通常はPython以外のたくさんのディレクトリが;
で区切って表示される。
この環境変数にディレクトリを追加することを、PATHを通すという。
念のため、コマンドプロンプトで以下のコマンドを打って、変更されたPATHを反映させる。
> refreshenv
PATHが通って入ればPythonを使う準備は完了で、以下のコマンドでインストールされたPythonのバージョンを確認することができる。
> python --version
Python 3.8.7
Pythonスクリプトのコードを書くのに、メモ帳ではない高機能なエディタを使用すると効率が上がる。 最近はVisual Studio Code(VSCode)を入れておけば大丈夫という風潮。 社内規定などでインストールして使うのに不都合があればポータブル版もある。
以下の1行だけのファイルを作成して、hello.py
という名前で保存する。
print("Hello.")
コマンドプロンプトなどで、保存したファイルの場所に移動して以下のコマンドを打つとHello.
が表示されるはず。
場所の移動はcd
で行う。
python hello.py
VPNや社内ネットワークなど、プロキシ環境下の場合は事前に付属のpip_proxy_on.bat
を参考にプロキシの設定を行う必要がある。
ユーザ名やパスワードは適宜変更が必要だが、記号類はURLエンコードする必要があることに注意すること。
例えばユーザ名に@
が含まれる場合は当該部分を%40
に置き換える必要がある。
Pythonのパッケージ(ライブラリ)は基本的にpipというコマンドで管理されており、このコマンドによってWeb上の各種パッケージをインストールすることができる。
このチュートリアルで使用する予定のパッケージを以下のコマンドでインストールしておく。パッケージのインストールにはデフォルトで管理者権限が必要。
環境を汚したくない場合は別途venv
などを使って仮想環境を作っておくとよい。venv
についてはvenv: Python 仮想環境管理などを参照のこと(検索で一番上に出てきた記事)。
pip install --upgrade pip
pip install numpy pandas matplotlib pylint lxml
最初の行は、pip事態のアップグレードをしている。 二行目でパッケージをインストールしている。
- NumPy: 数値計算用のパッケージのデファクトスタンダード。
- pandas: データ解析用パッケージのデファクトスタンダード。
- Matplotlib: Pythonでのグラフ表示用のパッケージ。他にもモダンなグラフ表示パッケージはあるが、バックエンドはMatplotlibだったりする。
- Pylint: Pythonの文法チェック(リント)を行うツール。入れておくとVSCodeなどのエディタで自動的に文法チェックしてくれる。
- lxml: pandasでHTMLのスクレイピングをするときに必要になるやつ。直接は使わない。
- ここでやりたいこと
- 気象庁の過去の気象データをスクレイピングして、テキスト保存
- 気象庁の過去の気象データをスクレイピングしてグラフ表示
- 余裕があればOpenWeatherの予報データをAPI経由で取得して、グラフ表示
スクレイピングする対象は、以下のものにするがみだらにアクセスしないように注意。
OpenWeatherについてはAPIキーの取得が必要だが、キーの発行は登録から数時間かかるので注意。
現時点ではヒントのみを記載しておく。各自コーディングする。(なんか同じ人のブログばっかりひっかかるが知り合いではない)
Python, pandasでwebページの表(htmlのtable)をスクレイピングここのコードは、html5lib
とbeautifulsoup4
というパッケージに依存している- Python用データ分析ツールpandasのread_html関数の使い方 プレーン(?)なpandas(+lxml)だけでスクレイピングする例
- pandasでcsvファイルの書き出し・追記(to_csv)
- pandasのplotメソッドでグラフを作成しデータを可視化
OpenWeatherのデータ取得はスクレイピングではないので、urllib.request
などを使用してAPIアクセスする必要がある。
基本的には以下の流れでデータの取得、pandasデータフレームへの変換ができる。
コードは、weather_data.pyが参考になる。
予報データ取得のためのAPIの説明は5 day weather forecastあたりに記載されている。
import pandas as pd
# 標準ライブラリのインポート(pipでのインストール不要)
import urllib.request
import json
URL = "http://api.openweathermap.org/XXXXX" # 適切なURLを記入、ここでAPIキーも必要
json_obj = None
# GETで取得した内容をjsonに変換
# jsonにするのはデバッグ時や保存時に見やすくなるため
request = urllib.request.Request(URL, method='GET')
with urllib.request.urlopen(request) as response:
json_obj = json.loads(response.read().decode("utf-8"))
# どんな形か見たければ、print()で簡易的に確認できる。
print(json_obj)
# グラフ表示に向けてpandasデータフレーム形式に変換
pd.json_normalize(json_obj['list'])
一般的に、マイコンなどに低速の外部機器を接続する場合はI2CやSPIなどのインターフェイスが使用される。 どちらも接続ピンを少なくするためにシリアルバス方式になっていて、以下のように接続される。
I2C
SPI
上記2つの画像は "en:user:Cburnett - Own work made with Inkscape, CC 表示-継承 3.0"
今回SPIを選択しなかったのは、送受信が同時に起こるためソフトウェアで扱いづらいためである。 個人的な印象ではI2Cのデバイスは相性問題が発生しやすく、SPIのデバイスの方が安定しているイメージである。
また、SPIは接続ピン数が多くなる代わりに高速に通信できるものが多い。 最近のFPGAやマイコンのFlashメモリにはQSPI(Quad SPI)というSPIベースのインターフェイスで接続するものが使われることが多い。 QSPIのFlashメモリは少ないピン本数としては比較的高速(100MHzとか)に動作する。
はんだ付けをしたくない場合は、Qwiic接続のものを使うといいと思う。 今回は例として以下のものを使うことにする。(センサ1,794円、ケーブルキット1,073円)
シミュレータについて、install_VHDL_simurators.mdに記載した。 以降、なるべくこれらのシミュレータに関する記述を併記する。