Get started with MicroPython [W600 series]

Flash MicroPython firmware

The boards were already flashed micropython firmware. If they lost firmware or you need lastest firmware, you can flash MicroPython firmware by yourself.

Requirements

Flash firmware

w600tool.py -p PORT_NAME -u FIRMWARE.fls

Note

Don’t forget to change PORT_NAME and FIRMWARE.fls.

In Linux, PORT_NAME is like /dev/ttyUSB0. In windows, PORT_NAME is like COM4.

General board control

The machine module:

Turn on & off LED

from machine import Pin


led = Pin(Pin.PA_00, Pin.OUT, Pin.PULL_FLOATING)
led.value(1)
led.value(0)

Networking

The network module:

import network

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.scan()
sta_if.connect("WM2G","87654321")
sta_if.isconnected()

The socket module:

import socket

s = socket.socket()
addr = ('www.qq.com', 80)
s.connect(addr)
s.send("hello world!")
s.recv(64)
s.close()

I2C

Read SHT30:

from machine import Pin, I2C
import time

i2c = I2C(0, scl=Pin(Pin.PB_13), sda=Pin(Pin.PB_14), freq=100000)

buf = bytearray(2)
buf[0] = 0x30
buf[1] = 0xA2
i2c.writeto(0x44, buf)
time.sleep_ms(1000)

buf2 = bytearray(6)
buf[0] = 0x2c
buf[1] = 0x06
i2c.writeto(0x44, buf)
buf2 = i2c.readfrom(0x44, 6)

temp_raw = (buf2[0] << 8) + (buf2[1])
humi_raw = (buf2[3] << 8) + (buf2[4])
temp = 175 * temp_raw / 65535 - 45
humi = 100 * humi_raw / 65535
print("temp = {:.2f}, humi = {:.2f}".format(temp, humi))

Note

MicroPython supports both hardware I2C and software emulation I2C.

Using Software I2C when I2C device ID = -1.

Using hardware I2C when I2C device ID > -1.

Real time clock (RTC)

from machine import RTC

rtc = RTC()
rtc.init((2019, 9, 12, 3, 13, 0, 0, 0))
print(rtc.now())

Note

rtc.init((year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]))

SPI

The w60x has 1x hardware SPI, up to 20Mhz.

Note

Using software SPI when the ID is -1.

Using hardware SPI when the ID is 0.

from machine import Pin, SPI

spi = SPI(0, baudrate=200000, polarity=1, phase=0, sck=Pin(Pin.PB_16), mosi=Pin(Pin.PB_18), miso=Pin(Pin.PB_17), cs=Pin(Pin.PB_15))
spi.read(10)
spi.read(10, 0xff)

buf = bytearray(50)
spi.readinto(buf)
spi.readinto(buf, 0xff)

spi.write(b'12345')

buf2 = bytearray(4)
spi.write_readinto(b'1234', buf2)
spi.write_readinto(buf2, buf2)

SPI

W600x SPI supported IO

SCK

PA_01,PA_11,PB_16,PB_27

MOSI

PA_04,PA_09,PA_10,PB_02,PB_18

MISO

PA_03,PA_05,PA_10,PB_01,PB_17

CS

PA_02,PA_12,PB_00,PB_07,PB_15

PWM

from machine import Pin, PWM

pwm1 = PWM(Pin(Pin.PB_16), channel=2, freq=100, duty=0)
pwm1 = PWM(Pin(Pin.PB_16), channel=2, freq=100, duty=255)
pwm1.deinit()

pwm2 = PWM(Pin(Pin.PB_18))
pwm2.freq()
pwm2.freq(100)
pwm2.duty()
pwm2.duty(250)

PWM CH

W60x PWM supported IO

CH 0

PA_00,PA_05,PB_05,PB_18,PB_19,PB_30

CH 1

PA_01,PA_07,PB_04,PB_13,PB_17,PB_20

CH 2

PA_02,PA_08,PB_04,PB_03,PB_16,PB_21

CH 3

PA_03,PA_09,PB_02,PB_06,PB_15,PB_22

CH 4

PA_04,PA_10,PB_01,PB_08,PB_14,PB_23

Timer

W60X has 6x hardware timers (timer0 is used by WM_SDK, users only have tiemr1-tiemr5 available), Use software timer when the ID is -1, use hardware timer when ID is 1-5.

from machine import Timer

timer1 = Timer(-1)
timer1.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
timer3 = Timer(3)
timer3.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(2))

UART

from machine import UART

uart = UART(1, 115200)
uart.init(115200, bits=8, parity=None, stop=1)

uart.write('hello world')

uart.readline()
print(uart.read(5))

buf = bytearray(6)
uart.readinto(buf)
print(buf)

WDT

from machine import WDT

wdt = WDT(0,5000000)
wdt.feed()

Note

WM_SDK has added the automatically feed function in lowest priority task. It can run without feeding watch dog in MicroPython.