小企业智能化
小微企业仓库条码出入库实战:ESP32 + 扫码枪 + 轻量 WMS 做库存台账与低库存告警
2026年11月4日
ESP32 接扫码枪配合轻量 WMS,扫码即记账并自动低库存告警。
小微企业仓库条码出入库实战:ESP32 + 扫码枪 + 轻量 WMS 做库存台账与低库存告警
摘要:小仓库靠 Excel 记库存,常常对不上、盘点慢、断货才发现。本文用 ESP32 接串口扫码枪,配合一个轻量 WMS 接口,实现扫码即出入库、自动台账与低库存企微告警,硬件成本不到一百元。
一、为什么小仓库也要条码化
很多小微企业的仓库还在用纸质单 + Excel:货来了手写登记,发出去再补录。问题很明显:
- 账实不符。人工录入晚一步、录错一位,库存就失真,月底盘点差出一大截。
- 断货才发现。没有阈值预警,等销售要货时才知道某 SKU 已经见底。
- 盘点耗时。几百个品种挨个对,半天都未必搞得清。
条码化不是大企业的专利。一个扫码枪 + 一块 ESP32 + 一个极简后台,就能把"扫码—记账—告警"串起来,单人十分钟完成过去半小时的活。
二、总体架构
整体走"边缘采集 + 轻量服务端":
扫码枪(串口) ──► ESP32 ──MQTT/WiFi──► WMS 服务(Flask+SQLite) ──► 企微机器人告警
- ESP32:读扫码枪输出,通过 WiFi 把条码和"入/出"动作发到 MQTT。
- WMS 服务:一台内网小主机或同机 NAS 上的 Docker 容器,提供入库、出库、查询、盘点接口,数据落 SQLite。
- 企微机器人:库存低于阈值时主动推送,不用人工盯。
三、硬件:ESP32 + 串口扫码枪
扫码枪选支持「串口(TTL)」输出模式的型号,很多二三十元的枪都能切到串口模式。ESP32 的 UART2(GPIO16 收、GPIO17 发)接枪的 TX/RX,注意交叉连接并且共地。
如果枪是 USB 口而 ESP32 没有 Host,有两个办法:一是直接买 TTL 串口版扫码枪;二是用带 USB Host 的 ESP32-S2/S3 配合 USBHost 库读 HID 数据。小批量落地推荐前者,省去驱动麻烦。
四、固件:读取扫码并上报
ESP32 端用 Arduino 框架,监听串口缓存区,遇到回车(扫码枪默认以 \r 或 \n 结尾)即认为一次扫码完成:
#include <WiFi.h>
#include <PubSubClient.h>
HardwareSerial扫码(2);
void setup(){
扫码.begin(9600, SERIAL_8N1, 16, 17); // RX=16 TX=17
WiFi.begin("仓库WiFi", "password");
// ...连接 MQTT
}
void loop(){
static String buf;
while(扫码.available()){
char c = 扫码.read();
if(c=='\n' || c=='\r'){
if(buf.length()>0){
String topic = digitalRead(按键脚)==LOW ? "wms/in" : "wms/out";
客户端.publish(topic.c_str(), buf.c_str());
buf="";
}
} else buf += c;
}
客户端.loop();
}
用一个物理拨动开关区分"入库/出库"模式,避免误操作。扫码数据只传条码字符串,服务端再做 SKU 映射,前端设备保持"傻瓜化"。
五、轻量 WMS:库存台账与出入库接口
服务端用 Flask + SQLite,三张表足矣:sku(编码、名称、规格、阈值)、stock(当前库存)、log(流水)。核心出入库接口:
@app.post("/api/move")
def move():
d = request.json
sku, qty, typ = d["sku"], int(d["qty"]), d["type"]
now = db.execute("SELECT qty FROM stock WHERE sku=?", (sku,)).fetchone()
now = now[0] if now else 0
new = now + qty if typ=="in" else now - qty
if new < 0: return {"ok": False, "msg": "库存不足"}
db.execute("INSERT OR REPLACE INTO stock VALUES(?,?)", (sku, new))
db.execute("INSERT INTO log VALUES(?,?,?,?,datetime('now'))",
(sku, qty, typ, new))
db.commit()
check_alert(sku, new)
return {"ok": True, "stock": new}
前端给仓管一个极简网页:扫码框自动聚焦、回车即提交,下方实时显示当前库存和今日流水。
六、低库存告警与盘点
check_alert 在每次变动后比对 sku.threshold,低于阈值就调用企微机器人 Webhook:
def check_alert(sku, qty):
row = db.execute("SELECT name,threshold FROM sku WHERE sku=?",(sku,)).fetchone()
if qty <= row[1]:
requests.post(WEBHOOK, json={"msgtype":"text",
"text":{"content":f"低库存提醒:{row[0]}({sku}) 余 {qty},阈值 {row[1]}"}})
月度盘点时,仓管拿枪逐件扫一遍,系统自动生成"账面 vs 实扫"差异表,过去半天的工作现在二十分钟搞定。
七、落地避坑
- 条码唯一性:自打印条码务必保证 SKU 与条码一一对应,重复编码会让台账全乱。
- 网络抖动:ESP32 断网时先把扫码暂存进 SPIFFS,恢复后补发,避免漏单。
- 并发写入:SQLite 单写者,接口加一把线程锁,防止高频扫码同时写库锁死。
- 权限:WMS 仅内网开放,外网访问走 VPN,别把库存接口裸奔到公网。
小结
用 ESP32 + 扫码枪 + 轻量 WMS,小微企业能以极低成本把仓库管理从"人记 Excel"升级到"扫码即账、自动告警"。整套方案硬件不到百元,部署一天即可上线,是性价比极高的数字化切入点。