树莓派 PICO初级教程(根据MicroPython)
文件目录
- 1 树莓派 PICO 介绍
- 1.1 介绍
- 1.2 配备 [^2]
- 1.3 脚位图
- 1.4 规格
- 2 安裝
- 2.1 烧写固定件
- 2.2 安裝IDE(Thonny IDE)
- 2.3 线下运作程序流程
- 3 基本
- 3.01 照亮板载LED灯
- 3.02 板载LED闪动
- 3.03 LED流水灯
- 3.04 功能键试验
- 3.05 外部中断(改善3.04 功能键试验)
- 3.06 定时器中断(改善3.02 板载LED闪动)
- 3.07 PWM 脉冲宽度调配(完成板载LED呼吸灯)
- 3.08 I2C总线(应用SSD1306 OLED显示屏)
- 4 感应器程序流程
- 4.1 温度感应器(DS18B20)
- 4.2 温度湿度感应器
- 4.2.1 DHT11
- 4.2.1 DHT22
1 树莓派 PICO 介绍
1.1 介绍
Raspberry Pi Pico
是具备灵便数据插口的成本低,性能卓越微处理器板。它集成化了Raspberry Pi
自身的RP2040
微处理器集成ic,运作速率达到133 MHz的双核处理器Arm Cortex M0
CPU,内嵌式264KB SRAM和2MB板载闪存芯片及其二十六个多用途GPIO脚位。针对开发软件,能够应用Raspberry Pi
的C / C SDK或MicroPython。[1]
1.2 配备 [2]
树莓派 PICO配备 |
---|
双核处理器 Arm Cortex-M0 @ 133MHz |
2 个 UART、2 个 SPI 控制板和 2 个 I2C 控制板 |
集成ic内嵌 264KB SRAM 和 2MB 的板载闪存芯片 |
16 个 PWM 安全通道 |
根据专用型 QSPI 系统总线适用最大 16MB 的片外闪存芯片 |
USB 1.1 服务器和机器设备适用 |
DMA 控制板 |
8 个树莓派可编程控制器 I/O(PIO)状态机,用以自定外部设备适用 |
30 个 GPIO 脚位,在其中 4 个可作为仿真模拟键入 |
适用 UF2 的 USB 大容量存储器运行方式,用以拖拽式程序编写 |
1.3 脚位图
1.4 规格
2 安裝
2.1 烧写固定件
- 点一下 https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2 链接下载UF2文档;
假如联接无效,能够进到 https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-micropython官网免费下载
- 按着BOOTSEL键不放,将Pico插进电脑上的USB串口通信,电脑会弹出来一个新的U盘文件夹名称,把刚免费下载的UF2文档拖动到文件夹名称中,树莓派 PICO可能自动关机,这时,固定件烧写进行。
2.2 安裝IDE(Thonny IDE)
- 进到软件官网 https://thonny.org/下载软件,最好是免费下载最新版本的,不然可能不支持树莓派 PICO;
- 安裝Thonny,安裝进行后开启Thonny手机软件,开启专用工具->设定-> 编译器,挑选
MicroPython(Raspberry Pi Pico)
编译器,并在串口通信处挑选树莓派PICO的串宣传口号(假如木板早已联接在电脑上,手机软件一般会自动识别串宣传口号) - 重新启动手机软件,能够见到手机软件左下角表明了树莓派PICO中的文档;
要是没有表明左边文档树得话能够启用 主视图->文档
2.3 线下运作程序流程
新建文件,撰写完编码后,按着ctrl s
将该文件储存在树莓派PICO上,并取名为main.py
(一定要加后缀名.py
),下一次树莓派PICO插电时便会自启动main.py
中的程序流程。
3 基本
3.01 照亮板载LED灯
from machine import Pin
if __name__ == '__main__':
# 搭建led目标
# 板载LED灯联接与脚位25相接
# LED = Pin(id, mode, pull)
# id:PICO脚位序号
# mode:I/O方法,有Pin.IN(键入)和Pin.OUT(輸出)二种
# pull:上下拉电阻配备,有None(强大下拉电阻)、Pin.PULL_UP(上拉电阻)和Pin.PULL_DOWN(下拉电阻)三种
LED = Pin(25, Pin.OUT)
# 上拉电阻照亮
LED.value(1)
3.02 板载LED闪动
from machine import Pin
from utime import sleep
import utime
led = Pin(25, Pin.OUT)
if __name__ == '__main__':
while True:
# led照亮
led.value(1)
utime.sleep_ms(1000)
# led灭掉
led.value(0)
utime.sleep_ms(1000)
3.03 LED流水灯
- LED发光二极管照片
- LED发光二极管正负区别
- 一般脚位长的一端为正级,脚位短的为负级
- 看发光二极管內部,支撑架大的为负级,支撑架小的为负级
- 电源电路连线图
- 编码
from machine import Pin
import utime
# 界定LED脚位二维数组
leds = [Pin(i,Pin.OUT) for i in range(0,5)]
if __name__ == '__main__':
while True:
# 先后照亮
for n in range(0,5):
leds[n].value(1)
utime.sleep_ms(200)
# 先后灭掉
for n in range(0,5):
leds[n].value(0)
utime.sleep_ms(100)
3.04 功能键试验
- 四角功能键照片
- 四角功能键怎么连接
默认设置功能键未按住的状况下,12相互连接,34相互连接;当按住功能键时,1234才相互连接。
- 电源电路接线方法
- 编码
from machine import Pin
import utime
# 配备功能键
# key = machine.Pin(id, mode, pull)
# id:树莓派Pico脚位序号
# mode:I/O方法,有Pin.IN(键入)和Pin.OUT(輸出)二种
# pull:上下拉电阻配备,有None(强大下拉电阻)、Pin.PULL_UP(上拉电阻)和Pin.PULL_DOWN(下拉电阻)三种
key = Pin(0, Pin.IN, Pin.PULL_UP)
if __name__ == '__main__':
while True:
# print(key.value())
if key.value() == 0:
# 等候一段时间,避免颤动
utime.sleep_ms(100)
if key.value() == 0:
print('The button is pressed')
功能键消抖能够参照https://baike.baidu.com/item/功能键消抖
3.05 外部中断(改善3.04 功能键试验)
- 什么叫外部中断
外部中断是单片机设计即时地解决外界事情的一种內部体制。当某类外界事情产生时,单片机设计的中断系统将驱使CPU中止已经实行的程序流程,继而去开展终断事情的解决;终断交通事故结案后.又回到被终断的程序流程处,执行下来。[3]
- 外部中断的功效
- 节约CPU資源
- 编码完成
在3.04 功能键试验中,检验功能键是不是被按住选用的是在源程序中写无限循环的方法,倘若这一功能键被按住的頻率十分低(一天仅有几回被按住),选用无限循环的方式 可能消耗很多的CPU資源,而选用外部中断的方法检验功能键是不是被按住将大大的节约CPU資源。
from machine import Pin
import utime
#配备功能键
key = Pin(0, Pin.IN, Pin.PULL_UP)
def external_interrupt(key):
# 清除颤动
utime.sleep_ms(100)
# 再度分辨功能键是不是被按住
if key.value() == 0:
print('The button is pressed')
if __name__ == '__main__':
# KEY.irq(handler,trigger)
# handler:终断实行的调用函数
# trigger:开启终断的方法,各自为Pin.IRQ_FALLING(降低沿开启)、
# Pin.IRQ_RISING(上升沿开启)、Pin.IRQ_LOW_LEVEL(低电频开启)和
# Pin.IRQ_HIGH_LEVEL(上拉电阻开启)四种
# 界定终断,降低沿开启
key.irq(external_interrupt, Pin.IRQ_FALLING)
3.06 定时器中断(改善3.02 板载LED闪动)
- 什么叫定时器中断
- 定时器中断是由单片机设计中的计时器外溢而申请办理的终断,即设置一个時间,抵达这一時间后便会造成终断
- 编码
根据设定定时器中断使树莓派PICO板载LED每过2秒闪动一次
from machine import Pin, Timer
# 建立LED目标
led=Pin(25, Pin.OUT)
# 闪动调用函数
def twinkle(tim):
# toggle方式 :LED情况旋转
led.toggle()
if __name__ == '__main__':
# 搭建计时器
tim = Timer()
# tim.init(period, mode, callback)
# period:周期(企业为ms)
# mode:工作模式,有Timer.ONE_SHOT(实行一次)和Timer.PERIODIC(规律性实行)二种
# callback:定时器中断的调用函数
tim.init(period=2000, mode=Timer.PERIODIC, callback=twinkle)
3.07 PWM 脉冲宽度调配(完成板载LED呼吸灯)
- 什么叫PWM
脉冲宽度调配是一种仿真模拟操纵方法,依据相对应荷载的转变来调配晶体三极管基极或MOS管栅压的参考点,来完成晶体三极管或MOS管导通時间的更改,进而完成电源开关可调稳压电源輸出的更改。这类方法能使开关电源的输出电压在工作中标准转变时维持稳定,是运用微控制器的模拟信号对数字集成电路开展操纵的一种十分合理的技术性。脉冲宽度调配是运用微控制器的数据輸出来对数字集成电路开展操纵的一种十分合理的技术性,广泛运用在从精确测量、通讯到输出功率操纵与转换的很多行业中。[4]
- 编码
from machine import Pin, Timer, PWM
import utime
led = PWM(Pin(25))
# 设定頻率值
led.freq(1000)
led_value = 0
# led以5%提高/降低的速率转变色度
led_space = 5
if __name__ == '__main__':
while True:
led_value = led_space
if led_value >= 100:
led_value = 100
led_space = -5
elif led_value <= 0:
led_value = 0
led_space = 5
# 设定pwm占空比,需要在0-65535中间
led.duty_u16(int(led_value * 500))
utime.sleep_ms(100)
3.08 I2C总线(应用SSD1306 OLED显示屏)
- I2C总线介绍
I2C总线是由Philips企业开发设计的一种简易、双重二线制同歩串行总线。它只必须二根线就可以在联接于系统总线上的元器件中间传输信息内容。I2C由 2 根线构成:SDA(串行通信手机充电线)和SCL(串行通信数字时钟线),全是双重I/O线。[5]
- SSD1306 OLED介绍
SSD1306是一款带控制板的用以OLED点阵式图型显示设备的片式CMOS OLED/PLED控制器。它由128个SEG(列輸出)和64个COM(行輸出)构成。该集成ic致力于共负极OLED外壳设计。
SSD1306内嵌饱和度控制板、表明RAM(GDDRAM)和震荡器,为此降低了外界元器件的总数和功能损耗。该集成ic有256级色度操纵。数据信息或指令由通用性微处理器根据硬件配置挑选的6800/8000系通用性并行接口、I2C插口或串行通信外场插口推送。该集成ic适用很多中小型携带式运用,如手机上副显示器、MP3播放软件和计算方式等。[6][7]
- 电源电路连线图
- 编码
ssd1306.py下载链接: https://elijah.lanzoui.com/iJ13fpnq6je
免费下载进行后,在Thonny手机软件左边的文档对话框内寻找这一文档,鼠标右键点一下文档,挑选上传到选择项,文档就可以传送到树莓派PICO上
from machine import SoftI2C, Pin
# 导进SSD1306驱动器控制模块
from ssd1306 import SSD1306_I2C
if __name__ == '__main__':
# 复位SoftI2C
# OLED显示屏的scl联接到树莓派PICO的GPIO0, sda联接到GPIO1
i2c = SoftI2C(scl=Pin(0), sda=Pin(1))
# oled = SSD1306_I2C(width, height, i2c, addr)
# width:显示屏宽
# height: 显示屏高
# i2c:已界定的I2C目标
oled = SSD1306_I2C(128, 64, i2c) #OLED显示器复位:128*64屏幕分辨率,OLED的I2C详细地址是c03c
# OLED表明的字符串数组,横坐标轴和纵轴
oled.text("Hello World!", 0, 0)
# OLED表明
oled.show()
4 感应器程序流程
4.1 温度感应器(DS18B20)
DS18B20是常见的数据温度感应器,其輸出的是模拟信号,具备体型小,硬件配置花销低,抗干扰性强,高精度的特性。
-
温度测量范畴: -55℃~ 125℃,原有温度测量偏差1℃
-
工作中开关电源: 3.0~5.9V/DC
-
总线结构驱动器,只占有一个IO口
import machine, onewire, ds18x20, time, utime
# 应用GPIO0口传送数据
# 将DS18B20的VCC端联接到树莓派PICO的3V3(OUT)端
# 将DS18B20的数据信息端联接到树莓派PICO的GPIO0口
# 将DS18B20的GND端联接到树莓派PICO的GND端
pin = machine.Pin(0)
sensor = ds18x20.DS18X20(onewire.OneWire(pin))
# 扫描仪是不是存有DS18B20机器设备
roms = sensor.scan()
print('Found a ds18x20 device')
# 获得溫度数据信息
def detect_tem():
while True:
sensor.convert_temp()
for rom in roms:
# 打印出出溫度值
# 第一个打印出出去的标值很有可能不太精确,从第二条数据信息逐渐才会表明出一切正常数据信息
print("{:.3f}".format(sensor.read_temp(rom)))
utime.sleep_ms(2000)
# 程序流程通道
if __name__ == '__main__':
detect_tem()
4.2 温度湿度感应器
DHT22.py文件下载链接: https://elijah.lanzoui.com/iFueapnq6id
上传文件方式 参照3.08 I2C总线
4.2.1 DHT11
DHT11是一款有已校正模拟信号輸出的温温度传感器。 其精密度环境湿度±5%RH, 溫度±2℃,测量范围环境湿度5-95%RH, 溫度0- 50℃。[8]
from machine import Pin
from DHT22 import DHT22
import utime
pin = Pin(0,Pin.IN,Pin.PULL_UP)
# 建立dht11目标
# 将DHT11的VCC端联接到树莓派PICO的3V3(OUT)端
# 将DHT11的数据信息端联接到树莓派PICO的GPIO0口
# 将DHT11的GND端联接到树莓派PICO的GND端
dht_sensor=DHT22(pin, dht11=True)
# 循环系统涵数
def detection():
while True:
T, H = dht_sensor.read()
if T is None:
print("sensor error")
else:
print("{}'C {}%".format(T, H))
utime.sleep_ms(2000)
# 程序流程通道
if __name__ == '__main__':
detection()
4.2.1 DHT22
DHT22也称AM2302,是一款带有已校正模拟信号輸出的温度湿度复合型感应器,环境湿度测量范围范畴0-99.9%RH,精密度±2%RH,而溫度测量范围范畴是-40℃-80℃,精密度±0.5℃。[9]
from machine import Pin
from DHT22 import DHT22
import utime
pin = Pin(0,Pin.IN,Pin.PULL_UP)
# 建立dht11目标
# 将DHT11的VCC端联接到树莓派PICO的3V3(OUT)端
# 将DHT11的数据信息端联接到树莓派PICO的GPIO0口
# 将DHT11的GND端联接到树莓派PICO的GND端
dht_sensor=DHT22(pin, dht11=False)
# 循环系统涵数
def detection():
while True:
T, H = dht_sensor.read()
if T is None:
print("sensor error")
else:
print("{:.2f}'C {:.2f}%".format(T, H))
utime.sleep_ms(2000)
# 程序流程通道
if __name__ == '__main__':
detection()
-
https://www.waveshare.com/wiki/Raspberry_Pi_Pico ↩︎
-
https://pico.org.cn/ ↩︎
-
https://baike.baidu.com/item/外部中断 ↩︎
-
https://baike.baidu.com/item/脉冲宽度调配/10813756?fromtitle=PWM&fromid=3034961&fr=aladdin ↩︎
-
https://baike.baidu.com/item/I2C总线/918424?fromtitle=I2C&fromid=1727975&fr=aladdin ↩︎
-
https://blog.csdn.net/qq_39829913/article/details/104716829 ↩︎
-
https://wenku.baidu.com/view/10b60c264a73f242336c1eb91a37f111f1850d88.html ↩︎
-
https://baike.baidu.com/item/DHT11/1206271?fr=aladdin ↩︎
-
https://blog.csdn.net/k1ang/article/details/98789397 ↩︎
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。