Menu

My Works
- LEDチェッカ
- 太陽電池式回路テスタ
- TTL Pong
- DSP プリセットラジオ
- 電動式 CVCC 電源装置
- OLED MP3 プレーヤ
- etc.

Report
- MIDI のハードウェア
- aitendo DSPラジオ一覧表
- etc.

Parts Collection
- Logic IC
- Calculator LSI
- CMOS Melody IC
- etc.

Blog

Recent Updates

主な更新のみ

24/03/10
- Logic IC Collection


NanoPi リモコンサーバの製作

公開:2018/07/22
最終更新: 2023/05/26



 今年の夏はとても暑いです。自宅に帰ると室温が 40 ℃を超えていることもありしんどいので、外出先から Web 経由でエアコンを操作するためのリモコンサーバを作りました。NanoPi NEO 2 を使って動作させています。

概要

 リモコンサーバは上図のように NanoPi NEO 2 と IR 送受信基板の 2 枚で構成されています。NanoPi NEO 2 は秋月電子にて \2,400 で入手できます。NanoPi NEO やその他の Linux コンピュータボードで十分ですが、サウンド入出力端子が出ていることが望ましいです。


NanoPi NEO 2


IR 送受信基板

 本製作では Audio IO を使用してリモコンの赤外線信号を送受信しています。arecord / aplay で録音再生するだけなので、送受信のプログラムを作る必要はありません。GPIO を使用して信号の送受信を行うことも考えたのですが、実験したところ NanoPi では数 10us 単位の制御が安定しない結果でした。リモコン信号は MIC IN を通して受信され、.wav ファイルとして記録されます。リモコン送信は記録した .wav ファイルを再生するだけです。Audio Out の信号はコンパレータで Binarize された後、NE555 タイマ IC により 38 kHz 変調と IR LED のドライブが行われます。

  • ファイル一式 
    • apache ディレクトリ: web ページのサンプル
    • remocon ディレクトリ: 信号保存・再生・後処理プログラムなど

使い方

 コントロール用ページは PHP で書いており、任意のウェブブラウザからアクセスできます。「A/C ON」「A/C OFF」を押すとエアコンを ON/OFF するようにしています。CPU Temperature には現在の CPU 温度を表示しています。

 リモコン信号の記録/再生は SSH よりシェルスクリプト (record_test.sh) を実行することで行います。

NanoPi NEO 2 の環境構築

  1. NanoPi NEO 2 の起動
  2. SSH でログイン
  3. パスワードの変更
  4. 必要なパッケージのインストール
  5. apache のセットアップ
  6. 権限の付加
  7. ルータの設定

メモ

NanoPi の IP アドレスは arp -a で推測するとよい

パスワードの変更は passwd コマンド

とりあえず apt-get update

必要なライブラリのインストール apt-get install g++ apache2 php php-cgi libapache2-mod-php

apache2 の設定ファイルは /etc/apache2/apache2.conf など。
スクリプトの権限を適切に (755) 設定しておかないとスクリプトが実行できないのは当然として、ディレクトリの権限を適切に (666) 設定しておかないとファイルを作成できないので注意。

デフォルトの設定では apache から呼び出されたプログラムは www-data というユーザ名で実行される。このユーザに対して適当な権限を与えておかないと、サウンドや GPIO の操作ができない。
www-data ユーザが属するグループの確認: groups www-data
たとえばオーディオの操作権限追加は usermod -a -G audio www-data

apache 設定を変更したら service apache2 reload または service apache2 restart 

Basic 認証は apache2.conf に以下を追加

<Directory (パスワードの必要なディレクトリ)>
    AllowOverride None
    AuthType Basic
    AuthName "Remocon"
    AuthUserFile "/etc/apache2/.htpasswd"
    Require valid-user
</Directory>

さらに、 htpasswd -c /etc/apache2/.htpasswd (ユーザ名) を実行して .htpasswd ファイルを作成する。Basic 認証は平文で通信されるので、他で使っているユーザ名やパスワードを流用しない。

外部からアクセスするためにはルータの設定が必要。ルータによっては DDNS が無料で使用できるので便利。

リモコンサーバの実装

  1. IR 送受信基板の接続
  2. リモコン受信波形処理プログラムのビルド
  3. 送受信のテスト
    1. record_test.sh: リモコン信号の記録
    2. play_test.sh: リモコン信号の再生
    3. play_loop.sh: リモコン信号の繰り返し再生
  4. Web ページのコーディング

メモ

IR 送受信基板の GND、RCV_OUT、IR_SEND、VCC を NanoPi 基板の GND、MIC IN+、Audio Out(R)、+5V と接続します。NanoPi NEO 2 基板では、オーディオ端子は 2mm ピッチのパッドのみ用意されているので、適当な手法で配線します。MIC IN - は GND と接続したほうがいいかもしれません。

変調周波数は VR で 38kHz に調整してください。

IR 受信モジュールとして回路図には SHARP SPS440-1 を書いていますが、他のメーカの製品を使用することをお勧めします。

リモコン受信波形処理プログラムのビルドは audio_in_pospro ディレクトリに入って make するだけです。ビルドには g++ が必要ですが、標準ではインストールされていません。

arecord / aplay で操作する場合、デフォルト状態 NanoPi NEO 2 の Line IN / Out は hw:2,0 でアクセスできます。

リモコン信号の送受信

受信されたデータは MIC IN 端子の CR フィルタで減衰するので、後処理プログラムにかけて波形整形しています。


生データ


後処理後

温度センサの追加