RoboMaster TT 无人机microPython编程.3

云深之无迹 2021-04-08

只是积木的功能少而已,事实上,代码编写是少不了的。

这里我们用vscode来编写


  • 设备快速连接(串口、网络、USB)

  • 支持基于 MicroPython 的代码智能补全与语法检查

  • 支持 MicroPython REPL 交互环境

  • 提供丰富的代码示例与 demo 程序

  • 提供工程同步功能

  • 支持下载单个文件或文件夹至开发板

  • 支持在内存中快速运行代码文件功能

  • 支持运行代码片段功能

  • 支持多款主流 MicroPython 开发板

  • 支持 Windows、Ubuntu、Mac 操作系统


这里给出了一些关于此插件好用的功能,自动补全无疑是很诱人的


我们这篇文章算是对前面两篇的查漏补缺

这个是屏幕的驱动方式,I2C

下面是mpy的参数表

然后作为参考

https://www.cnpython.com/pypi/micropython-machine
https://www.cnpython.com/pypi/micropython-machine/dl-micropython-machine-0.2.tar.gz

这是专门为micropython标准库重新实现的模块, 以高效和精益的设计理念。

里面的内容不多,可以作为学习的资料


之后先新建一个项目才可以写和run

这里链接好以后,tt的终端会在这里显示

def main(): print("Welcome to TT") if __name__ == '__main__': main()

这里用Alt+Q来执行

下面会输出这个命令行

help之下会有这么多的输出

然后输入这个help会输出一些东西

# MindPlus# telloesp32from machine import *from RMTTLib import *

led = RMTTLedCtrl()led.start()
i2c = I2C(0, scl=Pin(26), sda=Pin(27), freq=400000)
matrix = RMTTMledCtrl(i2c)

led.normal(0, 0, 255)matrix.normal( '000rr00000r0rr000r0r0rr0r0r0r0rrrr0r0r0r0rr0r0r000rr0r00000rr000')while True:    pass

就这样成功了

通过自动补全,我们发现TT的很多新鲜玩意儿

打印出这么多的方法

方法很多,我们就说不多的几个。首先是对硬件的一些功能。

Pin,RTC,SDcard等,都有了

在方法的后面有一些我们之前看见的方法,有Tof的传感器,三个RGB的灯,控制功能,已经led的控制和小屏幕的控制

print(dir(RMTTProtocol))

这个是打印出得方法,和C++得版本具有一致性

我就是好奇,这些个方法的参数说明

可能没有doc把

from machine import Pinp0 = Pin(0, Pin.OUT) # GPIO0设置为输出模式p0.value(1) # p0输出高电平p0.value(0) # p0输出低电平p0.value() # 当前p0设置的电平p2 = Pin(2, Pin.IN) # GPIO2设置为输入模式p2.value() # p2的电平p3 = Pin(3, Pin.IN, Pin.PULL_UP) # GPIO3设置为上拉的输入模式p4 = Pin(4, Pin.OUT, value=1) # 创建Pin对象同时设置初始电平

比如我们最主要的引脚控制功能

  1. 首先是引脚的定义,初始书

  2. 引脚的基本控制

  3. 以及控制一串pin对象等

from machine import Pin, PWMpwm0 = PWM(Pin(0)) # 通过Pin对象来创建PWM对象pwm0.freq() # 获得当前的PWM频率pwm0.freq(1000) # 设置PWM频率pwm0.duty() # 获得当前的PWM占空比pwm0.duty(200) # 设置占空比pwm0.deinit() # 关闭PWMpwm2 = PWM(Pin(2), freq=500, duty=512) # 创建PWM同时设置参数

PWM

from machine import ADCadc = ADC(0) # 在ADC引脚上创建ADC对象adc.read() # 获取ADC值,范围是0-1024


ADC


from machine import Pin, SPIspi = SPI(-1, baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4)) # 创建SPI对象spi.init(baudrate=200000) # 设置波特率spi.read(10) # 读取10字节spi.read(10, 0xff) # 读取十字节,并写出0xffbuf = bytearray(50) # 创建一个缓冲字节流spi.readinto(buf) # 读入到这个字节流spi.readinto(buf, 0xff) # 读入字节流并发送0xffspi.write(b'12345') # 发送5个字节buf = bytearray(4) spi.write_readinto(b'1234', buf) # 发送并读取到bufspi.write_readinto(buf, buf) # 发送buf并读取到buf

软SPI

from machine import Pin, SPIhspi = SPI(1, baudrate=80000000, polarity=0, phase=0)

硬SPI:构造方法和串口的一样

i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)i2c.readfrom(0x3a, 4) # 从0x3a读取4字节i2c.writeto(0x3a, '12') # 发送12到0x3abuf = bytearray(10) # 创建十字节的缓冲字节流i2c.writeto(0x3a, buf) # 发送字节流到0x3a

I2C的所有引脚都适用

import machine# 配置RTC.ALARM0来唤醒设备rtc = machine.RTC()rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)# 检查是否reset是否是由唤醒引起的if machine.reset_cause() == machine.DEEPSLEEP_RESET: print('woke from a deep sleep')# 设置RTC.ALARM0在10秒后唤醒设备rtc.alarm(rtc.ALARM0, 10000)# 设备进入深度睡眠machine.deepsleep()

深度唤醒

from machine import Timertim = Timer(-1)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))

定时器

import timetime.sleep(1) # 延时一秒time.sleep_ms(500) # 延时500毫秒time.sleep_us(10) # 延时10微秒start = time.ticks_ms() # 得到内部计时的某个时间点delta = time.ticks_diff(time.ticks_ms(), start) # 计算过去的时间段的长度

计时

from machine import Pinimport onewireow = onewire.OneWire(Pin(12)) # 在GPIO12上创建单总线协议ow.scan() # 返回总线上的设备列表ow.reset() # 重置总线ow.readbyte() # 读取一个字节ow.writebyte(0x12) # 往总线写0x12ow.write('123') # 往总线写'123'ow.select_rom(b'12345678') # 选择特定设备

1-Wire协议

https://blog.csdn.net/solar_Lan/article/details/79265070

来源在此


Mind+里面上传一个mpy文件,是会重启一次机器

经测试,用vscode写的。是会在线执行,但是不是永久写入,断电会变成以前的状态。


评论
热门推荐
相关推荐
X
广告
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦