自宅IoTリモコン全部作る[74TH-B017]
- 物販商品(自宅から発送)紙+PDF(送料別200円)¥ 1,000
- ダウンロード商品PDF¥ 1,000
筆者74thの自宅で活躍しているIoTデバイスを作ったときにトライしたことや、成果物を再現できる形でまとめたものです。 最初は市販モジュールを利用したりして、各ステップ(各章に対応)で「常に実用可能な状態」を保ちながら、だんだんとできることを増やしていきます。
目次
- 1.スマホからTV、エアコンを操作するWebシステムの全容と作戦 - 1.1.システム全容 - 1.2.一歩ずつ動かしながら進もう - 1.3.今回開発したデバイスを手に入れよう - 2.WiFi機能つきマイコン開発ボードと赤外線モジュールで赤外線リモコンをWebAPI化する - 2.1.WiFi対応マイコンESP32を搭載したM5Stack Atom Lite - 2.2.赤外線LEDのGroveモジュール - 2.3.Arduinoの開発環境を準備する - 2.4.赤外線信号を受信する - 2.5.赤外線信号を送信する - 2.6.Webサーバを立てる - 2.6.1.IPアドレスを固定する - 2.6.2.WiFiに接続する - 2.6.3.Webサーバを立てる - 2.7.リクエストとレスポンスのJSONを扱って、WebAPIを完成させる - 2.7.1.API仕様 - 2.7.2.ArduinoJsonでリクエストとレスポンスのJSONを操作する - 2.7.3.赤外線送信処理のWebAPI化 - 2.7.4.赤外線受信処理のWebAPI化 - 2.8.ここまでのまとめ - 3.StreamlitでWebAPIへアクセスするアプリを手軽に作成する - 3.1.アーキテクチャー - 3.2.Streamlit環境の構築 - 3.2.1.Python環境の構築 - 3.2.2.Streamlitのインストールと起動 - 3.2.3.VS Codeでデバッガを使ってStreamlitを実行する - 3.3.Streamlitの概念 - 3.4.WebAPIへアクセスするボタンを作る - 3.5.課題点 - 4.ESP32-C3 を使ったオリジナル基板を作ろう - 4.1.欲しいボードを考える - 4.2.ESP32-C3-WROOM-02を使った基板を作る - 4.3.ESP32-C3-WROOM-02ボード作成で気をつけたところ - 4.3.1.ダウンロードモードに入れるようにする - 4.3.2.電源 - 4.3.3.USB信号 - 4.3.4.RGB LED - 4.3.5.モジュールの位置 - 4.3.6.書き込み用のポート - 4.4.実際製作したPCBデータ - 4.5.筆者のPCB設計の入門の仕方 - 4.6.実装 - 4.7.ESP32-C3 に対応したファームウェアを作る - 5.自宅のインテリアに合うケースを作る - 5.1.利用した3Dプリンタと、モデリングツール - 5.2.基板を止められるネジ穴を作る - 5.3.ケースの蓋を作る - 5.4.LEDの光を通す小窓を作る - 5.5.プリントする時の設定 - 5.6.3Dプリントした色 - 5.7.FreeCADの学び方 - 6.Groveデバイスを作ってWebAPI化 - 6.1.Groveとは - 6.2.Groveデバイスを作るためのユニバーサル基板を作る - 6.3.温湿度センサーの導入 - 6.3.1.SHT30とは - 6.3.2.SHT30のGroveデバイス化 - 6.3.3.SHT30のWebAPI化 - 6.3.4.SHT30のStreamlit化 - 6.4.赤外線LEDのオリジナルGrove化 - 6.5.USBキーボードのGrove化してPCを操作 - 6.5.1.PCのスリープ復帰にCH9329を使う - 6.5.2.CH9329のGroveデバイス化 - 6.5.3.CH9329 GroveデバイスのWebAPI化 - 7.自宅サーバを立てて、Streamlitを運用する - 7.1.Single Board ComputerかミニPCを自宅サーバに採用する - 7.2.UbuntuをM.2 MVMe SSDにインストール - 7.3.Webアプリをコンテナ化する - 7.3.1.Streamlitをコンテナ化する - 7.3.2.docker composeで起動する - 7.3.3.systemdでdocker composeを起動する - 7.4.ネットワーク外部からアクセス可能にする - 7.5.ドメインを取得してSSL暗号化を追加する - 7.5.1.ドメインの取得と設定 - 7.5.2.DDNSでグローバルIPの変更に追従する - 7.5.3.Let’s EncryptによるSSL証明書の取得 - 7.5.4.SSLを処理するnginxリバースプロキシの構築 - 7.5.5.ローカルネットワーク内でドメインを使えるようにする - 7.6.Google認証機構を追加する - 7.6.1.Google Cloudの設定 - 7.6.2.OAuth2 Proxyの設定 - 7.6.3.docker composeで構成する - 7.7.筆者の作り込んだ環境 - 7.7.1.Kubernetesをk3sで立てる - 7.7.2.Kubernetesで利用するコンテナイメージの管理 - 7.7.3.家と外からアクセスできるネットワークの構築 - 7.7.4.GitHub ActionsのSelf-Hosted Runnerをより安全にする - 7.7.5.Artifact Registry、Kubernetesに合わせてコンテナをGitHub Actionsで自動ビルド、自動デプロイする - 7.7.6.IoT機器に1つのIPアドレスでアクセスできるプロキシを立てる - 7.8. 他の自宅サーバの使い方
あらまし
IoTデバイスと聞いてまずやりたいと思うのは、自宅の機器をスマホで操作することではないでしょうか。 筆者の場合は、以下のようなユースケースを検討したいと考えていました。 ・複数のリモコンを1つにまとめたい ・複数のリモコン操作を1ボタンですませたい。電源オン+2つ目の外部入力に切替など ・室内温度と外気温の情報を一緒に表示したい ・過去のデータも見られるようにしたい 実際に、赤外線を送信することでスマホから操作できるようにするIoT機器は多数販売されていますが、充分な機能がなかったり、自宅中にその機器を設置するとなるとかなりのコストがかかったりします。 そこで、ESP32という格安のWiFi接続可能なマイコンモジュールが販売されており、ESP32を使って自作する能力を付ければ、自宅中に自作IoTデバイスを設置することが実現的になると考えました。 現在筆者の自宅では、ESP32-C3を使ったIoTデバイスを4箇所に設置し、その操作盤となるWebアプリが自宅サーバが立っています。 これで作ったサービスは非常に便利で、毎日スマホを使って操作しています。 本書は、そこにたどり着くまで必要だった知識と、簡単に作る作戦をまとめたものです。 このうち作戦とは、「IoTモジュール自体のファームウェアは単機能のWebAPIにする」「応用的な操作は、自宅サーバ側でIoTのWebAPIにアクセスする操作盤を作って、実現する」というものです。 これにより、C言語での実装が必要なIoTモジュールのファームウェアのコードを極力少なくし、複雑な操作は自宅サーバ側上で動作するPython、Go、TypeScriptなどを使って実装可能になります。 ハードウェアも、IoTモジュールの原価は600円程度であり、自宅サーバも2万円以下で購入できるもので充分です。 本書は章ごとに分かれていますが、いきなり完成を目指すのではなく、章ごとのステップですぐに利用できる状態を目指しています。 そのため、試すためにも、全部をトライしなければならないと気負わず、1章ずつ試したり飛ばしたりして読み進めていただければと思います。
その他
本文中のサンプルコードは以下で公開しています。 https://github.com/74th/iot-server-book-code