pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: ) V. k$ j2 A% K4 K+ p* ?- a
通用板控制见 pyb. - import pyb- H( r$ `3 I- v' i; x
4 w: s# k8 O2 E4 `" D' L- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)0 N* [4 F1 C. V
- pyb.wfi() # pause CPU, waiting for interrupt
: g0 h1 p6 D5 P - pyb.freq() # get CPU and bus frequencies
# x' k! d5 T( C3 r. K1 v - pyb.freq(60000000) # set CPU freq to 60MHz
3 ?) Q" E4 g+ Z- h1 {+ [# n - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
9 [" i' W" w5 T4 ?" p. f9 X: W8 w/ P. M
延迟和计时使用 time模块: - import time9 p$ L5 F& j, T7 c" f: s& |
- / ~$ |7 V$ o- X% o" B7 Q( q6 e
- time.sleep(1) # sleep for 1 second
- C" O8 @) r) S1 ^ - time.sleep_ms(500) # sleep for 500 milliseconds& J9 Z6 H; |0 ?1 M
- time.sleep_us(10) # sleep for 10 microseconds3 m) R# K4 i6 V
- start = time.ticks_ms() # get value of millisecond counter8 g1 W/ o( a; M; D
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
2 G2 U+ M0 A) R5 t, A' z6 B/ Y7 z4 k
内部 LED见 pyb.LED. - from pyb import LED
" m- f( l/ @' Z; D
7 N! a) s. t ]6 F" a- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
* v) L- P3 U! b4 z' ^$ c" Q. a - led.toggle()
! M6 p9 N) I V1 I - led.on()+ A4 ?/ {$ x+ Z$ D3 a- y
- led.off()2 S* L/ @0 c2 d! I) C
6 P e2 G3 }6 v& V- # LEDs 3 and 4 support PWM intensity (0-255)4 X9 X5 e. x7 M! v6 E* o
- LED(4).intensity() # get intensity
) H7 g' y8 z- o! K - LED(4).intensity(128) # set intensity to half
复制代码
, I% X2 Q1 U7 \8 `! |( F$ |5 C
8 E! _& [+ L' R内部开关请参阅 pyb.Switch. - from pyb import Switch
: N: D" `5 R) `+ l/ Y; p: { - ; S9 P" _! o' N5 n5 h) I6 U
- sw = Switch()
3 ?2 [5 v, g4 t$ u3 W% U# e' t - sw.value() # returns True or False
% P7 _5 d! ^: D - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
0 F: K9 j/ k5 F4 N8 F7 [
# c; g4 _% ?1 V' v' v6 J引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin1 F. S7 u4 l! C
- + y$ U1 t1 ?: A8 ^. }
- p_out = Pin('X1', Pin.OUT_PP)5 k6 V, `3 e" s' _% {& w
- p_out.high()3 v3 c$ e6 K/ T$ T# D
- p_out.low()
; ? x) J4 L! Q7 C. [
) s: R' m/ A/ H" x- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
" K. a% l& L. r3 @) R# n$ I - p_in.value() # get value, 0 or 1
复制代码 6 o F5 l/ p( g: |6 C: {; h
; d* c* ]1 Z |- b
伺服控制请参阅pyb.Servo. - from pyb import Servo+ c! G/ Y$ A( k& _( z6 r* S8 w
- % S- e/ G' H. m3 R
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)8 T" X7 `& n" w: t; v# a0 p
- s1.angle(45) # move to 45 degrees
1 [' R3 z; U) ~2 |: G, ^ - s1.angle(-60, 1500) # move to -60 degrees in 1500ms) `- A8 W n$ e c, Y; m. F1 S2 }* f
- s1.speed(50) # for continuous rotation servos
复制代码 - a' l( t6 q: d
% A/ _6 ^0 l0 l& y( g. l% k外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt) ]: R; {8 H! d! r
1 a, `9 j1 \$ z7 r- callback = lambda e: print("intr")
2 V. W* ^/ ]4 x7 [) k4 x, d: z - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 ) y# H1 t# Z2 F6 V6 v9 x
! m w2 O0 H' J& m计时器请参阅pyb.Timer. - from pyb import Timer5 Y+ }3 ?7 q2 f- E2 y. ~ H9 z
- + P+ m- n0 L9 m: T
- tim = Timer(1, freq=1000)
8 \# X& f. B- D1 {% [5 R - tim.counter() # get counter value
5 X( u) P, {) e) `6 `# d2 | - tim.freq(0.5) # 0.5 Hz" `$ K' y2 ?/ ~$ y
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
% u" N/ v" U! v5 r5 }RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
: [% T5 B) o4 N" s. }, N+ r - ( h4 c; q0 L6 |" T% P6 X; @
- rtc = RTC()6 J9 W( ^4 X* N
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time' Q4 l' m6 g r+ `2 T1 l
- rtc.datetime() # get date and time
复制代码 2 |/ p* o b* O3 h7 L" I5 M
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
: e" d% `& M- |5 c
$ e4 L) n9 d- b1 O4 I+ J- p = Pin('X1') # X1 has TIM2, CH1
% G1 @' ] x2 q+ y - tim = Timer(2, freq=1000)+ R8 I' `- l1 |- `$ q( r
- ch = tim.channel(1, Timer.PWM, pin=p)
5 f, x7 j; j7 `% M" w - ch.pulse_width_percent(50)
复制代码
% j1 b: g3 n$ g, H& O- K- A" yADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC+ T5 y8 M1 c+ O1 _3 \
* e4 s1 H5 {, ~7 X. ], O- adc = ADC(Pin('X19'))
; B, ^9 _9 t7 d - adc.read() # read value, 0-4095
复制代码
9 H; F9 z) I2 L) O( f
' _1 Q/ e4 _+ kDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
/ {" }% Y! K/ ^9 P6 l2 _( A1 C - 8 x* Z# ?( M3 r4 E/ v s3 [; _
- dac = DAC(Pin('X5'))# k3 g1 @# r4 P" ~
- dac.write(120) # output between 0 and 255
复制代码 5 E) H1 L$ ?- v8 y/ A6 @
+ x1 ?7 Y& A. }# V7 w6 ]
UART(串行总线)请参阅 pyb.UART. - from pyb import UART% k! m! S* s; _, x; e+ _- a6 k2 c
6 a$ n0 G. b7 H9 X; R- uart = UART(1, 9600)$ a6 N5 V1 [& {" d
- uart.write('hello')9 t0 l- |3 S3 q I$ {
- uart.read(5) # read up to 5 bytes
复制代码
3 s- G( B" N3 S! I+ n7 v$ Q/ H- H% B# R, L, r
SPI总线请参阅 pyb.SPI. - from pyb import SPI. `3 D+ A# O% J: `+ L: U% B
- ' h/ H# s2 T& b6 n/ K, [
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
, X% j# Z8 L) i& B5 l2 I, Z - spi.send('hello')
$ Q4 q" D& d/ e7 ^3 V - spi.recv(5) # receive 5 bytes on the bus9 d$ ?- x' z* v( K/ |3 ~
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
& h9 q) g9 u4 t _% v8 a6 R. `) m" D) ~- S$ X K* O9 R5 }0 V
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
$ P C" g# t7 g( X' F* D - ' |: Y8 Y* o- X2 p1 e3 M* ^3 M
- i2c = I2C('X', freq=400000) # create hardware I2c object
! i- u2 {* I2 ]9 k3 Q - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
* S' e: \8 Y+ n( H5 o% y u) ?2 g) l
1 `9 N, X' _# A% b- i2c.scan() # returns list of slave addresses3 u, P5 ^+ z1 e3 L
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
) V! B! |. @, @. g' K - i2c.readfrom(0x42, 5) # read 5 bytes from slave
/ [+ J3 F8 w( k4 s; j4 u. R - / j1 e5 x6 _" {9 @( Z& E* z1 v
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
' l, z) w; Q2 J. H$ U8 ] - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
t. e* s4 E0 R: M1 t0 R2 @" B: E* o; a
注意:对于传统 I2C 支持,请参阅 pyb.I2C。 . M/ S @- b; l# G7 y
I2S总线参见 machine.I2S. - from machine import I2S, Pin0 g1 G @! `! H6 b- U Y. J* x$ p
- y" q2 D0 W/ z9 b0 g; \- X3 r2 E& `- 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 object0 u7 k9 E% W* w7 [. }9 f! S% S
- i2s.write(buf) # write buffer of audio samples to I2S device
$ g& x2 ]' G3 U" w# T* f - $ p1 t8 P! k8 { S1 S# E* 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
* e: T5 b( X- ~( B" ~3 A - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 0 s: A2 D5 v4 y& X0 J6 c; q7 s
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
( k" z5 ]. X( A; b. N5 G) DCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN5 ?/ w; {9 s' A W, c9 s& ?4 S
X) O8 t: H5 v# _5 E; W$ D" }' O/ ~7 l- can = CAN(1, CAN.LOOPBACK), C- V8 M! F. V4 |7 ^
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
8 }% H9 l9 l8 Y/ \% k - can.send('message!', 123) # send a message with id 123
2 {( S: Z. G" g0 u* Z - can.recv(0) # receive message on FIFO 0
复制代码
$ \1 r/ U3 W6 r R/ e e% p; Z3 x8 l3 M& S& ~% f8 `: [
内部加速度计参见pyb.Accel. - from pyb import Accel
/ L" m+ M3 \& N3 A; U2 L& S# L1 K - : C% X' M" {, t' a8 Y9 p) v F% v
- accel = Accel(), L8 t; L9 c2 W$ M; F* d; o
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 $ Z' C2 {, L% q. i7 f2 C' [( c
( f* s; V" j3 x+ G( x# O: z/ M
|