pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: . ^ m- u. L$ x8 l
通用板控制见 pyb. - import pyb
R& m9 q+ X5 t- T- Z
; ~* [. I/ U: Q1 v" I, Y C; v$ d- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
0 P$ I4 U' ^2 W+ n0 L - pyb.wfi() # pause CPU, waiting for interrupt
+ I; j* y- k' x - pyb.freq() # get CPU and bus frequencies6 p6 V( I, u" C# `
- pyb.freq(60000000) # set CPU freq to 60MHz$ K. X: l% l* g) Y$ k
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
& C' l9 V# S& ^% n8 B- Y7 @; d8 v& @! J+ o$ \ a2 ~2 ^
延迟和计时使用 time模块: - import time
7 n5 f# u% o0 ?5 c7 B4 W - # g2 Q+ o) t; N7 R8 }
- time.sleep(1) # sleep for 1 second3 c+ c9 ]: r. P y. d) Q! Q: K, u% u
- time.sleep_ms(500) # sleep for 500 milliseconds
8 Q- v9 c: w0 U - time.sleep_us(10) # sleep for 10 microseconds0 I. r( e" \( R( o0 E& A# p
- start = time.ticks_ms() # get value of millisecond counter; P1 j7 q2 J4 E, z/ S5 G8 C2 F
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 $ n0 S( `# o* v; j& S. c) v
. I. I) c2 j0 V内部 LED见 pyb.LED. - from pyb import LED$ S( j+ ^1 k, [* C$ Z
% X- j& e& v# ?9 z- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue4 S, J0 e8 o; _. D; I# a! c
- led.toggle()/ C! `: q9 `' o3 }' e! M
- led.on()! v5 m! ~+ o$ |8 [+ x
- led.off()
" ?1 Q+ i0 S( I; O3 d* X0 n
9 ~( q3 k8 Z* V, J- # LEDs 3 and 4 support PWM intensity (0-255)% {3 S7 e) v% n* h
- LED(4).intensity() # get intensity" i2 }% q1 _) {8 V- {, r
- LED(4).intensity(128) # set intensity to half
复制代码 $ i; X; P. d8 _3 ^' B
5 X# T9 a4 X$ z9 J
内部开关请参阅 pyb.Switch. - from pyb import Switch T# w. O& [ S/ Y# V- h
- & s$ u' L4 B- R6 p: G' Q
- sw = Switch()
8 z+ t( F. d/ i* k - sw.value() # returns True or False
: g! N D; W. k' h: l6 E0 c0 X - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 ; b& K2 y; g6 v5 E
2 p! S2 ^) i; C4 S5 m" Z$ ?引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin) j+ H$ e* E5 ~% g# ~; J
- 4 b# G9 M1 }4 X# X+ u
- p_out = Pin('X1', Pin.OUT_PP)
4 @! X$ S; ~$ Y3 ^. b! | - p_out.high()9 e" s8 q1 O: n8 }: m* q
- p_out.low()
4 ~, R V( a0 t$ h7 m) B - - w p0 A+ }5 }4 _& ]) x
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
; [: L* ^/ L! _* k - p_in.value() # get value, 0 or 1
复制代码
1 m' f9 Z' }( R2 G9 _ ]# ?
# i8 b4 f( |5 `8 v7 t伺服控制请参阅pyb.Servo. - from pyb import Servo5 [# v) q. u( E; \# u
- 0 \8 ?1 d3 D9 q% Z
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)& m* o3 \& g- o' U3 o
- s1.angle(45) # move to 45 degrees
3 V( l* l6 j7 m/ X0 c; @ - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
" G1 L6 ~% f/ ]$ u( o - s1.speed(50) # for continuous rotation servos
复制代码
! M1 H, p4 G1 h y q) K3 \
, v3 f8 m/ X% N8 @" B+ z外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt8 i% l2 [% i7 P
- * F4 ]( D' {5 J! _ W! ?5 R) n
- callback = lambda e: print("intr")) v: Q% ~6 _9 A& B
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
9 P0 N# U( r4 B3 X$ p- G! v2 A+ f2 P7 J. a7 Y
计时器请参阅pyb.Timer. - from pyb import Timer3 Q3 o3 D3 J0 S' a& \4 V; w
W3 A8 W: z5 Y) t7 O. ~2 W, h/ i4 I- tim = Timer(1, freq=1000)
* }. W# U* }( k( g3 X - tim.counter() # get counter value2 ]0 C) D& `# {7 ?+ N, m( Y
- tim.freq(0.5) # 0.5 Hz
/ R( K8 e; U6 \4 T4 ]& |9 n - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
' @/ u! r: x) S- e) D' M% E, rRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
F/ j9 ~9 f7 C0 g; ^' q8 U
; P: P2 Q$ n9 B0 @4 o$ A$ g* z- rtc = RTC(); V' s" o: g3 `1 H4 y: V
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time) t& Q4 i- \! R) n
- rtc.datetime() # get date and time
复制代码
$ W+ [* Y/ x' QPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
! N/ M4 N2 P3 E/ Y. G. R
' _7 M! N" b7 d- p = Pin('X1') # X1 has TIM2, CH1
- Z9 | v+ @' c! d1 O" [: R) d. n - tim = Timer(2, freq=1000)
/ Z& c }5 t5 H - ch = tim.channel(1, Timer.PWM, pin=p)
: w( }; H \- L2 } - ch.pulse_width_percent(50)
复制代码 + h B0 i6 C1 L6 @' l0 z
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
1 p9 c' @0 d( n; p1 H9 Z& o' ? - 8 k& A: `4 o$ z5 E& t/ c3 h1 u
- adc = ADC(Pin('X19'))
0 z. x/ c3 o. S- Y. w& w - adc.read() # read value, 0-4095
复制代码 ) M# _' @* I* i
9 j/ j4 Y1 o$ f7 @$ V v: u
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
- D5 h1 w6 B4 S$ J1 V3 V, |6 N+ e
# u3 M( |. `0 l ^! c0 ~- dac = DAC(Pin('X5'))2 s. m9 [" V& w3 ^% }" t8 c2 k9 t/ |. v
- dac.write(120) # output between 0 and 255
复制代码 # `: {8 o/ c: C8 Y* _5 x( x
& B2 K# |& h3 w; L
UART(串行总线)请参阅 pyb.UART. - from pyb import UART4 S8 Y; `9 g' p, B( H9 f
* _9 p$ i% {3 [, g- uart = UART(1, 9600), p$ C* k8 |4 P7 f& ?( s
- uart.write('hello') c) @' c9 C4 A, {+ t3 B* S! {9 f
- uart.read(5) # read up to 5 bytes
复制代码 % f* _; e, H8 |( b) h6 E% h" y
& e+ ]0 h, l" C0 _* T, _: b# X$ m% j( p
SPI总线请参阅 pyb.SPI. - from pyb import SPI
0 {7 V* z# R8 ]. w4 | D7 l- H% Z! a - ! G: E) ~, M. [" e6 B) u* w0 p/ ?
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
8 u/ b& I3 N) [ - spi.send('hello')
$ \1 h( ^$ a+ z. q$ q - spi.recv(5) # receive 5 bytes on the bus
- f. e% W9 y( _. t& o* w6 f - spi.send_recv('hello') # send and receive 5 bytes
复制代码 5 C [1 c. M; a& R- V( o
! ?; M% a3 q- y; k, E8 l7 L
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C* d! O" w& @1 h; L9 i
# p2 K( K' i' b8 P. v" X- i2c = I2C('X', freq=400000) # create hardware I2c object" Y# j7 O: ]4 O+ `6 O# g s7 a+ J
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
$ _5 R( T2 u2 B, ^& |+ w: v
# ^+ ^& M# p$ Y/ T3 {* o- i2c.scan() # returns list of slave addresses; ]' ]7 M" ]* }1 [6 S) Q+ f) y
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42: e# T; T- @' z9 S9 I1 Z+ k: y+ F
- i2c.readfrom(0x42, 5) # read 5 bytes from slave& `0 M6 V6 o$ S1 v1 h- t6 u" S2 ^7 P
- " X* e8 x1 h, |& [' _, r# S
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
% M0 B6 c, ?+ \+ h: F1 K1 ]3 _ - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
0 X+ n4 T, w' R/ Q+ h' P6 {$ m& G1 d' a* H
注意:对于传统 I2C 支持,请参阅 pyb.I2C。 0 A$ V5 m1 b- i0 H1 n
I2S总线参见 machine.I2S. - from machine import I2S, Pin
K3 P' `1 H$ O2 n% G0 @/ Y
2 D& O* T) o6 Y, H7 v( {: p- 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 object4 Q* @# Z. t& ^' l
- i2s.write(buf) # write buffer of audio samples to I2S device
' h; D' F) D( s9 A- J - " g/ r- L3 `: A4 s/ |
- 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$ ^# s% k5 n/ A9 ?" G+ G
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 8 e/ f) H; K: j3 v5 w
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
" d; }; @' W' X, T7 iCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN: v7 ^9 Y( [/ |1 z
- 1 d. s, j" }. T% l6 I2 h1 o4 v r, V
- can = CAN(1, CAN.LOOPBACK)
+ } y2 o1 b0 k3 b8 [! \0 C5 S - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
5 q5 l8 @0 L; o. o: s9 J0 W - can.send('message!', 123) # send a message with id 123" m9 e" a5 w* ~' E4 Q$ V" m
- can.recv(0) # receive message on FIFO 0
复制代码
4 z }; O- r( g# J
% ?/ b/ B/ r! u( C内部加速度计参见pyb.Accel. - from pyb import Accel
: @! q5 w. P# O9 K! F2 r
% ]3 x9 o/ l( ]0 ^: r- accel = Accel()
+ d) k0 \3 T. `& Q. x0 V _ - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
7 {/ _( l; Z a0 T: F- q% W1 o5 ?/ n- z% V6 ]( l+ _
|