【雕爷学编程】MicroPython手册之 Teensy 4.1 通用板控制

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
Teensy 4.1是一款基于ARM Cortex-M7的高性能开发板,具有以下特点:

1、处理器:Teensy 4.1使用了恩智浦的i.MX RT1060处理器,它是一款交叉处理器,具有微控制器的功能,速度与微型计算机相当。它的运行频率高达600 MHz,可提供高达3000 DMIPS的性能,以及浮点运算单元和加密加速器。
2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。
3、I/O引脚:Teensy 4.1共有55个数字输入/输出引脚,其中35个支持PWM输出,18个支持模拟输入。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。
4、以太网:Teensy 4.1包含了一个以太网控制器和一个以太网PHY芯片(DP83825),支持10/100 Mbit的速度。连接以太网电缆只需要一个RJ45磁插孔套件。
5、USB主机:Teensy 4.1提供了一个USB主机端口,支持480 Mbit/sec的速度。它可以连接USB设备,如键盘、鼠标、MIDI设备等。
6、RTC:Teensy 4.1支持实时时钟(RTC),可以通过连接一个3V纽扣电池来保持日期和时间。
7、LED:Teensy 4.1有一个内置的GPIO指示灯LED,连接在引脚13上。

在这里插入图片描述
MicroPython是一种在嵌入式系统上运行的解释型编程语言,而Teensy 4.1通用板是一款基于ARM Cortex-M7内核的强大开发板,支持MicroPython。下面我将以专业的视角从教师的角度,详细解释MicroPython的Teensy 4.1通用板控制的主要特点、应用场景以及需要注意的事项。

主要特点:

强大的处理能力:Teensy 4.1通用板搭载了NXP i.MX RT1062芯片,内置600 MHz的ARM Cortex-M7内核,以及1024 KB的RAM。这使得Teensy 4.1具备强大的计算和处理能力,能够应对复杂的嵌入式系统任务。

丰富的外设接口:Teensy 4.1通用板提供了丰富的外设接口,包括多个GPIO引脚、模拟输入输出引脚、SPI、I2C、UART等通信接口,以及USB接口、以太网接口和SD卡插槽等。这些接口使得Teensy 4.1通用板非常适合与其他外部设备进行交互和控制。

兼容性和可扩展性:Teensy 4.1通用板与Arduino开发环境兼容,支持Arduino库和工具。同时,MicroPython的使用参考为Teensy 4.1通用板提供了相应的MicroPython固件和库,使得开发者可以在MicroPython环境下进行程序开发和控制。此外,Teensy 4.1通用板还支持通过插件板扩展功能,如触摸屏、无线通信模块等。

应用场景:

嵌入式系统开发:Teensy 4.1通用板适用于各种嵌入式系统开发项目,包括物联网设备、自动化控制系统、机器人等。其强大的处理能力和丰富的外设接口使得开发者能够实现复杂的任务和与其他设备的交互控制。

教育和学习:Teensy 4.1通用板作为一款强大而易用的开发板,非常适合用于教育和学习。学生可以使用MicroPython语言进行编程,通过Teensy 4.1通用板实现各种实际项目,如LED控制、传感器读取、机器人控制等,培养他们的嵌入式系统开发能力。

创客项目:Teensy 4.1通用板的灵活性和可扩展性使其成为创客项目的理想选择。开发者可以利用Teensy 4.1通用板的丰富资源和外设接口,实现各种创意项目,如智能家居系统、机器人玩具、音乐乐器等。

需要注意的事项:

电源供应:Teensy 4.1通用板需要外部电源供应,通常通过Micro USB接口或电池进行供电。在使用Teensy 4.1通用板时,需要确保提供稳定的电源,并根据实际需求选择适当的电源方式。

引脚使用冲突:Teensy 4.1通用板的引脚资源有限,一些引脚可能具有多种功能。在设计和开发过程中,需要仔细查阅Teensy 4.1通用板的引脚映射表,避免引脚使用冲突和功能重叠。

硬件调试:在使用Teensy 4.1通用板进行开发时,可能需要进行硬件调试和测试。开发者需要熟悉相关的硬件调试工具和技术,如示波器、逻辑分析仪等,以便快速定位和解决可能出现的硬件问题。

学习资源:在使用MicroPython和Teensy 4.1通用板进行开发之前,建议开发者先学习MicroPython语言和Teensy 4.1通用板的基本知识。可以参考官方文档、教程和示例代码等资源,以便更好地理解和应用它们。

综上所述,MicroPython的Teensy 4.1通用板控制具有强大的处理能力、丰富的外设接口和兼容性,适用于嵌入式系统开发、教育学习和创客项目。在使用过程中,需要注意电源供应、引脚使用冲突、硬件调试和学习资源等方面的事项。通过深入了解和合理应用MicroPython和Teensy 4.1通用板,开发者可以实现各种创新和有趣的嵌入式应用。

在这里插入图片描述
案例1:初始化通用板

import machine
import teensy

# 初始化通用板
dut = teensy.Board()

解读:这个程序首先导入了machine和teensy模块。然后,我们使用teensy.Board()函数创建一个Teensy Board对象,指定主设备(MCU)为默认的引脚。

案例2:控制LED闪烁

from machine import Pin

led = Pin(2, Pin.OUT)

while True:
    led.value(not led.value())
    time.sleep(0.5)

解读:这个程序首先导入了Pin模块,并创建了一个名为led的Pin对象,指定引脚为GPIO2,输出模式为True。然后,我们进入一个无限循环,在每次迭代中,我们将LED的状态取反,并暂停0.5秒。这样,LED就会不断地闪烁。

案例3:读取ADC值

from machine import Pin
from teensy.signal import DigitalIn

adc_pin = Pin(3, Pin.IN)
adc_value = adc_pin.value()

print("ADC value:", adc_value)

解读:这个程序首先导入了Pin和DigitalIn模块,并创建了一个名为adc_pin的Pin对象,指定引脚为GPIO3,输入模式为True。然后,我们读取ADC的值,并将结果打印出来。在这个例子中,我们读取了一次ADC值。

案例4:控制舵机旋转

import machine  
import time  
import pwmio  
  
servo = pwmio.PWMOut(machine.Pin(3), freq=50)  # 将3号引脚配置为PWM输出模式,连接舵机信号线  
  
while True:  
    for angle in range(0, 180, 10):  # 从0度旋转到180度,每次旋转10度  
        servo.duty_u16(angle * 100)  # 设置舵机占空比,控制舵机旋转角度  
        time.sleep_ms(200)  # 延时200毫秒,等待舵机旋转到位

要点解读:此代码使用pwmio.PWMOut函数将3号引脚配置为PWM输出模式,并将其连接到舵机信号线。在无限循环中,使用duty_u16方法设置舵机占空比,控制舵机旋转角度,并使用time.sleep_ms函数延时200毫秒,等待舵机旋转到位。

案例5:读取模拟量输入

import machine  
  
analog_in = machine.ADC(machine.Pin(A0))  # 将A0引脚配置为模拟量输入模式  
  
while True:  
    voltage = analog_in.read_u16() / 65535 * 3.3  # 读取模拟量输入值,并转换为电压值  
    print('Voltage:', voltage, 'V')  
    time.sleep(1)  # 延时1秒

要点解读:此代码使用machine.ADC函数将A0引脚配置为模拟量输入模式。在无限循环中,使用read_u16方法读取模拟量输入值,并将其转换为电压值(Teensy 4.1的ADC分辨率为16位,参考电压为3.3V),然后打印出电压值。使用time.sleep函数延时1秒。

案例6:控制RGB LED颜色变化

import machine  
import time  
import pwmio  
  
red = pwmio.PWMOut(machine.Pin(4), freq=50)  # 将4号引脚配置为PWM输出模式,连接红色LED  
green = pwmio.PWMOut(machine.Pin(5), freq=50)  # 将5号引脚配置为PWM输出模式,连接绿色LED  
blue = pwmio.PWMOut(machine.Pin(6), freq=50)  # 将6号引脚配置为PWM输出模式,连接蓝色LED  
  
while True:  
    for r in range(256):  # 红色LED亮度从0到255变化  
        red.duty_u16(r * 100)  
        green.duty_u16((255 - r) * 100)  # 绿色LED亮度与红色LED亮度互补  
        blue.duty_u16(0)  # 蓝色LED亮度为0  
        time.sleep_ms(10)  # 延时10毫秒  
    for g in range(256):  # 绿色LED亮度从0到255变化  
        red.duty_u16(0)  # 红色LED亮度为0  
        green.duty_u16(g * 100)  
        blue.duty_u16((255 - g) * 100)  # 蓝色LED亮度与绿色LED亮度互补  
        time.sleep_ms(10)  # 延时10毫秒  
    for b in range(256):  # 蓝色LED亮度从0到255变化  
        red.duty_u16((255 - b) * 100)  # 红色LED亮度与蓝色LED亮度互补  
        green.duty_u16(0)  # 绿色LED亮度为0  
        blue.duty_u16(b * 100)  
        time.sleep_ms(10)  # 延时10毫秒

要点解读:此代码分别将4、5、6号引脚配置为PWM输出模式,并将其连接到红色、绿色、蓝色LED。在无限循环中,使用三个嵌套的循环,依次控制红色、绿色、蓝色LED的亮度变化,每次变化10个亮度等级,并使用time.sleep_ms函数延时10毫秒。在红色LED亮度变化时,绿色LED亮度与红色LED亮度互补,蓝色LED亮度为0;在绿色LED亮度变化时,红色LED亮度为0,蓝色LED亮度与绿色LED亮度互补;在蓝色LED亮度变化时,红色LED亮度与蓝色LED亮度互补,绿色LED亮度为0。这样就实现了RGB LED颜色的循环变化。

案例7:使用Teensy 4.1的内置温度传感器测量温度,并在OLED屏幕上显示1。这个案例中,我们需要导入machine, utime和ssd1306模块,然后创建一个ADC对象,指定连接温度传感器的引脚为A10。接下来,我们创建一个I2C对象,指定连接OLED屏幕的引脚为SCL和SDA。然后,我们创建一个SSD1306对象,指定屏幕的宽度和高度为128和64。接下来,我们定义一个函数read_temp,它接受一个参数adc,表示ADC对象。在这个函数中,我们读取ADC的值,并根据公式将其转换为摄氏温度。最后,我们使用一个while循环,不断地调用read_temp函数,获取温度值,并在OLED屏幕上显示。代码如下:

import machine, utime, ssd1306
# 创建ADC对象,连接温度传感器的引脚为A10
adc = machine.ADC(machine.Pin(34))
# 创建I2C对象,连接OLED屏幕的引脚为SCL和SDA
i2c = machine.I2C(scl=machine.Pin(19), sda=machine.Pin(18))
# 创建SSD1306对象,指定屏幕的宽度和高度为128和64
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

def read_temp(adc):
    # 读取ADC的值
    value = adc.read()
    # 将ADC的值转换为摄氏温度
    temp = (value - 0.7012) / 0.001646
    # 返回温度值
    return temp

while True:
    # 调用read_temp函数,获取温度值
    temp = read_temp(adc)
    # 清除OLED屏幕
    oled.fill(0)
    # 在OLED屏幕上显示温度值
    oled.text("Temp: {:.1f} C".format(temp), 0, 0)
    # 更新OLED屏幕
    oled.show()
    # 等待一秒
    utime.sleep(1)

案例8:使用Teensy 4.1的内置LED灯实现呼吸灯效果2。这个案例中,我们需要导入machine, math和utime模块,然后创建一个PWM对象,指定连接LED灯的引脚为13。接下来,我们使用一个while循环,不断地计算PWM的占空比,根据数学公式将正弦波的幅度映射为亮度值。然后我们调用duty_u16方法,将占空比输出到LED灯上,并等待一段时间。代码如下:

import machine, math, utime
# 创建PWM对象,连接LED灯的引脚为13
pwm = machine.PWM(machine.Pin(13))
# 设置PWM的频率为1000 Hz
pwm.freq(1000)

while True:
    for i in range(256):
        # 计算PWM的占空比
        duty = int((math.sin(i / 256 * math.pi) + 1) * 32767)
        # 将占空比输出到LED灯上
        pwm.duty_u16(duty)
        # 等待一段时间
        utime.sleep_ms(10)

案例9:使用Teensy 4.1的内置SD卡槽读写文件3。这个案例中,我们需要导入os, sdcard和machine模块,然后创建一个SDCard对象,指定连接SD卡槽的引脚为SCK, MISO, MOSI和CS。接下来,我们使用os模块的mount方法,将SD卡挂载到文件系统中。然后,我们使用open函数,创建一个名为test.txt的文件,并写入一些内容。接下来,我们使用os模块的listdir方法,列出SD卡中的文件。最后,我们使用open函数,打开test.txt文件,并读取其中的内容。代码如下:

import os, sdcard, machine
# 创建SDCard对象,连接SD卡槽的引脚为SCK, MISO, MOSI和CS
sd = sdcard.SDCard(machine.SPI(1), machine.Pin(10))
# 将SD卡挂载到文件系统中
os.mount(sd, "/sd")
# 创建一个名为test.txt的文件,并写入一些内容
with open("/sd/test.txt", "w") as f:
    f.write("Hello, Teensy 4.1!")
# 列出SD卡中的文件
print(os.listdir("/sd"))
# 打开test.txt文件,并读取其中的内容
with open("/sd/test.txt", "r") as f:
    print(f.read())

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值