手把手教你开发IOT设备
1.概述
IOT设备的开发是基于rt-thread rtos实现。rt-thread是一个国产RTOS,它是一个RTOS,但又不仅仅是RTOS,支持大量的芯片,驱动,还包含大量的软件包,为开发者提供非常大的便利,这也是我喜欢rt-thread的原因之一。统一的驱动接口,为上层应用开发也带来很大的便利。本次所讲的IOT设备基本都是采用rt-thread提供的软件包。下面我来将,如何开发IOT设备
IOT设备的开发我会持续更新,文章写的只是个大概的实现方案和框架。待我完成整个设备的代码和硬件设计后,我会跟着出一套硬件来给开源给大家的作为学习参考。
如有疑问或者有其他想法的可以发邮件给我:[email protected]
2.功能设计
2.1.以太网连接(MQTT/TCP/UDP)
MQTT模式 远程连接物联网平台,支持设备参数设置和获取,支持数据上报
TCP SERVER 模式支持本地局域网连接IOT设备,支持3个客户端连接,初版不支持TCP SERVER,这个功能暂时不实现
UDP SERVER 模式支持本地局域网内发现IOT设备和基础参数配置,但不支持数据主动上报
2.2.路继电器输出
远程控制继电器的闭合 断开,并记录动作时间以及动作
2.3.路开关量输入
远程采集开关量的值
2.4.温湿度检测
定期采集温湿度,并与设置的上限值和下限值对比,如果超限则上报,并实时记录采集的温湿度
2.5.RS485透传采集
2.6.实时时间及掉电运行
2.7.远程OTA
3.硬件框架
硬件框架
框图说明
主控芯片采用的是STM32F405RE
以太网芯片采用ENC28J60,用于联网
RS485 采用 max485,用于透传
UART 用于打印调试信息
2路开关量输入,光耦隔离
2路继电器输出,10A
时钟是采用STM32 内部RTC模块
温湿度传感器 SHT20
FLASH存储 W25Q64
4.软件框架
软件框架
整个软件框架是基于rt-thread RTOS来实现的,其中包含内核,BSP,组件软件包都是基于rt-thread的。在这个框架下我们来快速搭建开发产品
5.IOT通讯协议设计及实现
协议结构说明
通讯协议在通讯中是非常重要的,是连接两个终端的交互方式。所以通讯协议设计也是至关重要的。下面来看看我设计的通讯协议
协议结构
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
10~n |
n+1 |
| 起始字节 |
长度 |
校验字节 |
协议参数 |
消息ID |
数据内容 |
结束字节 |
|||||
| 0x3E |
0xNNNN |
CRC16 |
0xNN |
0xNNNNNNNN |
dlenght |
0x0A |
|||||
协议说明
起始字节:表示该消息的开始
长度:从长度的第一字节开始 到 数据的最后一个字节,不包含起始字节和结束字节
校验字节:用于校验该消息的准确性,确保消息没有被修改过,从协议参数开始 到数据结束
协议参数:
第1位:表示方向帧,0:请求,1:应答
消息ID:表示消息的唯一性标识符,消息ID的生成方式是
数据内容:JSON格式消息
结束字节:表示消息结束
发送顺序:
先发送低字节,再发送高字节
用途:
用于MQTT/TCP/UDP通讯方式中
接口说明
获取IOT设备信息
接口名称:
get_iot_dev_info
请求参数
无
返回结果
| dev_sn |
设备*** |
JSON包
请求JSON包
{
"function":"get_iot_dev_info",
"data":{
}
}
回应JSON包
{
"function":"get_iot_dev_info"
“result”:0,
"data":{
“dev_sn”:124151514141
“ip”:”192.168.1.112”
}
}
设置MQTT信息
接口名称:
set_mqtt_info
请求参数
| dev_sn |
设备*** |
| username |
Mqtt用户名 |
| password |
Mqtt密码 |
| clientid |
客户端ID |
|
|
|
返回结果
无
JSON包
请求JSON包
{
"function":"set_mqtt_info"
"data":{
“dev_sn”:13141413,
“username”:””xxx,
“password”:”11111”,
“clientid”:”123131”
}
}
回应JSON包
{
"function":" set_mqtt_info",
“result:0,”
"data":{
}
}