- from machine import Pin,SPI,PWM
-
- import usocket
- import network
- import framebuf
- import time
-
- BL = 13
- DC = 8
- RST = 12
- MOSI = 11
- SCK = 10
- CS = 9
-
- def w5x00_init():
- spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
- nic = network.WIZNET5K(spi,Pin(17),Pin(20))
- nic.active(True)
- nic.ifconfig(('192.168.2.114','255.255.255.0','192.168.2.1','8.8.8.8'))
- print('IP address :', nic.ifconfig())
- while not nic.isconnected():
- time.sleep(1)
-
- return nic
-
- def dns_query(domain):
- ip = usocket.getaddrinfo(domain, 80,0, usocket.SOCK_STREAM)
- return ip[0][4][0]
- def checksum(data):
- if len(data) & 0x1:
- data += b'\0'
- cs = 0
- for pos in range(0, len(data), 2):
- b1 = data[pos]
- b2 = data[pos + 1]
- cs += (b1 << 8) + b2
- while cs >= 0x10000:
- cs = (cs & 0xffff) + (cs >> 16)
- cs = ~cs & 0xffff
- return cs
-
- def ping(host, count=4, timeout=30, interval=1, quiet=False, size=64):
- import time
- import select
- import uctypes
- import socket
- import struct
- import random
-
-
- assert size >= 16, "pkt size too small"
- pkt = b'Q'*size
- pkt_desc = {
- "type": uctypes.UINT8 | 0,
- "code": uctypes.UINT8 | 1,
- "checksum": uctypes.UINT16 | 2,
- "id": uctypes.UINT16 | 4,
- "seq": uctypes.INT16 | 6,
- "timestamp": uctypes.UINT64 | 8,
- }
- h = uctypes.struct(uctypes.addressof(pkt), pkt_desc, uctypes.BIG_ENDIAN)
- h.type = 8
- h.code = 0
- h.checksum = 0
- h.id = random.getrandbits(16)
- h.seq = 1
-
-
- sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, 1)
- sock.setblocking(0)
- sock.settimeout(timeout/1000)
- c = 0
- addr = None
- while c < 10:
- try:
- c += 1
- time.sleep_ms(100)
- addr = socket.getaddrinfo(host, 1)[0][-1][0]
- break
- except:
- pass
- if not addr:
- print("DNS lookup failed")
- return
- sock.connect((addr, 1))
- not quiet and print("PING %s (%s): %u data bytes" % (host, addr, len(pkt)))
-
- seqs = list(range(1, count+1))
- c = 1
- t = time.time()
- tstart = time.time()
- n_trans = 0
- n_recv = 0
- finish = False
- while time.time() - tstart < timeout:
- if time.time() - t >= interval and c<=count:
-
- h.checksum = 0
- h.seq = c
- h.timestamp = time.ticks_us()
- h.checksum = checksum(pkt)
- if sock.send(pkt) == size:
- n_trans += 1
- t = time.time()
- else:
- seqs.remove(c)
-
-
- socks, _, _ = select.select([sock], [], [], 0)
- if socks:
- resp = socks[0].recv(4096)
- resp_mv = memoryview(resp)
- h2 = uctypes.struct(uctypes.addressof(resp_mv[20:]), pkt_desc, uctypes.BIG_ENDIAN)
-
- seq = h2.seq
- if h2.type==0 and h2.id==h.id and (seq in seqs):
- t_elasped = (time.ticks_us()-h2.timestamp) / 1000
- ttl = struct.unpack('!B', resp_mv[8:9])[0]
- n_recv += 1
- c += 1
- not quiet and print("%u bytes from %s: icmp_seq=%u, ttl=%u, time=%f ms" % (len(resp), addr, seq, ttl, t_elasped))
- seqs.remove(seq)
- if len(seqs) == 0:
- finish = True
-
- if finish:
- break
-
-
- sock.close()
- ret = (n_trans, n_recv)
- not quiet and print("%u packets transmitted, %u packets received" % (n_trans, n_recv))
- return (n_trans, n_recv)
-
-
- class LCD_1inch14(framebuf.FrameBuffer):
- def __init__(self):
- self.width = 240
- self.height = 135
-
- self.cs = Pin(CS,Pin.OUT)
- self.rst = Pin(RST,Pin.OUT)
-
- self.cs(1)
- self.spi = SPI(1)
- self.spi = SPI(1,1000_000)
- self.spi = SPI(1,10000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)
- self.dc = Pin(DC,Pin.OUT)
- self.dc(1)
- self.buffer = bytearray(self.height * self.width * 2)
- super().__init__(self.buffer, self.width, self.height, framebuf.RGB565)
- self.init_display()
-
- self.red = 0x07E0
- self.green = 0x001f
- self.blue = 0xf800
- self.white = 0xffff
-
- def write_cmd(self, cmd):
- self.cs(1)
- self.dc(0)
- self.cs(0)
- self.spi.write(bytearray([cmd]))
- self.cs(1)
-
- def write_data(self, buf):
- self.cs(1)
- self.dc(1)
- self.cs(0)
- self.spi.write(bytearray([buf]))
- self.cs(1)
-
- def init_display(self):
- """Initialize dispaly"""
- self.rst(1)
- self.rst(0)
- self.rst(1)
-
- self.write_cmd(0x36)
- self.write_data(0x70)
-
- self.write_cmd(0x3A)
- self.write_data(0x05)
-
- self.write_cmd(0xB2)
- self.write_data(0x0C)
- self.write_data(0x0C)
- self.write_data(0x00)
- self.write_data(0x33)
- self.write_data(0x33)
-
- self.write_cmd(0xB7)
- self.write_data(0x35)
-
- self.write_cmd(0xBB)
- self.write_data(0x19)
-
- self.write_cmd(0xC0)
- self.write_data(0x2C)
-
- self.write_cmd(0xC2)
- self.write_data(0x01)
-
- self.write_cmd(0xC3)
- self.write_data(0x12)
-
- self.write_cmd(0xC4)
- self.write_data(0x20)
-
- self.write_cmd(0xC6)
- self.write_data(0x0F)
-
- self.write_cmd(0xD0)
- self.write_data(0xA4)
- self.write_data(0xA1)
-
- self.write_cmd(0xE0)
- self.write_data(0xD0)
- self.write_data(0x04)
- self.write_data(0x0D)
- self.write_data(0x11)
- self.write_data(0x13)
- self.write_data(0x2B)
- self.write_data(0x3F)
- self.write_data(0x54)
- self.write_data(0x4C)
- self.write_data(0x18)
- self.write_data(0x0D)
- self.write_data(0x0B)
- self.write_data(0x1F)
- self.write_data(0x23)
-
- self.write_cmd(0xE1)
- self.write_data(0xD0)
- self.write_data(0x04)
- self.write_data(0x0C)
- self.write_data(0x11)
- self.write_data(0x13)
- self.write_data(0x2C)
- self.write_data(0x3F)
- self.write_data(0x44)
- self.write_data(0x51)
- self.write_data(0x2F)
- self.write_data(0x1F)
- self.write_data(0x1F)
- self.write_data(0x20)
- self.write_data(0x23)
-
- self.write_cmd(0x21)
-
- self.write_cmd(0x11)
-
- self.write_cmd(0x29)
-
- def show(self):
- self.write_cmd(0x2A)
- self.write_data(0x00)
- self.write_data(0x28)
- self.write_data(0x01)
- self.write_data(0x17)
-
- self.write_cmd(0x2B)
- self.write_data(0x00)
- self.write_data(0x35)
- self.write_data(0x00)
- self.write_data(0xBB)
-
- self.write_cmd(0x2C)
-
- self.cs(1)
- self.dc(1)
- self.cs(0)
- self.spi.write(self.buffer)
- self.cs(1)
-
- if __name__=='__main__':
- pwm = PWM(Pin(BL))
- pwm.freq(1000)
- pwm.duty_u16(32768)
-
- LCD = LCD_1inch14()
-
- w5x00_init()
- ip = dns_query("eeworld.com.cn")
- gate = ip.split(".")
- gate[-1] = "1"
- gate = ".".join(gate)
- ping(gate, quiet=True)
- ping("eeworld.com.cn")
- print("IP address is %s"%(ip))
- while True:
- LCD.fill(LCD.white)
-
- LCD.text("Follow me NO.4",0,5,LCD.red)
- LCD.text("Base_2 Task :",130,5,LCD.green)
-
- LCD.hline(10,15,220,LCD.blue)
- LCD.hline(10,115,220,LCD.blue)
- LCD.vline(10,15,100,LCD.blue)
- LCD.vline(230,15,100,LCD.blue)
-
-
- LCD.text("ping running",15,20,LCD.green)
- LCD.text('IP address :%s'%(ip),15,30,LCD.blue)
- LCD.text("by ee_jark",120,120,LCD.blue)
- LCD.show()
-
- time.sleep(2)
- LCD.show()
- LCD.fill(0xFFFF)
-
-
-
-
-
-
-
-
-