• 欢迎大家分享资料!前往留言板评论即可!

合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

合宙 模组资料网 2年前 (2021-05-15) 400次浏览 0个评论 扫描二维码

##现有问题

合宙早期的2G物联网模块都有标准的显示库文件,支持I2C,SPI等接口的多种型号显示屏,使用起来非常的方便,但是对于4G的物联网模块,合宙的底层库并没有提供现成的显示库供用户使用,这在很多场景下不太方便。 怎么能够让4G模块也能简单方便进行显示输出,这是一个问题。

##现有解决方案

目前使用合宙4G模块的客户们普遍有三种方式来间接实现4G模块的屏幕显示功能。

方式1:外挂STM32单片机,使用Air720系列模块作为Modem,这种方法开发灵活,显示效果好,大客户往往采用。 但是需要同时掌握C语言编程熟悉和AT编程的高阶程序员才能使用。而且因为外挂了STM32,电路板的原件数和复杂程度都有所提高。
合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)
方式2:串口屏,串口屏是目前新兴的一种显示模块,Air720可以通过UART接口给串口屏发送指令显示中文和图片。这种方法虽然很方便,但是市售的串口屏幕使用并不怎么方便,还需要额外的软件配置后才能使用,价格也偏高,一般起码要30块钱,且不能满足稳定供货。
合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)
方式3:使用树莓派等linux上位机,通过Air720HI,Air720GI网卡封装的模块上网,实现物联网控制功能,这个方法灵活性最高,但成本起步起码要300元。
合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

##问题分析

物联网设备的大多数应用场合是偏工业实用的,并不需要十分优美流畅的显示界面,而仅仅是显示一些输出信息,对于这样的需求,竟然没有现成的方案可以满足需求。 因此我便考虑可不可以自己动手开发一款这样的产品。
合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

##功能设计
现在合宙商城的Air202F正在搞促销,每片只要10.8元,而1.8寸的 128*160的SPI串口屏模块市场有家店铺也仅卖10块钱,两项加在一起仅20块,就能让Air720实现基本的文字显示功能真的很划算。 说做就做,于是我就用手头的东西捣鼓起来了。
合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

##硬件实现
我这里做实验用的是Air202 S6核心板和1.8寸ST7735S显示屏来实现。 驱动显示屏的连接方式参考了Air202硬件手册,需要连接7根线,其中两根电源线,5根信号线。下面是具体的连接方式。

合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

##调试及编程环境

在编写项目的lua软件的时候可以先不接Air720模块,采用PC的串口调试程序连接USB转串口线进行调试,连接方法会简单,调试也比较方便。 为了烧写程序还需要连接USB_HOST到电脑上,您可以买两根CH340串口线,或者就要稍麻烦一点调试时临时更换连接线,用哪方方法这个由您自己决定。

合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

下面是Lua代码

muart.lua 源码

初始化串口,并从串口接收要显示的字符串

require "utils"
require "pm"
module(..., package.seeall)

-------------------------------------------- 配置串口 --------------------------------------------
-- 串口ID,串口读缓冲区
local UART_ID, sendQueue = 1, {}
-- 串口超时,串口准备好后发布的消息
local uartimeout, recvReady = 500, "UART_RECV_ID"
--保持系统处于唤醒状态,不会休眠
pm.wake("mcuart")
uart.setup(UART_ID, 115200, 8, uart.PAR_NONE, uart.STOP_1)
uart.on(1, "receive", function(uid, length)
    table.insert(sendQueue, uart.read(uid, length))
    sys.timerStart(sys.publish, uartimeout, recvReady)
end)

-- 向串口发送收到的字符串
sys.subscribe(recvReady, function()
    local str = table.concat(sendQueue)
    log.info("uart read length:", #str, str)
    -- 串口写缓冲区最大1460
    for i = 1, #str, 1460 do
        uart.write(UART_ID, str:sub(i, i + 1460 - 1))
        --显示字符串
        ui.showText(str)
    end
    -- 串口的数据读完后清空缓冲区
    sendQueue = {}
end)

ui.lua 源码

module(...,package.seeall)

require"uiWin"
require"prompt"
require"idle"

local buff=""

function clr()
    --清空LCD显示缓冲区
    disp.clear()
    --刷新LCD显示缓冲区到LCD屏幕上
    disp.update()
end

--显示字符串
function showText(text,s)
    --清空LCD显示缓冲区
    --disp.clear()
    --设置页眉字体颜色
    lcd.setcolor(0x001F)
    --设置黑色图片背景
    disp.putimage("/ldata/logo_"..(lcd.BPP==1 and "mono.bmp" or "color.png"),lcd.BPP==1 and 41 or 0,lcd.BPP==1 and 18 or 0)
    --disp.setbkcolor(BLACK)
    --显示页眉文字
    disp.puttext("---UART Port1---",0,0)
    lcd.setcolor(0xFFFF)
    --显示正文文字
    if (line==nil) then
        disp.puttext(text,0,32)
    else
        disp.puttext(text,0,(line+1)*16)
    end
    disp.update()
end

--显示启动时的缺省文字
showText("UART DISPLAY    V0.01")

##电脑测试

最终的实物连线是这样的:

合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)

由于Air202本身支持完整的中文字库,因此通过串口发送GB2312的汉字编码也可以被正确识别。下面我们将完整的程序烧录到S6核心板中,源文件在文末附上的地址可以下载到。 打开电源会看到 UART DISPLAY V0.01字样。然后使用LLC串口调试助手,并以115200速率连接,发送 “你好”。在屏幕上这时候就可以看到您发送的字符串了。

合宙Luat Air720SL开发板(EVB_Air720SL)初体验(3)-实现屏幕显示(上)
##总结

本文实现了用Air202完成串口屏的功能,在下此文章中,我将把做好的串口屏和Air720SL开发板连接起来实现完整的屏幕显示通讯。 这个项目在Github上已经建立了目录,并上传了本文所述的Lua脚本代码和硬件连线图。 如果您有兴趣和我一起完善他,就快来关注吧。 也欢迎您加我 QQ:64034373 共同探讨 。

##开源项目地址

UART_DISPLAY 开源项目地址:https://github.com/miuser00/202uartdisplay

LLCCom 开源项目地址:https://github.com/chenxuuu/llcom


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址