智能家居服务发现实现

服务设备软件架构设计

代码复用

将网络通信框架移植到开发板,之后,可以使用框架中的组件实现 Response Task 和 Service Task。

框架移植注意事项

LWIP 是微型 TCP/IP 协议栈 (并非完整 TCP/IP 协议栈)

支持 socket 接口,但一些功能未实现

socket 接口所在头文件不同于 Linux 和 Windows 平台

完成可移植性测试,对测试中出现的问题及时修复

可移植性测试

通过网络调试助手验证 TCP 数据收发

  • 设备端运行服务端,客户端连接,数据收发功能

通过网络调试助手验证 UDP 数据收发

  • 设备接收广播,并回复数据

Service Task 关键实现

Response Task 关键实现

网络通信框架移植

main_entry.c

#include <stdio.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifi_connect.h"
#include "response_task.h"
#include "service_task.h"static void* Task_Init(const char* arg)
{Wifi_Init();Wifi_Connect("wifi_test", "12345678");Wifi_Start();if(Wifi_IsOk){osThreadAttr_t attr = {0};printf("connect wifi success! ip = %s\n", Wifi_IpAddr());attr.name = "Response Task";attr.stack_size = 4 * 1024;attr.priority = 20;if(osThreadNew((osThreadFunc_t)Response_Task, NULL, &attr) == NULL){printf("failed to create response task!\n");}attr.name = "Service Task";attr.stack_size = 4 * 1024;attr.priority = 20;if(osThreadNew((osThreadFunc_t)Service_Task, NULL, &attr) == NULL){printf("failed to create service task!\n");}}return arg;
}static void Main_Entry(void)
{osThreadAttr_t attr = {0};attr.name = "Task_Iniit";attr.stack_size = 4 * 1024;attr.priority = 20;if(osThreadNew((osThreadFunc_t)Task_Init, NULL, &attr) == NULL){printf("failed to create task!\n");}
}SYS_RUN(Main_Entry);

response_task.h

#ifndef RESPONSE_TASK
#define RESPONSE_TASKvoid* Response_Task(const char* arg);#endif

response_task.c

#include <stdio.h>
#include "response_task.h"
#include "udp_point.h"void* Response_Task(const char* arg)
{UdpPoint* point = NULL;Message* msg = NULL;char remote[16] = {0};int port = 0;point = UdpPoint_New(9999);if(point){printf("point = 0x%X\n", point);while(1){msg = UdpPoint_RecvMsg(point, remote, &port);if(msg != NULL){printf("msg = 0x%X\n", msg);printf("receive a message, ip = %s, port = %d\n", remote, port);printf("type = %d, cmd = %d, index = %d, total = %d, lengh = %d\n", msg->type, msg->cmd,msg->index, msg->total, msg->length);if(msg->length > 0){printf("data: %s\n", msg->payload);}free(msg);}}UdpPoint_Del(point);}return NULL;
}

service_task.h

#ifndef SERVICE_TASK_H
#define SERVICE_TASK_Hvoid* Service_Task(const char* arg);#endif

service_task.c

#include <stdio.h>
#include "service_task.h"
#include "tcp_server.h"static void Server_Listener_Handler(TcpClient* client, int evt)
{if(evt == EVT_COON){printf("a client connect\n");}else if(evt == EVT_DATA){Message* msg = NULL;msg = TcpClient_RecvMsg(client);if(msg){printf("msg = 0x%X\n", msg);printf("type = %d, cmd = %d, index = %d, total = %d, lengh = %d\n", msg->type, msg->cmd,msg->index, msg->total, msg->length);if(msg->length > 0){printf("data: %s\n", msg->payload);}free(msg);}}else if(evt == EVT_CLOSE){printf("a client left\n");}return NULL;
}void* Service_Task(const char* arg)
{TcpServer* server = NULL;server = TcpServer_New();if(server){printf("server = 0x%X\n", server);TcpServer_SetListener(server, Server_Listener_Handler);TcpServer_Start(server, 8888, 5);TcpServer_DoWork(server);TcpServer_Del(server);}return NULL;
}

问题及原因

LWIP 未实现选项组合 IPPORTO_TCP,TCP_INFO

int TcpClient_IsValid(TcpClient* client); 总是返回假,导致服务端逻辑错误

MParser 从内存解析数据且内存中的协议消息无 payload (length == 0)

Mparser 无法将解析状态推到最终态,导致解析结果为 NULL

实验结果

我们使用 UdpPoint 能够成功地收发数据

 

 TCP 通信框架我们也成功的移植了过来,测试了并没有问题。

课后思考

Response Task 和 Service Task 的业务逻辑如何实现?客户端如何实现?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MQTT的智能家居程序框架

小白能懂&#xff1a;嵌入式进阶&#xff1a;RTOS嵌入式系统框架 第一章 嵌入式常用裸机编程框架 第二章 面向对象编程基础 第三章 ESP8622物联网基础 第四章 STM32与ESP8266物联网编程 第五章 物联网编程优化 第六章 以OLED为例介绍RTOS面向对象编程 第七章 基于MQTT的智能家…

智能家居 —— 串口通信(语音识别)线程控制

文章目录 串口通信线程控制代码mianPro.cinputCommand.hvoiceControl.c测试结果 语音控制部分语言控制模块YS-LDV7 若要完成串口之间的通信&#xff0c;需要再树莓派上完成配置文件的修改&#xff0c;利用测试代码验证串口收发功能是否正常&#xff0c;详情可以参考博文&#x…

智能家居(3) —— 串口通信(语音识别)线程控制

目录 一、串口通信线程控制代码 mianPro.c inputCommand.h voiceControl.c 测试结果 二、语音控制部分 一、串口通信线程控制代码 mianPro.c #include <pthread.h> #include "controlDevice.h" #include "inputCommand.h"struct InputCommand…

[第一步]homekit智能家居,homebridge与homebridge-aqara通信协议

根据这个就可以使用iphone控制灯与开关. 折腾了3个晚上,终于将homebridge安装好,安装之前需要安装一堆的库,比如node.js运行环境等,因为网上资料大部分都是在树莓派上面运行,我是直接在ubuntu上面进行的测试,因为安装会有所区别,但是安装好之后就一样了,安装方法在此我就不写了…

智能家居系统 QT

一 环境范围设置 &#xff08;1&#xff09;界面添加新控件 在mainwindow.ui 添加控件&#xff1a; 控件的类型 文本内容 对象名&#xff08;唯一&#xff09; 是否有槽函数 QLabel <温度< lable_随意 否 QLabel <湿度< lable_随意 否 QLabel <光…

Home Assistant 智能家居自动化

一、Home Assistant 自动化中的一个重要概念——模式 引入模式&#xff0c;用于解决正在执行过程中的同一规则又一次被触发的问题 二、Home Assistant 自动化规则的组成部分 2.1 触发条件Trigger&#xff1a;表示智能家居中事件或状态的转换 可选持续时间(特有) trigger有…

qt实现智能家居系统

一、项目介绍 通过TCP/IP协议实现客户端和和服务端的链接&#xff0c;服务端和下位机通过串口通信的方式链接&#xff0c;传递信息&#xff0c;客户端通过账号登录进入进入智能家居服务系统&#xff0c;账号登录和QQ登录类似&#xff0c;我采用的是数据库的方式实现数据的存储和…

语音识别智能家居控制设计

目录 一、方案流程及技术规格书设计 二、系统硬件电路设计 三、软件编写及调试 四、系统调试测试与分析 前言 随着科学技术的快速发展&#xff0c;人们对生活品质的要求也不断提高&#xff0c;开始追求更好更方便的生活方式。因此&#xff0c;智能家居系统应运而生。智能家…

智能家居之网关

网关诞生的背景 很多物联网终端设备在设计之初就考虑了低功耗、低成本的需求&#xff0c;因此大量的物联网终端设备是靠电池来工作并且需要运行相当长的一段时间&#xff0c;比如油田、农业相关的传感器&#xff0c;且这些终端设备不需要实时与物联网平台通讯&#xff0c;甚至…

智能家居是否可与ChatGPT深度融合?

​ ChatGPT自2022年面世以来&#xff0c;已为亿万网民提供智能问答服务。然而我们是否曾想到&#xff0c;这一人工智能驱动的聊天机器人&#xff0c;是否可为智能家居赋能? 要实现ChatGPT与智能家居设备之间的无缝对话&#xff0c;单单依靠一台终端是远远不够的。ChatGPT必须…

调查报告数据分析怎么做?

调查报告数据分析怎么做&#xff1f;拿到一份调查报告看选题、选题内容、调查的目的&#xff0c;然后清洗数据&#xff0c;分析数据提炼观点&#xff0c;过数据变化规律&#xff0c;揭示事物内在发展变化和趋势&#xff0c;抓住问题的本质和关键。 一、分析数据提炼观点 数据分…

pyqt5制作翻译软件+爬虫

VSCpythonmysql&#xff0c; 文章目录 目录 文章目录 前言 一、详细代码 第一个文件Ui_untitled.py 第二个fy_main.py文件&#xff1a; 第三个 &#xff1a;bd_pachong.py 二、登录界面&#xff1a; 总结 前言 通过pyqt5实现了翻译界面的可视化&#xff0c;利用python爬虫实现了…

给 30 岁左右的你三个职场跃迁/改变命运的建议!

见字如面&#xff0c;我是军哥&#xff01; 通过公众号的后台用户画像数据&#xff0c;我发现我的读者在 26 到 32 岁的年龄阶段的人数最多&#xff0c;所以今天来聊一聊这个话题&#xff0c;你一定要看到最后&#xff0c;会让你少走很多弯路&#xff01; 核心观点主要包括三个…

38岁程序员和你分享4个人生经验!

蓝色关注&#xff0c;回复“1”获取知名公司程序员和产品经理职级 这是我的第「123」篇原创文章 见字如面&#xff0c;我是军哥。 我最近一直想写一篇稍微长点的文章&#xff0c;毕竟内容篇幅有时候决定内容广度和深度。 距离我之前写的那篇文章《一位互联网老兵的五次认知升级…

【我命由我不由天】30多岁的大龄程序员,应该如何保持职场竞争力?

公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料 扫描下方海报二维码&#xff0c;试听课程&#xff1a; &#xff08;课程详细大纲&#xff0c;请参见文末&#xff09; 目录 回首往事&#xff1a;自己竟没有任何核心优势&#xff01;公司遇到危机时&#xff0c;大…

写给互联网人35岁之后的建议

作者介绍 李凯东 某大厂大数据总监&#xff0c;管理经验丰富&#xff1b; 负责数据、用户、搜索、推荐、AI等&#xff1b; 曾有10年连续创业经历&#xff1b; 产研运全能&#xff0c;国内知名比赛获奖无数&#xff1b; “数据人创作者联盟”成员。 又到了春节&#xff0c…

程序员如何跨越35岁危机?这篇给点干货建议!

职场&认知洞察 丨 作者 / findyi 这是findyi公众号的第83篇原创文章 这两天在我的读者群里做了一个职业小调研&#xff0c;发现关注我公众号的70%以上都是程序员。 毕竟程序员吸引程序员&#xff0c;这也算猿粪吧&#xff0c;哈哈。 这个小调研也引发大家对程序员行业的激烈…

35岁是人生分水岭?一定要做这7件事

在网上看到这样的帖子&#xff0c;说的是35岁以上的员工&#xff0c;有人脉的卖保险&#xff0c;没人脉的跑滴滴&#xff0c;实在不行送外卖。招聘时&#xff0c;35岁以下优先。调整时&#xff0c;35岁以上优化。对绝大数人来说&#xff0c;35岁是一道坎&#xff0c;35岁是人生…

32岁大龄女程序员的职场经历总结,分享重回职场的感受

不知不觉已经三十过二&#xff0c;我2016年研究生毕业就来到了苏州一家国企。我对自己并没有清晰的职业规划&#xff0c;还记得来这家公司面试时&#xff0c;面试官问我&#xff0c;为啥选择我们公司。我说因为他是国企又有互联网公司的性质&#xff0c;即稳定又能写代码&#…

麦肯锡:给20、30岁职场年轻人的14条建议!条条珍贵

点击“技术领导力”关注∆ 每天早上8:30推送 来源&#xff1a; 《麦肯锡决断力》 1、 选择工作的标准: 选择有利于自己成长的公司&#xff1b; 选择可以从事国际性工作的公司&#xff1b; 选择可以充分发挥自身能力&#xff0c;创造出价值&#xff0c;并且可以为社会做出贡献…