前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RoboMaster TT 无人机microPython编程.3

RoboMaster TT 无人机microPython编程.3

作者头像
云深无际
发布2021-04-14 10:38:56
9550
发布2021-04-14 10:38:56
举报
文章被收录于专栏:云深之无迹云深之无迹

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

这里我们用vscode来编写


  • 设备快速连接(串口、网络、USB)
  • 支持基于 MicroPython 的代码智能补全与语法检查
  • 支持 MicroPython REPL 交互环境
  • 提供丰富的代码示例与 demo 程序
  • 提供工程同步功能
  • 支持下载单个文件或文件夹至开发板
  • 支持在内存中快速运行代码文件功能
  • 支持运行代码片段功能
  • 支持多款主流 MicroPython 开发板
  • 支持 Windows、Ubuntu、Mac 操作系统

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

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

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

下面是mpy的参数表

然后作为参考

代码语言:javascript
复制
https://www.cnpython.com/pypi/micropython-machine
代码语言:javascript
复制
https://www.cnpython.com/pypi/micropython-machine/dl-micropython-machine-0.2.tar.gz

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

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

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

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

代码语言:javascript
复制
def main():
    print("Welcome to TT")
    
if __name__ == '__main__':
    main()

这里用Alt+Q来执行

下面会输出这个命令行

help之下会有这么多的输出

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

代码语言:javascript
复制
# 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的控制和小屏幕的控制

代码语言:javascript
复制
print(dir(RMTTProtocol))

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

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

可能没有doc把

代码语言:javascript
复制
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对象同时设置初始电平

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

  1. 首先是引脚的定义,初始书
  2. 引脚的基本控制
  3. 以及控制一串pin对象等
代码语言:javascript
复制
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

代码语言:javascript
复制
from machine import ADC
adc = ADC(0)    # 在ADC引脚上创建ADC对象
adc.read()      # 获取ADC值,范围是0-1024

ADC

代码语言:javascript
复制
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

代码语言:javascript
复制
from machine import Pin, SPI
hspi = SPI(1, baudrate=80000000, polarity=0, phase=0)

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

代码语言:javascript
复制
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的所有引脚都适用

代码语言:javascript
复制
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()

深度唤醒

代码语言:javascript
复制
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))

定时器

代码语言:javascript
复制
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) # 计算过去的时间段的长度

计时

代码语言:javascript
复制
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协议

代码语言:javascript
复制
https://blog.csdn.net/solar_Lan/article/details/79265070

来源在此

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档