0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程

ZLG致远电子 2022-08-08 10:06 次阅读

把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的使用方法。

1d247994-1516-11ed-9ade-dac502259ad0.jpg 基本功能我们编写一个简单的应用程序,它有两个功能:

  • 把收到的数据显示出来。
  • 把界面输入的数据发送给对方。


1d247994-1516-11ed-9ade-dac502259ad0.jpg UI界面描述文件1d3d20f2-1516-11ed-9ade-dac502259ad0.png

  

"open" text="Open Device" x="10" y="100" w="160" h="36" /> "device"x="180"y="100"w="-200"h="36"text="/dev/ttys032"/> "send"text="SendMessage"x="10"y="150"w="160"h="36"/> "send_msg"x="180"y="150"w="-200"h="36"text="helloserial"/> "recv_msg"x="c"y="b:100"w="90%"h="100"/> "serial"/>1d247994-1516-11ed-9ade-dac502259ad0.jpg 接收数据先注册数据事件的处理函数。

widget_child_on(win, "serial", EVT_DATA, on_data, win);

在处理函数中读取数据并显示到界面上。

static ret_t on_data(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(e->target); widget_t* label = widget_lookup(win, "recv_msg", TRUE); int32_t len = tk_istream_read(serial->istream, text, sizeof(text)-1); if(len > 0) {
    text[len] = '\0';
    widget_set_text_utf8(label, text);
  }returnRET_OK;
}

1d247994-1516-11ed-9ade-dac502259ad0.jpg 发送数据

从界面读取数据,并发送到串口

static ret_t on_send(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(widget_lookup(win, "serial", TRUE)); widget_t* edit = widget_lookup(win, "send_msg", TRUE);
  widget_get_text_utf8(edit, text, sizeof(text)-1);
  tk_ostream_write_len(serial->ostream, text, strlen(text), 3000); return RET_OK;
}

完整代码请参考 serial 可以下载 awtk-c-demos 编译运行。

./bin/demo_serial

1d247994-1516-11ed-9ade-dac502259ad0.jpg 测试

下面操作是在 Linux/MacOS 上测试的,Windows 下需要安装虚拟串口软件,具体做法有些不同,请自行调整。

使用socat创建虚拟串口

socat -d -d pty,raw,echo=0 pty,raw,echo=0

该命令会生成两个设备文件,对应串口的两端(每次生成的设备名可能不同)。

2022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0322022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0332022/07/08 16:32:33 socat[1879] N starting data transfer loop with FDs [5,5] and [7,7]

在AWTK 这端我们使用设备/dev/ttys032
在另外一端读取数据
打开一个新的终端,并运行下面的命令(有数据时自动显示出来):

cat /dev/ttys033

在另外一端发送数据

打开一个新的终端,并运行下面的命令(发送当前时间字符串):

date >/dev/ttys033

1d247994-1516-11ed-9ade-dac502259ad0.jpg 使用fscript进行串口编程

也可以使用 fscript 进行串口编程(配合 AWBlock 就简单了)。AWTK 里提供一个与前面功能相同的例子,总体来看要简洁不少。

  

"打开设备" x="16" y="15" w="76" h="34" > "on:click"> var device = widget_get('device', 'text') widget_set('serial','device', device)

  "device" x="119" y="13" w="178" h="38" text="/dev/ttys028" />
  "recv" x="5" y="123" w="303" h="101" />
  "send" text="hello serial" x="5" y="273" w="200" h="34" />
  

"button" tr_text="send" x="220" y="274" w="81" h="34" > "on:click"> var os = widget_get('serial','ostream') var msg = widget_get('send', 'text') ostream_write_string(os, msg)

  "serial">
    "on:data">
      var is = widget_get('self','istream')
      var msg = istream_read_string(is, 100, 0)
      widget_set('recv', 'text', msg)    
  

在 AWTK 根目录下可以运行该例子,测试方法与前面相同。

./bin/preview_ui design/default/ui/serial.xml

1d247994-1516-11ed-9ade-dac502259ad0.jpg 移植

目前串口只实现了Windows, Linux, MacOS, Android 和 AWorks 等平台,其它平台需要自己移植。

请参考AWorks平台的移植:

src/platforms/aworkslp/serial_helper.c

【版权声明】本文为ZLG开发者社区用户原创内容,未经授权不得转载。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串口通信
    +关注

    关注

    34

    文章

    1620

    浏览量

    55426
收藏 人收藏

    评论

    相关推荐

    AWTK 最新动态:支持浏览器控件

    导读AWTK浏览器控件,基于webview项目实现,将浏览器嵌入到AWTK应用程序中,让开发者可以方便的集成在线帮助和调用地图等功能。awtk-widget-web-view是基于webview实现的
    的头像 发表于 11-20 01:05 102次阅读
    <b class='flag-5'>AWTK</b> 最新<b class='flag-5'>动态</b>:支持浏览器控件

    AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)

    导读HarmonyOS是全球第三大移动操作系统,有巨大的市场潜力,在国产替代的背景下,机会多多,AWTK支持HarmonyOS,让AWTK开发者也能享受HarmonyOS生态的红利。AWTK全称
    的头像 发表于 11-06 08:03 153次阅读
    <b class='flag-5'>AWTK</b> 最新<b class='flag-5'>动态</b>:支持鸿蒙系统(HarmonyOS Next)

    AWTK最新动态AWTK 1.8版本发布

    AWTK是一套基于C语言开发的跨平台GUI框架,目前正式推出1.8版本。本次更新不仅对许多细节进行了优化,还增添了众多重要特性和文档资料。此外,还引入了三款创新控件和两个与AWTK相关项目。AWTK
    的头像 发表于 08-30 12:48 382次阅读
    【<b class='flag-5'>AWTK</b>最新<b class='flag-5'>动态</b>】<b class='flag-5'>AWTK</b> 1.8版本发布

    AWTK 开源串口屏开发(16) - 提供 MODBUS 服务

    AWTK串口屏内置MODBUS从模型,不用编写一行代码即可让串口屏提供MODBUS服务,让远程设备通过MODBUS协议访问串口屏上的数据。
    的头像 发表于 04-13 08:24 413次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(16) - 提供 MODBUS 服务

    AWTK 开源串口屏开发(15) - 通过 MODBUS 访问远程数据

    AWTK串口屏内置MODBUSClient模型,支持用MODBUS协议从远程设备获取数据。不用编写代码即可实现对远程设备数据的显示和修改。在AWTK串口屏中,内置了MODBUSClie
    的头像 发表于 03-30 08:23 378次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(15) - 通过 MODBUS 访问远程数据

    AWTK 开源串口屏开发(12) - 记事本应用

    记事本是一个常用的应用程序,在AWTK串口屏中,内置文件模型和文件选择对话框,无需编写一行传统的代码,即可实现一个简单的记事本应用程序。记事本是一个很常用的应用,用来编辑和查看文本文件非常方便。在
    的头像 发表于 03-09 08:23 323次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(12) - 记事本应用

    AWTK 开源串口屏开发(11) - 天气预报

    AWTK串口屏内置了XML/JSON/INI等各种数据文件的模型,并支持用HTTP/HTTPS从网络获取数据。不用编写一行代码,即可实现天气预报、股票行情、航班查询和快递查询等功能。天气预报是一个很
    的头像 发表于 03-05 08:24 370次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(11) - 天气预报

    AWTK开源智能串口屏方案】设计UI界面并上传到串口

    本篇文章将介绍如何使用AWStudio设计串口屏端的UI界面和添加绑定规则,以及怎么将资源文件上传到串口屏端。引言:AWTK-HMI是基于AWTK
    的头像 发表于 02-22 08:24 667次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b>屏方案】设计UI界面并上传到<b class='flag-5'>串口</b>屏

    AWTK开源智能串口屏方案】MCU SDK使用与编译运行

    本篇文章将介绍AWTK-HMI中的MCU端开发方法,包括MCUSDK常用API的说明、使用流程及如何编译到Linux和STM32平台。引言:AWTK-HMI是基于AWTKAWTK-M
    的头像 发表于 02-19 12:11 1135次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b>屏方案】MCU SDK使用与编译运行

    AWTK 开源串口屏开发(9) - 用户和权限管理

    AWTK串口屏中,内置用户管理和权限控制的模型,无需编码即可实现登录、登出、修改密码、权限控制、创建用户、删除用户等功能,本文介绍一下用户管理和权限控制的基本用法。用户管理和权限控制是一个常用
    的头像 发表于 02-19 12:10 476次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(9) - 用户和权限管理

    AWTK开源智能串口屏方案】HMI端程序移植编译及运行

    本篇文章介绍一下AWTK开源智能串口屏方案的串口屏端(即HMI端)的编译运行步骤,并介绍如何将HMI端移植到Linux或STM32平台或RTOS平台,以及如何配置资源文件。引言:AWTK
    的头像 发表于 01-18 08:24 857次阅读
    【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b>屏方案】HMI端程序移植编译及运行

    AWTK 开源串口屏开发(6) - 定时器的用法

    定时器是个常用的功能,AWTK串口屏提供了丰富的定时器函数,用于定时器的启动、停止、暂停、恢复、修改和重置等功能,本文以计时器的例子来介绍定时器的基本用法。定时器也是一个常用的功能,在AWTK
    的头像 发表于 01-13 08:24 541次阅读
    <b class='flag-5'>AWTK</b> 开源<b class='flag-5'>串口</b>屏开发(6) - 定时器的用法

    AWTK 串口屏开发(5) - MCU端 SDK 用法

    AWTK开源智能串口屏,不但开放了串口屏端全部源码,还提供了MCU端SDK,大大加快MCU软件的开发。本介绍一下MCU端SDK在不同平台上的用法。完整示例可以参考下面的
    的头像 发表于 01-06 08:24 403次阅读
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b>屏开发(5) - MCU端 SDK 用法

    ​【AWTK开源智能串口屏方案】方案介绍和工作原理

    本篇文章介绍一下AWTK开源智能串口屏方案的基本原理和实际使用效果,包括主要特点、应用场景、工作原理以及简单的Demo演示。引言:AWTK-HMI是基于AWTK
    的头像 发表于 12-21 08:24 948次阅读
    ​【<b class='flag-5'>AWTK</b>开源智能<b class='flag-5'>串口</b>屏方案】方案介绍和工作原理

    AWTK 开源智能串口屏方案

    AWTK开源智能串口屏方案发布,旨在解决传统串口屏诸多痛点,为用户提供更开放、更易用、更强大的开源串口屏方案。基于AWTK
    的头像 发表于 12-02 08:24 892次阅读
    <b class='flag-5'>AWTK</b> 开源智能<b class='flag-5'>串口</b>屏方案