Show HN: 20 ドルの 4G ワイヤレスホットスポットをテキストメッセージ機器へハッキングする

2026/09/15 22:20

Show HN: 20 ドルの 4G ワイヤレスホットスポットをテキストメッセージ機器へハッキングする

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

著者は、OpenStick フレームワークに基づいた単一のカスタムデバイスとして、AliExpress の 4G モデム、Clicks キーボード、Adafruit SHARP ディスプレイという多様な電子機器を統合することに成功した。3 つの異なるシャーシオプションからスタートしたが、標準アダプターで見つかった配線エラーを修正した後に MF800 モデルを選択した。主要な技術的課題として、Qualcomm ドライバーを Linux 用に適応させる問題があった;従来の Android メソッドである

adb
を使っても EDL モードのアップデートをフラッシュできなかったため、著者は
rohm,dh2228fv
ドライバーとの互換性を活用した回避策を実装した。コスト削減と美観向上のために、ビルドでは標準の GC9107 ディスプレイをより優れた動画ダITHERing を提供するものに置き換えた(動画に Atkinson、静止画に Floyd-Steinberg を使用)とともに、カスタム PCB を 2 面から片面に再設計した。物理的な改修としては、PCB のトリミング、新しいロジックに対応するために USB コネクタを切断し、バッテリー接続をパッチングすることなどがあった。これらの成功にもかかわらず、このデバイスには現在、スリープモードへの進入不能やヘルパー PCB のカバータブの欠落という重大な欠陥が存在する。今後のステップとしては、タッチ入力の統合、サウンドと振動の実装、および飛び込みのある縁やディスプレイ遮蔽の問題を修正するための物理的なエンクロージャーの改良が含まれる。

本文

乱雑な机と「穴熊脳」から始まる OpenStick プロジェクト:4G モデム×キーボード×シャープディスプレイの自作体験記

背景とモチベーション

私は物を整理するのが苦手です。努力を重ねているにもかかわらず、机の上には以下のような物が積み重なっていました。これが今回のプロジェクト発端です。

  • OpenStick 互換品
    • MF800: 実際に使用した機体
    • UZ801: サイズは適合したが、バッテリーや GPIO ピンが不足していた
    • USB ドライブ形状のモデル: 他の問題により断念
  • iPhone 16 Pro Max Clicks キーボード: 親戚からの贈り物(※適切な iPhone が入手できていないのが課題)
  • Adafruit SHARP メモリ表示ボード

私は「穴熊脳」でこれらの要素を組み合わせていました。特に以下の情報を事前に知っていたことが、プロジェクトの条件づけとなりました。

  • sqfmi による Beepy
  • Playdate

コアコンポーネント:モデム・ディスプレイ・キーボード

モデム(4G 通信機能)

サプライチェーンの奇跡により、Wi-Fi/Bluetooth を搭載し、ディスプレイ付き、完全バッテリー駆動の解凍済み OpenStick が送料込みで20 ドル以下で購入できました。これがプロジェクトの中核です。

  • 機種選定: ディスプレイ付きモデルを採用(ディスプレイなしモデルは LED 交換のみで対応可能)
  • OS 環境: 標準 Android だが、ADB を介して EDL モードへ入ることで Linux 書き換えが可能
  • 参考リソース
    • OpenStick (公式サイト)
    • github openstick.de
    • wvthoog.nl ブログ
    • 起動用カーネル:
      extowerk.com

⚠️ 重要: Linux 化ではドライバとデブツリー(Device Tree)の扱いが最大の難所です。稼働中のデバイスからデブツリーを抽出して参考にするのがおすすめです。

キーボード

Clicks キーボードは使い心地が良いですが、価格は高額です(※切り出しが必要なため)。

  • 接続方式: MFi 認証済み Apple 固有エンドポイント付き USB キーボード実質
  • 制御: Clicks モバイルアプリによる設定・更新必須
  • チップ: CH32V203 など(カスタムコードは現在不要)

ディスプレイ

コントラストが高く、メッセージング専用デバイスに適した Adafruit SHARP メモリ表示ボードを使用。

自作基板(アダプタ用 PCB)と加工

MF800 はオンボードに 5V 昇圧器が搭載されていないため、カスタム PCB の追加が必要でした。また、物理サイズに合わせて USB コネクタの切断も必要です。

PCB 搭載チップリスト

  • TUSB320: USB ホスト/デバイスモード切り替え
  • SN74LVC8T245: レベルシフタ
  • MCP1640: 5V 昇圧器
  • TPS22917 (高側・低側): VBUS/VBAT チェンジ管理
  • コネクタ: USB、FPC (ディスプレイ)
  • テストパッド: MF800 接続用

加工プロセス

  • PCB と組立を並行して発注(2 面組立は高価なため片面設計へ妥協)
  • カット作業は予想以上に成功し、重要配線が通っていないことが確認
  • USB ビア(貫通孔)の状態に少し懸念あり

配線と接続の試行錯誤

ワイリング No.1:初回接続

再利用した旧ディスプレイのパッドを使用しましたが、後から考えると愚かな選択でした。

  • プロセス:
    1. 電源供給部をテスト(独立して確認可能)
    2. USB 部分のテスト
    3. ラップトップ
      dmesg
      でデバイス検知確認
  • 驚きの発見: High-Speed USB の動作。配線長不足ではなく、配線同士を強くねじることで即席的に動作!

ワイリング No.2:ディスプレイ SPI 接続

デブツリー(Device Tree)の再構成を確認し、Qualcomm ドライバと互換性を持たせるための設定を行いました。

spi@78b9000 {
    compatible = "qcom,spi-qup-v2.2.1";
    reg = <0x78b9000 0x500>;
    // ... (他パラメータ略)
    spidev@0 {
        compatible = "rohm,dh2228fv"; // ドライバ回避策
        reg = <0>;
        spi-max-frequency = <16000000>;
        spi-cs-high;
    };
};
  • 試行錯誤:
    • spi-pipe
      ユーティリティで MOSI/CLK 電圧変化確認(オシロスコープなし)
    • ドライバの CS ピン処理不具合への対応:
      libgpiod
      を使用して手動トグルを試行
    • 安易な接続後にディスプレイが一瞬だけ点灯し、壊れると勘違いしたが実際には正常動作

再ワイリング:完全リセット

信号線(MOSI/CLK)やグラウンド配線に不具合があったため、全てを再配線しました。

  • 変更点: 磁気線を信号線と電源線に使用(太く、曲がり後も位置が固定)
  • 除外項目: USB データラインはメインボードパッドの不安定性のため未再配線

ディスプレイ用カーネルドライバの実装

Python スクリプトでの簡易テストを経て、本格的な動作にはDRM ドライバが必要です。今回は Ardangelo の

sharp-drm-driver
を採用しました。

採用理由

  • 動画再生(mpv など)への直接出力可能
  • X / Wayland 環境の実行が容易
  • デスクトップ環境での遊び要素が可能
  • 部分更新機能の実装余地あり

最終デブツリー設定

CS ロジックをドライバ側で処理する構成にしました。

spi@78b9000 {
    // ... (SPI ブロック定義略)
    sharp_drm@0 {
        compatible = "sharp-drm";
        reg = <0>;
        spi-max-frequency = <4000000>;
        cs-gpios = <0x49 18 1>; // CS ピン定義
    };
};

ビルドとパッチ

  • カーネル:
    6.12.1-msm8916
    (モジュール有効化済み)
  • 追加機能: デュイニング(ダithering)を追加
    • 動画用: Atkinson アルゴリズム
    • スティル画像用: Floyd-Steinberg アルゴリズム

⚠️ 現状の課題: 閾値に基づいて黒/白に変換する処理があり、汎用的な用途では外観が悪化するためダithering が有効化されています。詳細は GitHub リポジトリをご覧ください。

エンクロージャと最終組み立て

設計プロセス

Apple の USB-C コネクタまでの距離非公表のため、標準ケーブルで測定し補間を行いました。3D プリンティングによる検証も実施しましたが、部品不足によりカバー部分に欠損があります。

暫定的な最終エンクロージャ

工具類の一時利用不能により、クリップ式ではなく**ホットグール(高温融着)**での組み立てに切り替えました。

  • 解決策: ケースの切り欠きやプンパーボタンは、小さな穴とピンで代替
  • キーボードケースカット: 工具なしでの手作業実施(端部の整地を後から行う予定)
  • 追加部品: 4G フレキシブル PCB アンテナ、ミニ SIM カードスロット

機能設定と未解決課題

バッテリー設定

Android デブツリーからコピーした高度な設定を採用。しかし、ドライバからは電圧と充電フラグのみが提供されるため、パーセント値計算はアプリ側で行う方針です。

  • 充電機能: USB パススルーポートでも動作可能(※デバイス起動必須)

未解決の問題(Missing)

最大の課題は睡眠モードの実装です。

  • 理由: モデム常時オン時のテスト不足、電源ボタンの欠如
  • 将来予定: メッセージング本番運用前に高速化対応を行う予定

追加機能の検討事項

  • タッチスクリーン・スクロールホイール(実装コスト低)
  • 音声・振動機能(増幅器用スペース確保可能)

不整(The Ugly)と今後の展望

現状の不具合

  • 接着剤問題: 電源ボタンが配置できない
  • バッテリー固定: ケース外で落下するためテープ留め
  • ケース形状: ギザギザな端部のやすり処理必要
  • ディスプレイアライメント: FPC カードの張力により PCB が浮く、カバータブの欠落
  • 表示歪み: ケース縁で 1〜2 ピクセル覆われている

まとめ

視覚的な面ではさらなる改善の余地がありますが、プロジェクト全体としては非常に気に入っています。再現や類似製作を検討されている方は、GitHub リポジトリから詳細情報を入手可能です。

📝 ソフトウェアについて 本記事からは意図的にソフト面の詳細を省いています。なぜなら、実際の使用を通じた修正が必要であり、「未完了だが放置していない状態」でのリリースは好まないからです。既にメモリリークの発見とパッチ公開を行っているためです。


連絡先:

veggie_privacy_8y@icloud.com

同じ日のほかのニュース

一覧に戻る →

2026/09/16 4:25

「System One モデルと Jev」の紹介

## Japanese Translation: TypeSafe AI は、即座で誤りのない自動意思決定のために設計された画期的な「System One」モデルである **Jev** を発表しました。従来の言語モデルが単なるテキスト文字列を生成するのに対し、Jev は型安全構造化値を出力し、データの一貫性を確保しながらハルシネーションを排除します。このアーキテクチャ変更は並列サンプラにより支えられており、すべての応答を同時に処理して結果を 70ms から 500ms の範囲で提供可能にしています。これにより既存のツールと比較して最大 200 倍高速化されながら、著しく低いコスト(入力トークンあたり約 0.042 ドルで出力コストはほぼゼロ)を実現しています。システムは、標準的なアライメント手法に依存せず、検証可能な報酬を最優先する「Calibrated Decisions」用の強化学習を用いた専門的なトレーニングを受けました。 カハニーマンの快思考といった認知科学の概念に触発された Jev は、現在のフロンティアモデルと対比して顕著な効率性でベンチマークされています。Jev は、高速ゲームインタラクションや迅速なビッグデータ処理といったリアルタイムアプリケーションを可能にしており、既存のツールに対して最大 200 倍高速化されながらコストは大幅に削減されています。その結果、リアルタイムインテリジェンスに依存する業界では、一貫した信頼スコアと近乎ゼロのレイテンシを提供するシステムへの転換が期待でき、これにより現在の大規模言語モデル展開におけるボトルネックを効果的に解決します。

2026/09/15 21:31

Show HN: 鳥の声に反応して、19 世紀の挿絵風に描く電子ペーパーフレーム

## Japanese Translation: 「Fugleramme」プロジェクトは、ノルウェー・ベルゲンの厨房の窓を、ローカル AI と歴史的自然史のアートを組み合わせることでリアルタイムデジタルバードウォッチングキオスクへと変えます。BirdNET-Go を使用してデバイス上で鳴き声を検出し、公有ドメインソースからの手切りされた 1800 年代の図版として一致結果を Inky Impression e-ink パネルに表示します(アート作品は AI で生成されておらず、一部のものは補正されています)。800 枚以上の切り抜きがあり、400 種以上をカバーし、主にスキャンディナヴィア、英国、中欧の種を対象とし、より広いカバレッジが計画されています。検出された種は背景除去処理され、体格サイズに合わせたテクスチャ付きページに配置され、空のスロットには裸の枝が表示されます。システムは Raspberry Pi 5(推奨)、Inky Impression 13.3 インチディスプレイ、マイク、A4 フレームでローカルで動作しますが、Web キオスクまたは Docker(`ghcr.io/arnegiacomo/fugleramme`)または `install.sh` を通じても動作します。また、ローカルまたはリモートの BirdNET-Go インスタンスをターゲットとすることも可能です。現在は初期開発段階であり、コミュニティからの貢献(修正、ドキュメント、アート作品)を歓迎しており、バグ報告には Discussions を使用し、コード・アート・ドキュメントの変更には PR を使用します。WWF のポスター(Axel Thorenfeldt 氏)や AvianVisitors に着想を得た Fugleramme は、アクセシブルなハードウェアが厳選された公有ドメインのアートを通じて複雑なオーディオデータを可視化する方法を示しています。コードは MIT ライセンス、検出および画像は適切な CC ライセンス(適用可能な場合、非商用制限を含む)の下にあります。 ## Text to translate: The "Fugleramme" project turns a kitchen window in Bergen, Norway, into a real-time digital bird-watching kiosk by combining local AI with historical natural history art. Using BirdNET-Go, it detects bird calls on-device and displays matches as hand-cut 1800s illustrations from public-domain sources on an Inky Impression e-ink panel; no artwork is AI-generated (some is retouched). Over 800 cut-outs cover more than 400 species, primarily Scandinavian, British, and central European, with broader coverage planned. Detected species are background-removed and packed onto a textured page sized by body mass; empty slots show a bare perch. The system runs locally on a Raspberry Pi 5 (recommended), an Inky Impression 13.3" display, a microphone, and an A4 frame, but can also run as a web-only kiosk or via Docker (`ghcr.io/arnegiacomo/fugleramme`) or `install.sh`. It supports pointing at local or remote BirdNET-Go instances. Currently in early development, the project invites community contributions (fixes, docs, artwork) and uses Discussions for bug reports while PRs are for code/art/docs changes. Inspired by a WWF poster by Axel Thorenfeldt and AvianVisitors, Fugleramme demonstrates how accessible hardware can visualize complex audio data through curated public-domain art, with code under MIT and detection/images under appropriate CC licenses (including non-commercial constraints where applicable).

2026/09/16 6:07

ドイツのライネメタルが戦術システム接続用武器プロトコルのオープンソース化を発表

## Japanese Translation: The onboardapi ライブラリは、Object Management Group (OMG) から Data Distribution Service (DDS) によるデータ交換の標準化を通じて、センサーシステムとソフトウェア間の通信を簡素化します。ddkit ツールキットを基盤とし、この C++ ベースのソリューションは OMG の XTypes および XCDR2 エンコーディングを活用してシームレスな相互運用性を確保し、データモデルが進化するに連れて完全な後方互換性を保証します。Java、Python、C#、および .NET 向けのラッパーを通じて多言語統合をサポートし、クライアント/サービスアーキテクチャに関するドキュメント、セットアップガイド、コード例、変更ログ、 browsable データモデルインターフェースを含む豊富なリソースを提供します。このライブラリは、堅牢なクロスプラットフォーム接続を維持することでスケール可能な産業用アプリケーションを可能にします。そのインターフェースは EPL v2.0 ライセンスに基づき、ランタイムライブラリは EULA-RME-SDK-1.0 ライセンスに従います。 ## Text to translate: The onboardapi library streamlines communication between sensor systems and software by standardizing data exchange through the Data Distribution Service (DDS) from the Object Management Group (OMG). Built on the ddkit toolkit, this C++-based solution ensures seamless interoperability via OMG's XTypes and XCDR2 encoding, guaranteeing full backward compatibility as the data model evolves. It supports multi-language integration through wrappers for Java, Python, C#, and .NET, with extensive resources including documentation on Client/Service architecture, setup guides, code examples, a changelog, and browsable Data Model interfaces. The library facilitates scalable industrial applications by maintaining robust cross-platform connectivity; its interfaces are licensed under EPL v2.0, while runtime libraries adhere to the EULA-RME-SDK-1.0 license.