0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【プロジェクト】ESP32で自作BLEゲートウェイ:古い電子はかりを「スマート秤」に変える方法

Posted at

背景:移動販売の現場で起きていること

キッチンカー(例:卤味の移動販売)で商品を販売する際、
店主は毎回次のような流れで作業しています:

  1. 商品を電子はかりに載せる
  2. 表示された重量を目で確認
  3. スマホのアプリを開く
  4. 商品カテゴリーを選択
  5. 重量を手入力
  6. 「送信」ボタンを押す

1 日に数百回も繰り返すこの手作業——時間がかかる上に、入力ミスも起こりやすい。

目指すゴールはただひとつ

「秤のボタンを押すだけで、スマホに自動的に重量が入力される」


解決策:ESP32 を BLE ゲートウェイにする

30 円程度の ESP32 モジュール(Wi-Fi + BLE) を使って、
既存の RS232 / TTL 出力を持つ電子はかりからデータを読み取り、
Bluetooth Low Energy(BLE)でスマホにリアルタイム送信します。

これにより、古い有線秤が「スマート BLE 秤」 に早変わりします。


システム構成図


必要なハードウェア

部品 型番例 価格 用途
ESP32 開発ボード ESP32-DevKitC / NodeMCU-32S ¥400〜600 BLE通信を実装
電圧変換モジュール MAX3232 ¥100 RS232 → 3.3V TTL 変換
電源 USB 5V(または車載DC) 餐車内の既存電源を利用

配線例

はかり端子 変換モジュール ESP32ピン
RS232 TX → MAX3232 → GPIO16(RX2)
GND GND
電源 5V 5V

TTL 出力タイプの秤なら MAX3232 は不要、直接接続可能です。


ノーコードで実現:ESPHome の活用

ESPHome は「YAML 設定だけで IoT デバイスを動かす」ツールです。
数十行の設定で、秤の出力を自動で BLE ブロードキャストできます。

esphome:
  name: rv_scale_gateway
  platform: ESP32
  board: esp32dev

logger:

uart:
  rx_pin: 16
  baud_rate: 9600

text_sensor:
  - platform: uart
    name: "Scale Raw Data"
    filters:
      - lambda: |-
          if (x.contains("ST")) {
            std::string digits;
            for (auto c : x) if ((c>='0'&&c<='9')||c=='.') digits += c;
            if (digits.size() > 0) {
              ESP_LOGI("scale", "Stable weight: %s kg", digits.c_str());
              id(weight_value).publish_state(atof(digits.c_str()));
            }
          }
          return x;

sensor:
  - platform: template
    name: "Stable Weight"
    id: weight_value
    accuracy_decimals: 3

ble:
  advertisement:
    - service_uuid: "181D"  # Weight Scale Service UUID
      manufacturer_data: !lambda |-
        uint16_t grams = (uint16_t)(id(weight_value).state * 1000);
        return {0xAA, (uint8_t)(grams & 0xFF), (uint8_t)(grams >> 8)};

この設定でできること:

  • RS232 / TTL 経由で秤の出力を読み取る
  • 「ST(安定)」を含む行だけを解析
  • 数値を BLE ブロードキャストとして送信

アプリ側での受信例


  const adv = new Uint8Array(res.devices[0].advertisData);
  if (adv[0] === 0xAA) {
    const val = (adv[2] << 8 | adv[1]) / 1000.0;
    this.setData({ weightInput: val.toFixed(3) });
  }

これでスマホは BLE ブロードキャストを受け取って
入力欄に自動で重量を表示します。


動作イメージ

  1. 秤が「ST, 0.532, kg」を出力
  2. ESP32 がそれを検出し BLE で送信
  3. アプリが受信 → 重量自動入力
  4. 商品を選んで「送信」ボタンを押す

手入力ゼロ、業務スピード倍増。


実装上のヒント

項目 推奨設定
安定検出 「ST」「HOLD」などの文字列を判定
更新頻度 約 1 秒間隔
BLE 周期 200〜1000 ms
デバイス名 RV-SCALE-xxxx(識別用)
拡張機能 GATT Notify で JSON 形式通知も可
安全性 ブロードキャストには重量のみ(個人情報なし)

ESP32を使うメリット

  • Wi-Fi + BLE のデュアル無線チップ
  • UARTポートが豊富で秤と簡単接続
  • 成本が非常に低い(¥30前後)
  • Arduino / ESPHome / ESP-IDF など開発環境が充実
  • OTA(無線アップデート)にも対応可能

Before / After

比較項目 従来の秤 ESP32+BLE化後
通信方式 有線(RS232/USB) 無線 BLE
データ取得 手入力 自動取得
連携 なし 小程序連携可
導入コスト 既存 + ¥600 程度

参考リンク

  • ESPHome 公式ドキュメント
  • ESP32 BLE UART Example(Random Nerd Tutorials)

まとめ

要素 内容
プロジェクト名 スマート秤ゲートウェイ
ハードウェア ESP32 + MAX3232
ソフトウェア ESPHome / BLE API
所要時間 約 1 時間
コスト 約 ¥600
効果 入力自動化・人為ミスゼロ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?