Pico 规格参数
- 双核 Arm Cortex-M0 + @ 133MHz
- 芯片内置 264KB SRAM 和 2MB 的板载闪存
- 通过专用 QSPI 总线支持最高 16MB 的片外闪存
- DMA 控制器
- 30 个 GPIO 引脚,其中 4 个可用作模拟输入
- 2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器
- 16 个 PWM 通道
- USB 1.1 主机和设备支持
- 8 个树莓派可编程 I/O(PIO)状态机,用于自定义外围设备支持
- 支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程
刷入固件
也可以去这里下载最新版:https://pico.org.cn/
下载最新的MicroPython固件:
树莓派pico 固件
RPI_PICO-20231005-v1.21.0.zip
zip文件
树莓派pico w 固件
RPI_PICO_W-20231005-v1.21.0.zip
zip文件
下载完成后解压
- 按住开发板上的“BOOTSEL”按钮不要松手,插入电脑,此时电脑会将树莓派pico识别为u盘
- 然后将.uf2后缀的固件文件拖到pico里,此时pico会消失
- 查看树莓派pico固件是否成功
出现这个说明成功了
搭建树莓派pico开发环境
- 下载Thonny官网:https://thonny.org/
- 点击运行-》配置解释器
自带灯闪烁
freq值越大,闪烁越快
from machine import Pin, Timer
led = Pin("LED", Pin.OUT)
tim = Timer()
def tick(timer):
global led
led.toggle()
tim.init(freq=1, mode=Timer.PERIODIC, callback=tick)
自带温度传感器实时显示温度
import machine
import utime
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
while True:
reading = sensor_temp.read_u16() * conversion_factor
# The temperature sensor measures the Vbe voltage of a biased bipolar diode, connected to the fifth ADC channel
# Typically, Vbe = 0.706V at 27 degrees C, with a slope of -1.721mV (0.001721) per degree.
temperature = 27 - (reading - 0.706)/0.001721
print(temperature)
utime.sleep(2)
连接wifi,并且控制点灯
创建index.html文件
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>树莓派Pico W开发板</title>
</head>
<body>
<h3>树莓派Pico W</h3>
<p>控制板载LED亮灭</p>
<a href="/light/on"><button>1</button></a>
<a href="/light/off"><button>0</button></a>
</body>
</html>
创建main.py文件
import network
import socket
import time
from machine import Pin
led = Pin("LED", Pin.OUT)
ssid = 'Xiaomi_FANFAN'
password = 'yangfan0522'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# 定义加载HTML页面函数
def get_html(html_name):
with open(html_name, 'r') as file: # 打开HTML文件
html = file.read() # 读取HTML内容
return html
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
print( 'ip = ' + status[0] )
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
# Listen for connections
while True:
try:
cl, addr = s.accept()
print('client connected from', addr)
request = cl.recv(1024)
print(request)
request = str(request)
led_on = request.find('/light/on')
led_off = request.find('/light/off')
print( 'led on = ' + str(led_on))
print( 'led off = ' + str(led_off))
stateis = "LED is OFF"
if led_on == 6:
print("led on")
led.value(1)
stateis = "LED is ON"
if led_off == 6:
print("led off")
led.value(0)
stateis = "LED is OFF"
response = get_html('index.html')
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
except OSError as e:
cl.close()
print('connection closed')
HC-SR04超声波测距
- 连接VCC:将测距模块的VCC引脚连接到树莓派Pico上的3.3V电源引脚或5V电源引脚(根据测距模块的工作电压确定)。
- 连接GND:将测距模块的GND引脚连接到树莓派Pico上的GND引脚。
- 连接TRIG:将测距模块的TRIG引脚连接到树莓派Pico上的一个可用的GPIO引脚,例如GP2或GP3。
- 连接ECHO:将测距模块的ECHO引脚连接到树莓派Pico上的一个可用的GPIO引脚。这个引脚应该支持中断(interrupt)功能,因为ECHO引脚将用来接收回波信号。
请注意确保正确连接VCC和GND引脚来提供电源,以及将TRIG和ECHO引脚与适当的GPIO引脚连接。具体 GPIO 引脚的选择取决于您在代码中使用的引脚编号。
在编写代码之前,请查看您所使用的测距模块的数据手册或文档,以了解关于TRIG和ECHO引脚的更多详细信息,如引脚电平要求、输入输出模式等。这将有助于确保正确的电气连接和编写代码。
python代码实现
import machine
import time
from machine import Pin
led = Pin("LED", Pin.OUT)
# 设置引脚
trig = machine.Pin(2, machine.Pin.OUT) # TR1G
echo = machine.Pin(3, machine.Pin.IN) # ECHO
# 发送触发脉冲
def send_trigger_pulse():
trig.value(0)
time.sleep_us(2)
trig.value(1)
time.sleep_us(10)
trig.value(0)
# 读取回波信号并计算距离
def get_distance():
send_trigger_pulse()
while echo.value() == 0:
pulse_start = time.ticks_us()
while echo.value() == 1:
pulse_end = time.ticks_us()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 0.0343 / 2 # 根据声速计算距离,单位为厘米
return distance
# 主程序
while True:
distance = get_distance()
print("Distance: {:.2f} cm".format(distance))
led.value(1)
time.sleep(1) # 每秒测量一次
led.value(0)
树莓派pico+L298n控制直流电机的正传反转和速度
接线方法
- 树莓派PICO22引脚接在L298n的ENA上
- 树莓派PICO2引脚接在L298n的IN1上
- 树莓派PICO3引脚接在L298n的IN2上
- L298n的OUT1,OUT2分别接在一个电机上
- L298n的+12v接电源正极,GNG接电源负极
代码示例
import machine
import utime
pwmPin = 22 #控制马达的转速
cwPin = 2
acwPin = 3
# speed:速度,0到100
# direction: 旋转方向,1为顺时针,0停止,-1逆时针
# speed_pin:控制小马达起停的引脚编号
def motorRun(speed, direction, speed_pin, clockwise_pin, anti_clockwise_pin):
if speed > 100: speed=100
if speed < 0: speed=0
cw = machine.Pin(clockwise_pin, machine.Pin.OUT)
acw = machine.Pin(anti_clockwise_pin, machine.Pin.OUT)
pwm = machine.PWM(machine.Pin(speed_pin))
pwm.freq(100)
pwm.duty_u16(int(speed/100*65535))
if direction == -1: # 如果方向为-1(逆时针)
cw.value(0) # 让 cwPin 输出低电平,acwPin 输出高电平
acw.value(1)
print(direction)
elif direction == 1: # 如果方向为1(顺时针)
cw.value(1) # 让 cwPin 输出高电平,acwPin 输出低电平
acw.value(0)
print(direction)
else: # 如果方向为0(停止)
cw.value(0) # 让 cwPin 和 acwPin 都输出低电平
acw.value(0)
print(direction)
motorRun(100, 0, pwmPin, cwPin, acwPin)#第一个参数调速度,第二个参数调方向
pico+l298n电机驱动器控制两个电机
接线
。。。。。。
Python代码
import machine
import utime
# 设置电机控制引脚
pwmPin1 = 8
cwPin1 = 2
acwPin1 = 3
pwmPin2 = 9
cwPin2 = 4
acwPin2 = 5
def motorRun(speed1, direction1, speed2, direction2, speed_pin1, clockwise_pin1, anti_clockwise_pin1, speed_pin2, clockwise_pin2, anti_clockwise_pin2):
if speed1 > 100: speed1=100
if speed1 < 0: speed1=0
if speed2 > 100: speed2=100
if speed2 < 0: speed2=0
cw1 = machine.Pin(clockwise_pin1, machine.Pin.OUT)
acw1 = machine.Pin(anti_clockwise_pin1, machine.Pin.OUT)
cw2 = machine.Pin(clockwise_pin2, machine.Pin.OUT)
acw2 = machine.Pin(anti_clockwise_pin2, machine.Pin.OUT)
pwm1 = machine.PWM(machine.Pin(speed_pin1))
pwm1.freq(100)
pwm1.duty_u16(int(speed1/100*65535))
pwm2 = machine.PWM(machine.Pin(speed_pin2))
pwm2.freq(100)
pwm2.duty_u16(int(speed2/100*65535))
if direction1 == -1: # 如果方向为-1(逆时针)
cw1.value(0) # 让 cwPin 输出低电平,acwPin 输出高电平
acw1.value(1)
print(direction1)
elif direction1 == 1: # 如果方向为1(顺时针)
cw1.value(1) # 让 CWPin 输出高电平,acwPin 输出低电平
acw1.value(0)
print(direction1)
else: # 如果方向为0(停止)
cw1.value(0) # 让 CWPin 和 acwPin 都输出低电平
acw1.value(0)
print(direction1)
if direction2 == -1: # 如果方向为-1(逆时针)
cw2.value(0) # 让 CWPin 输出低电平,acwPin 输出高电平
acw2.value(1)
print(direction2)
elif direction2 == 1: # 如果方向为1(顺时针)
cw2.value(1) # 让 CWPin 输出高电平,acwPin 输出低电平
acw2.value(0)
print(direction2)
else: # 如果方向为0(停止)
cw2.value(0) # 让 CWPin 和 acwPin 都输出低电平
acw2.value(0)
print(direction2)
# 设置电机速度和方向
motorRun(20, -1, 20, -1, pwmPin1, cwPin1, acwPin1, pwmPin2, cwPin2, acwPin2)#第一个参数调速度,第二个参数调方向
# 等待一段时间后停止电机
utime.sleep(1)
motorRun(0, 0, 0, 0, pwmPin1, cwPin1, acwPin1, pwmPin2, cwPin2, acwPin2)
© 版权声明
THE END
暂无评论内容