pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
( X5 h7 s! F2 R通用板控制见 pyb. - import pyb
" b# X9 d; \4 y" P+ o9 J* K0 V
: F& a; b. Z/ f: z! k- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
5 L9 F0 T, f! v& g8 {. m - pyb.wfi() # pause CPU, waiting for interrupt& x! r% K3 `5 y9 B, L9 T" l
- pyb.freq() # get CPU and bus frequencies; P9 B0 [/ C( s: q% ~
- pyb.freq(60000000) # set CPU freq to 60MHz
0 S* E% a% ~: x' d' [ - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 , M; k4 Z7 g/ s1 N4 Y. d
% u1 `1 ~' L! d7 f8 }% v: m
延迟和计时使用 time模块: - import time
8 t2 x7 P" D4 X( N/ Q0 I
/ B& Y# O0 M3 Y+ J. X) b- time.sleep(1) # sleep for 1 second' q: _9 P2 t7 E$ \: v
- time.sleep_ms(500) # sleep for 500 milliseconds+ _) m1 ^6 k! L( z. c; X
- time.sleep_us(10) # sleep for 10 microseconds- n9 J" |/ v& }/ b8 [. u
- start = time.ticks_ms() # get value of millisecond counter: {# |. y+ n$ Y
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
6 I$ Z" A1 Q3 I; U* l# e2 p* ^# ]
5 U! n9 A: H( q3 n+ C3 w; `: v内部 LED见 pyb.LED. - from pyb import LED
0 @& Q- A6 y( Q4 G0 E v0 |: k; `% F - & Q! h5 a3 i1 l: f) v3 u
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
7 W$ ]9 @; s/ `" ?6 P- G4 z - led.toggle()2 [ ~8 s N' A% ~9 |9 [
- led.on()
8 f& J a' b4 {/ H) O - led.off()- y3 T) w, t) r' n' l
- 5 {9 a6 z3 J0 A3 K, ~4 I2 Z1 q
- # LEDs 3 and 4 support PWM intensity (0-255), L! Y) C) R- x7 Y% a
- LED(4).intensity() # get intensity
* z* w; b6 ]# @: M7 K( e0 Q - LED(4).intensity(128) # set intensity to half
复制代码
" c* A2 {. k" j( B
+ c9 h ~' N5 k6 n; c- r内部开关请参阅 pyb.Switch. - from pyb import Switch" \4 z! W" V! @! M2 f% ?, k2 d
- 8 h" j: ^) ~: A- F. P0 e5 ]7 D- Z
- sw = Switch()
' z- Q- V5 ?! }) q3 @5 \6 B5 O - sw.value() # returns True or False
; M) k; o, S( I6 l+ y( G- m* M - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 , ^3 q* o, y, S1 v3 ]% L( @
, s( Q9 m7 `% x' I& a, T( J
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin% w/ d1 A& j( J2 z
- + }. @9 p6 t! _2 a2 n: x: U5 |
- p_out = Pin('X1', Pin.OUT_PP)
! k4 ]: j/ e( w' V. e3 i1 J5 Z s - p_out.high()4 I! M0 I- i$ h! `: j* m
- p_out.low()
6 p8 `' w& D/ b4 X - 2 h6 a: w) g( L) v( r% j- \$ ?' G
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP): m4 b- S7 F; {3 q2 B
- p_in.value() # get value, 0 or 1
复制代码
' p W0 l4 }2 N" |8 y& ^6 {( O- u/ h! ]" T. O
伺服控制请参阅pyb.Servo. - from pyb import Servo. p, W# e7 I& b9 u. J5 y+ m
& K/ |/ V" u( u7 t1 f. h- s1 = Servo(1) # servo on position 1 (X1, VIN, GND). K! U+ {4 w& U2 t; A
- s1.angle(45) # move to 45 degrees$ m7 U7 V5 j) p) H0 i2 l
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms; K$ {9 @# j: N# G: V) G+ D& c
- s1.speed(50) # for continuous rotation servos
复制代码
' Y1 q2 O4 ?% \6 _$ |2 M9 ~% N' y0 \/ v0 G& K# _
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
! y( ~2 b) h/ z" ?1 j- j
% d- k6 p3 f, s) A9 _# A$ W* R" v# q& d$ y- callback = lambda e: print("intr")0 {# k$ ^$ n$ t0 h! j. }5 R
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
0 ^0 C: P7 ~% X; i+ E0 R+ |; o( ]1 v. u" c
计时器请参阅pyb.Timer. - from pyb import Timer# v; J- c* [# I
- x! K1 a' o$ r# g- tim = Timer(1, freq=1000)
C. r* u& D% a5 H2 l7 Z - tim.counter() # get counter value
7 |0 v1 y! ?7 d+ n# S' m) D - tim.freq(0.5) # 0.5 Hz" q) Q' ]6 {# V- T
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 7 q* H8 Y. x/ z2 z' `
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
/ n" X4 |9 s. C3 y - 6 u$ u/ I/ m8 W4 i7 u
- rtc = RTC()
* o! i# l1 e& x! X$ X* X - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time$ r4 G, N" N- ~6 \5 A* ?5 p2 q# N
- rtc.datetime() # get date and time
复制代码 ( c8 O/ k: L, U( }+ U( z$ o1 V5 v
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer* B4 l N' b4 H0 U
- ) L k/ h4 V6 f6 a8 J/ y
- p = Pin('X1') # X1 has TIM2, CH1
, m" f- q5 }2 Q, _! o, q2 K* H( T - tim = Timer(2, freq=1000)
- g% s- a& }, ^$ U6 N' ` - ch = tim.channel(1, Timer.PWM, pin=p)
/ u2 [8 @ f1 ?2 ~* d+ G' k" U - ch.pulse_width_percent(50)
复制代码
) V r: {( V6 _) Q) Z' s" bADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
2 W( M: K& V; i2 O
" @! s2 u/ ^' e- adc = ADC(Pin('X19'))8 C6 C& \# d+ s
- adc.read() # read value, 0-4095
复制代码 $ E8 O* t4 `, u) s2 Q" R9 U! a# E
4 f- E* N7 B' _! u0 B% z* L. ?DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
/ \0 ?% w" l, r3 v - : K+ p4 h+ L" o q# {
- dac = DAC(Pin('X5'))! _0 e5 c, k- m* z( W+ m3 b
- dac.write(120) # output between 0 and 255
复制代码
! D" [( U9 O. L; X" |0 {# i" A/ m o3 k5 ]) k( F- S' ~- C
UART(串行总线)请参阅 pyb.UART. - from pyb import UART. v) d( S' S1 Q( t
: O( Z9 L8 n. q2 Y+ y- uart = UART(1, 9600)
* i7 M! i8 V: l) c; Y- i" @; g7 L- a - uart.write('hello')/ u H0 l2 u ^! Z; s' v" l
- uart.read(5) # read up to 5 bytes
复制代码
. Y7 v1 J/ j* v8 d2 ~' |
* n4 G& O. F( X7 z6 l1 ~4 O" p7 b. tSPI总线请参阅 pyb.SPI. - from pyb import SPI
; q" z+ k! g) K; Q$ T: G9 E1 a3 V
5 L* i; o3 ?! G- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
! M% X: a5 `9 B i - spi.send('hello')
/ A9 ]/ g: P; |7 X0 t5 G - spi.recv(5) # receive 5 bytes on the bus
4 | h* h2 x! ~4 A - spi.send_recv('hello') # send and receive 5 bytes
复制代码 0 D p( x$ s" U$ a
; Y& \! N* H2 F# a) X
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
6 t" k7 T: i) o* X j* `' C, b' M2 X) x
8 L) Y! C2 U% N0 e* F- i2c = I2C('X', freq=400000) # create hardware I2c object
1 }: n; v8 K- ] - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
& f. \9 [- o2 B+ n - 8 X* Y: p; s/ ^) w0 ]" l( M( f
- i2c.scan() # returns list of slave addresses: D! a# f5 k3 J' [3 h9 I1 s
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
, h) A+ h3 F5 j8 \9 k+ \- f - i2c.readfrom(0x42, 5) # read 5 bytes from slave
' K6 k6 N, q( h( f
4 ~3 t& I9 J" o2 z4 r/ E- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x102 ]$ k: n6 K( z i% B3 C; [
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
8 ]! @3 [! p" _$ w; n$ e. |8 u& [3 f2 t, l! C/ z6 R- {+ U0 S
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
- B" v5 e% f5 @& }I2S总线参见 machine.I2S. - from machine import I2S, Pin
# |. S3 [; N: p/ K" P/ I* r9 k' p
0 n0 ~0 K, |8 z: T- 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! x: o' k6 ?* g. c* x; b
- i2s.write(buf) # write buffer of audio samples to I2S device
7 P% x3 `, V$ b) L# X' v - 2 z" k9 d, ^. V \
- 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
$ Z0 H: p$ F( e. K3 } - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
$ i2 ~, |7 }/ t) i! t: cI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 0 |, i0 d$ x& E- K( V/ s- O4 J
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
" r+ `! N7 F: a2 J. R8 l3 [: Y - * ?/ N( `- |7 g$ X* @
- can = CAN(1, CAN.LOOPBACK)9 L( l0 v c- c2 o
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
h" p: m- a6 z0 |& D - can.send('message!', 123) # send a message with id 123
+ k% R5 z3 F! H6 ~$ l* o - can.recv(0) # receive message on FIFO 0
复制代码
! E& `1 g V( K Y* [1 C; G, t6 k) n* g4 h: `. ^! H1 [9 s
内部加速度计参见pyb.Accel. - from pyb import Accel
' @- V1 H4 x+ N+ q& V - 9 L+ Z$ ?, k" H6 W' w& d. [3 d: @. N# k
- accel = Accel()/ J/ {- f" }; y+ y2 p4 [+ l
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 . G* E) N) s; t* w: ~5 s, K
$ }3 T% `: a. c$ e' H$ d |