DanDock-AI之(显示屏)

82 阅读2分钟

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])

结果

image.png

648bef2053ad5fcb4a5bdb065b49d0f.jpg