本帖最后由 Chocho 于 2017-3-7 10:55 编辑
Timer在micropython中使用定时器也是轻松简单的。要使用定时器,先需要导入Timer库. from machine importTimer 基本用法: 定义Timer tim=Timer(n) 定时器3被保留供内部使用.计时器5控制伺服驱动器,和定时器6用于定时ADC / DAC读/写。建议使用其他计时器在你的程序. tim=Timer(1, freq=100)
tim=Timer(4, freq=200, callback=f) 设置频率 tim.freq(100) 定义回调函数(中断) tim.callback(f) 禁用回调函数 tim.callback(None) Timer库介绍 timer.counter([value]) 获取或设置定时计数器 timer.freq([value] 获取或(如果设置改变预分频器和周期)设定的频率计时器. timer.init(*, freq, prescaler, period) 初始化计时器。初始化必须是有频率(Hz)或预分频器tim.init(freq=100) tim.init(prescaler=83, period=999) 关键字参数:freq — 指定的时间周期的频率 Prescaler—预分频,[0-0xffff],定时器频率是系统时钟除 (prescaler + 1)。定时器2-7和12-14最高频率是84MHz,定时器1、8-11是168MHz Period—周期值(ARR)。定时器1/3/4/6-15是 [0-0xffff],定时器2和5是[0-0x3fffffff] 在我的电脑查看端口号,用右键单击->我的电脑->管理->设备管理器->端口.端 口号是COM9. 然后打开运行micropython的终端putty.选择端口号(COM9)、connection type (Serial). 其他设置如下. Open后按几下enter键,我们就可以在putty终端中输入micropython语言了
. 按住 Ctrl+E 可以进入 paste mode ,在此模式下单击右键就可以粘贴程序,粘贴成 功后按Ctrl+D完成粘贴,micropython会执行粘贴的程序 Timer的实列: 定时周期输出1
from machine import Timer tim = Timer(-1) def func(t): print (1) tim.init(period=2000, mode=Timer.PERIODIC, callback=func)
定时一次性输出2
from machine import Timer tim = Timer(-1) def func(t): print(2) tim.init(period=2000, mode=Timer.ONE_SHOT, callback=func)
呼吸灯
from machine import Pin,Timer,PWM pwm = PWM(Pin(14),100) polar = 0 duty = 0 def setLed(t): global duty,polar if(polar == 0): duty+=16 if(duty >= 1008): polar = 1 else: duty -= 16 if(duty <= 0): polar = 0 pwm.duty(duty) tim = Timer(1) tim.init(period=10,mode=Timer.PERIODIC, callback=setLed) try: while True: pass except: tim.deinit() pwm.deinit()
I2CI2C 是设备之间的两线通信协议。在物理层它只需要两个信号线: SCL 和 SDA,分别是时钟和数据线. esp8266和DFR0117之间I2C通信程序:
from machine import Pin, I2C i2c =I2C(scl=Pin(5), sda=Pin(4), freq=100000) b=bytearray(4) b[0]=97 b[1]=98 b[2]=99 i2c.writeto_mem(0x50,0,b) i2c.readfrom_mem(0x50,0,4)
I2C.init(scl, sda, *, freq=400000)
初始化 I2C: scl 代表 SCL 引脚 sda 代表 SDA 引脚 freq 代表 SCL 时钟速率 标准总线操作 I2C 主模式读写操作: I2C.readfrom(addr, nbytes)
从指定地址设备读取数据,返回读取对象 I2C.readfrom_into(addr, buf)
从指定地址设备读取数据到缓冲区,读取的数量是 buf 的长度 I2C.writeto(addr, buf, )
写入数据到设备. 原始 I2C 操作 下面方法执行原始的 I2C 主操作,它们可以组合产生各种 I2C 事务。提供 这些方法是可以更好的控制总线,否则使用标准方法就足够了. I2C.start()
在总线上发送 start 位 (当 SCL 是高时 SDA 变低). I2C.stop()
发送停止位 (当 SCL 是高时 SCL 变高). I2C.readinto(buf)
从总线上读取数据并存放到 buf,读取的数量是 buf 的长度。接收到倒数 第二个数据时发送 ACK 信号,接收到全部数据后发送 NACK 信号. I2C.write(buf)
写入缓冲区数据到总线。每发送一个字节后将检查是否收到 ACK,如果没 有收到将引发 OSError 异常.
这里我们用esp8266和DFR0117来做一个简单的I2C通信,如果需要DFR0117这个板子可以在这里购买:http://www.dfrobot.com.cn/goods-151.html . 这个板子的具体的详细资料在这里:http://wiki.dfrobot.com.cn/index.php/(SKU FR0117)EEPROM%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%A8%A1%E5%9D%97 . 然后我们从它的示列代码中找到它的I2C的地址,这里我就不做过多的介绍,打开上面的网页,在它的代码中找到地址是:0x50. 然后我们把DFR0117的GND VCC SDASCL对应的和esp8266的GND VCC SDA SCL连接在一起,最后把esp8266连接到PC. 在我的电脑查看端口号,用右键单击->我的电脑->管理->设备管理器->端口.端口号是COM9. 然后打开运行micropython的终端putty.选择端口号(COM9)、connection type(Serial). 其他的一些设置如下,设置好过后单击Open Open后按几下enter键,我们就可以在putty终端中输入micropython语言了 输入我们的程序. 执行的结果如下,这样两个设备间的I2C通信就完成了.
|