0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【Z站推薦】AWTK最新動(dòng)態(tài):使用serial_widget簡(jiǎn)化串口編程

ZLG致遠(yuǎn)電子 ? 2022-08-08 10:06 ? 次閱讀

把串口做成一個(gè)控件并不新鮮,在VB里有個(gè)通信組件,就是用來(lái)簡(jiǎn)化串口編程的。最近AWTK也提供了這樣一個(gè)控件serial_widget,本文介紹一下它的使用方法。

1d247994-1516-11ed-9ade-dac502259ad0.jpg 基本功能我們編寫一個(gè)簡(jiǎn)單的應(yīng)用程序,它有兩個(gè)功能:

  • 把收到的數(shù)據(jù)顯示出來(lái)。
  • 把界面輸入的數(shù)據(jù)發(fā)送給對(duì)方。


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 接收數(shù)據(jù)?先注冊(cè)數(shù)據(jù)事件的處理函數(shù)。

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

?在處理函數(shù)中讀取數(shù)據(jù)并顯示到界面上。

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 發(fā)送數(shù)據(jù)

從界面讀取數(shù)據(jù),并發(fā)送到串口。

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;
}

完整代碼請(qǐng)參考 serial 可以下載 awtk-c-demos 編譯運(yùn)行。

./bin/demo_serial

1d247994-1516-11ed-9ade-dac502259ad0.jpg 測(cè)試

下面操作是在 Linux/MacOS 上測(cè)試的,Windows 下需要安裝虛擬串口軟件,具體做法有些不同,請(qǐng)自行調(diào)整。

?使用socat創(chuàng)建虛擬串口

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

該命令會(huì)生成兩個(gè)設(shè)備文件,對(duì)應(yīng)串口的兩端(每次生成的設(shè)備名可能不同)。

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 這端我們使用設(shè)備/dev/ttys032
?在另外一端讀取數(shù)據(jù)
打開一個(gè)新的終端,并運(yùn)行下面的命令(有數(shù)據(jù)時(shí)自動(dòng)顯示出來(lái)):

cat /dev/ttys033

?在另外一端發(fā)送數(shù)據(jù)

打開一個(gè)新的終端,并運(yùn)行下面的命令(發(fā)送當(dāng)前時(shí)間字符串):

date >/dev/ttys033

1d247994-1516-11ed-9ade-dac502259ad0.jpg 使用fscript進(jìn)行串口編程

也可以使用 fscript 進(jìn)行串口編程(配合 AWBlock 就簡(jiǎn)單了)。AWTK 里提供一個(gè)與前面功能相同的例子,總體來(lái)看要簡(jiǎn)潔不少。

  

"打開設(shè)備" 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 根目錄下可以運(yùn)行該例子,測(cè)試方法與前面相同。

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

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

目前串口只實(shí)現(xiàn)了Windows, Linux, MacOS, Android 和 AWorks 等平臺(tái),其它平臺(tái)需要自己移植。

請(qǐng)參考AWorks平臺(tái)的移植:

src/platforms/aworkslp/serial_helper.c

【版權(quán)聲明】本文為ZLG開發(fā)者社區(qū)用戶原創(chuàng)內(nèi)容,未經(jīng)授權(quán)不得轉(zhuǎn)載。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1605

    瀏覽量

    55328
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AWTK最新動(dòng)態(tài)AWTK 1.8版本發(fā)布

    AWTK是一套基于C語(yǔ)言開發(fā)的跨平臺(tái)GUI框架,目前正式推出1.8版本。本次更新不僅對(duì)許多細(xì)節(jié)進(jìn)行了優(yōu)化,還增添了眾多重要特性和文檔資料。此外,還引入了三款創(chuàng)新控件和兩個(gè)與AWTK相關(guān)項(xiàng)目。AWTK
    的頭像 發(fā)表于 08-30 12:48 ?321次閱讀
    【<b class='flag-5'>AWTK</b>最新<b class='flag-5'>動(dòng)態(tài)</b>】<b class='flag-5'>AWTK</b> 1.8版本發(fā)布

    AWTK使用經(jīng)驗(yàn)】如何更換AWTK SDK與渲染模式

    AWTK是基于C語(yǔ)言開發(fā)的跨平臺(tái)GUI框架。《AWTK使用經(jīng)驗(yàn)》系列文章將介紹開發(fā)AWTK過(guò)程中一些常見問(wèn)題與解決方案,例如:如何播放攝像頭畫面?如何更換AWTK的版本?這些都會(huì)在系列
    的頭像 發(fā)表于 08-01 08:25 ?955次閱讀
    【<b class='flag-5'>AWTK</b>使用經(jīng)驗(yàn)】如何更換<b class='flag-5'>AWTK</b> SDK與渲染模式

    AWTK 開源串口屏開發(fā)(16) - 提供 MODBUS 服務(wù)

    AWTK串口屏內(nèi)置MODBUS從模型,不用編寫一行代碼即可讓串口屏提供MODBUS服務(wù),讓遠(yuǎn)程設(shè)備通過(guò)MODBUS協(xié)議訪問(wèn)串口屏上的數(shù)據(jù)。
    的頭像 發(fā)表于 04-13 08:24 ?364次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(16) - 提供 MODBUS 服務(wù)

    AWTK 開源串口屏開發(fā)(15) - 通過(guò) MODBUS 訪問(wèn)遠(yuǎn)程數(shù)據(jù)

    AWTK串口屏內(nèi)置MODBUSClient模型,支持用MODBUS協(xié)議從遠(yuǎn)程設(shè)備獲取數(shù)據(jù)。不用編寫代碼即可實(shí)現(xiàn)對(duì)遠(yuǎn)程設(shè)備數(shù)據(jù)的顯示和修改。在AWTK串口屏中,內(nèi)置了MODBUSClie
    的頭像 發(fā)表于 03-30 08:23 ?344次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(15) - 通過(guò) MODBUS 訪問(wèn)遠(yuǎn)程數(shù)據(jù)

    AWTK 開源串口屏開發(fā)(12) - 記事本應(yīng)用

    記事本是一個(gè)常用的應(yīng)用程序,在AWTK串口屏中,內(nèi)置文件模型和文件選擇對(duì)話框,無(wú)需編寫一行傳統(tǒng)的代碼,即可實(shí)現(xiàn)一個(gè)簡(jiǎn)單的記事本應(yīng)用程序。記事本是一個(gè)很常用的應(yīng)用,用來(lái)編輯和查看文本文件非常方便。在
    的頭像 發(fā)表于 03-09 08:23 ?294次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(12) - 記事本應(yīng)用

    AWTK 開源串口屏開發(fā)(11) - 天氣預(yù)報(bào)

    AWTK串口屏內(nèi)置了XML/JSON/INI等各種數(shù)據(jù)文件的模型,并支持用HTTP/HTTPS從網(wǎng)絡(luò)獲取數(shù)據(jù)。不用編寫一行代碼,即可實(shí)現(xiàn)天氣預(yù)報(bào)、股票行情、航班查詢和快遞查詢等功能。天氣預(yù)報(bào)是一個(gè)很
    的頭像 發(fā)表于 03-05 08:24 ?326次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(11) - 天氣預(yù)報(bào)

    AWTK開源智能串口屏方案】設(shè)計(jì)UI界面并上傳到串口

    本篇文章將介紹如何使用AWStudio設(shè)計(jì)串口屏端的UI界面和添加綁定規(guī)則,以及怎么將資源文件上傳到串口屏端。引言:AWTK-HMI是基于AWTK
    的頭像 發(fā)表于 02-22 08:24 ?585次閱讀
    【<b class='flag-5'>AWTK</b>開源智能<b class='flag-5'>串口</b>屏方案】設(shè)計(jì)UI界面并上傳到<b class='flag-5'>串口</b>屏

    AWTK開源智能串口屏方案】MCU SDK使用與編譯運(yùn)行

    本篇文章將介紹AWTK-HMI中的MCU端開發(fā)方法,包括MCUSDK常用API的說(shuō)明、使用流程及如何編譯到Linux和STM32平臺(tái)。引言:AWTK-HMI是基于AWTKAWTK-M
    的頭像 發(fā)表于 02-19 12:11 ?1051次閱讀
    【<b class='flag-5'>AWTK</b>開源智能<b class='flag-5'>串口</b>屏方案】MCU SDK使用與編譯運(yùn)行

    AWTK 開源串口屏開發(fā)(9) - 用戶和權(quán)限管理

    AWTK串口屏中,內(nèi)置用戶管理和權(quán)限控制的模型,無(wú)需編碼即可實(shí)現(xiàn)登錄、登出、修改密碼、權(quán)限控制、創(chuàng)建用戶、刪除用戶等功能,本文介紹一下用戶管理和權(quán)限控制的基本用法。用戶管理和權(quán)限控制是一個(gè)常用
    的頭像 發(fā)表于 02-19 12:10 ?441次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(9) - 用戶和權(quán)限管理

    AWTK開源智能串口屏方案】HMI端程序移植編譯及運(yùn)行

    本篇文章介紹一下AWTK開源智能串口屏方案的串口屏端(即HMI端)的編譯運(yùn)行步驟,并介紹如何將HMI端移植到Linux或STM32平臺(tái)或RTOS平臺(tái),以及如何配置資源文件。引言:AWTK
    的頭像 發(fā)表于 01-18 08:24 ?789次閱讀
    【<b class='flag-5'>AWTK</b>開源智能<b class='flag-5'>串口</b>屏方案】HMI端程序移植編譯及運(yùn)行

    AWTK 開源串口屏開發(fā)(6) - 定時(shí)器的用法

    定時(shí)器是個(gè)常用的功能,AWTK串口屏提供了豐富的定時(shí)器函數(shù),用于定時(shí)器的啟動(dòng)、停止、暫停、恢復(fù)、修改和重置等功能,本文以計(jì)時(shí)器的例子來(lái)介紹定時(shí)器的基本用法。定時(shí)器也是一個(gè)常用的功能,在AWTK
    的頭像 發(fā)表于 01-13 08:24 ?488次閱讀
    <b class='flag-5'>AWTK</b> 開源<b class='flag-5'>串口</b>屏開發(fā)(6) - 定時(shí)器的用法

    AWTK 串口屏開發(fā)(5) - MCU端 SDK 用法

    AWTK開源智能串口屏,不但開放了串口屏端全部源碼,還提供了MCU端SDK,大大加快MCU軟件的開發(fā)。本介紹一下MCU端SDK在不同平臺(tái)上的用法。完整示例可以參考下面的
    的頭像 發(fā)表于 01-06 08:24 ?356次閱讀
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b>屏開發(fā)(5) - MCU端 SDK 用法

    AWTK 串口屏開發(fā)(3) - 告警信息

    告警信息是一個(gè)常用的功能。在AWTK開源串口屏中,內(nèi)置告警信息模型,只需設(shè)計(jì)用戶界面即可實(shí)現(xiàn)告警信息的顯示和管理。1.功能告警信息是一個(gè)常用的功能,MCU在設(shè)備異常時(shí),會(huì)發(fā)送告警信息到串口屏,
    的頭像 發(fā)表于 12-23 08:24 ?388次閱讀
    <b class='flag-5'>AWTK</b> <b class='flag-5'>串口</b>屏開發(fā)(3) - 告警信息

    ?【AWTK開源智能串口屏方案】方案介紹和工作原理

    本篇文章介紹一下AWTK開源智能串口屏方案的基本原理和實(shí)際使用效果,包括主要特點(diǎn)、應(yīng)用場(chǎng)景、工作原理以及簡(jiǎn)單的Demo演示。引言:AWTK-HMI是基于AWTK
    的頭像 發(fā)表于 12-21 08:24 ?881次閱讀
    ?【<b class='flag-5'>AWTK</b>開源智能<b class='flag-5'>串口</b>屏方案】方案介紹和工作原理

    AWTK 開源智能串口屏方案

    AWTK開源智能串口屏方案發(fā)布,旨在解決傳統(tǒng)串口屏諸多痛點(diǎn),為用戶提供更開放、更易用、更強(qiáng)大的開源串口屏方案?;?b class='flag-5'>AWTK
    的頭像 發(fā)表于 12-02 08:24 ?841次閱讀
    <b class='flag-5'>AWTK</b> 開源智能<b class='flag-5'>串口</b>屏方案