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

本文介绍通过外挂一个Air202模组实现Air720SL的屏幕显示功能

现有问题

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

现有解决方案

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

方式1:外挂STM32单片机,使用Air720系列模块作为Modem,这种方法开发灵活,显示效果好,大客户往往采用。 但是需要同时掌握C语言编程熟悉和AT编程的高阶程序员才能使用。而且因为外挂了STM32,电路板的原件数和复杂程度都有所提高。

方式2:串口屏,串口屏是目前新兴的一种显示模块,Air720可以通过UART接口给串口屏发送指令显示中文和图片。这种方法虽然很方便,但是市售的串口屏幕使用并不怎么方便,还需要额外的软件配置后才能使用,价格也偏高,一般起码要30块钱,且不能满足稳定供货。

方式3:使用树莓派等linux上位机,通过Air720HI,Air720GI网卡封装的模块上网,实现物联网控制功能,这个方法灵活性最高,但成本起步起码要300元。

问题分析

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

功能设计

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

硬件实现

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

调试及编程环境

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

下面是Lua代码

muart.lua 源码

  1. 初始化串口,并从串口接收要显示的字符串
  2. require "utils"
  3. require "pm"
  4. module(..., package.seeall)
  5. -------------------------------------------- 配置串口 --------------------------------------------
  6. -- 串口ID,串口读缓冲区
  7. local UART_ID, sendQueue = 1, {}
  8. -- 串口超时,串口准备好后发布的消息
  9. local uartimeout, recvReady = 500, "UART_RECV_ID"
  10. --保持系统处于唤醒状态,不会休眠
  11. pm.wake("mcuart")
  12. uart.setup(UART_ID, 115200, 8, uart.PAR_NONE, uart.STOP_1)
  13. uart.on(1, "receive", function(uid, length)
  14. table.insert(sendQueue, uart.read(uid, length))
  15. sys.timerStart(sys.publish, uartimeout, recvReady)
  16. end)
  17. -- 向串口发送收到的字符串
  18. sys.subscribe(recvReady, function()
  19. local str = table.concat(sendQueue)
  20. log.info("uart read length:", #str, str)
  21. -- 串口写缓冲区最大1460
  22. for i = 1, #str, 1460 do
  23. uart.write(UART_ID, str:sub(i, i + 1460 - 1))
  24. --显示字符串
  25. ui.showText(str)
  26. end
  27. -- 串口的数据读完后清空缓冲区
  28. sendQueue = {}
  29. end)

ui.lua 源码

  1. module(...,package.seeall)
  2. require"uiWin"
  3. require"prompt"
  4. require"idle"
  5. local buff=""
  6. function clr()
  7. --清空LCD显示缓冲区
  8. disp.clear()
  9. --刷新LCD显示缓冲区到LCD屏幕上
  10. disp.update()
  11. end
  12. --显示字符串
  13. function showText(text,s)
  14. --清空LCD显示缓冲区
  15. --disp.clear()
  16. --设置页眉字体颜色
  17. lcd.setcolor(0x001F)
  18. --设置黑色图片背景
  19. 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)
  20. --disp.setbkcolor(BLACK)
  21. --显示页眉文字
  22. disp.puttext("---UART Port1---",0,0)
  23. lcd.setcolor(0xFFFF)
  24. --显示正文文字
  25. if (line==nil) then
  26. disp.puttext(text,0,32)
  27. else
  28. disp.puttext(text,0,(line+1)*16)
  29. end
  30. disp.update()
  31. end
  32. --显示启动时的缺省文字
  33. showText("UART DISPLAY V0.01")

电脑测试

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

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

总结

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

开源项目地址

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

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

  • 发表于 2020-01-16 03:24
  • 阅读 ( 3479 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
miuser

工程师

21 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章