2021-06-17

Bleakライブラリを使ってBLE端末を探す

 以前(といっても4、5年くらい前)、WindowsでBLEのプログラミングしようと思ったら、情報も少なくすごく大変で、卒研生の研究時間の大半をBLE接続に費やしてしまった経験があり、もう二度とWindowsでBLEプログラムをするもんか。。。と誓ったことがありましたが、今は便利になってきてますね。Pythonであっさりできます。

Bleakというライブラリ

PythonでBLEというのはまあ以前から目にしたことはあり、ちょっとトライしたことがありましたが、最近はBleakという便利なライブラリがあります。Windows,Mac,Linuxで動作するという。。

asyncioで非同期処理

Bleak自体の使い方は超シンプルなのでほぼ説明不要。肝は、asyncioで非同期処理をするということですね。




2021-06-10

Zappaを使ってLambdaにFlaskアプリを導入した際のURL問題の解決法

 Zappaを使うと、AWS Lambda上にてウェブアプリをお手軽にDeployさせることができます。おちラボで動かしているのはFlaskのアプリなんですが、1つだけ問題が。。。。

ディレクトリ階層に余分なprefixがつく問題

ZappaでアップロードしたURLには、/dev/みたいな余分なURL(Stageという概念ですね)が付いちゃいます。これはAPI Gatewayの仕様らしく、回避不能のようです。api的な使い方だったら別にそれを前提にしておけばいいんですが、アプリとしてDeployする場合、アプリ内で自身の別URLを呼ぶ場合に都合が悪くなります。例えば、

  • (ローカル環境)/update
  • (Lambda環境) /dev/update
というふうに、”/dev”みたいなstage表記がもれなく付いてきます。静的にURLを記述しちゃうとローカルで動くけどLambdaにデプロイするとURLがNot foundでエラーになったりするわけです。

解決策:動的にURLを定義する
まあ、当たり前の解決策なんですが、実行環境に合わせて動的に定義するしかないです。例えば以下のようにosの環境を調べておいてからstageを渡すという方法ですね。下記の場合は、ローカルがWindows環境を想定していますので、まあLambdaのOSがWindowsなわけがないので(Amazon Linuxのはず)、これでOKでしょう。