Raspberry Pi Pico 是一款树莓派官方设计的低成本,高性能的微控制器开发板,具有灵活数字接口。硬件上,采用 Raspberry Pi 官方自主研发的 RP2040 微控制器芯片,搭载了ARM Cortex M0 + 双核处理器,高达 133MHz 的运行频率,内置了 264KB 的 SRAM 和 2MB 的内存,还板载有多达 26 个多功能的 GPIO 引脚。软件上,可选择树莓派提供的 C/C++ SDK,或者使用 MicroPython 进行开发,且配套有完善的开发资料教程,可方便快速入门开发,并嵌入应用到产品中。
快速上手
为了方便在电脑上使用MicroPython开发Pico板,建议下载Thonny IDE.
点击ok后返回到Thonny主界面,点击停止按钮,在Shell窗口中即可显示当前使用到的环境。
- led_external = machine.Pin(15, machine.Pin.OUT) #设置GP15为输出模式
- while True:
- led_external.toggle() #每过5秒钟让LED灯的状态改变一次
- utime.sleep(5)
- def button_reader_thread(): #检测按键是否被按下
- global button_pressed
- while True:
- if button.value() == 1:
- button_pressed = True
- _thread.start_new_thread(button_reader_thread, ()) #用开启线程的方式去检测按键
- while True:
- if button_pressed == True: #如果按键被按下,红灯亮起,蜂鸣器响闹
- led_red.value(1)
- for i in range(10):
- buzzer.value(1)
- utime.sleep(0.2)
- buzzer.value(0)
- utime.sleep(0.2)
- global button_pressed
- button_pressed = False
- led_red.value(1) #正常情况下红灯边绿灯时黄灯会亮两秒,然后黄灯和红灯灭,绿灯亮
- utime.sleep(5) #由绿灯边红灯时,绿灯先灭,黄色亮两秒,然后红灯亮
- led_amber.value(1)
- utime.sleep(2)
- led_red.value(0)
- led_amber.value(0)
- led_green.value(1)
- utime.sleep(5)
- led_green.value(0)
- led_amber.value(1)
- utime.sleep(5)
- led_amber.value(0)
- def pir_handler(pin): #中断处理函数,蜂鸣器响,led快速闪烁
- print("ALARM! Motion detected!")
- for i in range(50):
- led.toggle()
- buzzer.toggle()
- utime.sleep_ms(100)
- sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)#开启中断,当人体传感器检测到异常时就会今天中断处理函数处理
- while True: #无异常状态下会每隔5秒改变一次LDE的状态
- led.toggle()
- utime.sleep(5)
- potentiometer = machine.ADC(26) #将GP26作为模拟信号采集引脚
- conversion_factor = 3.3 / (65535)
- while True:
- voltage = potentiometer.read_u16() * conversion_factor #将采集到的数据进行格式化转换成电压值
- print(voltage) #打印电压信息,电压值会随着滑动变阻器旋转而变化
- utime.sleep(2)
- #这一段代码使用到的是状态机机制,如下代码是一个装饰器,在装饰器中我们可以硬件进行初始化、设定引脚的电平等等。
- #label("bitloop") 我们可以在代码中定义一下标记,方便我们通过跳转的方式跳到他们这里执行。
- #jmp(not_x,"do_zero") 当x=0时,我们就调整到标签“do_zero”。
- #nop() .set(0) [T2 - 1] 当x=0时,会跳转到这里执行。
- @asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
- def ws2812():
- T1 = 2
- T2 = 5
- T3 = 1
- label("bitloop")
- out(x, 1) .side(0) [T3 - 1]
- jmp(not_x, "do_zero") .side(1) [T1 - 1]
- jmp("bitloop") .side(1) [T2 - 1]
- label("do_zero")
- nop() .side(0) [T2 - 1]
- # Create the StateMachine with the ws2812 program, outputting on Pin(22).
- sm = StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(0)) #创建状态机
- # Start the StateMachine, it will wait for data on its FIFO.
- sm.active(1) #开始状态机
- # Display a pattern on the LEDs via an array of LED RGB values.
- ar = array.array("I", [0 for _ in range(NUM_LEDS)])
- print(ar)
- print("blue")
- for j in range(0, 255):
- for i in range(NUM_LEDS):
- ar[i] = j
- sm.put(ar,8) #put()的方法是将数据放入状态机的输出FIFO
- time.sleep_ms(5)
Choose_Color.py
- #定义颜色
- rgb9 = (0,255,0) #青色’
- lcd.setCursor(0, 0) #设置游标位置
- # print the number of seconds since reset:
- lcd.printout("Waveshare") #写入字符
- lcd.setCursor(0, 1) #设置游标位置到第二行第零列
- lcd.printout("Hello,World!")#写入字符
- lcd.setRGB(rgb1[0],rgb1[1],rgb1[2]); #设置背光
Discoloration.py
- t=0
- while True:
- r = int((abs(math.sin(3.14*t/180)))*255); #RGB随着时间的变化而变化
- g = int((abs(math.sin(3.14*(t+60)/180)))*255);
- b = int((abs(math.sin(3.14*(t+120)/180)))*255);
- t = t + 3;
- lcd.setRGB(r,g,b);#重新设置RGB的值
- # set the cursor to column 0, line 1
- lcd.setCursor(0, 0) #定位到第一行第零列
- # print the number of seconds since reset:
- lcd.printout("Waveshare")#写入字符
- lcd.setCursor(0, 1) #定位到第二行第零列
- lcd.printout("Hello,World!")#写入字符
- time.sleep(0.3)