CATALOG

这是一个相对垂直的硬件对接场景,我会结合芯步官方文档和通用的无人售货机业务逻辑,帮你梳理接入思路。

一、这东西长啥样?为啥要接它?

如果你正在做无人售货机项目,大概率会遇到这种需求:售货机里有十几个甚至二十几个货道,每个货道对应一个电机(或者一个电磁锁)。传统做法是用单片机+继电器阵列,布线麻烦,坏了不好修

芯步这款 UNI-KZQ-TY-24 控制器说白了就是帮你把这24个开关集中管起来的一个小盒子。你可以把它理解成一个能通过网络远程按下去的24路开关——1号货道对应第1路,2号货道对应第2路,用户扫码付款后,软件告诉控制器“把第X路接通2秒钟”,电机转一下,货就掉出来了。

接入后的效果:你坐在办公室也能远程控制任意一个货道,同时还能知道每个货道的状态

二、读一下官方文档,这玩意儿怎么说话?

先看下官方给的信息:

硬件底子:用的是WiFi 2.4G(注意不支持5G),不需要单独买网关,直接连你家或点位上的路由器就行。官方设5组WiFi,它会自动切到信号最强的那一组——这个在商场等复杂环境下挺实用的。

接口风格:芯步的产品有个好处,所有控制器都走统一的HTTP接口,不管你用Java、Python、PHP还是Node.js,只要会发HTTP请求就能调。签名验证通过就给设备发指令,响应时间大概80-120毫秒

部署方式:支持公有云,也支持私有化部署。如果你客户要求数据不出内网(比如某些政府单位或保密园区),把这套东西部署在他们自己的服务器上就行

三、接入步骤,手把手来

Step 0:准备工作

先去芯步开放平台注册一个账号(ThingBoot Open),创建一个应用。系统会给你生成:

  • AppId:你的应用ID

  • AppSecret:用来算签名的密钥,别写死在代码里

然后把你的24路控制器配网、绑定到你账号下。配网通常就是热点配网或者蓝牙配网,拿到设备的 DeviceId(设备ID)

Step 1:弄明白签名怎么算

这是最容易卡住的一步,但搞明白了其实不复杂。

接口地址长这样:

  • {AppId} 就是上面拿到的

  • {ts} 是当前时间戳(毫秒级)

  • {sign} 是把 ts + AppSecret 拼起来,做一次MD5(或其他约定的哈希算法)得到的字符串

:写代码的时候封装一个 signUtil 工具类,别到处写MD5逻辑。时间戳注意用服务器当前时间,和平台时间差太大会报签名过期。

Step 2:先发个“开1号货道”的请求试试

签名搞定后,就可以POST JSON数据过去了。参考芯步智能照明控制器的例子,同系列产品的命令格式差不多

意译一下:告诉设备ID为xxx的那个盒子,“把第1路接通2000毫秒(2秒)”。

如果你想要更精细的控制,官方还支持这些命令

  • channel_off:关掉某一路

  • delay_on:延时接通

  • delay_off:延时断开

  • channel_status:查询某一路当前是开还是关

实际调试:先拿Postman把签名和请求调通了,再写代码。先用单个设备、单一路测试,不要一上来就搞批量。

Step 3:在业务代码里整合

以最常见的扫码支付买饮料场景为例:

  1. 用户扫码,支付成功,回调里拿到用户选的货道号(比如第8号货道是可乐)。

  2. 你的后端根据货道号找到对应的设备ID线路号(8号货道->第8路)。

  3. 拼出JSON,算签名,发POST。

  4. 收到返回,告诉前端“出货中”,轮询或WebSocket推给用户“请取货”。

  5. 出错处理:如果接口返回失败(比如设备离线),标记该订单异常,触发退款或人工处理流程。

核心代码伪代码示意(Python风格,道理通用):

注意:duration不要设太短,电机可能转不到位;也别设太长,会空转或者被恶意利用。2000毫秒(2秒)是常见值,实际根据你电机的特性调整。

Step 4:别忘了状态查询和定时巡检

远程开关只是最基本的功能。稳定运行还得加两个东西:

主动查询:每隔一段时间(比如5分钟)调一次 channel_status 命令,看看每路的当前状态。如果某路一直是“开”,说明电机可能卡死了,赶紧报警。

心跳机制:芯步的HTTP接口是被动调用的,设备不会主动给你发心跳。在软件层做一个“最后通信时间”记录,如果超过10分钟没和某设备通信,触发一个告警,让运维去现场看看是不是断电或断网了。

四、几个“早知道就好了”的坑

1. WiFi 2.4G还是5G?明确说只支持2.4G。商场、写字楼里5G信号好但2.4G干扰多,部署前拿手机测一下点位2.4G的信号强度,别装上了发现连不上。

2. 并发出货要小心如果业务高峰期同时有多个用户买不同的商品,后端会并发调用同一个设备的不同线路。24路之间互相不影响(一路的通断不会干扰另一路),但问题是设备本身的WiFi模块能不能扛住高频请求。实测80-120ms响应,理论上1秒可以串行发10个左右请求,但最好在代码里加个简单的限流或队列,别一下子怼100个请求过去。

3. 离线场景怎么处理?设备断网了就控制不了了。在设计上保留机械应急开关,或者让现场运营人员有个“管理员模式”能手动触发。另外,调用接口的时候如果返回超时或设备不在线,请一定要标记订单状态为待处理,不要直接退款给用户然后货又掉下来了——那你就亏了。

4. 私有化部署要提前规划官方支持私有化部署,但需要提前和他们沟通授权。如果你客户明确要求所有数据走内网、不经过公网,这个在选型阶段就要确定,不然后期迁移麻烦。

五、更大的视角

接一个控制器不难,难的是成百上千台售货机一起管

如果点位超过50个,你做几件事:

设备台账:每个售货机对应一个24路控制器,每个控制器有DeviceId,每个货道对应一个channel号。用一张表把“售货机编号-控制器ID-货道号-商品ID”的关系维护好。

批量管理:写一个后台界面,能批量给指定设备发指令。比如夏天来了,统一把冷藏温度调低(当然温度控制可能需要别的传感器配合),或者远程重启故障设备。

监控大屏:用芯步开放的接口,把每个控制器的在线状态、每路的通断次数统计出来。哪路一天被按了200次,说明这个商品卖得好;哪路一周都没人按,可以考虑换品

日志留底:所有控制指令都要入库,谁、什么时候、控制了哪个设备、结果如何。这不仅是运维需要,万一出了纠纷(“我付钱了但没出货”),这是唯一的证据。

芯步的产品优势在于HTTP接口足够简单,只要你会发网络请求就能玩转。不像某些工业协议(Modbus、MQTT)还得专门学,对普通软件开发者来说非常友好。

先单路调通,再扩展到24路,最后上批量管理——这条路走下来,你基本就是半个无人售货机行业的全栈工程师了。