WSL2 のインストールではまったこと

はじめに

WSL2 のインストールではまったのでメモします。
インストール作業は基本的にはMicrosoftの公式ページに従って進めます。

環境

  • windows10 home
  • インストール前はWSL環境なし。
  • ubuntu18.04 をインストールする。

キモ

無 --> WSL1 --> WSL2 の順序

  • まっさら状態からいきなりWSL2のインストールはできない。
  • WSL1 をインストールしてからWSL2に変更する。
  • そのコマンド wsl --set-version Ubuntu-18.04 2は通常モードのPowerShellにて実行する。
    そのページには管理者モードのPowerShellで実行せよ、と書かれているのだが、うまく行かなかった。

PowerShellの管理者モードと通常ユーサーモードの使い分け

  • 管理者モードのPowerShellで実行要求されていることは、管理者モードで行う必要あり。
  • wslコマンドwsl -l -v は通常ユーザーモードPowerShell で実行する。
  • wslコマンドを管理者モードのPowerShellで実行しても何も帰ってこない。
  • だからWSL1 --> WSL2 の切り替えも通常モードのPowerShellにて実行する。

関連リンク

その他

  • 私はWSL1とWSL2がどのような構造・組み合わせになっているのかはよくわかっていません。
  • 各人のマシン設定状況に応じてインストールを進められるようなフローチャート形式のインストールガイダンスの作成をお願いしたい。

psycopg2でpostgresSQLにデータ登録

以下の書き方でデータ登録ができました。

#!/usr/bin/env python3
import psycopg2

# assuming
# 1. a postgres service is already active.
# 2. there's a database in postgres, named 'record', belonging to 'user'.
# there's a table named 'name' in it, which has 2 types of data :
# (id SMALLINT PRIMARY KEY, name VARCHAR(100) NOT NULL)

def get_connection():
    return psycopg2.connect(
        host = 'localhost',
        user = 'user',
        password = 'password',
        port = 5432,
        database = 'record'
        )
 
def main():
    raw_data = ( (1, 'Maeda'),
                 (2, 'Yamada'),
                 (3, 'Fujiwara'),
                 (4, 'Takeda'),
                 (5, 'Kato') )
    with get_connection() as conn:
        with conn.cursor() as cur:
            for each_data in raw_data:
                cur.execute('INSERT INTO \
                name(id, name) VALUES (%s, %s);',
                [str(k) for k in each_data])
        conn.commit()

if __name__ == '__main__':
    main()

もしデータが1個の場合は以下のように記述する。

cur.execute('INSERT INTO name(id, name) VALUES (%s, %s);', ('1', 'Maeda',))

もしくは

cur.execute('INSERT INTO name(id, name) VALUES (%s, %s);', ['1', 'Maeda'])

とします。

ポイント

  • VALUES に複数個のデータを渡したいときは、その数の分だけ %sをならべる。
  • VALUES にデータを渡すときには文字列型にする。
  • connection, cursor ともwith構文で書くとcloseは記述不要。

その他

  • ユーザー名・パスワードを直書きしているのは、限られた人しか コードを読まない、という前提です。

環境

  • postgres 11
  • python3.7.3
  • machine: RaspberryPi 3B / buster lite

nodeのインストール(nコマンド使用)

備忘録です。

環境

方法1

1.npmのインストール

$ cd ~  
$ sudo apt install npm

2.nコマンドのインストール

$ sudo npm install n -g

3.LTSバージョンの検索

$ sudo n lts  
// installing : node-v12.17.0  (2020.05.27現在)

4.nコマンドにてバージョン選択

$ sudo n ls  
// node/12.17.0  
$ sudo n  
// バージョン選択する画面になるので、選択してenter  
// installed : v12.17.0 ( with npm 6.14.4)  

5.nodeバージョンの確認

$ node --version  
// v12.17.0

6.バージョン削除などは参考サイトを参照。

npmのアップデート2

$ sudo npm update -g 

その他

  1. バージョン管理システムにはnvm, nodebrewなどもあるようですが、私はnコマンドを使いました。

スマホとM5stickCを使って外出先から家のエアコンをリモコン起動する#1

環境・目標

  • M5stickCを使用。
  • エアコンは東芝製(RAS-402PDR)
  • 外出先からスマホを操作して家のエアコンを起動することができるようにする。
  • 基本的に以下のサイトの情報を参考にさせていただいた。

elchika.com

準備物

  • M5stickC
  • M5StackIRユニット(GROVE端子使用)1
  • ENV HAT(今は不要。後に部屋の温度もモニターできるようにする計画)
  • パソコン(win10home)
  • arduinoIDE(ver1.8.12)
  • Blynk アプリ

方法

M5stickCのセットアップ

arduinoIDEを使用します。
以下写真のような接続構成になっています。
IR UNITはGROVE部に接続。

f:id:ellechien:20200602174714j:plain:w150
M5StickC と IR UNIT と ENV HAT

現リモコンの赤外線信号の解析

IRremoteESP8266モジュールをインストール。その中にあるのIRrecvDumpV2(スケッチ例)を使用。 受光モジュールのGPIO端子番号を33に変更(GROVEコネクタのINPUT端子はM5stickCの場合no.33です)。
受信したIR信号の解析にトライしましたが、結局断念。2 リモコン学習時の受信したRAWデータをそのまま送信する方法にする。

スマホの赤外線信号の解析

スマホ(Huawei製)にスマートリモコンというアプリがあり、それが出す信号を学習してM5StickCから出すことにした。
どうやら東芝エアコン用には複数のパターンがあるらしく、アプリ設定中に1回目に出てきたパターンではウチのエアコンは反応せず、2度目のパターンで反応してくれました。そのパターンをIRrecvDumpV2で再びRAWデータを取得、そのRAWデータをm5stickCから送信すると、ようやくウチのエアコンはONもOFFも反応してくれました。(ただしm5stickCの信号による冷房起動で涼しい風が出ることは未確認)

Blynkのセットアップ

スマホから家にあるM5StickCの操作にはBlynkアプリを使用。アプリのインストールとユーザー登録を完了させる。
今回はBLEではなくwifiによる接続。 とりあえずボタン1個だけ準備し(V0)、それをリモコンの冷房起動(ON)さえできればよしとする。 ユーザー登録時にメールで送付されてくるキー(Auth Token)を控えておく。
こちらのサイトも参考にさせていただいた。

ogimotokin.hatenablog.com

ArduinoIDEにて設定

ソースコードこちら。 ArduinoIDE ver.1.8.12使用。
ライブラリはBlynkをインストールしておく。
10行目にBlynkから送付されてきたAuth Tokenを記入。
11~12行目は家のwifiSSIDとパスワード情報を記入。 リモコン起動時のRAW信号はac_power_on に保存。

動作確認

スマホwifiをOFFした状態で、Blynkのボタン操作によってエアコンが起動できた。
ただしIR UNITの反応はエアコンから2mくらいまでが限界。それより長くするためにはIrLedの電流を増やす必要あり。

次へのステップ

  • スマホからの操作で、HATセンサを使って家の温度・湿度などの情報をスマホに表示する。
  • LINEのbotへのメッセージにて家のエアコン の操作と、温度等の情報を表示する。
  • エアコンへのコマンド受付音をM5StickCで判別して、エアコン起動・失敗確認をして結果をスマホに表示する。

補足


  1. GROVEのIR-UNITを準備した理由: m5stickC内蔵のIRトランスミッタはHAT装着時に隠れてしまうこと、現在のリモコン信号の解析のために受信モジュールが必要であったため。

  2. シリアルモニターで簡単に信号は拾えましたが、信号体系はUNKNOWNと表示。冷房起動(ON)側はコードやコード長は安定していましたが、停止(OFF)側はビット長やコードもリモコンのボタンを押すたびに変わるという状況であり、NECフォーマットではないと思われる。またAEHAフォーマットにも合わないところがあり、どういうフォーマットになっているのか不明。冷房起動(ON)側はRAWデータの直送信でONは確認できましたが、停止(OFF)側は操作できず。RAW信号の送信にはこのサイトのスケッチをほぼそのまま使用、ただし数点変更必要。(1)送信LEDの端子番号: kIrLed: 9 –> 32 (2)ヘッダファイル変更 <IRremote.h> –> <IRremoteESP8266.h> (3)ヘッダファイル追加 <IRsend.h> ( (2),(3)はコンパイルエラー ‘SEND_PIN’ was not declared in this scope の対策。ライブラリ中のIRremote.hの最後の部分に"#elif defined(SEND_PIN)“を追加も実施。参考 ) (4)RAWデータの変数宣言 unsinged int –> uint16_t (これはコンパイルエラーno matching function for call to ‘IRsend::sendRaw の対策。参考 )

udemy でのコース購入でクーポンを利用してgoogle playで支払う方法

備忘録です。   恐らくこの方法でうまくいくと思いますが、万が一うまく行かなくてもご容赦ください。

条件

  1. Android使用。udemyのアプリがインストールされていること。
  2. クーポンは講師からtwitterで入手する。

やり方

  1. twitter上でクーポンを表示させる。以下~3. はtwitterアプリ上での作業。
  2. クーポンが表示されている箇所のすぐ上の入力枠にクーポンコードを手で入力する。(面倒ですが)
  3. "カートに入れる"をクリック。( "今すぐ購入"をクリックしない)
  4. Androidスマホ上でudemyアプリを立ち上げる。以下~7. はudemyアプリ上での作業。
  5. カートを開いて、支払いに移動。
  6. "google playにて支払い"を選択し、支払いを行う。
  7. udemyアプリのマイコース内に購入したアプリが入っていることを確認。
  8. 最初のtwitterの画面をそのまま閉じる。

注意点

  1. udemyの情報(2020.04.24現在)では「モバイルアプリでの購入にはudemyクーポンの適用ができない。クーポン適用するならudemyのwebサイト から行うように」とのこと。udemyアプリでの購入ではクーポンの入力箇所が無いし、udemyのwebサイトでは、google playでの支払いできない(支払い方法の選択肢はクレジットカードかpaypal)。

以上です。