月曜日, 10月 06, 2025

I2S プロトコル

I²S(Inter-IC Sound)は、マイコンやオーディオ機器間で音声データをやり取りするために設計された、シリアル通信プロトコルです。I²CやSPIと名前は似ていますが、I²Sは音声専用のプロトコルです。

I²Sは、以下の3つの主要な信号線を使って通信します。

  • BCLK (SCK) ビットクロック。データ転送の同期
  • LRCLK (WS) ワードセレクト。左右チャンネルの切り替え。データ線が一本なのでマイク側でも左右を指定します。LOW で左側となります。
  • SD (SDATA) シリアルデータ。音声データ本体

利点
  • 高音質:16〜32ビットのPCM(Pulse-Code Modulation/パルス符号変調)音声に対応。つまりデジタル。

  • ステレオ対応:1本のデータ線で左右チャンネルを送信

  • 低レイテンシ:リアルタイム処理に最適

  • シンプルな配線:3本の信号線で完結


ESP32 C3 supermini と INMP441 互換モジュールを使ってマイクから音声データを得る回路を示します。

INMP441 Pin ESP32-C3 GPIO Signal Role
VDD 3.3V Power
GND GND Ground
SCK GPIO2 I²S BCLK (Bit Clock)
WS GPIO3 I²S LRCLK (Word Select)
SD GPIO1 I²S Data In
L/R GND Mono mode (Left channel only)

コードは以下の通りです。PlatformIo を使っているので Ardunino.h を読み込んでいます。

main.cpp – ESP32-C3 I²S Microphone Reader

#include <Arduino.h>
#include 
#include 

#define SAMPLE_RATE     16000
#define BUFFER_SIZE     512
#define I2S_WS          3
#define I2S_SCK         2
#define I2S_SD          1

void setup() {
  Serial.begin(115200);
  delay(1000);

  i2s_config_t i2s_config = {
    .mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),
    .sample_rate = SAMPLE_RATE,
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
    .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
    .communication_format = I2S_COMM_FORMAT_STAND_I2S,
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
    .dma_buf_count = 4,
    .dma_buf_len = BUFFER_SIZE,
    .use_apll = false,
    .tx_desc_auto_clear = false,
    .fixed_mclk = 0
  };

  i2s_pin_config_t pin_config = {
    .bck_io_num = I2S_SCK,
    .ws_io_num = I2S_WS,
    .data_out_num = I2S_PIN_NO_CHANGE,
    .data_in_num = I2S_SD
  };

  i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
  i2s_set_pin(I2S_NUM_0, &pin_config);
}

void loop() {
  uint8_t buffer[BUFFER_SIZE];
  size_t bytesRead;
  i2s_read(I2S_NUM_0, &buffer, BUFFER_SIZE, &bytesRead, portMAX_DELAY);
  Serial.write(buffer, bytesRead);  // Send raw bytes over serial
}

月曜日, 7月 28, 2025

PHP: 定数を扱う

プロジェクトごとの定数を扱うクラス Config\Constants の紹介です。



<?php

namespace Config;

class Constants
{
    public const DB_USER = "linguist";



呼び出す場合はcomposer を使って use でクラスを読み込みます。


use Config\Constants;

$loader = new \Twig\Loader\FilesystemLoader(Constants::TEMPLATE_DIR);


定数クラスは静的であるため、どこからでも呼び出し可能です。

composer.json で読み込みを指定します。


    "autoload": {
        "psr-4": {
            "Config\\": "src/Config/",
            ...


 git には載せたくない場合でも .gitignore で指定すれば除外できます。


水曜日, 7月 23, 2025

PHP: Composer の使い方

PHP には Composer という優れたパッケージ管理ツールがあります。最近、PHP サイトを Composer を使って再構築する作業を行いましたので、方法を書いておきたいと思います。

Composerとは?

ComposerはPHPのパッケージ管理ツールです。PythonにおけるPoetryに似ており、依存関係の管理とプロジェクトの構造化を支援してくれます。

  • composer.json によってすべての依存情報を一元管理

  • Packagistというリポジトリから多くのパッケージをインストール可能

  • Composerの最大の魅力のひとつが、オートローディング機能です。PSR-4準拠の設定を行えば、名前空間に応じてクラスファイルが自動的に読み込まれます。


インストール方法はこちら⇒公式サイト


プロジェクトの初期化

プロジェクトフォルダで以下のコマンドを実行して composer.json を生成します:

composer init

オートローディング設定

composer.json に以下を追加してクラスを読み込みます。

"autoload": {
        "psr-4": {
            "Pages\\": "src/Pages/"
        }
    }

追加後は以下のコマンドを実行して、オートロード情報を更新します。

composer dump-autoload

使用法

EditPage というクラスを作るなら、src/Pages/EditPage.php ファイルで namespace を指定し、クラスを定義します。

namespace Pages;

class EditPage {
    public static function hello() {
        return "EditPage::hello() が呼ばれました。";
    }
}

EditPage を使うファイルで以下を設定します。

require 'vendor/autoload.php';

use Pages\EditPage;

echo EditPage::hello();

火曜日, 7月 22, 2025

Python: Poetry の使い方

 Python のパッケージ管理で便利なツールがあります。pip や venv などもいいですが、ここでは poetry の使い方を説明したいと思います。


インストール


PoetryはPython 3.7以上で動作します。
curl -sSL https://install.python-poetry.org | python3 -


使い方


まず新規プロジェクトを作成します。
 
poetry new <proj>

このコマンドで以下のファイルが作成されます。

proj/
├── pyproject.toml
├── README.md
├── proj/
│   └── __init__.py
└── tests/
    └── __init__.py


Python モジュールの追加


add コマンドを使ってモジュールを追加します。

poetry add requests


追加されたモジュールは pyproject.toml を見ると確認できます。


仮想環境の管理


run コマンドを使って作成した仮想環境下でプログラムを実行します。

poetry run py script.py


仮想環境の構築


GitHub からプロジェクトをダウンロードしたら、install コマンドを使ってモジュールをインストールします。

poetry install

poetry は仮想環境を管理するための分かりやすい・使いやすい優れたツールです。

水曜日, 7月 02, 2025

Laravel サイトのアップグレード

 Laravel のサイトをアップグレードする機会がありましたので、その方法をここで書いておきたいと思います。かなり構成というか書き方が変わってきているので注意が必要です。

1. 新しいLaravelプロジェクトの作成

まずはクリーンなLaravel環境を作成します。

composer create-project laravel/laravel new-site

2. 既存コードの移行

必要なファイルを新しいプロジェクトにコピーします:

  • コントローラapp/Http/Controllers

  • モデルapp/Models

  • ビューresources/views

  • ルーティングroutes/web.php または routes/api.php

  • ミドルウェア、サービス、ジョブなど → 必要に応じて

3. Composerのオートロードを更新

クラスのオートロードを再生成します。

composer dump-autoload

4. 必要なパッケージの再インストール

Spatieの権限管理パッケージを使っている場合なら

composer require spatie/laravel-permission

5. Apacheの設定に注意

重要なのが、Apacheの mod_rewrite モジュールを有効化することです。これはひっかかりました。これを忘れるとルーティングが正しく機能せず、トップページしか表示できません。

LoadModule rewrite_module modules/mod_rewrite.so

6. ルーティングの見直し・更新

Laravelのバージョンアップに伴い、ルーティングの記述方法や構文が変更されていることがあります

  • クロージャベースのルートやコントローラルートにおける名前空間の指定方法

  • Route::controller()Route::middleware() を使用したグルーピング構文

  • Web/APIルートファイルでのミドルウェアやプレフィックスの指定

Laravel 8以降では、RouteServiceProvider が変更されましたので変更が必要な場合があります。web.php の記述はこれで動きます。

use App\Http\Controllers\CaseController;

Route::resource('case', CaseController::class);

I2S プロトコル

I²S(Inter-IC Sound)は、マイコンやオーディオ機器間で音声データをやり取りするために設計された、シリアル通信プロトコルです。I²CやSPIと名前は似ていますが、I²Sは音声専用のプロトコルです。 I²Sは、以下の3つの主要な信号線を使って通信します。 BCLK (...