背景:移動販売の現場で起きていること
キッチンカー(例:卤味の移動販売)で商品を販売する際、
店主は毎回次のような流れで作業しています:
- 商品を電子はかりに載せる
- 表示された重量を目で確認
- スマホのアプリを開く
- 商品カテゴリーを選択
- 重量を手入力
- 「送信」ボタンを押す
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 ブロードキャストを受け取って
入力欄に自動で重量を表示します。
動作イメージ
- 秤が「ST, 0.532, kg」を出力
- ESP32 がそれを検出し BLE で送信
- アプリが受信 → 重量自動入力
- 商品を選んで「送信」ボタンを押す
手入力ゼロ、業務スピード倍増。
実装上のヒント
| 項目 | 推奨設定 |
|---|---|
| 安定検出 | 「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 |
| 効果 | 入力自動化・人為ミスゼロ |