lcd
手头的dan dock具备一个小的tft液晶屏。并且,最重要的是:
官方的固件中,已经把lcd的驱动写好了,我们只需要调用py的接口就ok了。我就喜欢这种有轮子的编程。
demo
我们这边也不废话,直接上一个demo。
- 导入库
- 初始化lcd
- 显示hello world
官方api地址:Sipeed Wiki
import lcd
import image
img = image.Image()
img.draw_string(60,100,"Dan Dock",scale=2)
lcd.init()
while(True):
lcd.display(img)
是不是比较easy,对比之前写过的单片机tft驱动,简直不要简单太多,我爱轮子。
扩展
我们结合之前的wifi连接demo,让连接成功后,输入自己的ip地址。
思路:
- 初始化wifi
- 初始化lcd
- 连接wifi
- 显示结果
demo
import time, network
from Maix import GPIO
from machine import UART
from fpioa_manager import fm
from board import board_info
import lcd
import image
class wifi():
__is_m1w__ = True
uart = None
eb = None
nic = None
def init():
if __class__.__is_m1w__:
fm.register(0, fm.fpioa.GPIOHS1, force=True)
M1wPower=GPIO(GPIO.GPIOHS1, GPIO.OUT)
M1wPower.value(0) # b'\r\n ets Jan 8 2013,rst cause:1, boot mode:(7,6)\r\n\r\nwaiting for host\r\n'
fm.register(8, fm.fpioa.GPIOHS0) # board_info.WIFI_EN == IO 8
__class__.en = GPIO(GPIO.GPIOHS0,GPIO.OUT)
fm.register(7,fm.fpioa.UART2_TX) # board_info.WIFI_RX == IO 7
fm.register(6,fm.fpioa.UART2_RX) # board_info.WIFI_TX == IO 6
__class__.uart = UART(UART.UART2, 115200, timeout=1000, read_buf_len=8192)
def enable(en):
__class__.en.value(en)
def _at_cmd(cmd="AT\r\n", resp="OK\r\n", timeout=20):
__class__.uart.write(cmd) # "AT+GMR\r\n"
time.sleep_ms(timeout)
tmp = __class__.uart.read()
# print(tmp)
if tmp and tmp.endswith(resp):
return True
return False
def at_cmd(cmd="AT\r\n", timeout=20):
__class__.uart.write(cmd) # "AT+GMR\r\n"
time.sleep_ms(timeout)
tmp = __class__.uart.read()
return tmp
def reset(force=False, reply=5):
if force == False and __class__.isconnected():
return True
__class__.init()
for i in range(reply):
print('reset...')
__class__.enable(False)
time.sleep_ms(50)
__class__.enable(True)
time.sleep_ms(500) # at start > 500ms
if __class__._at_cmd(timeout=500):
break
__class__._at_cmd()
__class__._at_cmd('AT+UART_CUR=921600,8,1,0,0\r\n', "OK\r\n")
__class__.uart = UART(UART.UART2, 921600, timeout=1000, read_buf_len=10240)
# important! baudrate too low or read_buf_len too small will loose data
#print(__class__._at_cmd())
try:
__class__.nic = network.ESP8285(__class__.uart)
time.sleep_ms(500) # wait at ready to connect
except Exception as e:
print(e)
return False
return True
def connect(ssid="wifi_name", pasw="pass_word"):
if __class__.nic != None:
return __class__.nic.connect(ssid, pasw)
def ifconfig(): # should check ip != 0.0.0.0
if __class__.nic != None:
return __class__.nic.ifconfig()
def isconnected():
if __class__.nic != None:
return __class__.nic.isconnected()
return False
if __name__ == "__main__":
SSID = "AP001"
PASW = "ssdq6885."
#连接wifi
def check_wifi_net(reply=5):
if wifi.isconnected() != True:
for i in range(reply):
try:
wifi.reset()
print('try AT connect wifi...', wifi._at_cmd())
wifi.connect(SSID, PASW)
if wifi.isconnected():
break
except Exception as e:
print(e)
return wifi.isconnected()
#lcd显示信息
def showinfo(info="error"):
lcd.init()
img = image.Image()
img.draw_string(60,100,info,scale=2)
while(True):
lcd.display(img)
#连接wifi
check_wifi_net()
#connect 失败
if wifi.isconnected() == False:
showinfo("Connect Failed")
#connect 成功
else:
info = wifi.ifconfig()
print('network state:',info)
showinfo("IP:"+info[0] + "\r\n" + "GateWay:\r\n" + info[2])