首页 > 数据库 > 数据库开发技术 > 【星闪开发连载】星闪网关的设计与实现
目录
对星闪模块WS63E的测试已经有一段时间了,在前面的博客也分享了自己的一些体会。今天要完成最终的成品了:星闪网关。所谓星闪网关就是可以接受客户端的连接和数据发送,并将数据转发给云端的设备。在实际生活中,星闪网关是非常有用的,因为很多星闪设备(如温湿度计、夜灯等)考虑到节能的需要,它们只有星闪一种无线方式,无法直接连接如云端,所以就需要网关设备做中转。
我设计的系统的结构组成如下图所示。其中,星闪客户端用于连接温湿度传感器获得环境信息,然后通过星闪联络传递给网关设备,而网关设备通过WiFi链路连接到路由器,并实现和华为云服务器的连接。网关设备作为星闪服务器收到客户端发来的数据将其通过MQTT协议发送到华为IoT云。

考虑到手头的硬件配置,我将星闪派物联网开发套件模拟星闪客户端,这样方便连接传感器,而将单独的星闪派开发板作为星闪网关。
有关技术的基本原理在前面的博客已经介绍了:
程序的基本架构参考了润和提供的SLE控制LED灯的例子。
SLE客户端部分添加了AHT20和SSD1306相关的代码,而网关部分增加了WiFi的程序。CMakeList.txt做了如下修改:
程序的基本流程是这样的:
温湿度程序改动比较小,只是将用来存储温湿度数据的temp和humi两个变量变成了全局变量,然后供星闪程序读取。由于温湿度程序启动速度比星闪程序快得多,所以当星闪程序去读取这个数据时,它肯定是有效的。
WiFi_STA.c程序基本没有修改。这个程序只在网关部分添加。主程序在初始化之后直接调用了WiFi初始化的程序,去实现和路由器之间的连接以及DHCP分配地址工作。在example_sta_function函数中增加了对mqtt_init的调用。这个代码有点瑕疵,就是如果有多个IP地址,mqtt_init会被调用多次,不过对于WS63E来说只有一个IP地址,问题不大。
MQTT初始化程序改动也很少,只是删除了原有的发布代码。
在星闪网关服务器端example_ssaps_write_request_cbk中实现了对publish的调用。
MQTT所需要的JSON数据组包工作是在星闪客户端中完成的。
完整的程序已经提交到Gitee上了(zealsoft/fbb_ws63 - 码云 - 开源中国),欢迎提出宝贵意见。
目前的程序需要分两次编译,分别产生星闪客户端和星闪服务器的程序。也可以对程序进行一些修改,比如检测不到温湿度传感器就说明是星闪服务器,这样就可以将程序合二为一。
分别将客户端和服务器的程序烧写到开发板上,我们就可以直接测试了。
星闪客户端的部分log如下,从中可以看出客户端连接到星闪服务器后就会把温湿度时间的JSON数据发送给星闪服务器:
星闪网关(服务器)的部分log如下,从中可以看到一旦星闪客户端建立连接,很快会收到上传的数据,然后网关就会通过MQTT将其发送的华为云(日志中的服务器地址、设备ID做了特殊处理):
登录华为IoTDA控制台,可以看到上传的数据。由此可见,整个系统功能正常。

经过这段时间的测试,WS63E模块整体的使用和hi3861差不多,星闪的编程模式和蓝牙差不多,读者要是想快速掌握星闪的编程,最好有点蓝牙的基础。
星闪技术应该是华为被蓝牙联盟踢出来之后给出的技术标准,就像OpenHarmony之于Android差不多。还是希望星闪技术不断发展,走出自己的道路。
虽然此次星闪体验官的测试任务完成了,但是后续仍然会继续分享一些对星闪技术的测试和分析,欢迎继续关注我的博客。
原文作者:神一样的老师;如有侵权,请联系管理员删除。