2026年7月19日日曜日

OpenWrtにTailscaleをインストールしてみた。

 E8450用のUBIバージョンのOpenWRTをインストールしたWRC-X3200GST3にTalescaleをインストールしてみた。容量がたくさんあるのでいろいろなアプリケーションがインストールできそう。

とりあえずコマンドプロンプトから
ssh root@192.168.1.1

でOpenWRTのSSHにログオンして

apk update
apk add tailscale

でインストールできる。今回使ってるOpenWRTのバージョンは25.12.5です。OpenWRT 25.12からapkコマンドになっているのね…
インストール後、Disk Spaceを11.82MBぐらい消費した。

tailscale up

でTalescaleを起動して、うまく起動するとURLが表示されるのでPCなどからアクセスしてTalescaleにログオンする。
デバイスがうまく登録できるとSuccessとでてログオン完了。

とりあえずこれでTalescaleのネットワークに接続されたんだけど、今回はExit nodeとして設定してみる。

apk add ethtool
ethtool -K lan1 rx-gro-list off ethtool -K lan1 rx-udp-gro-forwarding on
tailscale up --advertise-exit-node --netfilter-mode=off

これでTailscaleのコンソールからExitノードとして設定できるようになる。ethtoolの設定2行はCPU負荷を軽くするための設定のようなんだけど起動のたびに戻ってしまうようなのでこの2行はうまく行ったらStartupに入れておくと良い。ちなみにlan1なのはE8450化するとlan1がWANなので…WANにつながってるインターフェースを設定する感じ。

次にTalescaleのコンソールの設定とファイアーウォールの設定。Talescaleのコンソールを開いて

openwrtのデバイスのEdit route settingsを開いて
Use as exit nodeにチェックを入れる。

次にOpenWRTの方に戻ってWebUIで設定してみた。

Network→Interfaceのところを開いてAddでtalescaleを追加。

とりあえずこの設定のあとに出てくる画面はデフォルトのままで保存した。これを作っておかないとファイアーウォールの設定が出来ないので…

次にNetwork→Firewallを開いて、Addで

こんな感じにWAN側にパケットを通せるようにして保存。
あとはSave & Applyをする。

これでiPhone側からTalescaleに接続してEXIT NODEをタップするとopenwrtが選べるようになってるはず。なぜか繋がらないときはifconfigをしてtalescale0のIPアドレスを確認してみると良いかも。ipv4のアドレスが存在してなくて再起動したらつながった…
とりあえず最後に再起動するとよいのかも。(Interfaceの設定を変更したりするとどうしてもEXIT NODEが繋がらなくなるんだけど再起動で治る)

前にDD-WRTでWireGuard設定したときよりも簡単かもしれない。これで海外に行ったときも安心だな。

LAN内のデバイスに接続できるようにするのは後日やってみようっと。

2026年7月12日日曜日

WRC-X3200GST3にE8450用OpenWRTを入れて復活。

 電源が入らないというジャンクで出品されていたWRC-X3200GST3だけども、とりあえずRAMで起動して問題ないことがわかったし、Flashも実は問題なさそうだったのでどうにかFlashから起動できるように改造してみた。

といってもFlashの中身が飛んだ状態で売られていたジャンク品なのでPreloaderやubootのバックアップはないし…

ということで他の機種のデータを使えないか試してみた。MT7622搭載デバイスのデータで色々試してみたんだけど、他の機種だと1ddrとかの制約があったのでE8450化してうまくフラッシュから起動することができるようになった。

Linksys E8450のリカバリ方法をそのまま実行すればUBIバージョンのLinksys E8450になることがわかった。

実行したのはLinksys E8450のリカバリのRecovery instructions - Reload OpenWRT 24.10 from scratchのところ。

WRC-X3200GST3の方はmtk_uartbootでE8450のデータでブートするところまでやって、Ctrl+Cで

MT7622> <INTERRUPT>
MT7622> 

のところまでやっておく。あとTFTPでデータを転送するために

setenv ethaddr 00:11:22:33:44:55
setenv eth1addr 00:11:22:33:44:56
setenv serverip 192.168.1.254
setenv ipaddr 192.168.1.1

まで設定を済ませておく。これで本体側の準備はOK

PC側もファイルをダウンロードしてファイル名を変更しておく。
openwrt-mediatek-mt7622-linksys_e8450-ubi-preloader.bin
openwrt-mediatek-mt7622-linksys_e8450-ubi-bl31-uboot.fip
openwrt-mediatek-mt7622-linksys_e8450-ubi-initramfs-recovery.itb
factory.bin

これらのファイルをダウンロードしておく。ダウンロードしたファイル名とリンクのファイル名が違うので、リンクのファイル名に直しておく。

ファイル名を上のリンクどおりに揃えたらTFTPサーバの直下に置いておく。

ubi detach; mtd erase ubi && ubi part ubi
mw $loadaddr 0xff 0x1f000
run boot_tftp_write_bl2
run boot_tftp_write_fip
tftpboot 0x48000000 factory.bin

ここでRAM上に読み込んでいるfactory.binにMACアドレスを書き込む。もしかしたらfactory.binを編集してからTFTPで流し込んでもいいのかも。順番はWAN、LAN、2.4GHz、5GHzなんだけどラベルに貼ってあったMACアドレスがWANらしいのでそれを基準に入れてみた。ラベルのSSIDはWAN-1の値だったのでそこから推測。これをやっておかないとMACアドレスがランダムになってしまう。

mw.b 0x4807FFFA 0x04
mw.b 0x4807FFFB 0xab
mw.b 0x4807FFFC 0x18
mw.b 0x4807FFFD 0xc0
mw.b 0x4807FFFE 0x7c
mw.b 0x4807FFFF 0x24

mw.b 0x4807FFF4 0x04
mw.b 0x4807FFF5 0xab
mw.b 0x4807FFF6 0x18
mw.b 0x4807FFF7 0xc0
mw.b 0x4807FFF8 0x7c
mw.b 0x4807FFF9 0x25

mw.b 0x48000004 0x04
mw.b 0x48000005 0xab
mw.b 0x48000006 0x18
mw.b 0x48000007 0xc0
mw.b 0x48000008 0x7c
mw.b 0x48000009 0x23

mw.b 0x48005004 0x04
mw.b 0x48005005 0xab
mw.b 0x48005006 0x18
mw.b 0x48005007 0xc0
mw.b 0x48005008 0x7c
mw.b 0x48005009 0x22

MACアドレスを書き込んだら念のため呼び出してみる。

md.b 0x4807FFFA 6
md.b 0x4807FFF4 6
md.b 0x48000004 6
md.b 0x48005004 6

うまく書き込めていたらリカバリモードで起動する。

ubi create factory $filesize static && ubi write $loadaddr factory $filesize
run boot_tftp_recovery

これでOpenWRTがリカバリモードで起動するはず。E8450とWRC-X3200GST3のLANポートの割り当てが少し違うので注意。WRC-X3200GST3のWANはE8450でいうLAN1で、WRC-X3200GST3のLAN1はE8450でいうWANになっている。なのでPCをつなぐときはWRC-X3200GST3のLAN2~4かWANに繋いでおかないと繋がらない。とりあえずPCをLAN4に繋いで192.168.1.1に接続。SystemのBack up/Flash Firmwareからopenwrt-25.12.5-mediatek-mt7622-linksys_e8450-ubi-squashfs-sysupgrade.itbにアップデートして完了。

これでSPI Flashにうまく書き込まれてるようで普通に起動するようになった。E8450として起動するのでPower LEDがついていない。2.4GHzのLEDは点灯している。

cat /sys/class/gpio/gpiochip*/base | head -n1

が512だったのでPower LED(緑)がGPIO 49ということなので

echo "561" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio561/direction
echo "1" > /sys/class/gpio/gpio561/value

でPowerを緑色で点灯することが出来た。スタートアップスクリプトにでも入れておこう。

#Power Green
echo "561" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio561/direction
echo "1" > /sys/class/gpio/gpio561/value

#2.4GHz LED
echo "597" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio597/direction
echo "1" > /sys/class/gpio/gpio597/value

#5GHz LED
echo "601" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio601/direction
echo "1" > /sys/class/gpio/gpio601/value

これで起動するとそれなりにLEDが光る。ちなみにResetとWPSボタンのGPIOは同じなのでそのまま動くはず。

とりあえずLAN1をWANに設定して、WANをbr-lanに含める設定をしてみた。

MT7915もちゃんと認識してるし、スキャンも出来てるので使えそう。

シリアルコンソールで見てたらubootの方のMACアドレスが飛んでるのでシリアルコンソールからubootに入ってMACアドレスを設定してみる。カウントダウンが始まったあたりでCtrl+Cを押して、MT7622>ってなったら

setenv -f ethaddr 04:ab:18:c0:7c:24
saveenv

のようにスタンドに書いてあったMACアドレスを入力して保存してみた。これでブートローダー起動時のNo MAC Addressは消えた。

とりあえず文鎮化していたジャンクなWRC-X3200GST3をE8450として蘇らせることが出来たっぽい。LEDの設定とかちゃんとすればそこそこ使えるんじゃないかな。

あとおそらく前オーナが文鎮化させてしまった原因の可能性であるoverlay領域の少なさもE8450化で解決しているような。WRC-X3200GST3のOpenWRTだと8MBぐらいしか無いDisk SpaceもE8450化したことによって86.91MBもあるし。大きなモジュールもインストールできちゃう。

MACアドレスもfactory.bin転送後にラベルと合わせたのでちゃんと認識されている。

とりあえずだいぶ安くゲット出来たジャンク品が普通に使えるようになったので何より。いまのところ問題が出ていないけどGPIOがどこにつながってるかわからないので問題が起きても自己責任で。

1000円未満のジャンクにしてはだいぶ遊べたし勉強になった。12V 1.5AのACアダプタのほうが高い…

2026年7月11日土曜日

起動しないWRC-X3200GST3のFlashを覗いてみる

 この前購入したジャンクのWRC-X3200GST3-Bなんだけど、Flashメモリを剥がす前にとりあえずmtk_uartbootからinitramfs用なOpenWRTを起動できるのでそこからFlashメモリをいじってみることに。フラッシュメモリが壊れたのか、前オーナーがフラッシュメモリ飛ばしてしまったからジャンクとして売り飛ばしただけなのかを確認してみることに。

まずは前回同様に別なモデルのFIPを使ってmtk_uartbootで起動して、TFTPでinitramfsのOpenWRTを流し込む。openwrt-25.12.5-mediatek-mt7622-bananapi_bpi-r64-snand-bl31-uboot.fipでも起動することが出来た。

インターネットに繋ぎたいのでWANにインターネットに繋がってるLANケーブルを接続。

mtd-rwをインストールする。

インストール完了したらSSHで接続し、

insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1

mtdの書き込みを有効にする。これでdmesgを見てみると

[ 6014.438259] mtd-rw: mtd0: setting writeable flag
[ 6014.493693] mtd-rw: mtd1: setting writeable flag
[ 6014.549047] mtd-rw: mtd2: setting writeable flag
[ 6014.604385] mtd-rw: mtd3: setting writeable flag
[ 6014.659727] mtd-rw: mtd4: setting writeable flag
[ 6014.715091] mtd-rw: mtd7: setting writeable flag
[ 6014.770468] mtd-rw: mtd8: setting writeable flag
[ 6014.825809] mtd-rw: mtd9: setting writeable flag
[ 6014.881170] mtd-rw: mtd10: setting writeable flag

のようにmtdパーティションが書き換え可能になる。

試しに書き換える前になんか入ってるのか確認してみる。

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00020000 "Preloader"
mtd1: 00040000 00020000 "ATF"
mtd2: 00080000 00020000 "u-boot"
mtd3: 00080000 00020000 "u-boot-env"
mtd4: 00100000 00020000 "factory"
mtd5: 00600000 00020000 "kernel"
mtd6: 01300000 00020000 "ubi"
mtd7: 00500000 00020000 "tm_pattern"
mtd8: 00100000 00020000 "tm_key"
mtd9: 00f00000 00020000 "user_data"
mtd10: 04500000 00020000 "reserved"
root@OpenWrt:~# hexdump -C -n 64 /dev/mtd0
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000040
root@OpenWrt:~# hexdump -C -n 64 /dev/mtd1
00000000  55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 02  |UBI#............|
00000010  00 00 08 00 00 00 10 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 40 93 2d 8c  |............@.-.|
00000040
root@OpenWrt:~# hexdump -C -n 64 /dev/mtd2
00000000  55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 01  |UBI#............|
00000010  00 00 08 00 00 00 10 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 7f 58 53 19  |.............XS.|
00000040
root@OpenWrt:~# hexdump -C -n 64 /dev/mtd3
00000000  55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 01  |UBI#............|
00000010  00 00 08 00 00 00 10 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 7f 58 53 19  |.............XS.|
00000040
root@OpenWrt:~# hexdump -C -n 64 /dev/mtd4
00000000  55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 01  |UBI#............|
00000010  00 00 08 00 00 00 10 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 7f 58 53 19  |.............XS.|
00000040
root@OpenWrt:~#

なんかおかしい…
よく確認してみると128KiBごとにUBI#が並んでる。ユーザー容量増やそうとして他のパーティション飛ばしてしまったのでは…

試しに適当なデータを焼いても読めているので、Flashは問題ないかも。

純正のPreloaderとかubootとか持ってないしどうしようかなぁ
RAM上で問題なく起動できるのでもったいない。
どうせフラッシュの中身空っぽなんだし他のデバイスのファームウェアでも焼いてみるか…

2026年7月8日水曜日

WSR-A2533DHP2をOpenWRT化してみた。

 WRC-X3200GST3をいじっていてMediaTekのCPUだとJTAGとか使わなくてもunbrick出来そうなので便利そう。ということで安く売っていたWSR-A2533DHP2を発見したので買ってみた。1300円ぐらいだった。

製品名が書いていなかったんだけど、WSR-2533DHP2かWSR-A2533DHP2じゃないかなと思ってポチったらWSR-A2533DHP2の方だった。初期化もされてなかった…(ファームウェアは1.23だった。)

OpenWRT化する前にWSR-A2533DHP2のフラッシュメモリをバックアップするために、RAM上でOpenWRTを起動してみる。

WSR-2533DHP2のFirmware SelectorからKERNELをダウンロード。このファイルをlinux.trx-recoveryに名前を変更しておく。

PCの有線LANを192.168.11.2に固定して、Tftpd64でTFTPサーバを立てて先程のファイルが入ったフォルダを指定する。

LANケーブルでPCと接続して、AOSSボタンを押しながらWSR-A2533DHP2の電源を入れるとTFTPサーバからファイルが転送される。もしされないときはファイアーウォールを一旦オフってみるといいかも。

転送が完了すると自動でOpenWRTで起動してくるので、PC側のIPアドレスの固定を外して自動取得してからブラウザで192.168.1.1に接続するとOpenWRTの画面が出るはず。(TFTPブートまでは電源ランプが点灯しているけど、ファームウェアの転送終わると点滅して起動が始まる。また点灯したら起動完了)

System の Backupを開いてSave mtdblock contentsのところでとりあえず全部ダウンロードしておく。

これでバックアップは完了。このままファームウェアをOpenWRTにしても良い気がするけども一旦終了してBuffaloの純正の画面からやってみることに。

お次はOpenWRT化。Buffaloの純正のファームウェアアップデート画面から

WSR-2533DHP2のFirmware SelectorでダウンロードしたFACTORY-UBOOTのbinファイルでアップデートするだけ。FACTORY-UBOOTは純正ubootからアップデートするためのファイルなのでWebアップデートは使わないほうがいいらしいんだけども、WSR-A2533DHP2でFACTORYを使うと不正なファイルとして認識してしまうのでWSR-A2533DHP2の場合はFACTORY-UBOOTを使用しないとアップデートが進まない。

Factoryイメージを使うことによってすごく簡単にOpenWRT化できた…
今までDD-WRTばっかり使っていたので色々遊んでみようと思う。

2026年7月4日土曜日

WRC-X3200GST3-Bのジャンクを買ってみた

 ELECOMのWRC-X3200GST3-Bのジャンクが安かったので買ってみた。電源が入らないとしか書いてなかった。電源回路か、OpenWRTを焼いてミスったかわからなかったけどとりあえず開けてみる。

ピンヘッダがもうすでにハンダされていたので(GNDが芋ハンダになってたけど)シリアルに繋いで起動すると(baudrateは115200)

F0: 102B 0000
F6: 3800 00A0
F3: 1006 0037
F3: 4000 00E0
F5: 480A 0031
F5: 480A 0031
00: 1005 0000
F6: 3800 00A0
F3: 4000 00E0
F5: 480A 0031
F5: 480A 0031
01: 102A 0001
02: 1005 0000
BP: 0000 00C0 [0001]
T0: 0000 057C [000F]
System halt!

という表示が出てLEDすら光らない。おそらくSPI Flash(W25N01GVZEIG)の中身がうまく読み込めてなさそう。LEDが紫色とかで光ってればおそらくubootは生きているので簡単に復旧できるんだろうけど、LEDすら光っていないのでPreloaderすら飛んでそう。

このSPI Flash、SLCな上に1Gbit(128MB)という意外と高級なのが載ってる。もはやこのSPI Flashだけでもとが取れていそう。そのままLuckFoxとかで使えそう。

SPI Flash自体は基板の反対側に載ってるんだけど、いろんなFlashメモリが使えるようにパターンが存在していて、表面のSOP8のパッドにハンダした形跡があった。ここからFlashメモリをリカバリしようとしていたのかな?

とりあえずmtk_uartbootを使ってリカバリできるか試してみることに。

シリアルコンソールを繋いだまま、ルーターの電源を切って

./mtk_uartboot.exe -s COM4 --aarch64 -p bl2-mt7622-1ddr-ram.bin -f openwrt-25.12.5-mediatek-mt7622-linksys_e8450-ubi-bl31-uboot.fip

とコマンドを打ったらルーターを起動する。

mtk_uartboot - 0.1.1
Using serial port: COM4
Handshake...
hw code: 0x7622
hw sub code: 0x8a00
hw ver: 0xcb00
sw ver: 0x100
Baud rate set to 460800
sending payload to 0x201000...
Checksum: 0xfcf1
Setting baudrate back to 115200
Jumping to 0x201000 in aarch64...
Waiting for BL2. Message below:
==================================
NOTICE:  BL2: v2.10.0   (release):v2.10.0-mtk
NOTICE:  BL2: Built : 13:17:01, Mar  1 2024
NOTICE:  WDT: Cold boot
NOTICE:  CPU: MT7622
NOTICE:  WDT: disabled
NOTICE:  Starting UART download handshake ...
==================================
BL2 UART DL version: 0x10
Baudrate set to: 921600
FIP sent.
==================================
NOTICE:  Received FIP 0xfdcd4 @ 0x40400000 ...
==================================

fipファイルがWRC-X3200GST3用のがなかったのでとりあえずE8450(SPI FlashはFidelix FM35Q1GA-IB搭載らしい)ので起動。

これであとはまたシリアルコンソールのツールに戻って、MAC addressがないとかエラーが出るのでCtrl+Cを連打してとめる。

MT7622> <INTERRUPT>
MT7622> 
MT7622> nand read 0x46000000 0x0 0x8000000
'spi-nand0' is now active device
Reading from 0x0 to 0x7ffffff, size 0x8000000 ...
SPI-NAND: ECC: 1 bitflip corrected in page 0 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 1 sect 0
SPI-NAND: NFI calibration failed. Original sample delay: 0x28
SPI-NAND: ECC: 1 bitflip corrected in page 62 sect 0
SPI-NAND: ECC: 1 bitflip corrected in page 63 sect 0
SPI-NAND: ECC: 1 bitflip corrected in page 64 sect 0
SPI-NAND: ECC: 2 bitflips corrected in page 65 sect 0
SPI-NAND: ECC: 1 bitflip corrected in page 66 sect 0
SPI-NAND: ECC: 3 bitflips corrected in page 67 sect 0
SPI-NAND: ECC: 4 bitflips corrected in page 68 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 69 sect 0
SPI-NAND: NFI calibration failed. Original sample delay: 0x28
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 70 sect 0
SPI-NAND: NFI calibration failed. Original sample delay: 0x28
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 71 sect 0
SPI-NAND: NFI calibration failed. Original sample delay: 0x28
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: ECC: Uncorrectable bitflips in page 72 sect 0
SPI-NAND: NFI calibration failed. Original sample delay: 0x28
Succeeded
MT7622> 
MT7622> 

そんもってNANDフラッシュをRAMに読み込んで転送しようとしたらtftpのコマンドがなかったのでmd.bコマンドをつかってPythonツールを作ってちまちま読み込んでみた。#UBIが先頭に入っていて、ファイルの中間にも同じのが入っていてあとは00とFFで埋まってる…

これFlashメモリが死んでるのか、UBIFSの操作ミスって全体的にフォーマットしてしまっているのか…

このままRAMにファームウェアを読み込んでOpenWRTを起動させてみる。

setenv ethaddr 00:11:22:33:44:55
setenv eth1addr 00:11:22:33:44:56
setenv serverip 192.168.1.254
setenv ipaddr 192.168.1.1
tftpboot 0x4A000000 openwrt-25.12.5-mediatek-mt7622-elecom_wrc-x3200gst3-initramfs-kernel.bin
bootm 0x4A000000

PCのIPを192.168.1.254にしてTFTPサーバを起動させて、initramfs用のカーネルを読み込んで起動してみた。

RAM上で起動はできた。普通にLANのLEDも点滅してるし…
ハードウェアは問題なさそうなので、Preloaderとかuboot、ファームウェアを書き込めれば普通に使えそう。

ひとまずフラッシュメモリ生きてるかどうか確認しないと。

今度一旦剥がしてみるか…

2026年6月21日日曜日

楽天の株主優待SIMが届いた。

 知り合いが楽天の株主優待をおすすめしてたので、去年755円ぐらいのときに100株購入していた。株主優待のハガキが届いたのが3月でSIMがようやく届いた。

ハガキから株主優待の申請を行い、申込完了メールが来たのが3/13

すぐにeKYCでマイナンバーカードで本人確認を行って、本人確認完了メールが来たのが3/23

株主優待のSIMカード発送メールが来たのが6/21で届いたのが6/21という感じ。発送メールに書かれていたヤマトのトラッキング番号を見ると6/20には発送されていたみたい。

A4の紙にSIMカードが貼られてるだけで、手順はQRコード見てねって感じ。
月30GBなのでスマホだけなら結構余るかも。

8/1がご利用開始基準日になってるけど、届いたら対応デバイスに差し込めばアクティベートされて使えるようになるらしい。あとは電話用のアプリをインストールしてSIMカードの電話番号を入れるだけでアプリから電話もできるらしい。(iPhoneの設定画面から見れた)

とりあえずなので物理SIMにしておいて、今まで契約していたサブのDMMモバイルの1Gプランを解約しようと思う。出張とかでUQの電波が繋がらないところとかで使うぐらいだったので…
海外出張時に楽天モバイルのローミングが使えるので便利になるかな。海外で月2GBならギリたりそうだし。

楽天の対応バンドはLTEがB3とB28で5Gがn77(Sub6)とn257(ミリ波)っぽいのでn77に対応してるPocketWiFiを購入しても面白いかなと思ってる。Rakuten Pocket WiFi 5Gとも電波の強さ比較してみたいし。

2026年6月17日水曜日

TAKAGI G301はアイリスのホースでも使えた。

 タカギの散水用ワンタッチパイプ G301を使用するとホースが水道に直結出来て見た目もシンプルだし、ネジ止めしたときに傷がついたところから錆びることもないので良さそうということで交換してみた。

いろんなメーカから出てるんだけど、とりあえず一番安かったタカギのやつを購入してみた。
どうしてもアダプタを付けてるところは水が溜まって錆びてくるのかな。ちなみに整流板は樹脂製だった。
取り付けようとしたところ、タカギのG301はパッキンの厚みがあってそのままネジが締められなかった。左がもともと付いてたやつ、右がタカギのパッキン。厚みが少し違うし、もともと付いてたのはXパッキンだった。

ということで結局KVKのXパッキンをポチることに。これならちゃんとネジが締められる。

画像を見てみるとSANEIのとかのほうがパッキンの厚みがうすそうだし、そもそもUパッキンっぽいのでそのまま取り付けられたかも…

とりあえずアイリスのホースがそのまま刺さって普通に使えてる。ホースの先端もラクロックストップコネクタにして、ホースの先抜いても水止まるようにしたいな。

2026年5月31日日曜日

マウスのホイールの異音を分解せずに直してみた。

 Deathadder V2のクリックのスイッチは光学式なのでメンテ不要なのはいいんだけども、マウスホイールがキーキーとかキュルキュルのような高音の異音がでて来たのでどうにかしてみることに。

グリスを塗ればいいんだろうけども、プラスティックはグリスの選択をミスると割れたり変色したりするので樹脂対応のグリスが良いんだけども、シリコン系だとロータリエンコーダ部分の接点不良を起こしたりするのでスプレーするわけにも…

あとは分解するのも面倒なので外からうまいこと潤滑できないかなと。

そういえば昔、リコーダの付属のグリスを無くしたらリップクリームで代用できるとか聞いたことがあるのでリコーダも同じ樹脂製だし、マウスの樹脂製の軸受にも行けるかも?ということでリップクリームを試してみることに。(自己責任だが今回は手持ちのモアリップを使ってみた。)

隙間に入るものを探していたら、ケーブルが束ねられているやつ(樹脂コーティングされた針金)が良さそうだったので、先端にグリスを少量付けて軸のところめがけて右側の隙間からツンツンして少しずつ塗ってみる。(LEDの基板があるから注意)左側はロータリーエンコーダがあるので今回は右側だけに塗ってみた。電源を入れた状態だとLEDが光って見やすいけど基板があるので注意が必要。半透明の白い軸めがけて塗ると良い。

最初効果が全然なかったんだけど、とりあえず塗ってからしばらくくるくるしていたら異音が収まった。周りについたリップクリームを拭き取れば完成。

あまりつけすぎるとホコリが溜まる原因にもなるので注意。くれぐれもロータリーエンコーダがある左側には塗らないほうが良いと思う。マウスによってはロータリーエンコーダが反対側にあったりするので隙間からよく見たり分解画像を探してやると良いかも。

今回はとりあえずだったのでリップクリーム使ったんだけども、樹脂に優しいグリス(タミヤのセラグリスとか)を使うと良いかもしれない。

2026年5月24日日曜日

Rakuten Pocket WiFi 5GをWiFiルータに繋ぐ。

 前回USB LANアダプタが使えなかったんので結局クレードル買えよという話なんだけど、DD-WRT化したルータにUSBで接続してみた。

使用したのはBuffaloのWZR-1750DHP2でこのルータはUSB3.0とUSB2.0ポートを各1ポート搭載している。USB Coreが有効になっていればDD-WRTでUSB機能が使用できる。

DD-WRTの設定はRakuten Pocket WiFi 5GをUSBで繋いだあとに、WANの設定でAndroid Tetheringを選択すれば勝手に認識した。

DD-WRT側もRNDISとUsbNcmどっちも認識しているのか、usb0のMACアドレスがたまに変わる。でもまぁ特にどちらかを選択とかは出来ないのでそのまま。MTUはRakuten Pocket WiFi 5G側に合わせて1440にしておいた。

IPv6がうまく設定できなかった。DD-WRT側でIPv6アドレスを取得できて、SSHでPingが通らない感じ。ローカルのIPv6のアドレスだとPingが通るんだけど、ネットに出られていない感じ。ブリッジ設定とかにすれば大丈夫なのかもしれないけど。

ブリッジ設定だとDNSの広告ブロックがうまく動かなくなってしまうのでどうしようか悩みどころ。OpenWRTはこのルータだと5GHz使えないし。クレードル経由でLANで繋げばいけたりするのかな?

2026年5月23日土曜日

Rakuten Pocket WiFi 5GでUSB LANアダプタは使えなかった。

 Rakuten Pocket WiFi 5G、1ストリームなのでPC間通信とかをするとなるとやはり外付けのWiFiルータが使いたくなる。クレードルを買っておけばよかったんだけど、もしかしてUSB LANアダプタ使えないかな?と思って試してみた。

OTGアダプタはLuckFox用に購入した給電可能なタイプを使用してみた。

J21W006

まずはASIX AX88179搭載LANアダプタのLAN-GTJU3から。だいぶ前に購入したやつだけど、Mac BookとかNintendo Switchとかで使用していたやつ。SH-52BだとU3HC-A424P10BK経由で認識していたとか。
Rakuten Pocket WiFi 5Gは充電マークが付いてるけど、LANアダプタはLEDすら光らない…

別なUSB3.0 GigabitLANアダプタを試してみることに。

44-F7-9F-FB-24-60
Realtek RTL8153搭載のUSB LANアダプタ。同じ見た目でASIX AX88179のやつもあるのでレビューとかを見て買わないと危ないかも。
オレンジ色のLEDが光ってるし、本体も充電されている。緑ランプも点滅して、PCからはLANケーブルが刺さってるように見えるけど、IPアドレスは自動プライベートIPアドレスが割り振られる。
これはまたもや認識していない感じ?Realtekだと本体に認識されてなくても電源さえ入ればこういう感じになるのかな?

というわけで今回は2種類のアダプタを試してみたけどクレードルとして認識させることは出来なかった。RTL8153に関してはリビジョンが何種類かあるみたいだし、PID VIDとかで認識させてるのかもしれないし、USB Type Cの認証チップみたいな仕組みでやってるのかもしれないし…

クレードルってどんな仕組みになっているのだろうか。単純にチップのリビジョン違いとかMACアドレスで判別してるとかなのかな?

ちなみに給電非対応のOTGアダプタだと本体から電源が供給されていた。

OTGでUSB LANアダプタが使えなかったのでやはりRNDISを使って他のルータに繋がないとだめかな。

2026年5月20日水曜日

Rakuten WiFi Pocket 5GのWiFi設定を高速化してみた。

 キャンペーンでRakuten WiFi Pocket 5Gを購入してみたものの、デフォルト設定ではなかなかスピードが活かせないので色々試してみた。

eSIMと同時に契約する場合だとセットアップマニュアルが付属してくるけど何もしなくてもつながるんだけども、やはり設定画面は開いて設定したほうが良いと思う。

USBとかでPCに繋いで使う場合はUSB2.0ケーブルでも特に問題なく210Mbpsぐらいは出ていたんだけども、WiFiで使用するときには設定変更したほうが良い。

ちなみにアンテナピクトは5G+表示に対応しているので、Sub6使用時にはちゃんと5G+表示になる。逆に言うとn77とn78にしか対応していないのに5G表示はどういうことなんだろうか…
設定画面で見るとLTEは結構バリバリ立ってるけど5Gは1本だったり2本だったりすることも。この表示をLCDに出してもらいたいね。5G+表示だと今のところ210Mbpsぐらい出ている。

5G+使える地域ならやっぱり設定をしたほうが良いかも。
まずは5GHz帯の設定。

5GHzがデフォルトでオフになってるのでオンにしたほうが良いと思う。クレードルがない場合は5GHzをオンにしても屋外で使えるチャンネルでしかもDFSがデフォルトでオンになっているので持ち運ぶ場合でもオンのほうが速い。逆に言うと家に置きっぱなしにしてもクレードルがないとDFSがデフォルトでオンなので5GHzを使うまでは少し時間がかかってしまうけど。(起動後1分ぐらいは2.4Ghzしか出ない。)

2.4GHzをメインで使いたい場合もデフォルトで帯域が20MHzになっている。

2.4GHzで使っている場合でもデフォルト設定の帯域幅が20MHzになっているので理論値で最大144MHzのWiFi設定。

どのぐらい効果があるのかPCに繋いで比較してみた。(iPhoneだと2.4GHzの40MHz対応が怪しいので…)WiFiアダプタは内蔵のRZ608で測定してみた。

まずは2.4GHzの20MHz帯域幅設定。PCで確認すると理論値144Mbpsで接続されている状態。これでも100Mbps近く出るのね…
次に2.4GHzの40MHz帯域幅設定。PCで確認すると理論値300Mbpsで接続されている状態。先程の1.5倍ぐらい出ている。
最後に5GHzをオンにして80MHz帯域幅設定での接続。PCで確認すると理論値866.7Mbpsで接続されている状態。これでも先程より更にスピードが上がっているのでこれが今の回線の最大速度かな?やはり最大速度を出すには5GHzをオンにしてやらないとだめかも。

ちなみにバッテリの持ちとかは全く加味していない設定なので、おそらく持ち出しメインであればデフォルト設定でもバランス的には悪くないのかもしれない。家に放置で充電しながら5Gでバリバリ通信したいのであれば設定変更をしたほうが高速に使えるかも。結局接続するデバイスの対応次第って感じかな?

とりあえず5V 1Aの充電器で充電しながら使っていたけど本体の充電が100%にならないっぽいのでちゃんと充電器はPD対応の5V 3Aとかを使ったほうがいいかもしれない。熱問題は今のところ出ていないので電波状況は良いのかも。(電波状況が悪いところだと熱問題が出るとか)

2026年5月18日月曜日

Rakuten WiFi Pocket 5Gを購入してみた。

 Rakuten WiFi Pocket 5Gが2990円というキャンペーンが再開したということで試しに購入してみた。結局契約と購入したのは16日の20時ぐらいだったんだけども、17日の20時ぐらいには発送の連絡が来ていた。iPhoneで本人確認までできるのは便利だなぁ

契約して2日目で届くのはすごいなぁ

箱に入っていたのはRakuten WiFi Pocket 5Gの箱と、手順書の紙とその紙に5Gシールが挟まっていた。5Gシールは自分で貼るスタイルっぽい。発売中止の理由はRakuten Linkが使えない不具合らしいんだけど、結局発売再開されても変わらないらしい。Rakuten Linkが使えないってことは楽天モバイル従業員紹介キャンペーンの対象外か…(Rakuten Linkによる10秒以上の通話の条件が達成できない。)

ちなみに楽天モバイルのアプリでは届いて電源を入れる前では"申し込みに失敗しました"みたいな表示が出ていたけども、Rakuten WiFi Pocket 5Gの電源をいれれば勝手にアクティベートされて特に問題なく使えた。電源を入れてアクティベートするまではそういうエラーが出てしまうのかも。

デフォルトでは2.4Ghz帯のWiFiしか使えないようになっているので、5GHz帯のWiFiを有効にして使ってみた。5GHz帯を有効にするとWPSボタンで画面を切り替えてWiFi接続用のQRコードが出るんだけども、DFSスキャンのために5GHzのQRコードの画面ではしばらく接続できない感じの表示が出る。1分ぐらいすると接続できるようになる感じ。

肝心の速度は5G+表示のところで19時ぐらいでも210Mbpsぐらい出ていた。Pingは42ぐらいだけど、普通に動画を見る用途とかだったら問題なさそう。いまのところ発熱も問題なさそうなので少し様子を見てみようと思う。たまにPing30位になるときも。設置場所が重要かも。

USB接続でPCにつなぐと、Remote NDIS Compatible Device(RNDISデバイス)とUsbNcm Host Device(UsbNcmデバイス)のどっちも認識するのでこれのおかげでWindowsとMac両対応としてるのかもしれない。ADBもCOMポートとしても認識するのでもしかしたらATコマンドとか使えたりするのかな…。今回はUSB2.0のケーブルで繋いだのでどちらも425.9Mbpsとして接続されていたけども、今後USB3.0ケーブルを購入して試してみようと思う。
ちなみにファームウェアバージョンはR_14.0.0_Uだった。

2026年5月3日日曜日

iOSでWeb Bluetooth APIを使ってみた。

 ESP32にiPhoneとかでアクセスする場合はWebサーバを立ててWebSocketとJavaScriptを駆使すれば簡単にデータのやり取りとかUIも実装できたりして便利なんだけど、nRF52840でBLEを使った通信の場合はどうしよう…ということで調査してみた。

確かにHTTPサーバを建てられるESP32はUIまで内蔵してしまえば手軽で良いんだけどやっぱりWiFiは消費電力が…
ということでDMC-100に内蔵するのにBLEのみのnRF52840を使用した。TWELITEとかでも良かったんだけど、受信側にもドングルが必要になるし。

PC側で受信するにはPythonとか使えるので問題なかったんだけど、外や車で使う場合はやっぱりスマホのほうが便利なんだよなぁ
ということでスマホでも使えないかやってみた。

アプリは敷居が高いし、PythonistaはBLE対応してるっぽいのでPCで使っていたBLEアプリをベースにすれば動くかも?ただし有料。Web Bluetooth APIはデフォルトのブラウザでは対応していないけどBluefyアプリを使用すればiPhoneでも使えることがわかった。

ただしhtmlファイルをhttpsサーバ上においておかないとだめらしい?

そのためだけにサーバを契約したり立てたりするのが面倒なので今回はGitHub Pagesを使ってみることにした。GitHubにhtmlファイルをアップロードして設定をするだけで使えるらしい。

設定も簡単で、レポジトリを作成して、index.htmlをアップロードして、レポジトリの設定をひらいて左側のPagesからBranchをmainにしてSaveするだけ。

あとは少し待ってからまたこの設定画面を開くとBuild and deploymentの上のところに公開URLが生成されている。

すげー簡単にWebページが作れる…

あとはiPhoneにBluefyをインストールしてそのURLを開くだけ。

CSVダウンロード機能が動かなかったので、クリップボードに貼り付けとかを試した結果、Web Share APIを使ったほうが便利だったのでShare画面を表示するようにしてここからファイルに保存したり他のアプリで転送できるようにしてみた。
これなら簡単にiOSでBLE対応のWebアプリが作れるので便利かもしれない。

ちなみにデバイスが表示されないときは一旦nRF Connectアプリを使ってスキャンできて、Connectできるかどうか確認してみるといいかも。名前でフィルタリングしてる場合デバイス名が間違ってると表示できなかったりもするし。(スペルミスでハマった)

2026年5月1日金曜日

FNIRSI DMC-100をBluetooth対応にしてみた。

 この前、UARTをBLEで飛ばせるかどうか確認がうまく行ったのでnRF52840DMC-100に内蔵できるかどうかを確認してみた。

3.3V電源を生成しているところは裏面にありそうなんだけど3.3Vラインが今どのぐらい使われているかもわからないのでとりあえずLipoにつながっているPch FETのラインから取ることに。ここは逆流防止とスイッチのよくある回路っぽい配置になっていた。電源がオンになるとここからLipoの電圧が直接出てくる。
GNDはUSBコネクタのところから、SD7502の出力は22Ωの抵抗のところから取った。nRF52840に繋がないといけないのはこの3本の線。
こんな感じで電源をVBUSラインに、RXにSD7502を繋いでGNDはGNDの3本の線だけ。とりあえず動作確認したかったのでまだはんだ付けはしていないけど簡単。
ブザーの上に取り付けようと思ったら可動部が上の方にあるので結局SD7502の上に厚手の両面テープを2枚重ねで装着してみた。nRF52840は温度が上がらないので問題ないと思うけど念のため。はんだ付けして完了。

ソフトを書き換えるときはVBUSがLipoに直結してしまうので一旦電源ラインだけは剥がす必要がある。頻繁に書き換えるならショットキーダイオードとか入れておいたほうがいいかも。とりあえず前回作ったスケッチを書き込んでおいて、あとはクライアント側のアプリでどうにかする方式にしたので書き換えたりはしない予定だけど。

アプリの方はこの前作ったPythonツールnRF52840のスケッチをGeminiに投げてWeb Bluetooth APIで作ってもらった。シリアル通信の解析はダメダメだったけどここまで出来てれば素早くきれいなアプリが出来上がるのすごいな…
スマホとか対応できるようになったらもっと便利かも。

2026年4月29日水曜日

nRF52840でUART BLE変換アダプタ

 先日入手したSeeed Studio XIAO nRF52840を使ってUARTをBLEで飛ばせないかどうか試してみた。FNIRSI DMC-100のリアルタイム計測データとか飛ばせたら便利かなぁと言うことで。

どうやらbluefruitライブラリを使うとNordic UART ServiceのUUIDとかがそのまま使えるっぽいので結構簡単にUARTをBLEに変換できそう。DMC-100は1パケット13バイトなのでBLEの1パケットにも収まりそうだし。

#include <bluefruit.h>

BLEUart bleuart;

void setup() {
  Serial1.begin(9600);

  Bluefruit.begin();
  Bluefruit.setTxPower(4);
  Bluefruit.setName("DMC-100");

  bleuart.begin();
  startAdv();
}

void startAdv(void) {
  Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
  Bluefruit.Advertising.addTxPower();
  Bluefruit.Advertising.addService(bleuart);
  Bluefruit.ScanResponse.addName();

  Bluefruit.Advertising.restartOnDisconnect(true);
  Bluefruit.Advertising.setInterval(32, 244);
  Bluefruit.Advertising.setFastTimeout(30); 
  Bluefruit.Advertising.start(0);
}

void loop() {
  if (!Bluefruit.connected()) {
    return;
  }
  if (Serial1.available() >= 2) {
    if (Serial1.peek() == 0x5A) {
      Serial1.read();  // 0x5A

      if (Serial1.peek() == 0xA5) {
        Serial1.read();  // 0xA5

        uint8_t buffer[13];
        buffer[0] = 0x5A;
        buffer[1] = 0xA5;

        Serial1.readBytes(&buffer[2], 11);

        bleuart.write(buffer, 13);
      }
    } else {
      Serial1.read();
    }
  }
}

とりあえずDMC-100のヘッダを確認するぐらいでそのまま13バイトを送るようにしてみた。データのデコードはPC側でやる形に。

とりあえずGNDとUARTのRXをDMC-100に繋いでPCから給電してテスト。
この前のPythonツールをbleakライブラリを使ってBLE対応にしただけ。

13バイト6Hzぐらいのデータだったら問題なくBLEでも取れてそう。発熱も全く無いのでこれなら内蔵してしまっても良さそうだな…

内蔵したときに内部のソフトを書き換えるのが面倒かもという理由で今回データを直接送ってみたけど、他社品とかのアプリがそのまま使えるようなスケッチにすればスマホからも簡単に使えたりするかな…

とりあえずFNIRSI DMC-100を簡単にBLE対応にできてしまった。受信側のツールをもう少し作り込まないとだめかな。グラフとか欲しいし。

2026年4月19日日曜日

スマホクリップファンを買ってみた。

 ビックカメラのポイントが切れそうだったので、ビックカメラに行ってみたんだけど何も欲しいものがなかったので、通販サイトをうろついていたらめっちゃ安くなっている物があったのでポチってみた。

Lightningに指すタイプのスマホ用ファン。最近iPhoneのバッテリを交換したし、使い物にならなかったら改造するベースにいいかなと思って。

オレンジとピンクが80円になっていたのでつい…80ポイント消費するだけでポイントの期限が2年伸びるし。Android版は変換アダプタで対応してそうな感じだけど、820円するのにLightning版は80円という激安。

仕組み的にはスイッチとモータがつながっていてOTGケーブルの電源を取るだけバージョンみたいな感じ。80円ならお得かなと思うようなレベルかな…

iPhone 12 miniでも普通に動いた。しかし画面占有率が高くなっているのでクリップする部分がほぼないという。ホームボタン付きのiPhone用かな?

風量はまあまあいい感じかもしれないけど、結構うるさい気がする。

改造ベース用としてはなかなか良いかも。