pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: ; z) Y9 s2 Y6 T& g+ W5 x! p. s V
通用板控制见 pyb. - import pyb
- ]) X1 T' \7 F) H1 d - ) f5 z0 v& E. k7 q5 k
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
+ H4 ?$ ^$ a1 b9 x0 J( C - pyb.wfi() # pause CPU, waiting for interrupt- E3 N7 }/ l. ?" |) x6 l; s
- pyb.freq() # get CPU and bus frequencies
5 U5 C# A$ T1 n9 U% G - pyb.freq(60000000) # set CPU freq to 60MHz* W9 T( X$ h. e: `
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 2 \7 M- D! n4 L0 x6 w
E2 U4 W3 V# j$ }: c# Y" O
延迟和计时使用 time模块: - import time
* x5 [' C# h, G/ u
' m- T/ _; H% C- time.sleep(1) # sleep for 1 second8 n7 ]; N0 u' r3 Z6 I' R3 x9 s
- time.sleep_ms(500) # sleep for 500 milliseconds
! B: F6 B0 A: Q - time.sleep_us(10) # sleep for 10 microseconds5 b2 S/ [" R! M1 e6 c2 b
- start = time.ticks_ms() # get value of millisecond counter
% i0 c0 P1 F3 F9 L$ C4 { - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
* Z/ ~% e3 n0 \; Q$ Z% J$ p) F
. P, j8 v* s5 \内部 LED见 pyb.LED. - from pyb import LED
5 ~6 o- p5 b; K5 Y6 O+ X - * N9 t+ Q/ k1 j
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue0 \* N2 d" q9 O T- N
- led.toggle()
- I. f3 C1 K& w; } - led.on(), V1 h3 f& J: D M/ S9 K
- led.off()4 Y, G4 E/ {. Y, u3 |* {5 t
- ; h+ y( u5 r; ~( u
- # LEDs 3 and 4 support PWM intensity (0-255), V/ _: S, I, {# Q+ N" ?" K+ _! S
- LED(4).intensity() # get intensity4 f% F) p8 }6 B
- LED(4).intensity(128) # set intensity to half
复制代码 6 c. n. P m' {2 K
; ~& b2 e t1 i6 L
内部开关请参阅 pyb.Switch. - from pyb import Switch& y1 {% [/ c5 |4 p! J/ |; n2 g0 X
4 D, ?1 t* S2 N8 r0 N- sw = Switch()4 a0 c7 o; ~ j( N9 `
- sw.value() # returns True or False- Y7 E+ ?8 d# E% p# \$ u
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 9 _' z( y$ m" m9 F2 }
& s# G. O9 g$ b# I. k
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
5 s: A+ O3 T4 x1 A: V& A% ~7 G; J
! q5 Z" v8 m% h/ n- p_out = Pin('X1', Pin.OUT_PP)
+ z: x) n9 X: e# @: ~ T# R - p_out.high()
: F: E' r1 O/ F* f5 h4 I8 s - p_out.low()2 T$ ?4 H0 z4 l, }! n
, d8 o+ @9 h. t. F9 G* |5 v6 X# S- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)" [) C! D/ G7 _" W! `
- p_in.value() # get value, 0 or 1
复制代码 0 i/ ]+ J# ^1 E5 t4 p; b: K! F
, t9 F( n/ ^4 F' g9 j O
伺服控制请参阅pyb.Servo. - from pyb import Servo* j; {( z3 V$ ^. ~1 T- a
- 6 f, u- P: X/ y/ V) t% p
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)) K- x7 V* c% U/ W. f- `2 I
- s1.angle(45) # move to 45 degrees0 n0 t5 }: q1 b M' ^1 @
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms. f/ r6 h a9 C' P
- s1.speed(50) # for continuous rotation servos
复制代码 . a5 h) c4 ^1 W" `7 H2 j1 v3 ?5 ~) `
2 v! R: h. H* v/ e( y7 u
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
' g- U/ @' P! J1 r2 L
( ]7 z- D+ \9 y( B- callback = lambda e: print("intr")
2 v6 a) f# |4 o( U - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 7 V% m: z; t6 j% x6 S' i6 u& l/ {
, b# z# D( q$ T& x3 \" U6 @7 _- n
计时器请参阅pyb.Timer. - from pyb import Timer
) Z: w/ C/ x$ H
/ Z1 R+ i5 n7 P- tim = Timer(1, freq=1000)3 ?0 R: Z! Z4 }0 B) K7 Y
- tim.counter() # get counter value
1 ]' i' a/ u$ c3 t) E - tim.freq(0.5) # 0.5 Hz
$ d0 A4 p8 x5 \1 ^, a - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 9 @4 V% }( O r" p1 D
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
2 \# P) M; r3 n! R! ~% Y4 B
1 {! W3 p% \% K% A# g' b$ a- rtc = RTC()
$ f4 z* \( C( K0 Y f/ y - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
* e9 w1 R! K, @1 j& N' L - rtc.datetime() # get date and time
复制代码 " }0 {9 g- Z$ y8 M# W
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
/ @; n# N$ u6 @! V+ H
, T3 v( N+ `5 J' `- p = Pin('X1') # X1 has TIM2, CH1' F+ y' G; G) ]+ X, |$ C
- tim = Timer(2, freq=1000)
# N3 |, d7 d, j8 o6 ]0 |( A' Q - ch = tim.channel(1, Timer.PWM, pin=p)( @0 ?4 C1 B' ]
- ch.pulse_width_percent(50)
复制代码
9 w. u, A" I9 F7 \: d- W; F( YADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC4 n" H4 M' z1 }" m4 ~3 G. M) _
$ M3 g: `0 I* Z F, m" H1 D" N; u! o- adc = ADC(Pin('X19'))/ I& d3 R- ^7 U1 q
- adc.read() # read value, 0-4095
复制代码 ' q4 V: C0 H( o/ [4 V0 X8 Q
, g: R3 t P9 WDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC; }1 S0 A" t+ f+ }6 l, W& i+ ^/ `
- # [9 l3 i& Q* v( {
- dac = DAC(Pin('X5'))& j) R, v6 A$ K# j. K' R" m6 O
- dac.write(120) # output between 0 and 255
复制代码 : V$ [3 M! _# _( Q4 \
2 M$ [0 w1 W0 e! H0 q: I" e0 z9 U
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
- {; `/ b6 r: x6 q, D; w! Q0 M
" K7 N& n* g" e) e% K" m" ~- uart = UART(1, 9600)
; y6 s! b4 q, W1 q" s" }! Z - uart.write('hello')' b. q0 f# ]+ t# v. u
- uart.read(5) # read up to 5 bytes
复制代码 ) T4 V# | _- e3 y( J# q# E
7 V U1 z+ B4 d5 N: a( ^
SPI总线请参阅 pyb.SPI. - from pyb import SPI0 S) |+ { B8 ^4 |* ~
+ b+ H+ ^% U' e2 e9 _1 |, _( u1 a- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)9 ~7 B- i. y* C1 [' `9 t7 J8 A. Q
- spi.send('hello')$ e: a+ m7 G4 @0 K$ o
- spi.recv(5) # receive 5 bytes on the bus) l0 v5 q& { _& u% v, `5 s
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 1 y6 m, h* o- S; k
' U5 M0 `; s% L. o9 V2 ~5 T# tI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
" k% a: W7 [9 d( w! ^# \
- L! M, S, m! @6 d+ Y) D- i2c = I2C('X', freq=400000) # create hardware I2c object
9 ?' o( G6 E& j- [$ ?' H - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
) B, }, R( ~! _# J' }9 k/ X - . [" Q& N( ?4 z: v* u% l
- i2c.scan() # returns list of slave addresses3 _0 D) j- s) |9 w5 f9 F
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
9 |! J( O( a8 W0 _1 r5 X/ q - i2c.readfrom(0x42, 5) # read 5 bytes from slave( v! s" V! N) W$ B( r
- 9 u1 M) I* Y* J; T6 _ r
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
( B, L0 D6 E3 U& E2 F W1 r7 }2 B j - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
$ R# t1 c" [; @
. h# K- G' f3 A4 F" O注意:对于传统 I2C 支持,请参阅 pyb.I2C。 5 q2 y. C/ `% A. U7 s
I2S总线参见 machine.I2S. - from machine import I2S, Pin4 O5 s9 e- j; ^. q& g
- 6 y* e3 z# Z) S. B# L
- 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 object7 ~4 b' j0 y: n/ F
- i2s.write(buf) # write buffer of audio samples to I2S device' e: J g9 F/ d6 F) l
8 I0 T8 W# ?- n/ @3 k- 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: M/ R# u, Q( u. B
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
) x. H" a/ q+ B3 {I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 ( A/ c! P H. Q
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
( R7 Z# S2 d. a4 |% @' u
" s- o$ m: f8 e- can = CAN(1, CAN.LOOPBACK)
; s& f0 ~$ H: [6 y" k( ~ - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))+ G/ H; C9 o; w' ^8 L2 K7 @, i
- can.send('message!', 123) # send a message with id 123
% y, h* H9 l" p, H - can.recv(0) # receive message on FIFO 0
复制代码 ' J& l' u- \* K! o
8 I" @% I! f+ w) ]内部加速度计参见pyb.Accel. - from pyb import Accel
- T7 J5 z, f4 q% _& ~ k - 3 t' O ?" ]$ o5 J
- accel = Accel()% p5 V% y: s# r( N( A/ i
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
, k. v# ^( D+ p) ?
6 Y/ q1 ^2 h" L& F6 @, \- b' r |