TPYBoard v202学习笔记(1)

查看文件

import os
os.listdir()

打开文件

# 只读方式打开main文件
f = open('main.py', 'r')
f.read()
# 操作结束记得close释放资源
f.close()

查看内存资源

import micropython
micropython.mem_info()

联网 network类库

AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接

STA模式: Station, 类似于无线终端,STA本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。

简单地说,AP模式指的是可以将板子当作路由器来使用,STA模式指的是将板子连接到wifi上网

import network
# STA模式
wlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points 扫描当前可用wifi
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('wifi名称', 'wifi密码') # connect to an AP
wlan.config('mac')      # get the interface's MAC adddress
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addresses
# AP模式
ap = network.WLAN(network.AP_IF) # create access-point interface
ap.active(True)         # activate the interface
ap.config(essid='ESP-AP') # set the ESSID of the access point 设置开发板的wifi名称

延迟和time类库

import time
time.sleep(1) # 睡眠1秒
time.sleep_ms(100) # 睡眠100ms
time.sleep_us(100) #睡眠100us

start = time.ticks_ms() # 毫秒计数器
delta = time.ticks_diff(time.ticks_ms(), start) # 计算时间差,精确到毫秒级

使用machine.Pin类库

操作引脚和GPIO(通用I/O端口)

from machine import Pin
p0 = Pin(0, Pin.OUT)
p0.high() # 设为高电平
p0.low() # 设为低电平

led是Pin2

led = Pin(2, Pin.OUT)
led.on() # 熄灭灯
led.off() # 点亮灯
led.value(1) # 熄灭灯
led.value(0) # 点亮灯
# 即低电平有效,高电平无效
led = machine.PWM(machine.Pin(2), freq=100) # 频率设为100
led.duty(100) # duty能调整亮度,值越大,亮度越低,最大为1023,最小为0
# 呼吸灯示例
def pulse(l, t):
    for i in range(20):
    	# led的亮度为正弦函数,周期性变化
        l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500))
        time.sleep_ms(t)
for i in range(10):
	pulse(led, 30)

有两个文件是会在开发板启动时自动运行,分别是 boot.py 和 main.py。boot.py 会先被执行(如果它存在的话),然后执行 main.py,你可以创建这些文件然后写上你想要开机就运行的代码。

定时器功能

1.增加一个执行一次的定时器

from machine import Timer
tim = Timer(-1)  # 新建一个虚拟定时器
# 此处执行时程序会等待5秒打印1,period=5000 以毫秒为单位,mode=Timer.ONE_SHOT 表示只执行一次
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))


tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(2))
# 此方法执行时系统会每隔两秒无限打印2。

外接温湿度传感器后,编写一个获取温湿度的函数F,可用定时器每隔几秒执行F,即callback=F,则可以每隔几秒获取当前温湿度。若想做一下扩展,可将温湿度显示到OLED显示屏上,这样一个小型的DIY温湿度检测仪就诞生了。

操作GPIO Pins

MISO is GPIO12, MOSI is GPIO13, and SCK is GPIO14。
0是你想要操作的pin。通常你会想定义pin作为输入或输出,可以如下编写代码:

pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)

所有的pins除了16号都可以触发一个 hard interrupt如果它们的输入发生改变。你可以编写一个callback函数,每次触发时都会被执行。

 def callback(p):
    print('pin change', p)

from machine import Pin
p0 = Pin(0, Pin.IN)
p2 = Pin(2, Pin.IN)
p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)

我们设置 pin 0 仅当输入电压从高电平变为低电平时触发,pin 2 当电平每发生改变一次时就触发一次。

一个 hard interrupt将在事件发生时立刻触发,并且将会打断任何正在运行的代码,包括python代码。callback函数的功能受限(比如说:不能分配内存)并且应该尽可能的简短。

PWM

PWM的频率freq是指每秒钟信号从高电平到低电平再回到高电平的次数,占空比duty是高电平持续时间和低电平持续时间之间的比例。
频率越高,占空比越大,实际的工作电压越大。
PWM的频率越高,其对输出的响应就会越快,频率越低输出响应越慢。
在亮灯的示例中,freq过低,则可以看到led在闪烁,duty越小,则亮度越高,因为duty小则高电平相比低电平时间短,因为led是低电平有效,所以实际工作电压接近低电平所以亮度高。相同频率下,duty越小,闪烁越不明显。若duty=0,即使频率变化,因为整个周期内都是低电平占有,所以不闪烁。

在ESP8266上 pins 0, 2, 4, 5, 12, 13, 14 15 支持 PWM。约束是它们必须同频率,并且频率属于1Hz - 1000Hz。
在一个 pin 上使用 PWM你必须先创建一个 pin 对象:

import machine
p12 = machine.Pin(12)

然后创建PWM对象:

pwm12 = machine.PWM(p12)

You can set the frequency and duty cycle using:
你可以设置频率和占空比使用如下代码:

pwm12.freq(500)
pwm12.duty(512)

注意:duty属于[0,1023]
pin 将会一直处于PWM模式直到你取消初始化,使用如下代码:

pwm12.deinit()

如何使用连接到p2的led的PWM模式在上面的led示例中已经有了。

数模转换

ESP8266只有一个pin(独立于GPIO)可以用来读取模拟电压并将其转化为数字值。你可以构建一个 ADC pin 的对象用以下代码:

import machine
adc = machine.ADC(0)

adc.read()
# 8

read()返回的值属于0(0.0伏)到1024(1.0伏)。注意输入最大只能为1伏电压,当你想要测量更大的电压时必须使用分压电路(voltage divider circuit)。

深睡眠模式

注意:需要将GPIO16和RST连接起来才可用。

import machine

# configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# set RTC.ALARM0 to fire after 10 seconds (waking the device)
rtc.alarm(rtc.ALARM0, 10000)

# put the device to sleep
machine.deepsleep()

从深睡眠中唤醒后,所有之前的记忆都被抹除,不过 boot.py 会一如既往地执行,你可以编写代码使得在被唤醒后做一些事情。比如打印唤醒的模式,使用以下代码:

if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')
else:
    print('power on or hard reset')

你可能感兴趣的:(micropython)