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

    文章

    1657

    浏览量

    57628
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入剖析Z80C30/Z85C30 CMOS SCC串行通信控制器

    深入剖析Z80C30/Z85C30 CMOS SCC串行通信控制器 在当今的电子通信领域,串行通信控制器扮演着至关重要的角色。Zilog公司的Z80C30和Z85C30 CMOS SC
    的头像 发表于 11-26 16:22 525次阅读
    深入剖析<b class='flag-5'>Z</b>80C30/<b class='flag-5'>Z</b>85C30 CMOS SCC串行通信控制器

    【EASY EAI】基于瑞芯微RV1126B 的串口调试说明

    putty来演示如何打开调试串口COM7。配置左侧的“serial”,波特率是1.5Mbps,如下图所示。配置左侧的“Session”,选择“Serial”并点击
    的头像 发表于 11-06 15:53 4905次阅读
    【EASY EAI】基于瑞芯微RV1126B 的<b class='flag-5'>串口</b>调试说明

    普源示波器DS1102Z-E调试串口通信信号

    串口通信作为嵌入式系统调试的核心手段,其信号质量直接影响数据传输的可靠性。普源DS1102Z-E示波器凭借其丰富的触发功能和精准的波形分析能力,成为调试串口通信的理想工具。本文将结合实际操作经验
    的头像 发表于 09-17 16:49 712次阅读
    普源示波器DS1102<b class='flag-5'>Z</b>-E调试<b class='flag-5'>串口</b>通信信号

    PLC与从远距离通信:PXB-6030D的妙用

    在工业现场,Modbus串口通信的短距离限制一直是工程师们面临的难题。本期我们将探讨如何通过ZLG致远电子PXB-6030D解决主PLC与从设备之间的远距离通信问题。Modbus串口
    的头像 发表于 07-17 11:39 387次阅读
    PLC与从<b class='flag-5'>站</b>远距离通信:PXB-6030D的妙用

    PLC串口资源受限?用PXB-6030D轻松解决

    在工业自动化中,设备接口不匹配常常让人头疼。本期我们来聊聊当PLC只有串口可用,而从设备只有以太网口时,如何通过ZLG致远电子PXB-6030D实现Modbus设备的连接。PLC串口与从
    的头像 发表于 07-16 11:41 350次阅读
    PLC<b class='flag-5'>串口</b>资源受限?用PXB-6030D轻松解决

    串口网关是什么

    串口网关是什么? 串口网关(Serial Gateway) 是一种硬件或软件设备,用于将 串口通信协议 (如RS-232、RS-485、TTL等)转换为 网络通信协议 (如TCP/IP
    的头像 发表于 06-05 11:31 544次阅读

    AWTK,开启属于你的GUI之美

    在当今数字化时代,软件界面设计的高效性和一致性至关重要。本文将探讨GUI设计从传统代码编写到所见即所得工具的演变,并介绍AWTK如何通过一致的渲染技术,为开发者带来高效且直观的开发体验。传统GUI
    的头像 发表于 05-13 11:31 791次阅读
    <b class='flag-5'>AWTK</b>,开启属于你的GUI之美

    还在为工业网关的ETHERNET/IP从配置和CANopen主设置感到困扰?本文将为您详细解析工业协议转换的配置技巧

    产品主要功能 疆鸿智能JH -EIP-COP 连接到EtherNet/IP总线中做为从使用,连接到CANopen总线中做为主使用。自主研发的一款EtherNet/IP从功能的通讯网关,将各种
    的头像 发表于 05-07 13:58 2023次阅读
    还在为工业网关的ETHERNET/IP从<b class='flag-5'>站</b>配置和CANopen主<b class='flag-5'>站</b>设置感到困扰?本文将为您详细解析工业协议转换的配置技巧

    AWTK-WEB 快速入门(6) - JS WebSocket 应用程序

    WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用Javacript语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程
    的头像 发表于 02-26 11:42 634次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(6) - JS WebSocket 应用程序

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程序先安装
    的头像 发表于 02-19 11:49 891次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    串口通讯隔离器的定义与作用

      在现代工业自动化、通信系统和嵌入式设备中,串口通讯(Serial Communication)是一种常见的数据传输方式。由于其简单、可靠且成本低廉,串口通讯被广泛应用于各种设备之间的数据交换
    的头像 发表于 02-06 16:01 2047次阅读

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。用AWTKDesigner新建一个应用程
    的头像 发表于 01-22 11:31 724次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(4) - JS Http 应用程序

    QT调用动态

    typedefunsigned char (*idr_beep)(unsigned long xms); typedefunsigned char (*idr_read)(unsigned char *serial
    发表于 12-28 16:19

    串口通信原理解析 串口与并口的区别

    在计算机硬件和通信领域,串口Serial Port)和并口(Parallel Port)是两种常见的数据传输接口。它们在数据传输方式、速度、应用场景等方面有着明显的区别。 串口通信原理 1. 定义
    的头像 发表于 12-27 09:50 3240次阅读

    bq40z60可编程电池组管理器技术参考手册

    电子发烧友网站提供《bq40z60可编程电池组管理器技术参考手册.pdf》资料免费下载
    发表于 12-18 16:38 3次下载
    bq40<b class='flag-5'>z</b>60可<b class='flag-5'>编程</b>电池组管理器技术参考手册