pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
5 k6 y8 ~- R* Y4 F! ^$ W9 B+ j; h通用板控制见 pyb. - import pyb
& d; S& H; A, ~5 k/ T6 k - 5 d+ c/ i, }* i% {" Z
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
! w7 }. F ]0 ^! A4 x - pyb.wfi() # pause CPU, waiting for interrupt
# D3 F) ?8 A5 b: Y7 _ - pyb.freq() # get CPU and bus frequencies
5 v3 b' e- D7 V$ N' O: O - pyb.freq(60000000) # set CPU freq to 60MHz# u+ Y. @! r0 t0 f% I0 q3 q
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 2 x* R- e, [" d+ k- J2 c) n
' N! z f! X2 N* R
延迟和计时使用 time模块: - import time* a% ^# D2 {* ^: z+ z, t
- 0 g* R0 c) n+ f6 z0 H1 J
- time.sleep(1) # sleep for 1 second0 }8 m3 n, _' y; n
- time.sleep_ms(500) # sleep for 500 milliseconds( H2 I$ c5 R5 d( @, `
- time.sleep_us(10) # sleep for 10 microseconds
/ f7 K1 N) V( F9 b' ~ @1 w3 V9 y - start = time.ticks_ms() # get value of millisecond counter+ T" @8 ?$ T" O4 m9 E
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 9 }/ v0 u! p3 l8 {7 s" x2 ~3 W
7 C& T l0 \; z W5 X内部 LED见 pyb.LED. - from pyb import LED
8 N+ c4 N+ G$ D+ w) U! m( X, R - 7 q+ W( m5 y: u5 y6 e7 {
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue" x/ z4 J0 j( u) m
- led.toggle()' @4 N$ r" k, S! L
- led.on()' i9 Y- o8 T- \% i# R4 v9 h
- led.off()
9 J+ z+ G% C, L/ o, u% O q4 B% U F
; ^" j- D* @1 Z) R+ h$ P" l$ x- # LEDs 3 and 4 support PWM intensity (0-255)
. U; {9 Q7 q u0 `& F) S( O. d3 ] - LED(4).intensity() # get intensity2 t1 I$ Z1 z7 l: I0 b* ~% _
- LED(4).intensity(128) # set intensity to half
复制代码 ! O! ?& T* H6 i& n+ u* J j
I- c6 Y+ [& }: ?/ h/ a
内部开关请参阅 pyb.Switch. - from pyb import Switch) v8 O4 }/ }/ q" K! G
: M& C% b$ V/ k% B4 p4 X0 y6 A- sw = Switch()+ ?/ k% o) _% z. `
- sw.value() # returns True or False/ e ~# n4 w9 k, J: o2 h
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
/ s' _+ `) N8 t# n4 P* Z* I% ]( [9 |5 l8 Z2 c/ M! v' d$ I
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
0 ?- c/ F5 K9 f1 D, |% J
# x6 I3 ^& n! a$ Y& r- p_out = Pin('X1', Pin.OUT_PP)
7 w. l, X6 z: Z: s/ H7 M - p_out.high()
* [( M9 u1 m' P: k1 p - p_out.low(). K7 R5 ~( I( X( E- k
- ' @/ y9 W# ^6 d4 D! ]6 C1 y1 p
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
% E6 v+ I6 O- e. T" ] - p_in.value() # get value, 0 or 1
复制代码 9 E' y2 ^2 |# P
1 o, ~" ^$ {. ^6 x7 h0 x( B伺服控制请参阅pyb.Servo. - from pyb import Servo4 c6 K4 o, w8 N% G- A
- & `- `: |; S9 T8 j4 m
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
9 l2 g4 X0 }( B+ J' D) C/ q; h - s1.angle(45) # move to 45 degrees
# o0 }0 S0 C4 ]# R5 C! [# t- ? - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
& a: x0 F0 ^% [! g! t - s1.speed(50) # for continuous rotation servos
复制代码 - }; O2 a3 P$ T7 @. | z' q
9 p: |! j( z+ s2 Q% i H& E8 `外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt$ n. t' B7 `1 ^) U
- 9 }) r: I9 D i1 C( j [* m0 @
- callback = lambda e: print("intr"); t/ u. z/ j- J/ i+ m: [0 @
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 8 n' X) x+ K0 B8 M0 e5 Q" e& R% n
9 a+ q( b' f6 m: f3 D计时器请参阅pyb.Timer. - from pyb import Timer* s9 c D; o, z3 X6 T
- ) }( C' g$ f- C8 i5 ?! ]
- tim = Timer(1, freq=1000)
" L: k {" W7 i - tim.counter() # get counter value' o; L5 w: U: C$ N$ d. V- r8 ]
- tim.freq(0.5) # 0.5 Hz
# G5 Z& I( j* @; N& W - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 3 ^0 H: r2 J; f
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC3 B, G7 d/ K) L" \3 x \# W
- , G ?9 y+ Q- w" P
- rtc = RTC()& x6 U* M8 a5 R1 P) Z
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time* Q. s$ E1 b; Z4 E/ }
- rtc.datetime() # get date and time
复制代码
5 s W3 o1 k ?) V. Y- P% _; ^PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer. Z% K+ O) x G6 T
- 1 g' \# |( O' H1 j$ @, O
- p = Pin('X1') # X1 has TIM2, CH1+ A$ A# t) I. R Y: H
- tim = Timer(2, freq=1000)
+ J! \( u3 o2 { - ch = tim.channel(1, Timer.PWM, pin=p)9 b4 d# ~) P' L$ X& O* ]6 ?
- ch.pulse_width_percent(50)
复制代码
- j* q& }2 r! S1 R6 g, o# k: X4 MADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC! I% y1 y/ X" N: F+ [3 U
- * H1 J, j1 x- @/ R
- adc = ADC(Pin('X19'))/ Z8 M P- s" i2 x
- adc.read() # read value, 0-4095
复制代码
; b% ~- s- _! O* t
/ U; _. ~. s' `% |* xDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC G; I0 m# u7 }4 K/ Y$ K
- * C. Y9 n* P. Z0 k. c o; x
- dac = DAC(Pin('X5'))
1 s/ a% T5 t! G6 |. S3 c( e - dac.write(120) # output between 0 and 255
复制代码 . t9 |0 ~1 K4 b/ ], Q
. R/ P5 x5 `# W- Z& J+ n- E: F2 JUART(串行总线)请参阅 pyb.UART. - from pyb import UART
4 L; f* w! g8 g; x. y
b0 V# w& v( m& V5 t0 f# K" u- uart = UART(1, 9600)8 G2 A" {8 W. n. a0 {' ]% C$ P: Z
- uart.write('hello')
8 [" H6 h! C$ [9 k8 Z# z+ a - uart.read(5) # read up to 5 bytes
复制代码
" x0 N2 d: O) C1 f9 x
% A$ K8 [ n; l3 g- p2 `SPI总线请参阅 pyb.SPI. - from pyb import SPI9 V% g2 j5 m Q4 @/ W+ K
" f0 v6 ]8 M9 Y* ?5 T- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0); t6 C" v8 g* m9 m/ [
- spi.send('hello')
J" Z0 H d% H4 } - spi.recv(5) # receive 5 bytes on the bus% [9 [- d6 ?5 N4 r1 r
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
/ Q' | `6 \* w2 B" F4 O' B
. M, }0 E) ]0 D5 PI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C g$ {5 l& _( a- a3 f+ O. s
- ' ?; _5 s b% G% v c# p( e4 s, [
- i2c = I2C('X', freq=400000) # create hardware I2c object
' H0 B9 L( e. Q: J: B - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
' a/ A) J' s% s! h+ b% l
& ~& k% V' }/ ]; x7 n5 b7 Z4 L- i2c.scan() # returns list of slave addresses
m) b5 l) S! O$ u; M9 h0 E - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42# l' `( M8 I2 {: m9 j
- i2c.readfrom(0x42, 5) # read 5 bytes from slave7 f6 `3 s! d; d& i* ~3 y: I
- # B' q# g) i" K! o i
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10( v! x9 M8 Q) l# }9 q3 b
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
* i( Q. Q! M: R' M/ X) W
2 o% ^" P4 J8 D3 k8 D c* W# t2 e注意:对于传统 I2C 支持,请参阅 pyb.I2C。
7 ^' p6 f* @' P& y L9 Y; ^I2S总线参见 machine.I2S. - from machine import I2S, Pin" h+ a+ X8 V/ F7 y: ^5 L; ^$ i) A3 \3 S
* Q& u8 i4 ~% `- 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
3 \" v' N7 t9 E: H" e; i' v" \# x. h - i2s.write(buf) # write buffer of audio samples to I2S device
, @7 T3 G$ B1 r0 G$ T- f/ g
$ b% M7 n2 M* ]- 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# ^9 ~$ S) @5 ?5 v' q - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
8 U, h1 ^* L1 Z: _I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
. W2 z5 M* ]5 TCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN% X) M$ U9 _% g3 ^" v8 M
" {8 @8 o" j7 U" b. a: ]- can = CAN(1, CAN.LOOPBACK)
" a8 ~; ]+ D. n* }" e8 N - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
* T+ o6 ?) F% ~0 y6 @ - can.send('message!', 123) # send a message with id 123
4 g6 W' S: `' V( f* s ?* ?! d - can.recv(0) # receive message on FIFO 0
复制代码 ) |1 q* i! Q8 W8 {. a
' | n: s9 b8 h/ `! Q内部加速度计参见pyb.Accel. - from pyb import Accel- l6 [2 J ^/ }# r9 V
( t% g' L! O7 n3 n0 n2 l/ ~! w, [& n- accel = Accel()8 ?5 g- V5 x6 _/ I- L' ~
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 b8 c! _% Y) f- D8 R* R: g' Y0 W
. ~: _7 J; h7 B. \5 ]
|