2025年3月29日土曜日

ACCUTag T11を無音化してみた。

 AirTagと同じサイズのACCUTag T11、自転車用にAirTag用防水ケースを購入してみたので無音化してみた。

電池を取り外すと基板が見えるので、基板とケースの間にコーキングヘラを突っ込んでテコの原理で開いてみたら簡単に外れた。ケースは爪三箇所で止まってる模様。

圧電スピーカーが外装ケースに貼り付けてあって、スプリングで接続されている感じ。これは前回と違ってハンダする必要がないので楽かも。圧電スピーカーにテープを貼ってもとに戻すだけ。今回はカプトンテープを使用した。

前回使用したモデルみたいにスイッチがないので電池を入れておけばあとは勝手に起動するので便利かも。音が出ないので初期化のタイミングがわからないけど、特に通常使用では問題にならなそう。CR2025なのでCR2032のモデルに比べて電池の減り具合が少し心配かな。

コツはいるけどヘラを使えばきれいに分解できて簡単に無音化できるし、AirTagより0.2mmぐらい小さいだけなのでAirTag用防水ケースが利用できたりして便利なのでおすすめかも。アリエクだとセールで500円もしないで購入可能だった。

ちなみにアリエクで購入した防水ケースは本当に防水なのかはわからない(130円だった)

2025年3月23日日曜日

AirTagサイズのACCUTag T11を買ってみた。

 アリエクでセールをやっていたのでまた中華タグをポチってみた。今回はAirTagそっくりなACCUTag T11ってやつ。

キーホルダー付きもあったけど、とりあえずついてない方をポチってみた。420円だった。商品ページにはMFi取得済みって書いてあった。

届いてみるとAirTagそっくり。サイズもAirTagより0.2mm小さいだけで、厚みは同じらしい。
裏面はこんな感じ。反時計回りにスライドさせると電池ボックスが開く感じ。裏面はAirTagと違ってプラスティックなのね。
しっかしこの蓋が開かないやつが一個あった。
開くとこんな感じ。電池についてるシートを取り外すと電源が入る。もしかして開かないやつはこのシートが挟まってる?

電源が入ったら3分以内にiPhoneの探すアプリからその他の持ち物を追加でACCUTagとして認識されて無事つながった。ちゃんと製造元はHaveDeerでモデルがACCUTagになっていた。MFiのデータベースで検索しても入っていたのでMFiなのかも。ちなみにファームウェアバージョンは1.7.25だった。

電源をいれるときの音はペアリングされてるときと初期化状態では違うみたい。iPhoneから削除するときはACCUTagのそばで削除するとACCUTagから音が出る。電源がオフの状態や離れた状態で削除すると再利用できなくなる可能性があるので注意。(一応説明書には5回電池を外したり入れたりを繰り返して、ペアリングされてないときのビープがなったら完了と書いてあった。)

Fineinタグみたいに分解はできなさそうな感じ。そして電池がCR2025なので電池持ちが少しきになる。

2025年1月13日月曜日

recdvbのトラポン移動対応

 ラズパイで使っているPX-BCUDのpt1_dev.hファイルをトラポン移動に対応させてみた。

ちなみに使用しているrecdvbはversion 1.2.1.1

とりあえずBSの部分だけを以下のように書き換えてビルドすれば大丈夫そうだった。変更されてないところも含めてコピペしました。

    {   0, CHTYPE_SATELLITE, 0, 0x4010, "151"},  /* 151ch:BS朝日 */
    {   0, CHTYPE_SATELLITE, 1, 0x4011, "161"},  /* 161ch:BS-TBS */
    {   0, CHTYPE_SATELLITE, 2, 0x4012, "171"},  /* 171ch:BSテレ東 */
    {   1, CHTYPE_SATELLITE, 0, 0x4030, "191"},  /* 191ch:WOWOWプライム */
    {   1, CHTYPE_SATELLITE, 1, 0x4631, "236"},  /* 236ch:BSアニマックス */
    {   1, CHTYPE_SATELLITE, 2, 0x4632, "251"},  /* 251ch:BS釣りビジョン */
    {   2, CHTYPE_SATELLITE, 0, 0x4450, "192"},  /* 192ch:WOWOWライブ */
    {   2, CHTYPE_SATELLITE, 1, 0x4451, "193"},  /* 193ch:WOWOWシネマ */
    {   4, CHTYPE_SATELLITE, 0, 0x4090, "211"},  /* 211ch:BS11イレブン */
    {   4, CHTYPE_SATELLITE, 2, 0x4092, "222"},  /* 222ch:BS12トゥエルビ */
    {   6, CHTYPE_SATELLITE, 2, 0x46d2, "231"},  /* 231ch:放送大学ex */
    {   6, CHTYPE_SATELLITE, 2, 0x46d2, "232"},  /* 232ch:放送大学on */
    {   6, CHTYPE_SATELLITE, 2, 0x46d2, "531"},  /* 531ch:放送大学ラジオ */
    {   6, CHTYPE_SATELLITE, 0, 0x40d0, "141"},  /* 141ch:BS日テレ */
    {   6, CHTYPE_SATELLITE, 1, 0x40d1, "181"},  /* 181ch:BSフジ */
    {   7, CHTYPE_SATELLITE, 0, 0x40f1, "101"},  /* 101ch:NHKBS1 */
    {   7, CHTYPE_SATELLITE, 0, 0x40f1, "102"},  /* 102ch:NHK-BS1臨時 */
    {   7, CHTYPE_SATELLITE, 1, 0x48f3, "200"},  /* 200ch:BS10 */
    {   7, CHTYPE_SATELLITE, 2, 0x40f2, "201"},  /* 201ch:BS10スターチャンネル */
    {   9, CHTYPE_SATELLITE, 0, 0x4730, "245"},  /* 245ch:J SPORTS 4 */
    {   9, CHTYPE_SATELLITE, 1, 0x4731, "242"},  /* 242ch:J SPORTS 1 */
    {   9, CHTYPE_SATELLITE, 2, 0x4732, "243"},  /* 243ch:J SPORTS 2 */
    {   9, CHTYPE_SATELLITE, 3, 0x4733, "244"},  /* 244ch:J SPORTS 3 */
    {  10, CHTYPE_SATELLITE, 0, 0x4750, "252"},  /* 252ch:WOWOWプラス */
    {  10, CHTYPE_SATELLITE, 1, 0x4751, "255"},  /* 255ch:日本映画専門チャンネル */
    {  10, CHTYPE_SATELLITE, 2, 0x4752, "234"},  /* 234ch:グリーンチャンネル */
    {  11, CHTYPE_SATELLITE, 0, 0x4770, "256"},  /* 256ch:ディズニー・チャンネル */
    {  11, CHTYPE_SATELLITE, 1, 0x4971, "265"},  /* 265ch:BSよしもと */
    {  11, CHTYPE_SATELLITE, 2, 0x4973, "260"},  /* 260ch:BS松竹東急 */

こんな感じでrecdvbのソースのフォルダ内のpt1_dev.hのBSの部分だけ書き換えて

make clean
make
sudo make install 

でrecdvbの更新が完了。

あとはMirakurunのBSの部分だけチャンネルをスキャンしておいた。

curl -X PUT "http://127.0.0.1:40772/api/config/channels/scan?type=BS&setDisabledOnAdd=false&refresh=true"
curl -X PUT "http://127.0.0.1:40772/api/config/channels/scan?type=CS&setDisabledOnAdd=false&refresh=true"
sudo mirakurun restart

これでBSのトラポン移動対応完了。

Windows側でTvTestでリアルタイム視聴のBonDriverを入れてる場合はTvTest側で再スキャンかけないと反映されないので注意かも。

2025年1月4日土曜日

ESP32でSTAとAPを同時に起動してWiFi設定。

 ESP32でWiFiを設定するのにWiFiマネージャーのライブラリとか色々試してみたけど、STAとAPを同時に起動してスキャンできないか試してみた。
毎回いろんなスケッチにバラバラで実装して入れるのも面倒なのでメモ的な…

STAとAPを同時に起動して、STAに繋がったらAPを無効にする感じにしてみた。一旦STAに繋がったら自動再接続を動かすようにして、再起動しない限りはAPに繋がらない。たまに長時間動かしたりするとWiFiが切断されていてそれ以降繋がらない事があるので対策をしてみた感じ。

停電とかでWiFiルーターよりもESP32が先に立ち上がってしまった場合もこれならAPモードを起動しながらSTAでWiFiを探し続けてくれるので、勝手にAPモードに切り替わってずっと待ってるってことがなくなる。

#include <WiFi.h>
#include <WebServer.h>
#include "esp_mac.h"

bool apStopped = false;
WebServer server(80);

String generateWiFiPage() {
  Serial.println("Scanning networks...");
  if (!apStopped) {
    WiFi.mode(WIFI_AP_STA);
    WiFi.disconnect(true);
    delay(100);
  }
  int n = WiFi.scanNetworks(false, false);
  Serial.printf("Found %d networks\n", n);
  String list = "";
  if (n == 0) {
    list = "<option>No networks found</option>";
  } else {
    for (int i = 0; i < n; i++) {
      list += "<option value='" + WiFi.SSID(i) + "'>";
      list += WiFi.SSID(i) + " (" + String(WiFi.RSSI(i)) + "dBm)";
      list += "</option>";
    }
  }
  WiFi.scanDelete();
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>"
                "<h3>WiFi Setup</h3>"
                "<form action='/save'>"
                "SSID: <select name='ssid'>"
                + list + "</select><br><br>"
                         "Password: <input name='pass' type='password'><br><br>"
                         "<input type='submit' value='Save'>"
                         "</form>"
                         "<br><button onclick='location.reload()'>Rescan</button>"
                         "</body></html>";
  return html;
}
void handleSave() {
  String ssid = server.arg("ssid");
  String pass = server.arg("pass");
  WiFi.begin(ssid, pass);
  server.send(200, "text/html", "<h3>Saved</h3>");
}

void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
  switch (event) {
    case ARDUINO_EVENT_WIFI_STA_CONNECTED:
      Serial.println("STA connected to AP!");
      if (!apStopped) {
        WiFi.softAPdisconnect(true);
        WiFi.mode(WIFI_STA);
        apStopped = true;
        Serial.println("AP stopped after STA connection");
      }
      break;
    case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
      if (apStopped) {
        Serial.println("STA disconnected, attempting reconnect...");
        WiFi.disconnect(true);
        WiFi.mode(WIFI_STA);
        WiFi.begin();
      }
      break;
    default:
      break;
  }
}

void setup() {
  Serial.begin(115200);
  uint8_t mac[6];
  esp_read_mac(mac, ESP_MAC_WIFI_STA);
  char apName[20];
  sprintf(apName, "ESP32-%02X%02X", mac[4], mac[5]);
  Serial.print("AP SSID: ");
  Serial.println(apName);
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(apName);
  Serial.println("AP started");
  WiFi.begin();
  WiFi.onEvent(WiFiEvent);
  server.on("/", []() {
    server.send(200, "text/html", generateWiFiPage());
  });
  server.on("/save", handleSave);
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
  if (WiFi.status() == WL_CONNECTED) {
    Serial.print("STA IP: ");
    Serial.println(WiFi.localIP());
  }
  delay(5000);
}

とりあえずモバイルルーターとかで試してみたんだけどちゃんと動いてそう。

ESP32の電源を入れてから3分後にモバイルルーターを入れてもちゃんと勝手に繋がってくれてそう。途中でモバイルルーターを再起動してもちゃんと再接続されるし。

SSIDを決め打ちでスケッチの中に入れておきたくないときとか、いろんな環境で使いたい場合はこっちのほうが便利ね。


2024年12月30日月曜日

USBツインチャージャーをUSBハブに改造してみた

 100円ショップのセリアに行ったらUSBツインチャージャーがまだ売っていたので買ってきた。USBのメス端子取り用に前に買った記憶が…

パッケージは昔と変わって袋になっていた。
パソコン専用らしい。2ポートUSB充電器とかも売っているのに未だに使う人いるのかね…
充電遅いだろうし。
基板が紙基板じゃなくなくなっていて、しかも両面になってる。蓋は接着されてないのでカッターみたいなものを隙間に入れて少しずつ開ければ簡単に開けることができる。
メス側はデータ線の部分に分圧抵抗が入っていて、充電専用になっていた。

同じ見た目でUSB2.0ハブも出ていたり、更にはOTG対応のやつも売っていたりするのでこの前購入したSL2.1Aの余りを利用してUSBハブ化してみることに。

まずは分圧抵抗8個全部取っ払う。
そんでもってSL2.1Aにクリスタルを直結して、さらには10uFコンデンサを3つ直接つけてしまった。
あとは各端子に前回の回路図同様にポリウレタン銅線で配線した。
空中配線なんだけど各USBの配線はD+とD-を近づけて配線するようにした。逆にポートごとには離したほうがいいかも?

とりあえずこれで更に小さなUSBハブが作れたのでLuckfox用に使おうと思う。TypeC対応にしてOTGもつければもっとLuckfoxをスマートに使えるようになりそう。

2024年12月29日日曜日

USB1.1ハブをUSB2.0ハブに改造してみた。

 この前購入した3ポートUSBハブが実はUSB1.1 Full Speed(12Mbps)までしか対応していなかったのでUSB2.0 High-Speed(480Mbps)に改造してみた。確かにUSB2.0 Full Speedとして認識したら気が付かないよこれ…

気がついたのはUVC対応のWebカメラ、C270をLuckfox Picoに繋いだときにv4l2-ctlで対応解像度を調べたときに800x600までしか出なかった(いつも1280x720まで出ていたのに…)
C270はUSBのスピードで対応解像度を変更してるのかな。

このUSBハブは同じ形状で、USB2.0が3ポートのものと、1ポートだけUSB3.0ポートのものがあって、前にUSB2.0のみ対応のやつを買ったときはちゃんとUSB2.0対応のSL2.1AというコントローラICが乗っていた。今回購入したUSB3.0版は、USB1.1のMW7211AというICだった。調べてみるとHS8836Aが乗ってるバージョンもあったみたいで、こちらはUSB2.0 High-Speed対応のICらしい。どちらもUSB3.0は1ポートしか無いのでUSB2.0の配線だけハブICを経由して、ほかはPC側の端子に直結されていた。

ちなみにMW7211AとHS8836Aはほぼピンコンパチで、MW7211の9番Pinと12番PinはNCになっている。なのでHS8836A(480Mbps)用に基板を作ればMW7211A(12Mbps)も乗っけられる…
今回購入したハブもそんな配線になっていて、そのままHS8836Aを乗っければ動きそう。ほかのMW7211A搭載ハブとかだとR1の100kΩが未実装だったりするけど、今回の基板はそのまま載ってるし。もともとHS8836Aで生産していたけどバレないから安いMW7211Aに変更したのかな…コンデンサも測定すると10uF品が実装されるし。(MW7211Aの推奨回路では4.7uF)

HS8836Aをそのまま買ってきて乗っけても良かったんだけど、他のUSB2.0ハブが12MHzのクリスタルを外付けしてるのに内蔵クロックなのが気になったので前のハブと同じSL2.1Aを購入してみた。こっちのほうが安かったし。アリエクで5個で145円(送料込み)
クリスタルはジャンクボードから取り外した2.5x2.0のやつ。4PinあるけどECSのデータシートとか見ると対角のGNDピンはメタルカバーにつながってるだけみたいなのでとりあえずクリスタルの2pinだけ繋いだ(ディスクリートだとそうだしね)

SL2.1Aは出力側はMW7211Aと同じなんだけど、右側が結構違うのでパターンカットとかジャンパーしないといけないのが面倒かな。

クロックはそのままICに直接ハンダしてしまった。
使わないピンはカプトンテープを基板側に貼り付けて対応。USBの入力のパターンは一個ずらさないといけなかったので適当な導線の1本だけ取り出してハンダした。

一応10uFは秋月の2012 6.3V 10uFが残っていたので全部乗せ換えておいた。電源の保護用と思われる抵抗(4.7Ω)もそのまま活用できた。

USBで繋いでみると無事認識。VID_1A40&PID_0101ってなってるので前回購入したUSB2.0バージョンといっしょになった。これでHigh-Speedが使えるようになったのでようやくLuckfoxで使うことができる!(WiFiもUSBドングルを使っているのでさすがにUSB1.1は…

ついでにUSBポートのシールド部分も全部ハンダされてなかったので追加でハンダして完成。これで多少は頑丈になったかな。

2024年12月28日土曜日

KTV-FSPCIE(MX版)を追加購入してみた。

 KEIANのKTV-FSPCIEのMX版の中古が出ていたのでもう一枚ポチってみた。

シリアルナンバーがわからなかったけど、チューナICとしてMXL136が載ってるタイプのKTV-FSPCIEは見た目でわかるしISDBT-6005_V1Bって刻印が入っていたので大丈夫だろうということで…
R19も除去済みみたいだったし。

届いてみるとシリアルナンバーはK1108だった。製造コードも1139(2011年39週)で前回購入したK1107の2ヶ月後ぐらいっぽい。見た目は全く同じだった。USBで接続するとVID_0511&PID_0029ってなっていたのでKTV-FSUSB2N化済みだった。念の為R19には0Ω抵抗をはんだ付けして書き込み禁止に戻した。

USBケーブルはマルツでZL2001-4PSを買ってきて自作した。バッファローコクヨサプライのBSW3K03Hっていう昔のWebカメラのUSBケーブルをカットして作ろうと思ったら中身のケーブルの色が通常のUSBケーブルとまったく違う…
テスターで測定したらオレンジがVBUS、緑がD-、青がD+、白がGNDという変な配色。通常はVBUSは赤、D-が白、D+が緑、GNDが黒なので特に緑がややこしい。とりあえず付属のケーブルを見ながら作成した。写真はGNDが黒になっているけど、シールド線と白いケーブルを束ねて熱収縮したから黒くなってる。
通常のUSBケーブルの配色で作りたい人は前回の写真を参考にするか、付属のケーブル通りに配線すれば良い。

とりあえずWindowsで動作確認。デバイスドライバはZadigでインストールした。BonDriver_FSUSB2Nで無事うごいた。あとはラズパイの録画環境に追加してBonDriver_Mirakurunで動かそうかな。

消費電力を測定してみたらUSBで指した瞬間は40mA、テレビ視聴中は170mA、TvTestを終了すると10mAまで下がった。一回起動してから終了するとスタンバイモードにでもなるのかな?この価格帯ではやはりCATVパススルー環境ではかなり感度が良いのでMX板一択だなぁ。