首页 > 器件 > 微处理器/微控制器 > 2022年寒假在家一起练“How To”短视频内容

2022年寒假在家一起练“How To”短视频内容

2022年寒假在家一起练“How To”短视频内容
基于RP2040的嵌入式系统平台(52)
平台介绍(3)
本系列教程内容介绍
大家好,欢迎大家观看2022年寒假在家一起练how to 短视频教程,本系列教程平台是基于rp2040嵌入式系统学习平台.教程分为四大部分,由浅入深,从零开始教大家如何使用本嵌入式学习平台.
首先第一部分带大家了解嵌入式系统和rp2040芯片以及为什么推荐使用本学习平台进行开发
接下来第二部分教大家从零开始到能够使用本平台点灯的快速上手流程
第三部分教大家如何在mpy语言下使用板卡的基础功能,如gpio,通信,定时器,多线程,中断等
最后一部分进阶教程教大家
如何使用PIO点亮2812彩灯
如何产生波形
如何编写图形化界面
如何移植游戏
这些内容将在后续时间不断更新,希望小伙伴们可以持续关注,提出意见或问题来一起不断充实教程的质量完善教程的内容
树莓派RP2040嵌入式系统
嵌入式系统介绍
什么是嵌入式系统
由硬件和软件组成.是能够独立进行运作的器件
与计算机处理系统不同
有限的存储空间
要求软件代码紧凑、可靠
可以灵活裁剪软硬件
满足不同应用场景的功能、可靠性、成本、体积、功耗、环境等需求
学了嵌入式能有什么用
对于准备进行嵌入式工作
可以通过一款简单易上手的芯片积累嵌入式系统开发经验
语言的学习
程序的编写
芯片功能的高效运用
就业前景
很多高新技术企业都需要嵌入式工程师,多了解一款芯片就是多一分面试成功率
对于DIY爱好者
可以做出一些有意思的小东西
小车,多足机器人,小无人机
生活中的小工具
鼠标,键盘,遥控器,小挂件,小游戏机等等
刚开始嵌入式学习需要的准备内容
选择某个语言
选择自己熟悉的语言做更深入的开发
也可以是刚开始接触嵌入式选择一个易于学习的语言
选择某个系统
常用的windows系统
创客喜欢的linux系统
选择某个芯片和板卡
便宜又好用,功能全又受众广
配套资料
能够快速入门,加快开发速度,例程要够多,视频足够全
rp2040这款芯片刚好符合上述的要求
价格便宜
仅需一美元即可带回家
性能强大
133MHZ,可以轻松超到250MHZ
双核
SRAM有264KB
片外flash大小可自行配置最高达16M
cortex-m0+系列少有的拥有PIO功能的芯片
可自行编写需要的外设接口等
支持多种语言开发
micropython
近年火热的python语言针对于mcu推出的语言
2040最简单最快速的开发方法
只需windows系统下安装一个软件
c,c++
windows或linux系统下搭建环境
做到底层固件的开发或者追求更优化的功能等等
资源丰富
国内
硬禾学堂
微雪等
国外
树莓派官方的文档教程和例程
adafruit官方也有非常多使用rp2040的开源项目例程
生态圈
树莓派拥有着庞大的生态圈,rp2040为其自主研发的第一款mcu
作为树莓派的一个分支自然会继承它的很多玩家,创客,粉丝等等来共同探索开发这款芯片的更大潜能
综上所述,rp2040芯片绝对是一款值得学习的芯片,小伙伴们一定要抓住机会.本期视频内容就到这里结束了,下一期视频会带大家认识认识咱们的主角,基于rp2040嵌入式系统学习平台,感谢大家的观看,咱们下次再见
基于RP2040的嵌入式学习平台都有什么?
一款优秀的板卡必然具备三个特点,小巧,覆盖面广,拓展性强,而本嵌入式学习平台恰好集三点于一体.
板卡布局
游戏机形状的板卡小巧美观,使开发过程更有乐趣
通过学习,开发,板卡包含的模块基本涵盖了嵌入式系统的内容
板卡上包含的模块
摇杆
四个按键
分辨率240*240的彩屏st7789
片外2Mflash
红外接收和发射
姿态传感器
蜂鸣器
swd调试接口
type-c供电和下载接口
有额外引出的引脚提高板卡的可拓展性和开发的自由度
板卡的教学视频包括本系列短视频和硬禾学堂的其他教学视频,绝对可以提高你开发的速度
不仅如此,硬禾学堂的各种活动中其他小伙伴们分享的各种开源案例绝对可以给你增添灵感
甚至于说你可以在几百人的交流群里和大佬们交流,学习到各种高端操作
学习和使用资源
硬禾学堂网站的介绍
一起练活动页面
百科链接
B站主页的链接
github及gitee库链接
资源网站
树莓派官方文档
micropython文档
adafruit官网
在pico上使用circuitpython的教学页面
网站rp2040芯片的项目展示
群二维码
从零开始的手把手点灯(8)
软件安装
安装Thonny
窗口介绍
文件区域
本地文件
识别到芯片后的芯片内部空间
编辑区域
命令行
右下角的解释器选择
view里面还有其他功能的窗口
outline
plotter
芯片固件相关操作
介绍rp2040的大容量存储状态以及如何进入
指电脑将芯片识别成名为rpi-rp2的U盘模式,无论是第一次还是之后更改固件都要先进入这个模式,这是官方给出的固件烧录的方法.之后为了方便说明,统称为boot模式
官方pico板
按住bootsel后上电
缺点-每次都要插拔数据线
本平台
bootsel为b按键
上电之前按住b上电
上电之后按住b再点按左上角reset按键后松开b键
芯片烧录和更改mpy固件
进入boo模式之后
树莓派官网下载最新mpy固件的uf2文件
打开thonny点击右下角解释器选择mpy
固件的修改
进入boot模式
打开硬禾开源库下载uf2文件
拖入uf2文件
使thonny识别mpy
使用mpy环境点亮第一颗灯
树莓派官方micropython文档示例程序 
如何通过thonny运行一个MicroPython程序?
识别到芯片
新建文件
将例程编辑好
保存
保存到电脑
保存到芯片内部存储空间
命名
运行
暂停
如何得到一个可开机自运行的程序?
文件保存时将文件名改为main.py
点亮本平台的led
打开硬禾活动界面原理图
修改程序
打开开源库直接下载点灯例程
如何将本地已有文件导入到芯片和将芯片已有文件导出到本地
如何配置和使用cpy?
CircuitPython的资源
如何在windows环境配置和使用C/C++环境?
树莓派官方文档的windows环境配置方法
树莓派官方C/C++示例程序 (github)
基本操作(25)
通用输入输出接口
GPIO介绍
字面意思看,GPIO=General Purpose Input Output,通用输入输出端口。有时候简称为“IO 口”。通用,就是说它是万金油,干什么都行。输入输出,就是说既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。
gpio拥有八种工作模式
四种输入,上拉,下拉,浮空,模拟
四种输出,开漏,开漏复用,推挽,推挽复用
常见用法
简单的有读取按键状态,控制led亮灭,控制中断信号,等等
复杂一点的可以用做PWM的生成,也可以几个端口共同作用通过程序模拟出i2c,spi等等通信功能
如何将GPIO管脚用做输出?点亮一颗LED
原理介绍
led为发光二极管,因此也具有二极管的单向导电性,在两端加入合适的正向电压后还需要注意电流的大小,一般小功率led只承受的住几十毫安左右的电流,因此一般应用场景下都会在每个led线路上串联一个限流电阻用于保护led,同时由于led亮度在电压不变时由电流大小决定,所以限流电阻也能决定led的发光亮度
程序介绍
函数介绍
首先导入machine函数库
需要导入库的不同原因
开放了应用程序编程接口(API)
封装好了的函数功能可以直接调用
import语句导入库的方法有两种
import machine
库里的所有应用,比如spi,i2c等
from machine import Pin
单独导入Pin这一部分功能
两种方法的区别
仅导入库中自己所需要的部分可以节省芯片的内存
定义对象的写法区别
a=machine.Pin(...)
可以简单写为a=Pin(...)
machine.Pin()
类中常用的参数介绍
id
gpio的编号,如GPIO1,则写为1
mode
引脚的模式,常常设为输入,输出或开漏模式
pull
引脚在输入模式下设置内部上拉电阻,下拉电阻或者浮空
上拉电阻指无输入时默认引脚值为高电平也就是1,下拉则为低电平0.
value
引脚在输出或开漏模式下的引脚输出电压值
比如设置1则为高电平,0为低电平
类中常用的方法介绍
Pin.init(...)
用于重新初始化已经定义的引脚属性
比如可以改变引脚模式,上下拉,初始输出值等等
Pin.value(x)
引脚为输入模式时
x参数只会在引脚转换成输出或者开漏模式后生效,因此输入模式时一般忽略x参数
引脚为输出模式时
x=1则引脚输出高电平,0则为低电平,忽略x参数则返回当前引脚的电平状态
打开mpy文档
还有Pin.on(),Pin.off(),Pin.irp()等等常用的函数都可以在文档中找到,除了这点以外,还可以在文档搜索你所需要的功能,同时也可以很清楚的看到函数使用的格式等等
两句话让LED常量
打开thonny识别到板卡,新建文件
from machine import Pin
打开mpy官方文档查看参数写法
打开原理图找到led的对应引脚
led=Pin(4,Pin.OUT,value=1)
让LED亮、灭交替
亮一会再灭需要类似于延时功能的函数,打开文档搜索time函数用于延时
from time import sleep
之前说过的Pin.value()函数可以改变引脚输出电平高低
Pin.value(0)
循环亮灭需要写一个循环功能
while True:
可以将这几句话封装成一个具有亮灭功能的子函数
def blink():
如何将GPIO管脚用做输入? - 用输入按键控制LED的状态
按键引脚输入设置
按键控制原理
按键按下和松开的两种状态对应引脚检测到的电平高低
打开原理图,图中按键的另一边连接着gnd,意思就是说按下后引脚会与gnd相连因此会检测到低电平,那么松开相对应的就应该是高电平,但是松开就是断路,没有信号输入,因此就需要引脚内部上拉,上拉的作用就是在没有输入的时候默认为高电平.
对照文档设置Pin参数,平台有四个可以自行设置使用的按键,这里选择一个侧键select便于演示
button=Pin(8,Pin.IN,Pin.PULL_UP)
如果想直观看到设置的按键能不能起作用,可以写一个print()函数,将引脚检测到的值打印出来,运行之后可以在shell窗口观察到
print(button.value())
用按键控制LED的亮灭
写一个按下亮,松开灭的功能
已经知道了按下后引脚接gnd,所以值为0的时候写一个点亮的命令,反之熄灭
需要使用到if...else语句
写一个按下翻转led状态的功能
检测是否按下按键,如果为0则按下
if button.value()==0:
led.value()括号里的参数忽略则返回引脚输出值,通过这句话读取输出引脚的值
if led.value()
如果是1则写个输出0的命令
led.value(0)
否则输出1
else:led.value(1)
尝试一下操作发现容易误触,因此需要加延时函数用作按键消抖,简单说就是检测到按下之后等会再检测
PWM的使用
PWM介绍
脉冲宽度调制,是英文“Pulse Width Modulation”的缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,通俗的说,就是控制在一个周期内,控制高电平多长时间,低电平多长时间,通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于引脚最大输出电压值的模拟电压
重要参数
频率
指每秒钟信号从高电平到低电平再回到高电平的次数
占空比
是一个脉冲周期内,高电平的时间与整个周期时间的比例
如何使用PWM做出呼吸灯效果
原理介绍
led随着电平高而亮,低而灭,在电平高低翻转频率很低的时候,比如一秒翻转一次,led会有闪烁的现象,如果调高频率到几毫秒翻转一次,这时候led的亮灭速度就会赶不上翻转速度,也就是灭了但没完全灭,再加上由于视觉暂留作用,人眼感受不到电灯在闪烁.最后再调整占空比的大小改变led的亮度,通过一个使占空比从0%到100%再到0%的循环程序就可做出呼吸灯的效果
程序介绍
函数介绍
使用machine.PWM(...)类定义一个PWM
dest
是PWM的输出口,通常定义machine.Pin类的一个引脚,比如gpio1引脚就写作machine.Pin(1)
freq
用于设定PWM的频率,且必须是整数
duty_u16
根据duty_u16/65535=占空比这一等式,可以设置占空比大小
duty_ns
使用ns单位设置脉冲宽度
PWM.freq(value)
可以设置value值来设定频率,也可以忽略value参数来得到当前频率值
PWM.duty_u16(value)
可以设置占空比的大小,16位的分辨率可设置为0到65535中任一个数,也可忽略value参数来得到当前占空比值
PWM.deinit()
关闭引脚pwm输出功能
五句话改变led亮度
导入Pin,PWM库
实例化一个引脚用于输出pwm
设置频率
while循环
设置占空比
一个循环实现呼吸灯
ADC介绍
如何使用RP2040自带的ADC?
特性
使用要点
如何使用RP2040的ADC来获得摇杆的位置信息
如何对ADC采集的数据进行实时处理?
软件并行基础(2)
如何响应外部时间?中断和查询 - 反应时间测量的游戏
用到的器件
一个LED
一个按键
认识嵌入式系统中的触发/中断机制
中断和中断服务程序
随机数的产生和应用
如何同时运行多个线程? - 交通灯控制
使用多个LEDs和一个按键
三个单色LED
蜂鸣器
一个按键
体会嵌入式系统中的线程 - Thread
总线及通信(13)
如何选择合适的总线进行数据传输?(1)
并行总线vs串行总线
串行总线的特点及类别
同步串行
异步串行
常用串行总线
SPI
I2C
UART
USB
以太网
关于异步串行总线
串行总线的特点及类别 - 同步串行、异步串行
UART的工作原理及使用
通过UART传输数据
学习MicroPython中的文件系统
数据记录仪
将温度传到上位机
I2C的特点及使用方法
I2C的信号线及应用要点
I2C的时序
硬件I2C的调用
用管脚模拟I2C
姿态传感器MMA7660的信息读取及处理
二进制到十进制转码
用Thonny窗口来显示传感器的信息
用OLED来显示姿态传感器的数据
小型显示屏的选用及OLED的工作原理
SPI的特点及使用方式
SPI的信号线
SPI的时序
硬件SPI的使用和MicroPython配置
管脚模拟SPI
Bit Banging
ST7789显示屏的库及调用
128*32 OLED显示屏的信息显示
文本显示
图形显示
将字符和波形显示在OLED上
进阶及扩展操作(15)
如何使用RP2040的PIO? - 点亮WS2812B灯串(2)
数据输入和数据输出
状态机的使用
FIFO的使用
输出移位寄存器
使用WS2812制作电子表
WS2812B的使用
如何使用MicroPython编写图形化界面?(3)
ST7789的库资源及使用
如何使用LVGL
如何使用MicroGUI?
如何用RP2040通过DDS产生任意波形?(4)
PWM + LPC构成DAC生成方波、三角波灯
定时器 + 波形表生成任意波形 - 以正弦波为例
通过PIO和DMA机制提升波形的频率
用遥杆和按键控制信号的生成
如何在RP2040上游戏移植(2)
在RP2040上已经实现的游戏案例
游戏移植要点
如何使用RP2040来制作SWD调试器?(1)
如何使用RP2040来生成不同的数字控制信号?(1)
生成占空比和频率可调的PWM信号
组合生成SPI Master信号
组合生成I2C信号
如何使用RP2040来采集模拟信号(2)
低速波形的采集及OLED显示
高速波形的采集及DMA的利用、OLED显示
如何做红外遥控器的发射和接收?(3)
红外遥控器的工作原理及应用分类
红外遥控信号的接收及解码
红外遥控信号的发射及验证