树莓派 micropython_micropython Timer I2C基础教程

Timer

在micropython中使用定时器也是轻松简单的。要使用定时器,先需要导入Timer库. from machine import

Timer

基本用法:

定义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()

I2C

I2C 是设备之间的两线通信协议。在物理层它只需要两个信号线: 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 异常.

然后我们从它的示列代码中找到它的I2C的地址,这里我就不做过多的介绍,打开上面的网页,在它的代码中找到地址是:0x50. 然后我们把DFR0117的GND VCC SDA

SCL对应的和esp8266的GND VCC SDA SCL连接在一起,最后把esp8266连接到PC.

在我的电脑查看端口号,用右键单击->我的电脑->管理->设备管理器->端口.端口号是COM9.

然后打开运行micropython的终端putty.选择端口号(COM9)、connection type(Serial).

其他的一些设置如下,设置好过后单击Open

Open后按几下enter键,我们就可以在putty终端中输入micropython语言了

输入我们的程序. 执行的结果如下,这样两个设备间的I2C通信就完成了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值