前言

这是一个18年初的创业项目的核心功能要求,我们当时打算做一个共享类的项目,项目的主题是共享图书,线下的形式租借图书,我们当时是考虑做一个借书柜的形式,然后线下生产投放借书柜,这些借书柜本身能存放24本书,大约24个柜子,且均有单片机控制。

用户通过扫码借书柜上的二维码,可以直接看到共享小程序里面的,针对这个借书柜的当前存在的图书,如果有用户喜欢的图书,那么用户可以直接点击小程序选择借书,那么这是小程序需要向后台发起API请求,由后台针对对应的借书柜的单片机进行通信,下发指令要求单片机打开对应该书的柜子。

大致步骤

后台构建

我选择用netty,当时使用的SSM的后台系统,不过最近一次整理我采用了SpringBoot+Netty来配合,我需要让单片机与netty能够正常的通信且是在业务功能正常执行的情况下。

团队的嵌入式工程师选用了简易的TCP/IP协议来通讯,且自己构建了电路板来控制对应的24把锁。

通讯协议

帧头+ID+数据类型+24把锁状态+crc校验+帧尾

这里介绍一下,帧头与帧尾是后台与单片机之间通讯的协议,我们使用普通的字符串来通讯,而通讯的过程中字符长度是固定的,帧头与帧尾都是自拟定的2个字符。

对于ID可能要介绍一下,这里是每一个单片机的身份证,因为对于每一个链接,netty都会生成一个自己的全局随机ID,这是不易于管理的。所以我们在生产的时候,后台就会对每个借书柜的单片机的通讯Id进行控制,固定的字段与唯一的标识,这有助于后台的管理,也能立马保证该借书柜的状态。

数据类型是针对业务而言的,我们的业务是需要控制类型、经纬度传输、设备电量、开关异常、报警等等,后台在获取到对应的数据类型的时候,就会进行对应的操作。

假如是控制类型的话,那么后面的24个字符就是对应的24把锁的状态,o表示开启、f表示关闭。

crc校验是方便双方做更深一层的校验与安全防护,我们采用了CRC16的方式,校验值都是4位。

心跳的保持是netty自身自带的。

netty操作

在netty链接实例的过程中,我会对链接进来的实例的第一次通讯进行以下操作,其实应该说每次都会进行的,通讯协议检测,正如上文说到的,帧头、帧尾、CRC校验。

在这一流程校验正常后,我将获取到他们的ID,我会立马将netty原先为它生成的随机ID进行替换,转换成我们定义的ID,并将其存储到系统内部的连接池中,以键值对的形式。

小程序API

在Controller层,我只需要去操作我们定义好的连接池,比如获取连接数、链接ID列表,甚至向链接发送开锁信息。

GitHub

项目:InChat-tcp-wechat

项目介绍:针对小程序与单片机硬件执行Iot物联网通讯(TCP/IP)的一套完整Demo。

启动流程

1、启动项目,tcp监听成功

2、运行com.myself.nettychat.tcptest.TCPTestClient (记得先改ip或端口,如果你有修改的话)

3、运行PostMan,请求下方的API 进行通信测试

API列表

http://localhost:8080/susu/back/get_channel_size GET

请求Iot中心,获取当前连接存活状态下的链接实例

{
"code": 200,
"msg": "成功",
"data": 1
}

http://localhost:8080/susu/back/get_channel_id_list GET

请求Iot中心,当前存活状态下的链接Id列表

{
"code": 200,
"msg": "成功",
"data": [
"F5690137563CC8"
]
}

http://localhost:8080/susu/back/send_to_channel POST

参数

  • channelId //第二个API获取到的链接Id
  • lock //将要打开的第几把锁 1-24(看单片机接入的锁的数量)
{
"code": 200,
"msg": "成功",
"data": "【发送成功】"
}

效果图


一个关于小程序与单片机的通信实例(TCP/IP)的更多相关文章

  1. 微信小程序与Java后台通信

    一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...

  2. 让微信小程序页面之间的通信不在变得困难

    一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品 ...

  3. 手把手教你写一个RN小程序!

    时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现 ...

  4. 如何快速地开发一个微信小程序

    如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...

  5. 第一个mpvue小程序开发总结

    前言 说起小程序,其实在去年我都还只试着照着官方文档写过demo的,不过现在这家公司小程序做得比较多,我来之后也参与了几个小程序的开发了,最开始那几个是用的wepy,最近一个开始转用mpvue开发,最 ...

  6. 「小程序JAVA实战」小程序和后台api通信(28)

    转自:https://idig8.com/2018/08/19/xiaochengxujavashizhanxiaochengxuhehoutaiapitongxin28/ 开发最重要的就是实操! 小 ...

  7. 搭建Spring开发环境并编写第一个Spring小程序

    搭建Spring开发环境并编写第一个Spring小程序 2015-05-27      0个评论    来源:茕夜   收藏    我要投稿 一.前面,我写了一篇Spring框架的基础知识文章,里面没 ...

  8. Day1:第一个python小程序

    Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...

  9. 第一个servlet小程序

    第一个servlet小程序 com.fry.servlet.HelloServlet package com.fry.servlet; import javax.servlet.ServletExce ...

随机推荐

  1. broken pipe 报错分析和解决办法

    参考资料: 1.博客1:https://blog.csdn.net/qq_37535749/article/details/113781338 2.博客2:https://blog.csdn.net/ ...

  2. 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)

    目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...

  3. const 对象的属性能否修改

    const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动. 对于基本类型的数据(数值.字符串.布尔值),其值就保存在变量指向的那个内存地址,因此等同于常量. 对于引用类型的数据(主要 ...

  4. mybatis crud 学习总结02

    1.db.properties 原因:数据库的连接直接写到配置(mybati-config.xml)里存在安全隐患 解决:将配置的信息放到一个文件中管理 右键resources --> File ...

  5. centos7下rsync+inotify脚本实现文件同步,.NET CORE客户端文件更新后自动重启服务

    源服务器IP:192.168.8.51 目标服务器IP:192.168.8.79 安装前源服务器及目标服务器均需关闭FIREWALLD\SELINUX防火墙 sestatus | grep statu ...

  6. java-Dos

    打开CMD的方式 1.菜单打开 2.Windows+R 输入cmd 3.shift+鼠标右键 选择在此处打开命令行窗口 4.资源管理器地址栏前+cmd 空格 管理员身份运行 常用的Dos命令 #盘符切 ...

  7. ArcGIS拓扑小技巧:两个面矢量合并但不叠加

    已知数据:底图图斑A,更新图斑B 使用软件:ArcMap 要求:将B于A合并为一个图斑.A与B不能重叠,重叠处以A为基准切割B图斑. 下面开始操作: 1. 将数据集中的图斑A.B添加到数据框内   打 ...

  8. Arcgis 离线部署api 4.x的两种本地部署方法!

    引言:本文用的是api4.6版本 方法一  拷贝api进去tomcat服务器用绝对地址引用 首先将下载好的api放入Tomcat服务中的Webapp下: 1  可以打开下载好的的 api46/arcg ...

  9. DDOS防御----CENTOS 内核TCP参数优化

    0x01 环境 attact作为攻击发起方,安装有hping server作为被攻击方,修改内核TCP参数.使用操作系统CENTOS7 0x02 步骤 一.发起攻击 修改TCP最大SYN连接数 使用a ...

  10. 17调试经验之串口读写flash协议

    一是设计功能 我的理解协议就是一个命令包,通过给出不同的控制命令,来调动不同的功能模块,实现不同的功能,如读数据,写数据,擦除等. 二设计过程 先看了尤老师的视频,主要讲了大致设计原理和总体框架,当然 ...