pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
/ X$ Y, P- r; v& A2 q3 s通用板控制见 pyb. - import pyb( B. U" I/ ?+ f7 L9 m/ s8 L9 {
- . S1 C+ c- d+ I2 _2 s1 d+ d
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)) A7 T# P0 _; d3 k1 X- D9 J
- pyb.wfi() # pause CPU, waiting for interrupt
) _. |) F3 I; T" y: X# v8 j - pyb.freq() # get CPU and bus frequencies! f/ D( q- E3 e3 M) d+ Z
- pyb.freq(60000000) # set CPU freq to 60MHz
8 A6 j) K% }4 i E - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
% h" |0 e8 F" S \( i! N3 }9 h
/ G1 S5 R' a1 k6 k6 P; `: }. r延迟和计时使用 time模块: - import time
0 }1 o, _2 g0 L3 _1 \$ h# ~ - : i6 _; D3 Y# S O8 k0 ^* M/ X
- time.sleep(1) # sleep for 1 second5 f7 H7 t( S! c' p$ U
- time.sleep_ms(500) # sleep for 500 milliseconds# \& I1 L' M' U& L1 `6 t9 I/ ~' E
- time.sleep_us(10) # sleep for 10 microseconds- Q% ~+ V O1 [4 s
- start = time.ticks_ms() # get value of millisecond counter
9 M$ Y$ f% O; A* Q - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
$ ~' @* g3 v2 b+ E) s/ w$ h
# K2 |& Y# i; l内部 LED见 pyb.LED. - from pyb import LED4 P! e& [1 ^% p. X
4 l, x/ v& B. B j1 |" H- I7 v- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
$ c4 k" r! W9 z; N6 R4 }$ @$ O - led.toggle(); h. f7 w9 ]# t
- led.on()# g" Y, X) a$ K- m
- led.off()- M! R1 B4 \* _% ^+ h1 h5 ?8 l
- 2 p) T0 C% W5 e& P' l4 b8 z
- # LEDs 3 and 4 support PWM intensity (0-255)# d5 y! U" M/ \1 e& j) k
- LED(4).intensity() # get intensity' M3 Q6 ]9 ]- a$ l. Y* t+ ?
- LED(4).intensity(128) # set intensity to half
复制代码 3 J/ y% C: G- y, u" _5 v, l
# I! a" N3 M% [; @. C, H/ r9 u
内部开关请参阅 pyb.Switch. - from pyb import Switch: j( F# E% M- f% |
- 3 s7 W0 I( I7 E$ w6 e# `
- sw = Switch()
& n/ A: l/ T/ P5 z2 G M5 ^ - sw.value() # returns True or False
, J, ~2 E t5 O$ l: {4 M - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 & [ ^+ M0 q6 M- m* v4 {8 M( U
) F4 n& f" F" r T引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin4 B6 f0 a) K1 _6 K( w
- / o4 Z) P: F. \+ m
- p_out = Pin('X1', Pin.OUT_PP)
, h& }- c% `! o- C; s. s- T - p_out.high()
' ~" L$ U- x) q$ k9 m8 P" U$ q! { - p_out.low()1 h0 ]* _; y. e5 I
- " O; y( Q+ r0 d* {! K/ k
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)* m" y( H p0 M' X' [
- p_in.value() # get value, 0 or 1
复制代码
( @7 s0 z- H4 h
6 [8 E- G$ P3 J# o r伺服控制请参阅pyb.Servo. - from pyb import Servo6 i D5 T- E' g- Y
- 1 U: O( v) n1 [* U" ?4 h
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
/ S% j f' `) T, a9 c- j% h - s1.angle(45) # move to 45 degrees
\. v8 P! e1 {0 k3 b: m' E - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
v9 r' s/ m. z8 Z- { - s1.speed(50) # for continuous rotation servos
复制代码 ' ~/ [" b' q9 i# a: u
5 R3 {' p. C4 u7 X- ?# x! @
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
( g- T9 K" q2 |+ H8 R( V
8 O8 [9 N5 _# }* g, W+ Q- callback = lambda e: print("intr"), v# ^9 Q6 `- | {9 G
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 % u& F- q1 v' s2 T' b4 R" R2 `1 B. W
& ?4 T8 a$ Z+ d% a
计时器请参阅pyb.Timer. - from pyb import Timer7 d5 x' x- D( R% d9 t
- 3 ?3 p+ W" B& z0 S
- tim = Timer(1, freq=1000)
' m6 m% ^. B3 P. G - tim.counter() # get counter value
2 {5 S. u/ a' I/ S4 Z: L - tim.freq(0.5) # 0.5 Hz$ q# ~8 Q6 T- |+ ]
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
2 ^' C8 ]+ K$ ORTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC( J; a" \! {# a9 i
- 3 B9 x$ _. n$ O8 l2 Y
- rtc = RTC()
& `/ j4 O" W/ N' j1 E- B6 F; p - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
) E& p6 v( p& n1 K4 b" t# D d" T5 T - rtc.datetime() # get date and time
复制代码
* E e. O4 c6 W# T2 x2 t$ ePWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer8 `6 `0 Z1 n2 e: h9 P8 `
- # \ I$ X! q+ X( V h
- p = Pin('X1') # X1 has TIM2, CH1
0 e4 B. P% C7 {7 m G8 v. y - tim = Timer(2, freq=1000)
% a( U3 g, N- i4 V0 o; `* u! R - ch = tim.channel(1, Timer.PWM, pin=p)
" A% ^3 k5 R+ j2 V ? - ch.pulse_width_percent(50)
复制代码 ! E& o; `3 F h6 v8 }. Y% @ f! u4 e/ a
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC0 f b& \% X- j+ K
- ( K" I i6 _3 S2 U, D' i" k
- adc = ADC(Pin('X19'))! K9 p, L! e' x2 a
- adc.read() # read value, 0-4095
复制代码 0 m0 b0 ?8 t, \1 m6 L# ^" R
9 W* q6 E0 P, a* CDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC" n- E2 J- X8 r
- U1 w- m7 ], Z9 D X
- dac = DAC(Pin('X5'))
2 N6 j) I( v/ v) ]2 P - dac.write(120) # output between 0 and 255
复制代码
, Q% K; G4 B! W& ], N" s1 O" V- }, r0 N8 B J1 D; ~
UART(串行总线)请参阅 pyb.UART. - from pyb import UART& o2 f* P$ l8 H9 E
: N" e! R4 G# G, ^1 Y1 D- uart = UART(1, 9600)
2 ]+ ~' N- A0 p+ V/ W! K1 Q% k - uart.write('hello')
7 d4 t9 G3 h1 l) D% | - uart.read(5) # read up to 5 bytes
复制代码 / m9 T \% |4 \. l
6 ~8 b( @- N8 a- e B; B% KSPI总线请参阅 pyb.SPI. - from pyb import SPI
! L, S5 u7 l5 p3 F+ l9 T! d1 V - 0 f6 h# y2 k5 ^1 Z
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)5 \6 W& }+ i- B# @4 g$ I. V X
- spi.send('hello')
9 z Q' q1 v; K- @$ x- K* @ - spi.recv(5) # receive 5 bytes on the bus
) [+ \, T2 M! S - spi.send_recv('hello') # send and receive 5 bytes
复制代码
6 R! E# o3 V$ F* f3 C5 k5 d! e
- h1 u, r8 C: CI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
5 h" F! Q5 ~+ k# k+ E; e
: y1 [% K+ P+ Z- i2c = I2C('X', freq=400000) # create hardware I2c object* |% S! T7 k0 p4 J9 h0 e9 S
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object$ g$ V" a0 m7 z8 q! S/ R
- . R9 m3 ^" @8 a" a
- i2c.scan() # returns list of slave addresses& U* a. \. h" d- o* |" b7 g+ T7 q
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
F7 H$ x; t+ Z - i2c.readfrom(0x42, 5) # read 5 bytes from slave# @; U6 D5 D- P5 s" f, p" S
+ x. j5 v5 { l& j: F- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10! ~( V. o" a# C7 p5 j
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
+ u& Y b( B, s# Q4 U. y
/ D" V( I$ Q6 Y注意:对于传统 I2C 支持,请参阅 pyb.I2C。 1 e; }+ O/ x6 d g+ Z
I2S总线参见 machine.I2S. - from machine import I2S, Pin$ w/ U' Z# r7 ~* z: |6 f
- & u+ {; k- h7 c' M
- 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
( `, a( \' d5 \) C - i2s.write(buf) # write buffer of audio samples to I2S device
) }' ]7 V+ f0 _7 b% }! x7 f - 0 r9 v8 J+ Y3 C: i: A; x Q: e3 I
- 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 object5 Z; t" R/ S; ~6 e5 I: k
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 3 e7 o9 s: L* P4 q$ q+ T; t) p1 c' k
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
. T. q" _( ?* \+ J9 Y! aCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN+ j$ J* d8 g6 j' N1 _4 o. J
2 O2 T b) t% y: L# ?2 p- can = CAN(1, CAN.LOOPBACK)0 C7 A+ d" e j' N
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
+ a, _9 M2 A% @5 i7 k4 R, a - can.send('message!', 123) # send a message with id 123
, J9 ^" s# j8 I0 F4 F - can.recv(0) # receive message on FIFO 0
复制代码 / d$ J, W' o- S
+ Y' M# k) E- ?3 r# h3 f) l5 t" O内部加速度计参见pyb.Accel. - from pyb import Accel
9 l: `* c9 J' X( c6 s6 F- p
% i& M! d! _% ]; K, V. u) A, V- accel = Accel()
* N: ]. f$ o6 ?0 V, C* r7 a - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
1 N5 s; x; ]# o$ N+ Z5 P }3 m6 B% d& t: ^. b+ T& w& n
|