micropython编程爱好网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 291470|回复: 8

pyboard 快速参考手册

[复制链接]

24

主题

24

帖子

3146

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3146
发表于 2020-4-19 10:36:57 | 显示全部楼层 |阅读模式
pyboard 的快速参考

以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0PYBLITEv1.0-ACPYBLITEv1.0.

下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:

  n$ ]5 r  D9 w( _1 f
通用板控制

pyb.

  1. import pyb
    : @$ K- U: r5 C% c

  2. % p6 Z' ?0 s! o8 V
  3. pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)$ Q" r) V' o5 L1 l( F
  4. pyb.wfi() # pause CPU, waiting for interrupt. G- C6 ~" A  \. x1 ?
  5. pyb.freq() # get CPU and bus frequencies
    # |8 s- j* e9 s! X  w; k
  6. pyb.freq(60000000) # set CPU freq to 60MHz
    , u( A. Y2 @4 Y  Y- R  r
  7. pyb.stop() # stop CPU, waiting for external interrupt
复制代码

* J/ c, a% [" @( X4 l

$ f' k, [1 w9 {0 @# C: B延迟和计时

使用 time模块:

  1. import time
    1 o: D+ }, Y1 M' x. |
  2. . \; ^1 S( r; d. }' z" m
  3. time.sleep(1)           # sleep for 1 second0 u# N0 J+ j# I0 t# x
  4. time.sleep_ms(500)      # sleep for 500 milliseconds! g9 [$ B  }' H, L
  5. time.sleep_us(10)       # sleep for 10 microseconds
    0 v) [/ C- H7 @
  6. start = time.ticks_ms() # get value of millisecond counter
    4 G* z' B- f) |  e8 e' \
  7. delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码

3 a; w  d! u2 _/ Z5 R9 Y4 e+ T1 D
$ A1 C$ g5 h: K$ e& R0 y1 r
内部 LED

pyb.LED.

  1. from pyb import LED
    + l, R) i8 r. C1 b  @, z
  2. # {3 \' ?$ t) P2 @. `
  3. led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
    - n3 e5 o/ c  s3 g* Y* y
  4. led.toggle()
    ) k' b, _$ V4 x7 s; ^* v& d
  5. led.on()
    2 s( Z( D0 C  j7 Z8 Z) Y* k
  6. led.off()( I0 u3 l9 Z( C2 P. H! _) Q3 K$ [

  7.   `2 b. L: |4 p  i- P
  8. # LEDs 3 and 4 support PWM intensity (0-255)
    + l) O4 G8 |1 B2 H4 U1 i+ m4 U( q
  9. LED(4).intensity()    # get intensity
    : p% p7 d% d5 }
  10. LED(4).intensity(128) # set intensity to half
复制代码

" U+ Z9 O% A) m0 d* \3 w
6 c6 v; i' [* w6 x- ?
内部开关

请参阅 pyb.Switch.

  1. from pyb import Switch2 `, S3 D) S# z+ F( k, w$ F

  2.   ]) `2 T) c3 t- n+ s
  3. sw = Switch()* r6 m. S" J  Y  `
  4. sw.value() # returns True or False* t* ?7 g! b1 _. L( V: B1 {* U' z
  5. sw.callback(lambda: pyb.LED(1).toggle())
复制代码

- x0 T  A0 [- i" c' H
6 q$ O# X# i2 F- B8 t, @
引脚和 GPIO

请参阅 pyb.Pin.

  1. from pyb import Pin
    - a/ U- \( C2 o7 z% g, e- s
  2. 6 Q5 d9 b6 d4 Q6 _0 i) X
  3. p_out = Pin('X1', Pin.OUT_PP): k0 E9 e* ^6 P7 [  X: x4 ~( Q0 L& b
  4. p_out.high()
    7 h3 w7 o7 M' {# O! E
  5. p_out.low()
    % @. q& h5 p# ]" i( W, @. v9 l

  6. , U1 P4 f  I; }( o
  7. p_in = Pin('X2', Pin.IN, Pin.PULL_UP)% `) \. L# J2 G3 F% P
  8. p_in.value() # get value, 0 or 1
复制代码

# v9 ]3 p# B; t# c, H7 N/ w8 B% g
* W& {% h  N( n+ C4 F& O
伺服控制

请参阅pyb.Servo.

  1. from pyb import Servo" [: n9 F' b; D

  2. # k3 |1 p; u1 Y8 H
  3. s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
    ( j9 G8 b1 w# g# Y: n& w$ `8 N
  4. s1.angle(45) # move to 45 degrees  a1 z& }  X) r" E, S, m# ?4 X
  5. s1.angle(-60, 1500) # move to -60 degrees in 1500ms
    9 }( k9 g2 A, |7 ?) Q
  6. s1.speed(50) # for continuous rotation servos
复制代码
2 Q6 ^- @& X0 C* L) |2 F

9 Z  Z# a5 K: e- w外部中断

请参阅 pyb.ExtInt.

  1. from pyb import Pin, ExtInt3 ~# Y. U& N* @4 E4 \7 g, i9 g# }

  2. 2 a) T- K0 {: C. D8 m7 d! O
  3. callback = lambda e: print("intr")
    8 g6 V5 H- Q6 a  \( D$ f$ J
  4. ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码

9 {1 I% h/ s; m( d2 p+ `3 W/ K0 c4 b* e6 X4 b
计时器

请参阅pyb.Timer.

  1. from pyb import Timer
    9 |' n5 |& p/ h  [4 \: f1 m7 [  z

  2. . L4 k6 i* ^0 c( p6 x9 }- S
  3. tim = Timer(1, freq=1000)
    3 E5 Z  d7 D. c/ C/ k, j
  4. tim.counter() # get counter value7 ~6 r/ ^  Q3 H+ ?- j
  5. tim.freq(0.5) # 0.5 Hz. B2 B) w+ ]- v! L. t- z
  6. tim.callback(lambda t: pyb.LED(1).toggle())
复制代码

3 h- k; }8 S" B/ |* i& tRTC(实时时钟)

请参阅 pyb.RTC

  1. from pyb import RTC$ V  {* `* j  y
  2. 5 `) k  b0 V9 J" _2 n6 u
  3. rtc = RTC()
    ! d9 z3 {% u/ {+ b
  4. rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time% v) \' ?( S# p- `/ ~9 V7 X: l. O
  5. rtc.datetime() # get date and time
复制代码
, v  a7 ?% }7 d) h2 c  P
PWM(脉宽调制)

请参阅pyb.Pinpyb.Timer.

  1. from pyb import Pin, Timer
    0 ^6 c7 D) M' j* J! E
  2. 6 M* Y& |6 N$ [4 P+ n& J
  3. p = Pin('X1') # X1 has TIM2, CH1
    # V6 }9 U! w& d+ U+ d6 K/ F2 R
  4. tim = Timer(2, freq=1000)) X8 \! L" E$ r
  5. ch = tim.channel(1, Timer.PWM, pin=p)7 ?% x) k8 B6 h. |
  6. ch.pulse_width_percent(50)
复制代码
7 o5 R  f, M" n. N2 F
ADC(模数转换)

请参阅pyb.Pinpyb.ADC.

  1. from pyb import Pin, ADC
    + ]( I, k9 R9 |7 Y2 z
  2. 9 Q; @* c, e$ O- d
  3. adc = ADC(Pin('X19'))
    ( M6 X: m" C1 [5 ]
  4. adc.read() # read value, 0-4095
复制代码
: A8 [0 i0 I2 e) I- n

% Y, X) X+ t8 ]5 G- YDAC(数模转换)

请参阅pyb.Pinpyb.DAC.

  1. from pyb import Pin, DAC7 [6 S* N) A2 Z2 H4 v( W

  2. ) z6 K: D$ ~# O1 H! G
  3. dac = DAC(Pin('X5'))2 e2 D2 A1 n) [5 p8 \
  4. dac.write(120) # output between 0 and 255
复制代码

$ y, l$ z; x/ n8 k( Q) M7 z
3 s- E  U1 r/ X' R* n4 V7 cUART(串行总线)

请参阅 pyb.UART.

  1. from pyb import UART
    2 t5 t: n0 C4 {) M
  2.   F+ ~0 G+ t4 m( e% s2 \
  3. uart = UART(1, 9600)
    / M5 B# O# y2 a6 c: S  s
  4. uart.write('hello')
    4 o1 `) }" o1 C( [% n4 K) Z
  5. uart.read(5) # read up to 5 bytes
复制代码

+ u- J+ y5 U  s1 ?5 B" |5 Z/ f; b+ ^" Z) F
SPI总线

请参阅 pyb.SPI.

  1. from pyb import SPI
    ( |; x. @, K6 B, i( B+ p# R- f# ]

  2. 8 L' B. f/ K# {) _' g6 {* z
  3. spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0), j' Q' H( c, A7 ]( L0 v  k) z
  4. spi.send('hello')
    2 V+ ^+ Q8 `. T# ]+ B9 G* E
  5. spi.recv(5) # receive 5 bytes on the bus" y+ K  @9 x  r% s4 _1 a9 {' |% v% I
  6. spi.send_recv('hello') # send and receive 5 bytes
复制代码
( a. Q3 N% n+ r

+ x2 J2 c6 N+ wI2C总线

硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C.

  1. from machine import I2C
    7 [0 j8 u6 I4 K% X* j5 {2 O1 G. |0 Z
  2. 8 l( W) p2 [- i( m
  3. i2c = I2C('X', freq=400000)                 # create hardware I2c object
    ! E" o* J. J& e
  4. i2c = I2C(scl='X1', sda='X2', freq=100000)  # create software I2C object! @% C6 z( s4 `* U" A, o- n
  5. 0 ^+ G" y7 K6 p
  6. i2c.scan()                          # returns list of slave addresses; u/ g( p3 w& R: S
  7. i2c.writeto(0x42, 'hello')          # write 5 bytes to slave with address 0x42. }* {4 H1 P0 F2 `
  8. i2c.readfrom(0x42, 5)               # read 5 bytes from slave" U1 v' m$ m. |* u7 G) ?

  9. ) o0 x+ y% }* l
  10. i2c.readfrom_mem(0x42, 0x10, 2)     # read 2 bytes from slave 0x42, slave memory 0x10
    7 j8 A) B( K% }: e7 I+ u
  11. i2c.writeto_mem(0x42, 0x10, 'xy')   # write 2 bytes to slave 0x42, slave memory 0x10
复制代码

: i3 x5 F" C, U
) H  W! a$ A9 V: {& p/ ]

注意:对于传统 I2C 支持,请参阅 pyb.I2C

! A4 u  Z( s- o3 x# k# F& M! H
I2S总线

参见 machine.I2S.

  1. from machine import I2S, Pin
    9 {# n5 ^( c+ e0 x% B* P
  2.   H, b7 D1 o, O* t- ]
  3. i2s = I2S(2, sck=Pin('Y6'), ws=Pin('Y5'), sd=Pin('Y8'), mode=I2S.TX, bits=16, format=I2S.STEREO, rate=44100, ibuf=40000) # create I2S object
    ' [4 z* ^* L' x5 M$ d
  4. i2s.write(buf)             # write buffer of audio samples to I2S device
    0 X  `" J# y$ B0 g
  5. : g/ f0 ~* m2 Y: ?
  6. i2s = I2S(1, sck=Pin('X5'), ws=Pin('X6'), sd=Pin('Y4'), mode=I2S.RX, bits=16, format=I2S.MONO, rate=22050, ibuf=40000) # create I2S object& u" R7 ]5 o- U9 Y5 U
  7. i2s.readinto(buf)          # fill buffer with audio samples from I2S device
复制代码

7 T3 m* Z* f& r- }  D

I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。

PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。


3 g6 J. m4 N% t5 `( QCAN总线(控制器局域网)

参见 pyb.CAN.

  1. from pyb import CAN
    " T: \9 {5 i4 L8 \5 ]& x; x. t1 H
  2. ' Y" H, M: M$ L, p6 a
  3. can = CAN(1, CAN.LOOPBACK)+ X1 v+ x5 D! l; ?
  4. can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126)). Y" I5 F, N( W  I
  5. can.send('message!', 123)   # send a message with id 123& S$ M3 o2 {" ~9 r2 k$ u- M  y; o' F
  6. can.recv(0)                 # receive message on FIFO 0
复制代码
; R8 c' f7 G$ O5 o+ ?, @
; M3 y( _7 v& i" w7 g
内部加速度计

参见pyb.Accel.

  1. from pyb import Accel
    9 _. c+ q. L. J0 m) n
  2. * ?* O" A/ _1 W8 r. q! O% d6 c& k1 n
  3. accel = Accel()
    " v/ ^% ?& O% i! W
  4. print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码

2 Y" r- `- l+ S; b( x3 `; y0 q! W& @" x. }! m# k( d$ k
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-11-15 08:13:45 | 显示全部楼层

pyboard 快速参考手册

So happens. We can communicate on this theme.
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-7 20:00:16 | 显示全部楼层

-

Also that we would do without your very good idea
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-20 17:55:02 | 显示全部楼层

-

I can not recollect.
回复

使用道具 举报

0

主题

1

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2021-10-21 20:48:49 | 显示全部楼层

Very interesting information, I am looking forward to the continuation.

dgfergus ??? 2021-8-28 11:00
: o" }2 k* @2 J0 J# rThank you for posting this for all of us
% y5 I6 @. i5 z8 P& b) `
Very interesting information, I am looking forward to the continuation.
回复

使用道具 举报

0

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-6-11 02:02:49 | 显示全部楼层

-

You commit an error. I can defend the position. Write to me in PM, we will discuss.
回复

使用道具 举报

0

主题

7

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2022-6-25 11:56:25 | 显示全部楼层

-

excellent idea and is duly
回复

使用道具 举报

0

主题

8

帖子

996

积分

新手上路

Rank: 1

积分
996
发表于 2024-7-12 18:37:01 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

0

主题

8

帖子

996

积分

新手上路

Rank: 1

积分
996
发表于 2024-7-27 01:23:40 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|micropython编程爱好网 ( 粤ICP备14010847号-3 ) microPython技术交流 microPython技术交流2

粤公网安备 44030702001224号

GMT+8, 2025-5-9 22:43 , Processed in 0.218401 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表