Raspberry pico microPython 例程

树莓派Pico的mpy例子,写几个作为参考使用:

import machineimport utime
sensor_temp = machine.ADC(4)conversion_factor = 3.3 / (65535)
while True: reading = sensor_temp.read_u16() * conversion_factor temperature = 27 - (reading - 0.706)/0.001721 print(temperature)    utime.sleep(2)

打印内置的温度传感器的温度

先初始化读取内部的ADC的值,然后用65535除一下看分度值

下面死循环,读取。

from machine import Pin, Timer
led = Pin(25, Pin.OUT)tim = Timer()

def tick(timer): global led led.toggle()

tim.init(freq=2.5, mode=Timer.PERIODIC, callback=tick)
from machine import Pin
p2 = Pin(2, Pin.IN, Pin.PULL_UP)p2.irq(lambda pin: print("IRQ with flags:", pin.irq().flags()),Pin.IRQ_FALLING)

使用内部中断,为了方便。

还是点灯

import timeimport _threadimport machinedef task(n, delay): led = machine.Pin(25, machine.Pin.OUT) for i in range(n): led.high() time.sleep(delay) led.low() time.sleep(delay)    print('done')_thread.start_new_thread(task, (10, 0.5))

这东西是双核的嘛,所以可以使用线程来加速

我们引入微库,然后定义一个任务,后面线程要执行

代码的实现很简单,就是闪烁个LED

下面直接加到线程里面就可以执行了

就是这个

from machine import SPI
spi = SPI(0)spi = SPI(0, 100_000)spi = SPI(0, 100_000, polarity=1, phase=1)
spi.write('test')spi.read(5)
buf = bytearray(3)spi.write_readinto('out', buf)

SPI在mpy里面分外简单,直接initial。然后读写操作就好了

import timefrom machine import Pin, PWMpwm = PWM(Pin(25))pwm.freq(1000)duty = 0direction = 1for _ in range(8 * 256): duty += direction if duty > 255: duty = 255 direction = -1 elif duty < 0: duty = 0 direction = 1 pwm.duty_u16(duty * duty)    time.sleep(0.001)

使用PWM模块实现LED的亮暗变化

先指定引脚,然后是频率,for的时候用了一个占位符

下面的逻辑是实现了,从小到大和从小到大

控制一个WS2812

# 控制WS2812
import arrayimport timefrom machine import Pinimport rp2
# 分配一个管脚NUM_LEDS = 8

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)def ws2812(): T1 = 2 T2 = 5 T3 = 3 wrap_target() 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] wrap()

sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(22))
sm.active(1)
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for i in range(4 * NUM_LEDS): for j in range(NUM_LEDS): r = j * 100 // (NUM_LEDS - 1) b = 100 - j * 100 // (NUM_LEDS - 1) if j != i % NUM_LEDS: r >>= 3 b >>= 3 ar[j] = r << 16 | b sm.put(ar, 8) time.sleep_ms(50)
for i in range(24): for j in range(NUM_LEDS): ar[j] >>= 1 sm.put(ar, 8) time.sleep_ms(50)

用了一点神奇的东西,这个pico有状态引脚

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)def ws2812(): T1 = 2 T2 = 5 T3 = 3 wrap_target() 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]    wrap()

就是这段,描述了我们ws2812的控制协议

from machine import Pin, I2C
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=100000) i2c.scan()i2c.writeto(76, b'123')i2c.readfrom(76, 4)
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=100000)i2c.scan()i2c.writeto_mem(76, 6, b'456')i2c.readfrom_mem(76, 6, 4)

I2C普通的demo,设置引脚,freq

然后扫描一下地址,剩下的命令就是读写了,很常见

普通的I2C的屏幕

from machine import Pin, I2Cfrom ssd1306 import SSD1306_I2Cimport framebuf
WIDTH = 128HEIGHT = 32
i2c = I2C(0)print("I2C Address : "+hex(i2c.scan()[0]).upper())print("I2C Configuration: "+str(i2c))

oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)

buffer = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|?\x00\x01\x86@\x80\x01\x01\x80\x80\x01\x11\x88\x80\x01\x05\xa0\x80\x00\x83\xc1\x00\x00C\xe3\x00\x00~\xfc\x00\x00L'\x00\x00\x9c\x11\x00\x00\xbf\xfd\x00\x00\xe1\x87\x00\x01\xc1\x83\x80\x02A\x82@\x02A\x82@\x02\xc1\xc2@\x02\xf6>\xc0\x01\xfc=\x80\x01\x18\x18\x80\x01\x88\x10\x80\x00\x8c!\x00\x00\x87\xf1\x00\x00\x7f\xf6\x00\x008\x1c\x00\x00\x0c \x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)

oled.fill(0)

oled.blit(fb, 96, 0)oled.text("Raspberry Pi", 5, 5)oled.text("Pico", 5, 15)

oled.show()

驱动普通的SSD1306屏幕,驱动是提前移植好的

https://www.raspberrypi.org/documentation/rp2040/getting-started/#rp2040-boards

参考资料在这里

C/C++ SDK

Python SDK

还有很多有趣的代码没有写,参考来自官网资料~

https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-c-sdk.pdf
https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf
https://docs.micropython.org/en/latest/library/_thread.html
(0)

相关推荐

  • 树莓派发布微控制器开发板,售价仅4美元

    原创 大东 OSC开源社区 昨天 近日,树莓派基金会宣布推出首款微控制器级产品 Raspberry Pi Pico,售价仅为 4 美元. 据官方介绍,很多基于树莓派的项目需要额外集成一些软件读取传感器 ...

  • 取代Arduino!树莓派发布4美元Raspberry Pi Pico,采用自主Arm处理器

    昨天(1月21日),树莓派基金会发布了首款微控制器级产品:Raspberry Pi Pico,售价仅 4 美元! Raspberry Pi Pico是Raspberry 系列中的最新板,它可以用来取代 ...

  • 瑞萨推出64位1.2GHz双核MPU,树莓派进军MCU领域

    MCU:Microcontroller Unit,微控制器: MPU:Microprocessor Unit,微处理器: 早些年,MCU被很多人认为是低端.处理.运算能力很低的微控制器. 随着市场需求 ...

  • 【精彩原创】ESP-mp-01开发板I2C驱动OLED显示

    ESP-mp-01开发板是基于ESP8266 Soc的可以运行MicroPython的开发板,不像STM32版本的Pyboard,ESP8266本身没有USB,只能通过TTL串口和Wifi访问ESP8 ...

  • ESP32-PICO-KIT-V4.1

    "落霞与孤鹜齐飞,秋水共长天一色",这是唐朝诗人王勃描绘的一幅宁静致远.不似人间的绝美画面,而笔者眼中看到的物联网的未来也正如此,通过万物互联,可以实现的奇思妙想的场景实在太多了, ...

  • 【MicroPython】LAB01 - 流水灯

    Pyboard 板上搭载了 4 颗 LED,可以直接使用 pyb.LED(i).on() 或是 pyb.LED(i).off() 命令控制 LED 的亮灭状态,那假如 LED 是接到其他的 GPIO ...

  • Raspberry Pi Pico 初学者都会选择的IO扩展板

    这是国内著名开源硬件商DFRobot专为Raspberry Pi Pico开发的一款IO扩展板,它扩展出排针和排母的连接方式,排针排母均可连接并提供了详细的引脚信息丝印,方便初学者了解和使用pico进 ...

  • 树莓派Pico VS Arduino 该选哪个?

    来源:EETOP编译整理自tomshardware 最近,树莓派基金会发布了Raspberry Pi Pico.在树莓派Pico发布之前,Raspberry Pi和Arduino生态系统之间存在明显的 ...

  • Raspberry Pi Pico是个啥(云体验)+云点灯

    这次是我们要看的主角 起因是群里面有个大哥,发了一个链接. 说树莓派进军单片机了,我心想又收税来了. 就没有在意,后来就去查了一下,然后点错了,看个了pico电脑,复杂指令集的. 然后大哥又发一个价格 ...

  • 机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位

    我们在<VPLC系列机器视觉运动控制一体机快速入门(三)>的推文中,讲述了基于形状匹配的视觉定位功能,而BLOB斑点分析也可以实现定位功能. 本期课程我们将在BLOB斑点分析定位的基础上进 ...

  • 机器视觉运动控制一体机应用例程(二) 颜色识别

    前面课程讲述的所有的机器视觉功能如形状匹配.BLOB检测.数据码识别以及OCR等功能,我们都是对单通道的灰度图像进行处理. 本次课程我们将和大家一起分享使用ZDevelop软件对采集到的彩色图像进行颜 ...

  • 机器视觉运动控制一体机应用例程(一) 多目标形状匹配

    以上为广告 我们在前面的基于形状匹配的视觉定位课程中,讲述了形状匹配的基本原理.应用场景以及使用ZDevelop软件实现形状匹配功能的方法.但在课程演示的程序示例中,只输出了一个匹配目标的结果,本节课 ...

  • VR之变:Pico修正航向,互联网巨头候场

    这是又一次的资本狂欢,还是行业憋足了劲的集中发力?‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ " 作者 | 肖漫 编辑 | 王金旺 出品 | 雷锋网产业组 2019 年有一段时间其实是我们最迷茫的时候 ...

  • 给学习者:谈谈PLC中断指令及例程

    爱上PLC 公众号 去学习PLC 一.中断.中断事件概念 我们在日常工作中,按照正常的流程来工作,如中途发生紧急情况或相隔一定时间去兼顾另一项工作,就要先停下手头工作去处理紧急事件或另一项工作,这个停 ...

  • 【Vivado那些事】如何查找官网例程及如何使用官网例程

    有的时候需要查找一些官网的例程进行学习和参考,但是总感觉无从下手,今天就教大家怎么利用官网和Vivado的Documention进行相关的操作. 不清楚使用哪些IP或者不清楚需要参考哪个文档 首先点击 ...