flask×Herokuアプリのコマンド
flask×HerokuでPostgresqlを使ったアプリ作るときのメモ
app 作成
$ heroku create Creating app... done, ⬢ XXX https://XXX.herokuapp.com/ | https://git.heroku.com/XXX.git
postgresql 作成
hobby-devで趣味用無料のDBが作れる。
$ heroku addons:create heroku-postgresql:hobby-dev $ heroku config
DATABASE_URLが入手できる。これをflaskのSQLALCHEMY_DATABASE_URIに設定する。
gitのremoteを付け替えるとき
$ git remote set-url heroku https://git.heroku.com/XXX.git $ git remote -v heroku https://git.heroku.com/XXX.git (fetch) heroku https://git.heroku.com/XXX.git (push)
デプロイ
pipenvの場合、Pipfile, Pipfile.lock, Procfileを用意しておく。
requirements.txtとrunitime.txtは自動で作られるのでいらない。
適宜、.gitignoreも設定しておく。
$ git add. $ git commit -m "text" $ git push heroku master
pipfile.lockがおかしいとき
以下のようなエラーでpush時にエラーが出る場合。
Your Pipfile.lock (7f5593) is out of date. Expected: (6c000a). Aborting deploy. ! Push rejected, failed to compile Python app. ! Push failed
$ pipenv update
db migrate
#herokuのbashで作業 $ heroku run bash $ export FLASK_APP=app.py $ flask db init # 古いmigrations/がアップロードされている場合エラーでるかも? # その場合 rm migrations/ -rfしてからリトライ $ flask db migrate $ flask db upgrade $ exit #テーブルができているか確認 $ flask pg:psql DATABASE=>\d #Ctrl+D
Raspbian BusterでLirc(gpio-ir)を試す(送信編)
前回の続き。
dive2blue.hatenablog.com
赤外線送信のコマンドを学習させ、送信する。
設定
lirc_options.confは受信用にしておく。
pi@raspberrypi:~ $ sudo vi /etc/lirc/lirc_options.conf driver = default # 送信なら # device = /dev/lirc0 # 受信なら device = /dev/lirc1
config.txtは接続したGPIOのピン番号を指定しておく。
pi@raspberrypi:~ $ sudo vi /boot/config.txt # 接続した番号追記する dtoverlay=gpio-ir,gpio_pin=16 dtoverlay=gpio-ir-tx,gpio_pin=5
学習用のコマンド
以下のコマンドで学習できる。
pi@raspberrypi:~ $ irrecord -n -d /dev/lirc1
ダイアログに従い、リモコンのボタンを押すだけ。
指示自体は難しくないが、いろんなボタンを何回も押す必要があり時間がかかる。しかも、私の場合うまくいかなかかった。
rawからコマンド作成
上記の方法でうまくできないのでmode2でRawの信号から設定ファイルを作る。
私の場合、エアコンを操作したいのでonとoffを収集。
pi@raspberrypi:~ $ sudo mode2 -d /dev/lirc1 Using driver default on device /dev/lirc1 Trying device: /dev/lirc1 Using device: /dev/lirc1 Running as regular user pi space 16777215 pulse 3485 # ここから下を使う。 space 1712 pulse 446
ファイルの整形はこの辺を参考に。書くのがめんどくなった
https://qiita.com/KAKY/items/55e6c54fa2073cdc0bbe
http://wbbwbb.blog83.fc2.com/blog-entry-159.html
わからないパラメータは記載しなくてもたぶん大丈夫
作ったファイルはこんな感じ
#aircon.lircd.conf begin remote name aircon bits 0 eps 0 aeps 0 one 0 0 zero 0 0 gap 50000 toggle_bit_mask 0x0 frequency 38000 begin raw_codes name off 3486 1717 445 441 422 1311 417 416 447 447 416 409 452 406 445 415 448 439 …(略) 421 439 424 436 417 442 420 440 423 1310 418 1328 418 1311 415 1316 423 1315 416 name on 3495 1723 439 442 419 1315 421 438 424 436 425 435 416 443 418 441 421 439 …(略) 400 443 419 441 419 1312 422 1283 453 435 416 443 418 441 421 439 430 442 425 end raw_codes end remote
作ったファイルを移動。
pi@raspberrypi:~ $ cp aircon.lircd.conf /etc/lirc/lircd.conf.d/
送信
lirc_options.confは送信用にしておく。
pi@raspberrypi:~ $ sudo vi /etc/lirc/lirc_options.conf driver = default # 送信なら device = /dev/lirc0 # 受信なら # device = /dev/lirc1
lircdのサービスを再起動。設定ファイルがあっていれば、Listコマンドで表示される。
pi@raspberrypi:~ $ sudo systemctl restart lircd.service pi@raspberrypi:~ $ insend LIST "" "" aircon pi@raspberrypi:~ $ insend LIST aircon "" 0000000000000001 off 0000000000000002 on
以下のコマンドで送信。
pi@raspberrypi:~ $ sudo irsend SEND_ONCE aircon on
スマホのカメラ越しに見ると光っているのが見える。
エラー
insend LIST "" ""で設定が表示されない
xxx.lircd.confのパルス数が偶数だったりいらないものが含まれている
hardware does not support sending
pi@raspberrypi:~ $ sudo irsend SEND_ONCE aircon on hardware does not support sending Error running command: Input/output error
lirc_options.confのdeviceがlirc1になっている。送信するときはlirc0である必要がある。
pi@raspberrypi:~ $ sudo vi /etc/lirc/lirc_options.conf driver = default # 送信なら device = /dev/lirc0 # 受信なら # device = /dev/lirc1
transmission failed
pi@raspberrypi:~ $ sudo irsend SEND_ONCE aircon on transmission failed Error running command: Input/output error
xxx.lircd.confのパルス部分が255個以上ある。現時点ではどうも255に収める必要があるみたい。
赤外線を光らせるとこまではたどりついたけど、うちのエアコンは255にパルス数が収まらず、動かないんだけど…
パルスを16進数で書いている人もいるので、読み込み上の問題なら書き直せば成功するかも?
Raspbian BusterでLirc(gpio-ir)を試す(設定編)
以前もRaspberry Piで赤外線を操作できるLircを使用してみたのだけど、Raspbianに新しいバージョンBusterが出ていたので試してみる。
(諸事情で前にインストールしていたのは消した。)
dive2blue.hatenablog.com
この時は、Stretchだったし、いろいろインストールしたあとで入れたのでなんで動いたのかよくわからなかった。
今回はまっさらな2019-07-10-raspbian-buster-liteをダウンロードして試した。
https://www.raspberrypi.org/downloads/raspbian/
このフォーラムを参照して入れる。
[Stretch/Buster] Using LIRC with kernel 4.19.X and gpio-ir - Raspberry Pi Forums
日々アップデートされているらしく7/7更新の手順をなぞる。
手順
まず、一応アップデート。
pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.19.57+ #1244 Thu Jul 4 18:42:50 BST 2019 armv6l GNU/Linux pi@raspberrypi:~ $ sudo apt-get update pi@raspberrypi:~ $ sudo apt-get upgrade
(sudo rpi-updateしようとしたら警告が出たので普通はしないのですね初めて知った。)
Grove base hatに刺すので入れる。GPIO直ならいらない。
pi@raspberrypi:~ $ sudo apt install python3-pip python-pip pi@raspberrypi:~ $ curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s - Successfully installed grove.py-0.6
lircをインストール
pi@raspberrypi:~ $ sudo apt install lirc
はじめは失敗する。(Strechだと失敗しないらしい)
失敗はしているが設定ファイルは生成されているのでリネームしてコピー
pi@raspberrypi:~ $ sudo cp /etc/lirc/lirc_options.conf.dist /etc/lirc/lirc_options.conf pi@raspberrypi:~ $ sudo cp /etc/lirc/lircd.conf.dist /etc/lirc/lircd.conf
中身を一部書き換える。
pi@raspberrypi:~ $ sudo vi /etc/lirc/lirc_options.conf driver = default # 送信なら device = /dev/lirc0 # 受信なら device = /dev/lirc1
送信なら、受信ならと場合分けしているが、lirc0のままlirc1が動いたし、autoのままでいい説もある。(試していない)
接続したGPIOのピン番号を指定し、リブート。
pi@raspberrypi:~ $ sudo vi /boot/config.txt # 接続した番号追記する dtoverlay=gpio-ir,gpio_pin=16 dtoverlay=gpio-ir-tx,gpio_pin=5 pi@raspberrypi:~ $ sudo reboot
試してみる この時点で受信に成功する(なんで?)
pi@raspberrypi:~ $ sudo mode2 -d /dev/lirc1 Using driver default on device /dev/lirc1 Trying device: /dev/lirc1 Using device: /dev/lirc1 Running as regular user pi space 16777215 pulse 3485 space 1712 pulse 446 #ctrl+Cで終了
もう一度lircをインストールしなおすとインストールに成功する。
pi@raspberrypi:~ $ sudo apt install lirc
もう一度動かす。
pi@raspberrypi:~ $ sudo mode2 -d /dev/lirc1 Using driver default on device /dev/lirc1 Trying device: /dev/lirc1 Using device: /dev/lirc1 Running as regular user pi space 16777215 pulse 3485 space 1712 pulse 446
無事動きました。
送信側はまだ試してない。
python3+Flaskのプロジェクト作成手順(WSL+VScode)
Web系は門外漢なので少し勉強しようかなとこちらを読んで手を動かしてみている。
(その1~3まである)
PythonでWebサービスを作る - Python3 + Flaskで作るWebアプリケーション開発入門
Pythonチョットできる&軽量フレームワークということでFlaskにした。
上記の本は流れで説明されているので、もろもろ開発に必要そうな環境構築手順のみをまとめる。
開発の中身は本を参照するとして触れない。
- Windows10 1903
- WSL ubuntu 18.04
- 言語: Python3
- フレームワーク: Flask
- SQL: PostgreSQL
- エディタ: Visual studio code
手順
0. Windows上の準備
1. WSL ubuntu18.04をインストール
2. パッケージインストール
3. DB作成
4. Python の仮想環境作成
5. 仮想環境内で必要なパッケージをpipでインストール
6. Gitの設定
手順詳細
windows上の準備
機能の有効化または無効化でWindows System for Linuxを有効化する。
- Japanese Language Pack for VS Code
- Remote - WSL
WSLのインストール
Winsows10のストアからUbuntu18.04をインストールして起動する。
ユーザ名とパスワードを設定する。
必要なパッケージをインストール。
user$sudo apt-get update user$sudo apt-get upgrade user$sudo apt install python3-pip user$sudo apt install python3-venv user$sudo apt install postgresql # pip3 install psycopg2を入れようとすると要求される。 user$sudo apt install postgresql-server-dev10 user$sudo service postgresql start user$wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh user$heroku login
postgresqlインストール後サービスのstartする。
HerokuのCLIツールも入れておく。(アカウントを作っておく)
テスト用のDBを作成
user$sudo -u postgres -i postgres$createuser -d -U postgres -P user_name #パスワードを入力 postgres$createdb db_name --encoding=UTF-8 --owner=user_name postgres$psql -U user_name -h localhost -d db_name db_name=> \l
postgresql関係の操作はpostgresに入って行う。
DBのテーブル作成等はさらにpsqlに入って行う。
\lでDBができているか確認する。
Ctrl+Dで抜けれる。
ここでパスワードを設定している場合、
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://localhost/test_db"
を
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://user_name:password@localhost/test_db"
とする。
Python venv作成
user$mkdir test_project user$python3 -m venv test_project user$cd test_project
環境in/out
# in user:~/test_project$ source bin/activate # out (test_project) user:~/test_project$ diactivate
pipパッケージのインストール
#環境に入って (test_project) user:~/test_project$ pip3 list pip (9.0.1) pkg-resources (0.0.0) setuptools (39.0.1) (test_project) user:~/test_project$ pip3 install flask # flaskを入れるとJinja2なども入る (test_project) user:~/test_project$ pip3 list Click (7.0) Flask (1.1.1) itsdangerous (1.1.0) Jinja2 (2.10.1) MarkupSafe (1.1.1) pip (9.0.1) pkg-resources (0.0.0) setuptools (39.0.1) Werkzeug (0.15.4) # 必要なものは入れる。 (test_project) user:~/test_project$ pip3 install psycopg2 psycopg2-binary (test_project) user:~/test_project$ pip3 install flask-sqlalchemy (test_project) user:~/test_project$ pip3 install flask-migrate (test_project) user:~/test_project$ pip3 install flask-login (test_project) user:~/test_project$ pip3 install flask_wtf (test_project) user:~/test_project$ pip3 install rauth (test_project) user:~/test_project$ pip3 install gunicorn # (test_project) user:~/test_project$ pip3 freeze > reqiorement.txt
reqiorement.txtを作ったあと、pkg-resources (0.0.0)の行を削除しないとエラーでる。
Gitの設定
user$ git config --global user.name your_name user$ git config --global user.email your_email # wslからVScodeを起動 user:~$ cd test_project user:~/test_project$ code
拡張機能を入れる。(インストール on WSLになっている。)
Gitの追加とコミット
user:~/test_project$ git init user:~/test_project$ git add . user:~/test_project$ git commit -m "first commit"
(.gitignoreの設定を考えなければならない)
flaskの起動
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def test(): return 'Hello World!'
user:~/test_project$ export FLASK_APP = app.py user:~/test_project$ flask run
とするか
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def test(): return 'Hello World!' if __name__=='__main__': app.run()
user:~/test_project$ python3 app.py
とする。
http://127.0.0.1:5000/にアクセスするとHello World が表示される。
手順としてのやり方はわかったけど、Herokuにデプロイ周りのお作法とかがよくわからないなぁ…
その辺も調べてまとめよう
参考
https://qiita.com/ryotaro76/items/6aa9d3187d742eed0325
https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/
https://www.postgresql.jp/document/9.4/html/index.html
MySQLとPostgreSQLコマンド比較表 - Qiita
Ubuntu 18.04 に PostgreSQL をインストール : まととが書きます
https://qiita.com/y-tsutsu/items/2ba96b16b220fb5913be
https://qiita.com/Philosophistoria/items/48c4779739e6fafc63e0
VSCode +SSH+ Raspberry pi Zeroを動かしたかった。
題名の通り。
結論から申し上げますと動きません。
Note: The Remote - SSH extension currently only supports connecting to x86_64 Linux-based SSH servers. Alpine and other non-glibc Linux based distros not yet supported.
64bitのLinuxのみのようで、Raspberry pi ZeroのCPUはarmv6(32bit)なので動きません!
逆にRaspberry Pi 3 Model B+などはarmv7なので動くと思われます。
TeraTermとかssh.exeからは普通に接続できたので、今後使えるようにならないかなぁ…
確認したエラーの対処
- garbage at end of line
.ssh/configのIdentityFileのパスを""で囲む
- terminating, 1 bad configuration options
IdentityFileのパスが間違っている
手持ちのUSB系充電規格を整理する
充電器回りを整理してタップを買いたいと目論んでいるんで調べた。
USBの給電規格ややこしすぎぃ!
恥ずかしながら使っているものたちを晒す。
種類 | メーカー/品目 | 端子 | 推奨充電 | 備考 |
---|---|---|---|---|
スマホ | Google/Pixel3a | USB-TypeC 2.0 | USB-PD 9V2A 18W | ACアダプタ付属 |
ノートパソコン | HP/Spectre 13 af520TU | USB-TypeC 3.1 | USB-PD 20V3.25A 65W | ACアダプタ付属/最大消費電力45W |
タブレット | Apple/iPad mini 4 | Lightning | 5.1V2.1A 10W | ACアダプタ付属/Appleの独自仕様 |
カメラ | GoPro/HERO 6 Black | Micro USB | 5V2A 10W | BCマークなし/データ通信も可能なのでUSB-BC(CDP)か?謎 |
モバイルバッテリー | Anker/Power Core10000 A1263 | Micro USB | USB-BC 5V2A 10W | 出力5V2.4A/BCマークあり/充電しかしないのでDCPか? |
スピーカー | DENON/DSB50BT | Micro USB | USB-BC 5V2.1A 10W | BCマークあり/充電しかしないのでDCPか? |
イヤホン | AVIOT/TE-D01g | USB-TypeC | 5V500mA 2.5W(ケース) | ケース出力5V1A/マークなしたぶん普通のUSB2.0 |
ゲーム機 | 任天堂/Nintendo Switch | USB-TypeC | USB-PD(未準拠) 15W2.6A 39W | ACアダプタ付属(PDだが規格準拠していない) |
※Pixel 3aのUSB Type-Cが以外にも3.1じゃなく2.0だった
※TE-D01gが公式には急速充電対応と書かれているが、急速とは?なんぞというUSB2.0の電力供給。
いわゆる前の急速充電5V2AはUSB-BC1.2なんですかね?
USB-BCは5V1.5Aまでっぽいけど?
QuickCharge1.0が5V2Aっぽいが?
独自規格なども乱立してそうでよくわからない。
意外と製品に書かれていないので測ってみないとわからそう…。
そもそも出力側と入力側の規格が混同しているような気もする。
とりあえず電力大きいもの用はUSB-PD対応、
その他は5V2Aが出る物を買えばよいことはわかりました。
参考
- USBの給電
【USB】第3回 USBの充電仕様「USB Battery Charge」とは (2/2):ITの教室 - @IT
USBのおべんきょう その3(自分用:USB経由の給電についてまとめてみた) - Think threshold
乱立するスマホ向け急速充電の規格をざっくり解説
- Pixel 3a
https://store.google.com/jp/product/pixel_3a_specs
- Spectre 13
http://jp.ext.hp.com/lib/jp/ja/products/portables/personal/spec_pdf/spectre_13_v000.pdf
http://jp.ext.hp.com/lib/jp/ja/products/portables/personal/spec_pdf/spectre_13_v000.pdf
- HERO 6
https://jp.gopro.com/help/articles/How_To/How-to-Charge-the-Camera-Battery
- TE-D01g
TE-D01gを買った。
TE-D01gを買いました。
PayPayで余らせてたポイントで購入したので実質タダですね。
Pearl Whiteは6/12発売らしいので発売日に届きました。
ありがとうビックカメラ。
桜のパッケージでかわいい。
音質はあまり詳しくわかる耳を持ち合わせていないのですが、
- apt-Xが使える
- あまり高すぎない
- 充電ケーブルがUSB Type-C
なのが決め手になり購入。
小さい…!
一度ペアリングしていたら、蓋を開けて取り出すだけで接続されるのがめちゃくちゃ便利ですね。
最初についてたイヤーピースは私には大きくてフィット感がいまいちだったけど、
小さいのもついてたので問題なし。
無音時のホワイトノイズが少し気になる気もするけど、基本外で使う予定なのでまぁいいかな。
これからは通勤のお供になります。