使用IoTs2的LCD显示器¶
IoTs2配置有一个240x135点阵的1.14英寸彩色LCD显示器,这个小显示屏的点阵密度几乎接近视网膜屏,即使采用很小的字体的情况下仍保持字符和图案的清晰度。 IoTs2处于Bootloader模式时,显示屏自动关闭。进入Python模式时,执行code.py或main.py程序时,IoTs2的LCD显示器由用户程序掌控, 停止Python代码执行或进入REPL模式,这个显示屏与串口控制台几乎完全同步。
IoTs2的LCD显示器主要有以下几种用法:
1. 作为用户程序的一种输出设备¶
这个模式下,只要code.py或main.py程序启动时,屏幕会显示一行提示:“code.py output:”(或 “main.py output:”), 提醒我们屏幕的内容都是由code.py或main.py执行结果。譬如,我们编写一个最简单的程序:
1 2 | print("hello world")
print("i'am IoTs2")
|
将这个输出两行文本到控制台的脚本程序保存到/CIRCUITPY/code.py文件,如果IoTs2已经与宿主计算机上MU编辑器链接好,点击“串口”按钮, 你在串口控制台的窗口中将会看到以下提示信息:
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
hello world
I’m IoTs2将会想控制台输出内建的
Press any key to enter the REPL. Use CTRL-D to reload.
“Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.”这一行信息提示我们, IoTs2开始自动加载用户程序(code.py),禁用REPL; “code.py output:”这一行信息表示,开始执行code.py程序,启动code.py程序时,IoTs2的Python解释器自动给出的提示信息; “hello world”和“I’m IoTs2”是我们编写的code.py程序中的两个语句所输出的结果; “Press any key to enter the REPL. Use CTRL-D to reload.”这一行信息表示,code.py程序已经执行完毕,按任意键进入REPL模式, 按“Ctrl+D”键重新执行code.py程序。
你在IoTs2的LCD屏幕上也能看到这些信息,而且完全相同。通过这个示例我们看到,IoTs2的LCD显示器相当于一个小型控制台, 用户程序“print(“xxx”)”的输出都被作为一整行显示出来,如果文本内容超过一行,并自动换行继续显示。当开始启动用户程序或执行完毕后, 系统的提示信息也被显示在LCD上。
我们再来看另外一个示例,Python脚本程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 从adafruit_turtle中导入turtle画笔模块和颜色模块
from adafruit_turtle import Color, turtle
# 从hiibot_iots2模块导入IoTs2类,该类的"screen"接口即为显示屏
from hiibot_iots2 import IoTs2
# 实例化Screen模块类为screen
iots2 = IoTs2()
screen = iots2.screen
colors = [Color.ORANGE, Color.PURPLE]
# 实例化turtle画笔为turtle, 并使用screen作为显示器
turtle = turtle(screen)
# 落笔
turtle.pendown()
# 循环200次
for x in range(200):
turtle.pencolor(colors[x % 2])
turtle.forward(x)
turtle.left(91)
while True:
pass
|
看起来这个示例程序蛮长,其实并不复杂,尤其你如果使用过Scratch的画笔模块、Python的turtle模块,这里所用的turtle模块用法几乎与他们完全相同。 当然这个时候我们并不关心程序的具体细节。将程序代码复制到MU编辑器中,并保存到/CIRCUITPY/code.py文件中,等待几秒看IoTs2的LCD屏幕输出就可以。
在这个示例中,我们看不到系统的提示信息,只是看到code.py程序的执行结果:在LCD屏幕上绘制了一个彩色图案。这是因为本示例的第6行程序将IoTs2的 LCD显示器当作turtle画笔的输出设备使用,画笔程序绘制的几何图案被显示在LCD屏幕上,但系统提示等文本信息就不会显示在这里。
如果你将程序的最后两行(第18行和第19行)删除了,包保存到/CIRCUITPY/code.py文件,再观察执行结果的屏幕显示是什么内容?你认为这是什么原因?
2. 输出脚本程序的错误信息¶
脚本程序的执行过程是“逐行执行并输出结果”的串行模式。如果我们编写的一个10行的脚本程序,前5行程序没有任何错误,第6行程序有一个拼写错误。执行 这个脚本程序的效果是,执行到第6行包含拼写错误的语句时,脚本解释器无法执行,于是直接终止程序执行,并输出错误信息的提示,无论第7~10行程序是否 正确都不会被执行。
以下面程序为例,复制下面代码到MU编辑器中,并保存到/CIRCUITPY/code.py文件:
1 2 3 4 5 6 7 8 9 10 11 | from adafruit_turtle import Color, turtle
from hiibot_iots2 import IoTs2
iots2 = IoTs2()
screen = iots2.screen
colors = [Color.ORANGE, Color.PURPLE]
turtle = turtle(screen)
turtle.pen()
for x in range(200):
turtle.pencolor(colors[x % 2])
turtle.forward(x)
turtle.left(91)
|
第6行程序的正确拼写为“turtle.pendown()”,但是上面程序中被我们错误拼写为“turtle.pen()”。IoTs2在执行这个包含错误拼写的程序时,会出现以下提示:
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Traceback (most recent call last):
File “code.py”, line 6, in <module>
AttributeError: ‘turtle’ object has no attribute ‘pen’
Press any key to enter the REPL. Use CTRL-D to reload.
显然,第4和第5行提示信息中已经明确地告诉我们错误的语句是第几行,错误的原因是turtle对象没有pen这个属性。
IoTs2的LCD显示器虽然很小,但是作用很大!尤其执行Python脚本程序的过程中,动态地加载和执行一些存在错误的模块,终止脚本程序的执行,并提示 发声错误的位置和错误原因,很容易帮助我们排查错误。如果没有这样的显示和提示机制,程序被终止后编程者就很难定位问题。任何时候,只要用代码编写 程序,各种各样的错误是难免的,如果能快速地定位问题,编写代码、调试程序的效率将大大地提升。