2022年7月17日日曜日

ESP32 Video-Recorder-junior を使ってみる

ESP32-CAM で Motion JPEG 方式のビデオを microSD に保存するプログラムです。

ESP32-CAM Video-Recorder-junior

以下、今回のインストール方法

1.GitHub からファイル一式をダウンロード

リポジトリ全体のzipファイルをダウンロードしました。

2.Arduino IDE でスケッチで開く

 今回はv58を使いました。ダウンロードした中のv58フォルダを の ESP32-CAM-Video-Recorder-junior-58x.ino ファイルを Arduino IDE で開きます。
(※事前にフォルダ名を ino ファイルと同じ名前に変更する必要あり。そのまま Arduino IDE で開いたときの案内に従わず、事前にフォルダ名を変更します。)

3.設定

(※設定はデフォルトのままで良いなら、設定は不要です。WiFiにも接続しません。)
v58フォルダにある config.txt ファイルに、ssid、ssid password を設定する。
その config ファイルを microSD に保存する。
microSD を ESP32-CAM に挿す。

4.準備

 もし ESP32 の開発が初回なら、ESP32 のボードマネージャをインストール
使用するボードの情報が取得できなかったので、今回は「ESP32 dev Module」というボードを選択した。(ESP32 のボードマネージャ インストールは、既に資料が多くあるので省略)

 ライブラリマネージャから、「WiFiManager by tablatronix」をインストール
これは WiFi.h 等のコンパイルエラーで気が付く。
ライブラリマネージャだと、「WiFiManager tzapu」で検索すると見つかります。

 シリアルモニタ ボーレートの値を 115200 bps に変更する。
これはシリアルモニタが文字化けするから気が付く。

 PSRAMの設定を Disabled から Enabled に変更する。
これはエラーログからは分かりにくい。ログの詳細

5.マイコンボードに書き込む。

最後に Hard resetting via RTS pin... と出力されるので、ここでリセットボタンを押すのかと思いきや、実は押さなくてもそのまま録画が始まってます。なのでログを見逃さない為にはシリアルモニタを事前に開いておく。

6.ESP32-CAM のリセットボタンを押す

Arduino IDE のシリアルモニタに Filemanager のURL(http://192.168.*.*:8080/)が出力される。ここから録画したファイルをダウンロード可能。
そのまま録画が開始されるので、録画終了まで30分待ちます。

Hyper-V 環境で Arduino IDE の開発

Hyper-V の仮想環境で Arduino IDE を開発してみる。 

しかし、Hyper-V だと、USB接続でマイコンボードに書き込めない。これは Hyper-V の COMポートは仮想シリアル(COM)ポートであって、物理COMポートと繋がっていないため。 

Hyper-V の仮想COMポートは、物理マシンから仮想マシンへの接続用です。Hyper-V マネージャで COM設定いじっても無理でした。ここは別にドライバなど導入して仮想COMポートと物理COMポートを接続する必要があるが、かなり面倒です。 

ただし、VMware の仮想環境だと普通にマイコンボードと接続できます!

2022年2月21日月曜日

[VBA] Range.Value すると「エラー 2015」

Excel VBA でセルがエラー値だと、Range("A1").Value の結果が「エラー 2015」等となる。
このエラー値は、XlCVError 定数と同じであり、例えば、
「エラー 2015」だと、「#VALUE!」のこと。

この内容を変えたい場合は、

  • 「#VALUE!」と表示したいなら、Range("A1").Text
  • ・エラーとなった数式を表示したいなら、Range("A1").Formula
  • ・エラーを判定したいなら、IsError(Range("A1"))


XlCVError 列挙 (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlcverror

2021年8月29日日曜日

MSAccessのパススルークエリをCSV出力すると、3251エラー

MSAccessのVBAで、DoCmd.TransferText にパススルークエリを指定すると、エラーになる。
以前のMSAccessだと出来ていたはずだが。。
DoCmd.TransferText
  TransferType:=AcTextTransferType.acExportDelim,
  TableName:=パススルークエリ名,
  FileName:=出力ファイル.csv
(結果)3251 この操作は、このタイプのオブジェクトには実行できません。
(環境)MSAccess 2013 (32bit)

この対策として、
・パススルークエリをやめて、リンクテーブルを作成する。
・そのリンクテーブルを SELECT するビューを作成する。
・そのビューを、TransferText に指定する。

2021年7月30日金曜日

HUAWEI P20 lite (ANE-LX2J) をテレビで見る

手段について
1USB Type-C - HDMI 変換ケーブル非対応
2ミラキャスト(Miracast)、クロームキャスト等対応

HDMI 変換ケーブルについて

これは、P20 lite では非対応。
(USB Type-C 2.0 なので、Thunderbolt 3 / DisplayPort over Alternate Mode には非対応)

P20 lite 詳細スペック
https://www.gsmarena.com/huawei_p20_lite-9098.php

ミラキャストについて

これは対応しています。
ただし、動画配信をテレビで見るには、クロームキャストでないと非対応のサービスが多いです。

2021年7月25日日曜日

MS Access ナビゲーション ウィンドウのグループをVBAで変更

Microsoft Access の Navigation Pane にある Group を VBA で変更する方法です。

DoCmd のメソッドで提供されていれば助かるのだが、残念ながら見当たらない。 システムテーブルを直接編集して、CREATE したオブジェクトをグループに追加します。

今回の前提だと、手動で作成したグループに、VBA でオブジェクトを追加します。

使用するシステムテーブルと、その項目

MSysNavPaneGroups で必要な項目
Id Name
一意のId グループ名
(例) 9 グループ1

MSysNavPaneGroupToObjects で必要な項目
GroupID Id Name ObjectID Position
MSysNavPaneGroupsのId 一意のId 任意の項目 MSysObjectsのId 表示順
(例) 9 15 テーブル1 86 1

MSysObjects で必要な項目
Id Name
一意のId 名称1
(例) 86 テーブル1

グループに登録する手順

  1. VIEW 等のオブジェクトを CREATE
  2. MSysObjects から、そのオブジェクトの Id を検索
  3. MSysNavPaneGroups から、追加するグループの Id を検索
  4. MSysNavPaneGroupToObjects から、Idの最大値+1を算出(一意の Id)
    SELECT Max(Id) + 1 FROM MSysNavPaneGroupToObjects
  5. MSysNavPaneGroupToObjects から、Position の連番を算出、開始は1(Position に登録する連番)
    SELECT Nz(Max(Position), 0) + 1 FROM MSysNavPaneGroupToObjects
    WHERE GroupID = [追加するグループの Id]
この結果を元に、MSysNavPaneGroupToObjects にレコードを追加
Flags0(固定値)
GroupID追加するグループの Id
Icon0(固定値)
Id一意の Id
Name追加するオブジェクトの名称(任意)
ObjectID追加するオブジェクトの Id
Position連番

2020年10月10日土曜日

[python] locateCenterOnScreen で TypeError

pyautogui の locateCenterOnScreen では、
アイコンが見つからなかった場合に、Exception が発生しなくなっている。

import pyautogui
x, y = pyautogui.locateCenterOnScreen('icon.png')
pyautogui.click(x, y)


・リファレンス
image が画面にない場合は、ImageNotFoundException
https://pyautogui.readthedocs.io/en/latest/screenshot.html

・実際
Exception は発生せず、None が戻る。
このためサンプルの実装だと、None を x,y(タプル)に代入できず、以下のエラーとなる。
TypeError: cannot unpack non-iterable NoneType object