RoboMaster TT 无人机microPython编程.3
只是积木的功能少而已,事实上,代码编写是少不了的。
这里我们用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
# telloesp32
from 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 Pin
p0 = 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对象同时设置初始电平
比如我们最主要的引脚控制功能
首先是引脚的定义,初始书
引脚的基本控制
以及控制一串pin对象等
from machine import Pin, PWM
pwm0 = PWM(Pin(0)) # 通过Pin对象来创建PWM对象
pwm0.freq() # 获得当前的PWM频率
pwm0.freq(1000) # 设置PWM频率
pwm0.duty() # 获得当前的PWM占空比
pwm0.duty(200) # 设置占空比
pwm0.deinit() # 关闭PWM
pwm2 = PWM(Pin(2), freq=500, duty=512) # 创建PWM同时设置参数
PWM
from machine import ADC
adc = ADC(0) # 在ADC引脚上创建ADC对象
adc.read() # 获取ADC值,范围是0-1024
ADC
from machine import Pin, SPI
spi = 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) # 读取十字节,并写出0xff
buf = bytearray(50) # 创建一个缓冲字节流
spi.readinto(buf) # 读入到这个字节流
spi.readinto(buf, 0xff) # 读入字节流并发送0xff
spi.write(b'12345') # 发送5个字节
buf = bytearray(4)
spi.write_readinto(b'1234', buf) # 发送并读取到buf
spi.write_readinto(buf, buf) # 发送buf并读取到buf
软SPI
from machine import Pin, SPI
hspi = 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到0x3a
buf = 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 Timer
tim = 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 time
time.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 Pin
import onewire
ow = onewire.OneWire(Pin(12)) # 在GPIO12上创建单总线协议
ow.scan() # 返回总线上的设备列表
ow.reset() # 重置总线
ow.readbyte() # 读取一个字节
ow.writebyte(0x12) # 往总线写0x12
ow.write('123') # 往总线写'123'
ow.select_rom(b'12345678') # 选择特定设备
1-Wire协议
https://blog.csdn.net/solar_Lan/article/details/79265070
来源在此
Mind+里面上传一个mpy文件,是会重启一次机器
经测试,用vscode写的。是会在线执行,但是不是永久写入,断电会变成以前的状态。
下