NFC Reader/Writer (WS1850SS)

M5フローのRead/Writeブロック

ReadだけではなくWriteもできる. addr は後述するページ番号に該当するか.

記憶領域

NFCタグによってEEPROM容量は異なる. 例えば NTAG213は,"144、504、または 888 バイトの自由に利用可能なユーザー読み取り/書き込み領域 (36、126、または 222 ページ)" と記載がある. NTAG 213/215/216 | NXP Semiconductors

アクセス制御機構

ISO/IEC 14443 Type Aのアクセス制御機構については, DSAS開発者の部屋:安価な NFC タグで秘密情報を安全に携行する試み 殿のブログが参考になり,パスワード保護もできるようだ.

  • NTAG21x メモリ上の任意のページ(1 ページ = 4 バイト)以降へのアクセス要求に対し当該タグをパスワードによって保護できる
  • パスワードによる保護は Write 要求のみならず Read 要求に対しても設定可能
  • パスワード認証連続試行回数の上限値を設定することが可能であり、この回数を超過すると当該タグの認証機能は永久に封鎖されパスワード正否にかかわらず認証通過不能となる しかし WS1850S1の資料を見る限りでは,パスワード保護機能は無さそうだ.

回路図

デュアルアンテナとシングルアンテナがある.

デュアルアンテナ回路図.

シングルアンテナ回路図.

Dual-Loop NFC Chip Antenna Based on Z-Shaped Coil を見ると 垂直/水平方向の磁界を形成できるように見える.

NFC chip antenna coil configuration of Z-shaped

基板を見る限りではWS1850Sは 1方向のコイルなのでシングルアンテナだろう.

WS1850S表
WS1850S裏

応用

一括読み込み

 NFCリーダを複数繋げて広範囲に読み取ることも出来る.  Octopass | ProtoPedia

スマホから書き込み

尚,スマホからNFCタグへの書き込みも出来るようだ.70Byteと記載がある.標準的な容量なのだろうか.

スマホからNFCタグへの書き込み

NFC TUTORIAL: How to Write an Address to an NFC Tag - YouTube

参照

m5-docs

M5Stack用WS1850S搭載 RFID 2ユニット — スイッチサイエンス

WS1850S

M5StackのRFID Unitで賞味期限を警告するシステムを作る - Qiita

NFCにおける安全な私的情報の交換

WiFi HaLow (IEEE 802.11ah) 調査

無線仕様

無線規格 周波数 TP シンボル長[us] GI[us] 多元接続 参考
802.11ac 2.4/5G 最大6.9Gbps 3.2 0.4 / 0.8 SU-OFDM  
802.11ax 2.4/5G 最大9.6Gbps 12.8 0.8 / 1.6 / 3.2 SU-OFDM/MU-OFDMA ※1 Silex
802.11ah 900MHz帯 0.15~4 Mbps 32 4/8 SU-OFDM Sailex

チップベンダー

Silex ”本製品はNewracom社製チップセットを搭載したIEEE 802.11ah準拠の無線LANモジュール” SX-NEWAH 日本モデル|SPI/UART 無線LANモジュール|サイレックス・テクノロジー株式会社

Morse Micro モースマイクロ、IoTコネクティビティを推進し、デジタルの未来に革命を起こすべく、1億4,000万ドルのシリーズB資金を調達 |Morse Micro PTY. LTD.のプレスリリース

余談と参考

"現時点でWi-Fi CERTIFIED HaLowを取得したのは現状Methods2Business、Newracom、Morse Microの3社" IoTでの活用が期待される「Wi-Fi CERTIFIED HaLow」の現状をWi-Fi Alliancが説明 | TECH+(テックプラス)

802.11sのメッシュ開発について "10年以上の時間が経った現状は上記の通りです。「適性のあるコンポーネント(カーネル・モジュール・ドライバ)を選んで正しく設定すれば動く」けれども落とし穴が多く、適性のない(対応していない・あるいは中途半端にしか動かない)モジュール・ドライバも少なくありません。" IEEE802.11sメッシュのはなし(2)|Wireless・のおと|サイレックス・テクノロジー株式会社

OSS

Transceiver
GitHub - dverhaert/GNUradio-802.11ah: IEEE 802.11ah transceiver

SDRによるIEEE 802.11ah通信機の試作開発 (Development of an IEEE 802.11ah SDR-based WLAN Prototype)

求人

電子工作大国のオーストラリアで働きたい人は Morse Microが良いかもしれない.
オーストラリアがIoT・電子工作天国だった件 - Qiita Careers with Morse Micro - Join the team! - Morse Micro

Seeed Studio XIAO ESP32C3 個人的まとめ

Seeed Studio XIAO ESP32C3

Getting Started with Seeed Studio XIAO ESP32C3 - Seeed Wiki に各種資料がある.

[PDF] ESP32C3 datasheet

[PDF] Seeed Studio XIAO ESP32C3 Schematic

[ZIP] Seeed Studio XIAO ESP32C3 KiCAD Libraries

[ZIP] Seeed Studio XIAO ESP32C3 Eagle Libraries

[DXF] Seeed Studio XIAO ESP32C3 Dimension in DXF

[LBR] Seeed Studio XIAO ESP32C3 Eagle footprint

[ZIP] Seeed Studio XIAO ESP32C3 Factory firmware

[XLSX] Seeed Studio XIAO ESP32C3 pinout sheet

[STEP] Seeed Studio XIAO ESP32C3 3D Model

[ZIP] Seeed Studio XIAO ESP32C3 Certification files

Platform IO for Seeed Studio XIAO ESP32

Schematic

https://files.seeedstudio.com/wiki/XIAO_WiFi/Resources/Seeeduino-XIAO-ESP32C3-SCH.pdf

LDO XC6210

https://www.torexsemi.com/file/xc6210/XC6210.pdf

ESP32C3 個人的まとめ

Seeed Studio XIAO ESP32C3

Getting Started with Seeed Studio XIAO ESP32C3 - Seeed Wiki に各種資料がある.

[PDF] ESP32C3 datasheet

[PDF] Seeed Studio XIAO ESP32C3 Schematic

[ZIP] Seeed Studio XIAO ESP32C3 KiCAD Libraries

[ZIP] Seeed Studio XIAO ESP32C3 Eagle Libraries

[DXF] Seeed Studio XIAO ESP32C3 Dimension in DXF

[LBR] Seeed Studio XIAO ESP32C3 Eagle footprint

[ZIP] Seeed Studio XIAO ESP32C3 Factory firmware

[XLSX] Seeed Studio XIAO ESP32C3 pinout sheet

[STEP] Seeed Studio XIAO ESP32C3 3D Model

[ZIP] Seeed Studio XIAO ESP32C3 Certification files

Platform IO for Seeed Studio XIAO ESP32

Schematic

https://files.seeedstudio.com/wiki/XIAO_WiFi/Resources/Seeeduino-XIAO-ESP32C3-SCH.pdf

LDO XC6210

https://www.torexsemi.com/file/xc6210/XC6210.pdf

画像の周波数解析

初めに

 大学の社会人講座で画像の周波数操作があり、画像の周波数変換とはどういう事か気になったため、記述する。
 (時系列信号ならベクトルと考えて、フーリエ変換するのみで良いが、画像はどういうサンプル群でフーリエ変換するのか不明であったためだ)

画像の空間周波数フィルタリング

画像の空間周波数フィルタリングの手順は次の通り。[1]

① 画像を2次元FFTします。
② 周波数領域を入れ替えます。
④ 各種フィルタリングを行います。(例えばローパスフィルタならカット領域のスペクトルを0にします)
⑤ 周波数領域を入れ替えます。(元に戻す)
⑥ 2次元の逆FFTをします。
⑦ フィルタリングされた画像が完成します。

尚、周波数領域の1ピクセルは、明度が振幅、位置が周波数を表す。
[1] 【画像処理】フーリエ変換の原理・実装例

振幅スペクトルと位相スペクトルの違い

位相スペクトルの1ピクセルは、当該位置の輪郭を表現し、画像全体で見るとエッジ画像とみなせる。
振幅スペクトルの1ピクセルは、明度が振幅を表現し、画像全体で見ると元画像の形状情報を図示したものとみなせる。

https://www.ieice.org/tokyo/gakusei/activity/kenkyuu-happyoukai/happyou-ronbun/22/pdf/162.pdf

EDGE IMPULSでモーション特徴量をArduino向けにビルド

初めに

   Gesture Controlled Drone with M5Stack and Edge Impulse - Hackster.io を参考に、  M5StickCで取得したモーションデータ(加速度/ジャイロ/姿勢)を学習し、判定できるようにする

チュートリアルを試す

 上記URLに従いスマホでforward / right / leftにスマホを動かしデータ収集、分類、テストしてみた。  結果、認識率は100%と高精度。

int8でも精度は落ちないが、floatの方がspeed(認識速度?)が早いようだ。 どちらの型を使うかは、Flash容量、計算リソースに応じて決定したい。

Arduino Nano 33 BLE ソースコード

 buildされたコードを参考までに載せる。

/* Includes ---------------------------------------------------------------- */
#include <uecken-project-1_inferencing.h>
#include <Arduino_LSM9DS1.h>

/* Constant defines -------------------------------------------------------- */
#define CONVERT_G_TO_MS2    9.80665f
#define MAX_ACCEPTED_RANGE  2.0f        // starting 03/2022, models are generated setting range to +-2, but this example use Arudino library which set range to +-4g. If you are using an older model, ignore this value and use 4.0f instead

/*
 ** NOTE: If you run into TFLite arena allocation issue.
 **
 ** This may be due to may dynamic memory fragmentation.
 ** Try defining "-DEI_CLASSIFIER_ALLOCATION_STATIC" in boards.local.txt (create
 ** if it doesn't exist) and copy this file to
 ** `<ARDUINO_CORE_INSTALL_PATH>/arduino/hardware/<mbed_core>/<core_version>/`.
 **
 ** See
 ** (https://support.arduino.cc/hc/en-us/articles/360012076960-Where-are-the-installed-cores-located-)
 ** to find where Arduino installs cores on your machine.
 **
 ** If the problem persists then there's not enough memory for this model and application.
 */

/* Private variables ------------------------------------------------------- */
static bool debug_nn = false; // Set this to true to see e.g. features generated from the raw signal

/**
* @brief      Arduino setup function
*/
void setup()
{
    // put your setup code here, to run once:
    Serial.begin(115200);
    Serial.println("Edge Impulse Inferencing Demo");

    if (!IMU.begin()) {
        ei_printf("Failed to initialize IMU!\r\n");
    }
    else {
        ei_printf("IMU initialized\r\n");
    }

    if (EI_CLASSIFIER_RAW_SAMPLES_PER_FRAME != 3) {
        ei_printf("ERR: EI_CLASSIFIER_RAW_SAMPLES_PER_FRAME should be equal to 3 (the 3 sensor axes)\n");
        return;
    }
}

/**
 * @brief Return the sign of the number
 * 
 * @param number 
 * @return int 1 if positive (or 0) -1 if negative
 */
float ei_get_sign(float number) {
    return (number >= 0.0) ? 1.0 : -1.0;
}

/**
* @brief      Get data and run inferencing
*
* @param[in]  debug  Get debug info if true
*/
void loop()
{
    ei_printf("\nStarting inferencing in 2 seconds...\n");

    delay(2000);

    ei_printf("Sampling...\n");

    // Allocate a buffer here for the values we'll read from the IMU
    float buffer[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = { 0 };

    for (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix += 3) {
        // Determine the next tick (and then sleep later)
        uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS * 1000);

        IMU.readAcceleration(buffer[ix], buffer[ix + 1], buffer[ix + 2]);

        for (int i = 0; i < 3; i++) {
            if (fabs(buffer[ix + i]) > MAX_ACCEPTED_RANGE) {
                buffer[ix + i] = ei_get_sign(buffer[ix + i]) * MAX_ACCEPTED_RANGE;
            }
        }

        buffer[ix + 0] *= CONVERT_G_TO_MS2;
        buffer[ix + 1] *= CONVERT_G_TO_MS2;
        buffer[ix + 2] *= CONVERT_G_TO_MS2;

        delayMicroseconds(next_tick - micros());
    }

    // Turn the raw buffer in a signal which we can the classify
    signal_t signal;
    int err = numpy::signal_from_buffer(buffer, EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
    if (err != 0) {
        ei_printf("Failed to create signal from buffer (%d)\n", err);
        return;
    }

    // Run the classifier
    ei_impulse_result_t result = { 0 };

    err = run_classifier(&signal, &result, debug_nn);
    if (err != EI_IMPULSE_OK) {
        ei_printf("ERR: Failed to run classifier (%d)\n", err);
        return;
    }

    // print the predictions
    ei_printf("Predictions ");
    ei_printf("(DSP: %d ms., Classification: %d ms., Anomaly: %d ms.)",
        result.timing.dsp, result.timing.classification, result.timing.anomaly);
    ei_printf(": \n");
    for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
        ei_printf("    %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
    }
#if EI_CLASSIFIER_HAS_ANOMALY == 1
    ei_printf("    anomaly score: %.3f\n", result.anomaly);
#endif
}

#if !defined(EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR != EI_CLASSIFIER_SENSOR_ACCELEROMETER
#error "Invalid model for current sensor"
#endif

Data Forwarder

 M5Cからcsvデータをweb Serialにより収集できるようだが、Installation - Edge Impulse Documentation してedge-impulse-data-forwarderを実行すると、nodejsのbinding絡みのエラーで上手く出来ない。  Referenceボードが来てから再度試す。  

文部科学省の履修証明プログラム(大学の社会人プログラム)

文部科学省の履修証明プログラム

https://shingakunet.com/syakaijin/article/risyushomei/index.html

履修証明プログラムの一番の特徴は、「専門性を高めキャリアアップしたい」「未経験から新たな業界に転職を果たしたい」「地域社会に貢献したい」といった社会人一人ひとりのニーズに応じてピンポイントで設計されたプログラムである

マナパス を見て、「大学・大学院」と「履修証明プログラムに」チェックを入れ、分野を入れると該当した講座が出てくる。

以下、個人的に気になったものをピックアップする。

信州大学 電気電子回路 3万円 締切 1/21で終了 https://shingakunet.com/syakaijin/article/risyushomei/641165.html

電通大 AIセキュリティ 56万(ちょっと高い https://shingakunet.com/syakaijin/article/risyushomei/1073988.html

京都工芸繊維 AI 9万円 開催中止...?_? 人集まらなかったのか??? https://shingakunet.com/syakaijin/article/risyushomei/1277931.html

広島大学 ものづくり 6万円 締切 2/28で終了 https://shingakunet.com/syakaijin/article/risyushomei/870970.html

大阪工業大学 AI 33万   締切3/12 https://shingakunet.com/syakaijin/article/risyushomei/1041663.html

九州大学 セキュリティ 17万

岡山大は下記。〆切4/28だが、5/8現在もまだぎりぎり申し込みできる。 おかやまIoT・AI・セキュリティ講座