一、MicroPython 简介

Python,是一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNU General Public License)协议。Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。总之,Python是一种简单易用的、能够运行在多个平台下的计算机编程语言。

而microPython,是跑在MCU(微控制器)上的Python,通过内置的解释器执行py文件或者py命令,就可以让微控制器运行您想要的功能了。microPython和Python编程语言一样,在任何板子上都可以使用通用的API控制硬件底层,比如点亮 LED 灯,读取传感器信息, LCD 显示字符串、控制电机、连接网络、连接蓝牙等等。

如果说Arduino让创客摆脱了各种编程环境配置,那么micropython直接让创客摆脱了底层。命令行和解释执行,都是C语言所不具备的优势,运行micropython的soc,就类似一台完整的电脑,我们用python文件和命令行,轻松控制这台电脑中的一切。

microPython是人们连接各种任务的粘合剂,即便您不懂编程,不懂硬件,也可以通过它来控制MCU,要给microPython下一个最准确的定义,最好用一些实例来描述。

您想当咖啡煮好时,咖啡壶就发出“吱吱”声提醒您吗?

您想当邮箱有新邮件时,电话会发出警报通知您吗?

想要一件闪闪发光的绒毛玩具吗?

想要一款具备语音和酒水配送功能的X教授蒸汽朋克风格轮椅吗?

想要一套按下快捷键就可以进行实验测试蜂音器吗?

想为您的儿子自制一个《银河战士》手臂炮吗?

想自制一个心率监测器,将每次骑脚踏车的记录存进存储卡吗?

想过自制一个能在地面上绘图,能在雪中驰骋的机器人吗?

想做一台机械臂,通过摇杆,您做什么动作,它就做什么动作吗?

想过自制一个智能气象站,自动获取天气预报数据吗?

microPython都可以为您实现。

MicroPython诞生啦!

Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?

要知道,Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言。遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼。

Damien为了突破这种限制,他花费了六个月的时间来打造Micro Python。它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前它支持基于32-bit的ARM处理器,比如说pyboard(STM32F405),支持NRF51822(micro:bit)、支持FireBeetle-ESP32、支持WiPy、支持ESP8266核心主控、支持CC3200等等。

二、Pyboard 简介

pyboard是microPython官方出的一款支持microPython的微控制器,采用stm32f405rg MCU主芯片,邮票孔设计,体积小巧。在性能方面,pyboard除了将stm32f405rg本身的外设延用出来,还拓展了微型SD卡插槽、三周加速度计(mma7660)。在小巧的pyboard上,设有29个GPIO,4个LED灯,板载3.3V LDO电源管理芯片,可以提供高达250mA的电流,3.6~16V的宽电压输入。

本次测试板是在淘宝购买

https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-24145583300.9.7e233746ulqmzT&id=594145340736

三、PYBoard配置

#获取pyboard上引脚的别名和芯片定义的引脚名
help(pyb.Pin.board)
#获取LED类方法
help(pyb.LED)
 

1、开发环境配置

#Thonny软件安装
https://thonny.org/
#Thonny配置
工具 --> ESP8266 --> 串口号
#MicroPython官网
https://micropython.nxez.com/docs/micropython/en-us/index.html

2、通用配置

import pyb

# 设置串口及波特率
pyb.repl_uart(pyb.UART(1, 9600))
# 暂停CPU,等待外部中断
pyb.wfi()
# 获取CPU和总线频率
pyb.freq()
# 设置cpu频率为60MHZ
pyb.freq(60000000)
# 停止CPU,等待外部中断
pyb.stop()

四、PYBoard基本功能快速浏览

引用博客:http://t.zoukankan.com/iBoundary-p-11495199.html

1、延迟和计时(Delay and timing)

Use the time module:

import time

# 休眠1秒
time.sleep(1)
# 休眠500毫秒
time.sleep_ms(500)
# 休眠10微秒
time.sleep_us(10)
# 获取毫秒计数器的值
start = time.ticks_ms()
# 计算时差
delta = time.ticks_diff(time.ticks_ms(), start)

2、内部发光二极管(Internal LEDs)

from pyb import LED

# 1=red, 2=green, 3=yellow, 4=blue
led = LED(1)
#翻转
led.toggle()
#点亮
led.on()
#熄灭
led.off() # LED 3和4支持PWM强度(0-255)
# 获取强度
LED(4).intensity()
# 设置50%的强度
LED(4).intensity(128)

3、内部开关(Internal switch)

from pyb import Switch
import time sw = Switch() # 返回 True 或 False
while True:
time.sleep(0.2)
#获取开关状态
print(sw())
#当开关按下时注册回调函数
sw.callback(lambda: pyb.LED(4).toggle())
#取消注册
#sw.callback(None)

4、引脚和GPIO(Pins and GPIO)

from pyb import Pin

p_out = Pin('X1', Pin.OUT_PP)
p_out.high()
p_out.low() p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
p_in.value() # get value, 0 or 1

5、伺服控制(Servo control)

"""
在 pyboard 板上有4个用于连接业余hobby伺服电机的专用连接点。这些电机有3条线:地线、电源线和信号线。您可在板上将三条线连接在右下角,信号引脚在最右边。引脚X1、X2、X3和X4是4个专用伺服信号引脚。
"""
from pyb import Servo # servo位置 (X1, VIN, GND)
s1 = Servo(1)
# 移动到45度
s1.angle(45)
# 移动到 -60 度在 1500ms 内
s1.angle(-60, 1500)
# 设置速度,用于连续移动
s1.speed(50)

6、外部中断(External interrupts)

from pyb import Pin, ExtInt

#回调函数
callback = lambda e: print("intr")
#外部中断触发条件设置
ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)

7、计时器(Timers)

"""
定时器是嵌入式系统中最基本的功能之一,它除了可以实现定时器功能外,还能够实现延时、PWM输出、波形发生器、舵机控制、节拍器、周期唤醒、自动数据采集等功能。在MicroPython中,很多函数的功能也依赖定时器
"""
from pyb import Timer tim = Timer(1, freq=1000)
# 获取counter 的值
tim.counter()
#设置频率为 0.5 Hz
tim.freq(0.5)
#设置回调函数
tim.callback(lambda t: pyb.LED(1).toggle())

8、实时时钟(RTC)

from pyb import RTC

rtc = RTC()
#设置年、月、日、星期、时、分、秒、次秒
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0))
#返回当前系统时间
rtc.datetime()

9、脉宽调制模块(PWM)

from pyb import Pin,Timer

#X1是定时器2的CH1
p = Pin('X1')
tim = Timer(2,freq=1000)
#设置PWM引脚
ch = tim.channel(1,Timer.PWM,pin=p)
#设置PWM输出占空比
ch.pulse_width_percent(50)

10、模数转换(ADC)

from pyb import Pin, ADC

#设定ADC输入引脚
adc = ADC(Pin('X19'))
#读取ADC转换结果,默认12位方式,参数范围0~4095
adc.read()

11、数模转换(DAC)

from pyb import Pin, DAC

#设置DAC输出引脚
dac = DAC(Pin('X5'))
#设置输出电压,默认8位模式,参数范围0~255
dac.write(120)

12、UART(串口)

from pyb import UART

#设置串口号,波特率
uart = UART(1, 9600)
#输出
uart.write('hello')
#最多读取5个字节
uart.read(5) # read up to 5 bytes

13、SPI总线

from pyb import SPI

#设置SPI参数
spi = SPI(1, SPI.CONTROLLER, baudrate=200000, polarity=1, phase=0)
spi.send('hello')
#读取5个字节
spi.recv(5)
#发送并接收5个字节
spi.send_recv('hello')

14、I2C总线

from machine import I2C

# 定义硬件I2C对象
i2c = I2C('X', freq=400000)
# 定义软件I2C对象
i2c = I2C(scl='X1', sda='X2', freq=100000) # 返回扫描到的从机地址
i2c.scan()
# 往地址为 0x42 的从机写5个字节
i2c.writeto(0x42, 'hello')
# 从地址为 0x42 的从机读取5个字节
i2c.readfrom(0x42, 5) # 从设备地址 0x42和存储器地址为0x10中读取2个字节
i2c.readfrom_mem(0x42, 0x10, 2)
# 从设备地址 0x42和存储器地址为0x10中写入2个字节
i2c.writeto_mem(0x42, 0x10, 'xy')

15、CAN总线 (CAN bus)

from pyb import CAN

can = CAN(1, CAN.LOOPBACK)
can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
#发下ID为123的消息
can.send('message!', 123)
#在FIF0 0 上接收消息
can.recv(0)

16、板载三轴加速度传感器(Internal accelerometer)

from pyb import Accel
import time accel = Accel()
while True:
time.sleep(0.2)
print(accel.x(), accel.y(), accel.z(), accel.tilt())

五、PYBoard案例

1、流水灯

from pyb import LED
leds = [pyb.LED(i) for i in range(1,5)]
n = 0
while True:
n = (n+1) % 4
leds[n].toggle()
pyb.delay(100)

2、往返式流水灯

from pyb import LED
leds = [pyb.LED(i) for i in range(1,5)]
n = 0
while True:
n = (n+1) % 4
leds[n].toggle()
if n == 3:
leds.reverse()
pyb.delay(100)

3、呼吸灯

led = pyb.LED(3)
intensity = 0
flag = True
while True:
if flag:
intensity = (intensity + 1) % 255
if intensity == 0:
flag = False
intensity = 255
else:
intensity = (intensity - 1) % 255
if intensity == 0:
flag = True
led.intensity(intensity)
pyb.delay(30)

MicroPython 之 PYBoard的更多相关文章

  1. 【micropython】用python来进行BadUSB的USB-HID测试(含无线控制)

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 本文以TPYBoardv101开发板为例讲解了利用micropython进行BadUSB的u ...

  2. [TPYBoard-Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板  一块 2.DS3231 ...

  3. MicroPython最全资料集锦丨TPYBoard全系列教程之文档+例程源码

    MicroPython成功将Python引入到嵌入式领域,近几年MicroPython的发展和普及也证明,Python无疑将在未来几年内快速抢占和蚕食C/C++的份额.包括现在比较火爆的机器人.无人机 ...

  4. 用Python让单片机“行动”起来——MicroPython实战入门篇

    MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件.说到MicroPython,也许有人会感到陌生.而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释 ...

  5. MicroPython支持的开发板:高性能、低成本创客首选

    Python的开放.简洁.黏合正符合了现发展阶段对大数据分析.可视化.各种平台程序协作产生了快速的促进作用.自Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢经过了太漫 ...

  6. MicroPython开发之物联网快速开发板

    Python的火热让其运行在MCU端的MicroPython也逐渐迎来了春天.MicroPython的出现让Python这种"胶水语言"成功引用到嵌入式领域,也使得Python控制 ...

  7. MicroPython的开发板

    比如: pyboard micro:bit ESP8266/ESP32 stm32等等 什么是pyboard? pyboard是官方的MicroPython微控制器板,完全支持软件功能.硬件有: ST ...

  8. PyCharm安装MicroPython插件

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 PyCharm可以说是当今最流行的一款Pyth ...

  9. 说说 MicroPython 的项目整体架构

    今天来说说 MicroPython 的架构情况,如果有必要我会做一些源码分析的文章供大家参考. 先来认识一下 MicroPython 整体情况,可以从软件的角度上去看待,首先我们拿到 MicroPyt ...

  10. 【雕爷学编程】MicroPython动手做(01)——春节后入手了K210开发板

    Python的开放.简洁.黏合正符合了现发展阶段对人工智能.大数据分析.可视化.各种平台程序协作产生了快速的促进作用.自Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢 ...

随机推荐

  1. VS2019发布至远程IIS部署流程

    服务器部署 传统的开发将项目发布至本地桌面之后,复制至站点目录或通过FTP上传站点目录,有点小麻烦,通过开发工具VS2019本身集成的功能,可以一步到发布到远程IIS站点. 条件: VS系列发工具,例 ...

  2. for循环结构、range方法

    目录 今日内容总结 whlie补充说明 for循环结构 range方法 练习 今日内容总结 whlie补充说明 1.死循环 真正死循环是一旦执行 CPU功耗会急速上升 直到系统采取紧急措施 尽量不要让 ...

  3. 如何优化大场景实时渲染?HMS Core 3D Engine这么做

    在先前举办的华为开发者大会2022(HDC)上,华为通过3D数字溪村展示了自有3D引擎"HMS Core 3D Engine"(以下简称3D Engine)的强大能力.作为一款高性 ...

  4. YonBuilder移动开发平台功能大盘点

    YonBuilder是面向企业组织和个人开发者的低代码开发平台,实现无代码.低代码.专业代码开发三种模式.提供元数据驱动和画布构建两种开发方式,通过点击拖拽+自动化代码生成和移动多端编译的技术,与开放 ...

  5. RabbitMQ、RocketMQ、Kafka延迟队列实现

    延迟队列在实际项目中有非常多的应用场景,最常见的比如订单未支付,超时取消订单,在创建订单的时候发送一条延迟消息,达到延迟时间之后消费者收到消息,如果订单没有支付的话,那么就取消订单. 那么,今天我们需 ...

  6. Maven多模块管理

    项目的目录结构: 一.创建父工程的必须遵循以下两点: 1.packaging标签的文本内容必须设置为pom 1 <?xml version="1.0" encoding=&q ...

  7. 【转载】SQL SERVER 存储过程中执行动态Sql语句

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  8. 区块链特辑——solidity语言基础(三)

    Solidity语法基础学习 五.映射类型: 映射型态 Mapping Type 映射钥匙Key → 真实资料 Value mapping(KeyType → ValueType) VariableN ...

  9. ffmpeg第8篇:使用ffprobe采集文件信息

    1. 前言 ffprobe是ffmpeg的其中一个模块,主要用于查看文件信息,咱们知道一个MP4文件其实不仅仅包含了音视频数据,还有如元数据等其它信息,但是实际上咱们关心的往往是音视频数据部分,今天来 ...

  10. 递归实现指数型枚举 (n个可选可不选)

    递归实现指数型枚举 从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n. 输出格式 每行输出一种方案. 同一行内的数必须升序排列,相邻两个数用恰好 1 ...