玩转LiteOS组件:玩转Librws
摘要:Librws是一个跨平台的websocket客户端,使用C语言编写。
本文分享自华为云社区《LiteOS组件尝鲜-玩转Librws》,作者: W922 。
本期小编为大家带来LiteOS开源版本Librws 组件的使用说明,请跟随小编的步伐一起进入探索之旅吧!
基本介绍
Librws是一个跨平台的websocket客户端,使用C语言编写。它有如下特点:
- 无其他依赖关系
- 带有公共方法的单独的公共方法库librws.h
- 线程安全
- 后台线程中的发送/接收逻辑
详情参考:https://github.com/OlehKulykov/librws。
WebSocket是一种在单个TCP连接上进行全双工通信的协议。
详情参考:https://baike.baidu.com/item/WebSocket/1953845?fr=aladdin。
使能Librws Demo
- 在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。
注意:根据Librws所需资源,暂时只支持在STM32F769开发板上运行LibrwsDemo。
- 在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能Librws Demo。
Demos --->
Librws Demo --->
[*] Enable Librws Demo
注意:使能Librws Demo后会自动使能Librws组件和LWIP。
- 保存退出后,会从github上自动下载Librws源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。详细流程在components/download.sh文件中。
注意: 下载需要Linux主机可以访问互联网,并安装git。
编译运行Librws Demo
服务端配置
服务端代码路径为LiteOS/demos/librws/websocketserver.py,需要python3环境可运行。启动服务端步骤如下(命令行操作):
- 修改服务端代码中的变量的ip为服务器ip地址。
# creat websockets server, please change ip as your ip address.
ip = ''
startServer = websockets.serve(MainLogic, ip, 8000)
- 通过python pip命令安装websocket包。
pip install websockets
- 运行websocketserver.py脚本。
python websocketserver.py
客户端配置
Librws Demo需要网络连接,在STM32F769开发板插入网线,并确保网络连接。客户端操作步骤如下:
- 修改LiteOS/demos/librws/librws_demo.c中的WEBSOCKET_DEMO_SERVER为服务端IP或域名。
#define TEXT_BUFF_LEN 1024
#define BIN_BUFF_LEN 1024
#define WEBSOCKET_DEMO_SERVER "your.ip.address"
#define WEBSOCKET_DEMO_PORT 8000
#define LIBRWS_TASK_PRIORITY 6
#define LIBRWS_TASK_STACK_SIZE 0x1400
注意: 改为域名需要开启LWIP_DHCP(DNS需要DHCP来初始化,在Linux下编译,使能LWIP 会默认开启DHCP)。
- 修改Kernel中默认任务栈大小。在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径设置,修改为4096。
Kernel --->
Basic Config --->
Task --->
(4096) Task Defalut Stack Size
编译烧录
- 在LiteOS源码根目录下执行make clean; make -j命令编译LiteOS工程,编译成功后会在out/{platform}/lib路径下生成liblibrws.a和liblibrws_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。
- 烧录操作请参考https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Quick_Start.md。
- 启动LiteOS后会先初始化网络,开启DHCP,然后运行Librws Demo,建立websocket连接并向服务端发送数据,服务端接收到数据后会返回数据,运行结果如下:
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
build data : Jul 14 2021 17:15:39
**********************************
OsAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
lwip_init OK!!
dhcp start...
Librws demo start to run.
Huawei LiteOS #
Websocket connected
Websocket receive text:
your submit context: LiteOS Websocket demo data
以上为“Librws”使用说明的全部内容,欢迎大家学习交流。
结语
未来我们还会持续新增更多组件、开发板、架构、特性等。
感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:
https://gitee.com/LiteOS/LiteOS/issues。为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如图所示。
玩转LiteOS组件:玩转Librws的更多相关文章
- 一起玩转玩转LiteOS组件:TinyFrame
摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...
- 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...
- 带你尝鲜LiteOS 组件EasyFlash
摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...
- 恕我直言!!!对于Maven,菜鸟玩dependency,神仙玩plugin
打包是一项神圣.而庄严的工作.package意味着我们离生产已经非常近了.它会把我们之前的大量工作浓缩成为一个.或者多个文件.接下来,运维的同学就可以拿着这些个打包文件在生产上纵横四海了. 这么一项庄 ...
- 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- window下不用安装虚拟机,也可以玩转linux,玩转最新redis
想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...
- 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- openstack手动玩转
<一,preface Important Project Network> openstack or all most cloud env Network desgine is so m ...
- ASP.NET Core 借助 K8S 玩转容器编排
Production-Grade Container Orchestration - Automated container deployment, scaling, and management. ...
随机推荐
- 4、传统三层架构与DDD分层架构
4.传统三层架构与DDD分层架构 模型是抽象的 现实是形象的 技巧是重要的 思想是永恒的 从传统三层架构与DDD分层架构的编程演变其实是思想的演变. 传统三层架构,即用户界面层UI.业务逻辑层BAL. ...
- 关于List、Set、Map接口讲解
概述 List.Set接口都是继承于Collection主接口,而Map为独立接口 1.List接口下有ArrayList.Vector.LinkedList实现类 2.Set接口下有HashSet. ...
- loj#6072 苹果树(折半搜索,矩阵树定理,容斥)
loj#6072 苹果树(折半搜索,矩阵树定理,容斥) loj 题解时间 $ n \le 40 $ . 无比精确的数字. 很明显只要一个方案不超过 $ limits $ ,之后的计算就跟选哪个没关系了 ...
- Dubbo 集群容错有几种方案?
集群容错方案 说明 Failover Cluster 失败自动切换,自动重试其它服务器(默认) Failfast Cluster 快速失败,立即报错,只发起一次调用 Failsafe Cluster ...
- Springboot 抛出Failed to determine a suitable driver class异常原因
SpringBoot项目,已经依赖了MySQL驱动,却还是无法启动,通过问题排除,如果是启动项目,那么pom值 <packaging>pom</packaging> Faile ...
- 学习k8s(三)
一.Kubernetes核心概念 1.Kubernetes介绍 Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署 ...
- 当心,你搞的Scrum可能是小瀑布
摘要:有的团队刚接触Scrum,一个问题令他们很困扰:迭代初期开发人员的工作较多,测试人员闲着:迭代末期开发人员闲着,测试人员的工作比较多,怎么解决资源等待的问题呢? 本文分享自华为云社区<当心 ...
- c、c++中-int型以float或者float型以int输出问题
1.将浮点型以整形的类型输出问题 用VC6.0,会把以整形输出形式的浮点数输出为0: 1 #include"stdio.h" 2 int main() 3 { 4 float x= ...
- Vue中获取元素宽高
<div ref="init"></div> 写在 页面 方法 部分 这里的 offsetHeight 是返回元素的宽度(包括元素宽度.内边距和边框,不包括 ...
- SCSS学习笔记(一)
SCSS的由来 SCSS就是加强版的CSS,要讲SCSS那就一定要从SASS讲起 SASS Sass(英文全称:Syntactically Awesome Stylesheets)是一个最初由Hamp ...