アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

ESP32のリモコンの話

半年ぐらい前に行った作業なのですが、忘備録のために書いておきます。

ESP32にはリモコン解析のライブラリがあります。

ちなみにESP32というのは、WiFi+BT+ LX6(CPU)x2のSOCチップの名前で、以下のような評価ボードが沢山出回っています。

WayinTop ESP32開発ボード Wi-Fi BLEモジュール ESP-WROOM-32実装済み デュアルコア 技適取得済み 2個入り 専用USBケーブル付き

新品価格
¥2,180から
(2024/8/17 00:20時点)



開発ツールも沢山リリースされているので、ちょっとした装置を作りたい場合は、簡単に作れてしまいます。
Raspberry Piのように重いLinuxは動かさないけど、色んなライブラリが揃っており、WiFI+BTも使えるので、IoTなんかに良く使われています。
(一応、Linuxも動くみたいです)

そして、その評価ボードのGPIOにリモコンの受光部の出力を接続すると、リモコン解析機が出来上がりです。

IMG_8256.jpg


Arduinoのライブラリは、 IRremoteESP8266を使います。

そして、赤外線解析ソフトは、IRrecvDumpV3というexamplesディレクトリに入っているものを使います。

○Panasonicの場合
例えば、Panasonicのライトのリモコンの場合、以下のような結果が得られます。

21:05:49.941 -> Protocol : PANASONIC
21:05:49.941 -> Code : 0x344A90F464 (40 Bits)
21:05:49.941 -> uint16_t rawData[83] = {3470, 1732, 434, 430, 434, 430, 434, 1298, 436, 1296, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 430, 434, 1298, 436, 430, 434, 430, 436, 1298, 436, 430, 434, 1298, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 430, 434, 428, 434, 1298, 440, 1294, 434, 1298, 436, 1298, 436, 430, 432, 1298, 434, 430, 434, 432, 434, 432, 436, 1298, 436, 1298, 434, 430, 436, 428, 434, 1300, 436, 430, 432, 432, 436}; // PANASONIC 344A90F464
21:05:49.984 -> uint32_t address = 0x34;
21:05:49.984 -> uint32_t command = 0x4A90F464;
21:05:49.984 -> uint64_t data =0x344A90F464;


そこで得られた値をこんな感じでsendPanasonic64関数に渡せばリモコンの送信となります。

const uint64_t data=0x344A90F464;
sendPanasonic64( data, kPanasonic40Bits , 2);


○アイリスオーヤマの場合
では、リモコン送信用の関数が用意されていないようなメーカの場合、どうなるのでしょうか?

例えば、私の家でアイリスオーヤマのライトが一つだけあります。
これを解析すると以下のような値が得られます。

21:16:07.962 -> Protocol : EPSON (Repeat)
21:16:07.962 -> Code : 0x7B019A65 (32 Bits)
21:16:07.962 -> uint16_t rawData[271] = {8942, 4426, 584, 530, 582, 1640, 580, 1638, 584, 1638, 584, 1636, 584, 528, 580, 1638, 584, 1638, 582, 528, 582, 530, 582, 526, 584, 528, 582, 530, 584, 526, 584, 528, 584, 1636, 584, 1636, 584, 528, 584, 528, 582, 1638, 582, 1638, 584, 528, 584, 1638, 582, 526, 584, 528, 584, 1636, 584, 1640, 582, 528, 584, 526, 584, 1636, 584, 526, 582, 1640, 582, 41530, 8948, 4428, 584, 528, .............. }; // EPSON (Repeat) 7B019A65
21:16:08.106 -> uint32_t address = 0x80DE;
21:16:08.106 -> uint32_t command = 0x59;
21:16:08.106 -> uint64_t data = 0x7B019A65;



プロトコルがEPSONと表示され、正しく認識されていないのがわかります。
この場合、sendGeneric関数を呼びます。

その際にデータのフォーマットを指定する必要があり、そのために得られたデータを理解する必要があります。
(リモコンフォーマットの詳しい情報はこちらのHPに記載されています。)

上記のデータの最初の値のペアがはLeader部分でHigh=8942, Low=4426を表していることがわかります。
次に、High=580, Low=1640のペアがデータ1、High=580, Low=530のペアがデータ0ということがわかります。
また、コマンドとコマンドの間に41530分のLow区間であることがわかります。

それを変数にすると以下のようになります。

const uint16_t kIrisHdrMark = 8942; ///< uSeconds. [Leader High]
const uint16_t kIrisHdrSpace = 4426; ///< uSeconds. [Leader Low]
const uint16_t kIrisBitMark = 580; ///< uSeconds. [Data 1 High]
const uint16_t kIrisOneSpace = 1640; ///< uSeconds. [Data 1 Low]
const uint16_t kIrisZeroSpace = 530; ///< uSeconds. [Data 0 Low]
const uint32_t kIrisCommandLength = 120000; ///< uSeconds.
const uint32_t kIrisMinGap = 41530; ///< uSeconds. [stop bit Low]
const uint16_t kIrisFreq = 36700;


そして、sendGenericを呼ぶ時に以下のように指定すれば良いわけです。

const uint64_t data = 0x7B019A65;
sendGeneric(kIrisHdrMark, kIrisHdrSpace, kIrisBitMark,
kIrisOneSpace, kIrisBitMark, kIrisZeroSpace,
kIrisBitMark, kIrisMinGap, kIrisCommandLength,
data, 32, kIrisFreq, true, 0, 50);


以上、参考までに。

ESP32-S3-Touch-LCD-1.28の筐体制作 2

3Dプリンタで作成した筐体ですが、今回、更にバージョンアップしました。

変更点はと言われると細かい話なのですが・・前回から以下の箇所を改善しました。

1. 蓋を広げて作業しやすくした。
2. ESP32-S3-Touch-LCD-1.28のCAD図面を取り込んで、ディスプレイ部分が収まるようにした。

また、一番の大きな変更は3Dプリンタの業者をDMM.makeからElecrowに変えました。

二社を使ってみて、業者によってコストと作りの精度が変わるとうことがわかりました。


コスト
DMM.makeの約1/3以下の値段で作成することができました。
しかも日数もElecrowの方が圧倒的に早かったです。

精度
しかし、作りの精度から言うと、DMM.makeの方が圧倒的に良いです。
Elecrowでは、残りカスが綺麗に拭き取られていなかったり、製作物に継ぎ目と思われるラインが一本入っていたりしました。ちなみにDMM.makeではそのようなことは一切無かったです。

というわけで、用途によって使いわけると良いかもしれません。

ちなみに今回バージョンアップした筐体は以下になります。

IMG_8436.jpg


IMG_8437.jpg



IMG_8451.jpg


IMG_8452.jpg


IMG_8453.jpg


参考までに。

ESP32-S3-Touch-LCD-1.28に温湿センサー(SHT31)を接続して使う

○はじめに
ESP32-S3-Touch-LCD-1.28にセンシリオン社のSHT31という温湿センサーを接続して使いたいと思います。


○接続方法
ESP32-S3-Touch-LCD-1.28の端子をSHT31の以下のピンに接続します。

ESP32-S3 - SHT31
  • 3V3 - VDD
  • GPIO17 - SDA
  • GPIO16 - SCL
  • GND - GND



○ソフトウェア
SHT31との接続はI2C接続です。また、ESP32-S3-Touch-LCD-1.28は以下のようにGPIO06とGPIO07がI2C接続でタッチやQMI8658に使われています。

I2C interface: The ESP32-S3 provides multiple hardware I2C. Currently, GPIO6 (SDA) and GPIO7 (SCL) pins are used for the I2C bus, mounting the QMI8658 six-axis inertial measurement unit and LCD touch control chip on the development board. Please refer to the schematic for more information.

つまり、I2Cバスが2本必要になります。
実は、これが今回のハマりポイントです。


○手順
ざっくり言うと、こんな感じです。
  1. SHT31のライブラリのインストール。
  2. CST8163.h、CST8163.cppをI2バスが指定できるように改造。
  3. メインコード(LVGL_Arduino.ino)で二つのI2Cバスを指定。



1. SHT31のライブラリのインストール。

簡単です。Menu -> Tools -> Manage Librariesでarduino-shtを指定すると以下のライブラリが自動で検出されるので、INSTALLをクリックするだけです。
Screenshot 2024-06-01 at 19.07.30.png


2. CST8163.h、CST8163.cppをI2バスが指定できるように改造。

前回、ここで準備の話をしており、既にCST8163.h、CST8163.cppが手元にあることを前提で話をします。

実は、サンプルコードにあるCST8163.h、CST8163.cppはデフォルトのI2Cバスを使用されているように作られており、I2Cバスの指定ができるようにチョイチョイと変更する必要があります。

参考までに改造したファイルは以下において置きます。

CST8163.hCST8163.cpp



3. メインコード(LVGL_Arduino.ino)で二つのI2Cバスを指定。

最後がI2Cバスをそれぞれに指定するのですが、ネットを色々探して以下のやり方で落ち着いています。
LVGL_Arduino.inoファイルで以下の定義を追加します。

GPIOの定義
#define CST_SDA 6
#define CST_SCL 7
#define SHT_SCL 16
#define SHT_SDA 17


I2Cの定義
TwoWire i2c1 = TwoWire(0); //I2C1 bus
TwoWire i2c2 = TwoWire(1); //I2C2 bus


モジュールの定義
CST816S touch(CST_SDA, CST_SCL, 13, 5);
SHTSensor sht(SHTSensor::SHT3X_ALT);


void setup()で以下のように初期化すれば、タッチも温湿計も普通に使えるようになります。

i2c1.begin(SHT_SDA,SHT_SCL);
sht.init(i2c1);

i2c2.begin(CST_SDA,CST_SCL);
touch.begin(i2c2);


参考までに。

ESP32-S3-Touch-LCD-1.28の筐体制作

○はじめに

周辺基盤も作成し、ある程度動作しているのですが・・これを実際に使おうと思ったら、やはり筐体が必要です。
実は結構、悩ましい問題です。


○Fusionでデータを作成
試しに3Dプリンタなるものを使って作ろうかと思いました。
有難いことに、AutodeskのFusion 360は、非商用目的で個人が使う場合、無償で使用できます。

3D CADを使うのは2回目なのですが、不慣れなのもあって苦労しました。

一応、こんなのを作りました。

Screenshot 2024-05-29 at 21.54.46.png



○3Dプリンタ業社に依頼

出来上がったデータを3Dプリンタ業社に依頼して、作成してもらいます。

今回、DMM.makeを使いました。

材質によって値段が変動するのですが、一番安価な材質、エコノミーレジン(SLA)で注文しました。

それでも、8,989円でした。


○仕上がり

出来上がったのが・・こんな感じです。

IMG_8357.jpg



周辺基盤や配線やらを取り付けてみるとこんなスパゲティ状態になりました。

IMG_8366.jpg



一応、動作確認してみます。

IMG_8369.jpg



前からの写真。

IMG_8371.jpg



後ろから。

IMG_8372.jpg



○完成

IMG_8373.jpg


こんな感じです。

なんだか・・野暮ったいなぁ・・と思わずにはいられない感じです。

あと、若干、寸法を間違えたりしてるし、また発注すると制作に9000円取られるし・・

もう少し、なんとかならないものでしょうか。。。

参考までに。




ESP32-S3-Touch-LCD-1.28の動作状況

こんな感じで動作しています。

IMG_8356.jpg


ソフトウェアは、サーバー側はHome Assistant(MQTT)、クライアント側はESP32(Arudino IDE)環境でライブラリ群を駆使して作っています。

Yutubeに動画を置いておきました。



参考までに。

ESP32-S3-Touch-LCD-1.28の周辺基盤の作成 (その2)

今回は技術的な話をしようかと思います。
ESP32-S3-Touch-LCD-1.28には、GPIOx6、GNDx2、VSYSx1、3V3x1、BOOTx1、RESETx1が外部接続できるようになっています。

ただ、全部接続すると基盤も大きくなるため、最低限ですませたいと思います。

以下の部品を使用するにあたり、

1. リモコン制御 - (秋月の部品: 赤外線LED、トランジスタ)
2. 温湿計 - SHT31使用 高精度温湿度センサモジュールキット
3. 人感センサー - 焦電型赤外線(人感)センサーモジュール SB412A

#1でGPIO(OUTPUT)x1、#2の温湿計でSCL、SDAでGPIOx2、#3でGPIO(INPUT)x1、と合計で4本のGPIOが必要となります。
あとは、VSYSx1、3V3Vx1、GNDx2と合わせて合計8本が接続できるようにしました。

念の為に3.3Vのレギュレータも配置できるようにパターンを配線していますが、元々ESP32-S3-Touch-LCD-1.28にも3V3が備わっており、特に電流不足なんかも発生していないので不要でした。

Screenshot 2024-05-26 at 14.57.18.png



参考までにPDF版の回路図とレイアウト図を以下に置いておきます。

1. ESP32-SENSOR-MINI-SCH.pdf
2. ESP32-SENSOR-MINI-BRD.pdf


以上。


ESP32-S3-Touch-LCD-1.28の周辺基盤の作成 (その1)

○はじめに
タッチパネル、ディスプレイ、WiFi、BT、(あと6軸IMU)と機能が至れり尽くせりのESP32-S3-Touch-LCD-1.28ですが、やはり、スマートホームに必要なのは以下の機能です。

  1. リモコン制御
  2. 温湿計
  3. 人感センサー


仕方ないので、ESP32-S3-Touch-LCD-1.28に接続できるような周辺基盤の作成します。


○部品選定
まずは、使用するデバイスでが、特にこだわりもなく、秋月電子で入手できるもので以下のように決めました。

1. リモコン制御 - (秋月の部品: 赤外線LEDトランジスタ)
2. 温湿計 - SHT31使用 高精度温湿度センサモジュールキット
3. 人感センサー - 焦電型赤外線(人感)センサーモジュール SB412A


○基盤の作成
AutoCADからリリースされているEagleというCADを使用します。
二層などの制限がありますが、非商用であれば無償で使用できます。

しかも作成した基盤を中国にあるELECROWという会社にオンラインオーダーすると、送料は別ですが10枚、たったの$1で作成してくれます。
$1ですよ?、秋葉原でユニバーサル基盤を購入するより、はるかに安くて、会社が損していないか心配になります。


調子にのって以下のように二種類作成してしまいました。
(はじめに黒い方を作成して、もう少しサイズを小さくしたいとのことから白い方を作成しました。)

IMG_8353.jpg


こんな感じで動いています。

IMG_8352.jpg



参考までに。

そのうち、技術的な内容も書いていこうと思います。



ESP32の開発環境 (Arduino)の準備

○はじめに
さて、前回、AliExpressで購入したESP32-S3-Touch-LCD-1.28の開発環境を紹介します。
(海外サイトの製品なので、おそらく技適の問題もあり、自己責任でお願いします。)

一応、Amazon.co.jpでも販売されております。

ESP32-S3開発ボード、1.28インチラウンドタッチLCD、240×240解像度、65K色、コンパクトサイズ、アクセルメーター、ジャイロスコープセンサー(ESP32-S3-Touch-LCD-1.28)

新品価格
¥5,600から
(2024/5/12 13:05時点)





○手順
実は、ここのWikiに全て書かれているので、それを見るようにの一言でだいたい終わりです。

ただ、記載されているlgvlのライブラリをそのまま使うと動作しないという罠が潜んでおり、そこの回避に苦労しました。

ちなみに、開発環境はいくつかあるみたいですが、私は"Arduino IDE"を使用しました。

1. ArduinoのサイトからArduino IDEをダウンロード。
(Macでも一応動くのですが、フルコンパイルが入ったりと時間がかかるので、WindowsデスクトップPCにインストールしました。)

2. ここのリンクに従って、"Arduino-ESP32 support"をインストール。

3. 同様に先ほどのWikiに従って、以下の設定を行う
1) Search esp32 on Board Manager to install, and restart Arduino IDE to take effect.
2) Enter Arduino IDE, and select Tool -> 16MB Flash and enable QSPI PSRAM as shown below:

私自身、うろ覚えなのですが・・
USB Type-CをESP32-S3-Touch-LCD-1.28に接続すると、COMポートが表示され、そこで"ESP32 S3 DevModule"を選択し、その後にFlashとQSPI PSRAMの設定を行った覚えがあります。

4. TFT_eSPIライブラリのインストール。
ここのWikiにあるEsp32-s3-touch-lcd-libをダウンロードし、C:\Users\xxxx\Documents\Arduino\librariesにTFT_eSPI_Setups,とTFT_eSPIフォルダだけをコピー。(lvglは使いません。)

5. lvglのライブラリのインストール。
lvglは別製品であるここのサイトからダウンロードします。
このサイトは、購入した製品とそっくりですが、ピンのアサイン、タッチの部品が違い、別製品です。
ただ、主部品であるESP32・Display Chip GC9A01Aが共通なので、アサインされているピンさえ合わせれば、デモソフトは動きます。

このライブラリEsp32-s3-lcd-1.28-libをダウンロード、lvglフォルダだけをC:\Users\xxxx\Documents\Arduino\librariesにコピーします。

6. デモソフトのダウンロード。
先ほどのサイトからデモソフトSample demoをダウンロードし、LVGL_Arduinoディレクトリだけをどこか適当にコピーします。

7. デモソフトをコンパイルして実機にフラッシュします。
コピーしたLVGL_Arduinoディレクトリ下のLVGL_Arduino.inoをダブルクリックしてArduinoが起動し、COMポートとESP32 S3 DevModuleを設定して、メニュー-> Sketch -> Uploadをクリックすれば、コンパイルが実行され実機にフラッシュされて、以下のようなデモソフトが起動します。

IMG_8333.jpg



タッチを設定する場合、オリジナルのWikiに記載されているSample demoをダウンロードし、LVGL_ArduinoディレクトリのCTS816S.cpp、CST816S.hとそれに付随するソースコードの部分を先ほど動かしたデモソフトにマージすれば、動作します。

参考までに。











ホームシステムにESP32を使う

最近、家のシステムで使用している自作のXbeeの調子が芳しくなく。
実際にどのような不具合かというと、リビングにおいてある端末の受信状態が悪く、リモコンが肝心な時に効かなくなる。

しかも、Xbeeの電子基盤のストックも尽き、再度、同じ基盤を発注して既存のシステムを使い続けるのか?
それとも最新のデバイスにアップグレードするのか?

二択を迫られたわけです。
今のシステムはかれこれ10年ぐらい使っているし、もう新しい技術に進むべきではないだろうか?

調べれば、"ESP32"だの"MQTT"だのと私の知らないことが世間を席巻しているらしい。

仕方ない。

最新のシステムにアップデートしよう。

そんなわけで、ネットでESP32を漁っていると、ディスプレイも付いて、タッチパネルも付いてるESP32を発見。

早速、ESP32-S3-Touch-LCD-1.28をAliExpressで購入しました。
海外サイトの製品なので、おそらく技適の問題もあり、自己責任でお願いします。

一応、Amazon.co.jpでも販売されております。

ESP32-S3開発ボード、1.28インチラウンドタッチLCD、240×240解像度、65K色、コンパクトサイズ、アクセルメーター、ジャイロスコープセンサー(ESP32-S3-Touch-LCD-1.28)

新品価格
¥5,600から
(2024/5/12 13:05時点)




ESP32自体が初めてで、開発環境を整え、しかもすぐ動いてくれるソースコードが見つからず、試行錯誤しながら進め、以下の動作確認までできました。

デモ画面
IMG_8333.jpg


温湿センサー+時間表示させたところ
IMG_8252.jpg



参考までに。

   
検索
検索語句
記事ランキング
最新記事
×

この広告は30日以上新しい記事の更新がないブログに表示されております。