pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: % o' n( P8 Q7 B5 i
通用板控制见 pyb. - import pyb- j1 @' d3 u- e$ ^( ]
- ; p2 k5 e# }% e2 j- X/ Z, f$ d$ v
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
9 R4 I1 `0 g5 @; ~# Y5 d - pyb.wfi() # pause CPU, waiting for interrupt8 ?; f7 P. v% j, c/ m
- pyb.freq() # get CPU and bus frequencies
& X; r/ |5 w" b+ ]& a: C - pyb.freq(60000000) # set CPU freq to 60MHz- Y4 N0 `$ ~( D) R r5 z- F- L
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
9 R9 Y. Y& ]% c$ a9 I7 ]# t
2 i+ A4 |2 X. {6 F延迟和计时使用 time模块: - import time$ J9 N4 C; u7 L: ]& c$ `
- 7 w4 T1 g9 ]& E) r8 |
- time.sleep(1) # sleep for 1 second
+ d5 g. E G0 m# ]+ D' E4 T - time.sleep_ms(500) # sleep for 500 milliseconds" D2 o# m* b8 b
- time.sleep_us(10) # sleep for 10 microseconds: m$ r' P d+ {3 H4 `1 @! A5 I
- start = time.ticks_ms() # get value of millisecond counter' e) l8 f% V9 _: u# O5 o! Z5 w
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 v3 e/ p- L! `2 i( I5 Q# \
% I' {+ ^! U2 T
内部 LED见 pyb.LED. - from pyb import LED- w5 D; H* [7 |' g
/ m5 ]2 n" h( U% O/ u- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
# W+ j) F$ L0 j" O) h - led.toggle()
( H& O' C5 ^# r" J7 L- | - led.on()9 I5 C6 B9 e4 `! ?( S6 A& N" C& [3 a) d
- led.off()$ r8 }8 ^: Z6 r: e( j& L% K/ c
' _! U* Q; Y$ a/ Z0 i1 p, \ J- # LEDs 3 and 4 support PWM intensity (0-255)
3 B. f: C% t2 O+ a T5 s - LED(4).intensity() # get intensity
% Q* t$ @. q! A n3 f6 y - LED(4).intensity(128) # set intensity to half
复制代码 6 S4 g4 ]3 ?6 j' Y( y5 d
, w* }) e5 b! q( Z- r" e( p7 z) E: m内部开关请参阅 pyb.Switch. - from pyb import Switch
3 B4 p% X- K" e# t9 m* L - ) ~7 l8 G" A q& ^& c
- sw = Switch()
, a6 f2 V: t6 C5 k# x - sw.value() # returns True or False
5 [# S& N2 C9 ^; g! t7 G - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
% o8 {7 _5 T, @. k
% K. M3 x3 q; A引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin) ^3 [. V# R" v9 l& D: \" f2 B4 C
' G) a4 K3 D# m& r+ r- H% s, [- p_out = Pin('X1', Pin.OUT_PP)
+ I2 F8 X/ ^. a6 E/ q5 O) [& S - p_out.high(); E* N: I j6 m( b) b% @& c* i
- p_out.low(); c& ^2 I+ M d* }, Z% U2 X
: I: Q0 [( T+ ~% O* d: b4 Q- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)- ?1 s$ S' ]6 D$ K
- p_in.value() # get value, 0 or 1
复制代码
_1 Q2 J3 g6 u- P- j, C% v/ M h: w, N z' V6 z5 v
伺服控制请参阅pyb.Servo. - from pyb import Servo1 }& C+ m q7 U( Q. Y# b% B
- + P- y3 e7 N5 L2 A( H. M
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)2 P1 m" p, Z9 W; m8 w! ^4 S
- s1.angle(45) # move to 45 degrees" w* z' F- M: ?
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms7 d* z3 T! J" M! z# T
- s1.speed(50) # for continuous rotation servos
复制代码
7 r# G4 G M a) L- ?
% Y3 y: ]/ Q9 N6 y$ e外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
6 n$ G) Q3 `& a- [
- Z }* L, Y4 m- I1 J9 c) c- callback = lambda e: print("intr") D" Y' p9 V q' Q5 Q
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
% ?9 w/ p$ P' C' s& r$ U7 y1 T2 D, ^3 O# r! G
计时器请参阅pyb.Timer. - from pyb import Timer3 [" t- n, C& f; R3 U
! g3 L3 a* e2 Q2 Y, p- tim = Timer(1, freq=1000)
V8 ^0 q+ d4 ?# g - tim.counter() # get counter value
6 |# q1 @# E: ?: [0 X - tim.freq(0.5) # 0.5 Hz
+ b1 e9 d3 f4 C5 I) S% y2 K - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 : ?: x1 D( y8 G6 K! B' _' \ A; n
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
& ]- o9 |0 b7 P
0 r% v" P0 t$ K- rtc = RTC()
- C! V/ P% D3 P$ w! M; D$ q* G9 Z - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
" j6 b5 D8 x$ |2 t# u - rtc.datetime() # get date and time
复制代码 2 R% V9 T+ d4 {
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer/ l* ?6 @9 K) \. O
- 5 b) L l$ U5 n; B3 N8 Y5 j
- p = Pin('X1') # X1 has TIM2, CH1
# o3 L' `+ Q1 ?$ S" g- l7 j& b. ?* M - tim = Timer(2, freq=1000)9 h6 q- t0 [' f9 z
- ch = tim.channel(1, Timer.PWM, pin=p)% ]8 S3 I3 Y# d& ~" [8 [! v
- ch.pulse_width_percent(50)
复制代码 7 {$ o; K7 d. L
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC: ~5 X0 G8 T2 q' `( U2 S
- 1 j: D/ f5 [/ T9 ]( r+ U
- adc = ADC(Pin('X19'))
* \# q4 F4 o$ p. H, Q1 v - adc.read() # read value, 0-4095
复制代码
* J7 U# |) O! H+ k) H! r
. b" L, `4 B- {; [+ vDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
" X; z* h" N4 [0 Q4 F0 }
* Z; _3 K7 I- e! _/ F- dac = DAC(Pin('X5'))) o& o- ]# e" d7 p+ P. d, @# @2 V
- dac.write(120) # output between 0 and 255
复制代码 # U& a$ [# V D5 ~& W. _ Z/ Z
2 ]* Y L) ~5 ~$ M
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
4 E1 i* e% m; j3 F* U) I! _% d - 7 G2 |1 d P% M, x* `! c
- uart = UART(1, 9600)2 i9 n, a* Z. g+ U5 t6 M7 M' x
- uart.write('hello')
3 e: k [6 g" b) M - uart.read(5) # read up to 5 bytes
复制代码
, S! F4 D( \ }1 f! b9 B; n( Z8 ` b- N9 ^* |! R1 N# \7 B$ R
SPI总线请参阅 pyb.SPI. - from pyb import SPI
5 p6 B: A1 r1 L8 L4 z6 L( c4 J - ! P9 v" y, p4 b3 q6 E# z w
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)( H) t8 a% i7 Y0 i, }! d9 \( y
- spi.send('hello')* I' S5 s* L& Z
- spi.recv(5) # receive 5 bytes on the bus5 f# E$ p! c* C9 J7 [& b/ ^; B
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 6 u4 J& z6 C4 z
- n5 A( ?/ E3 K d& P6 f9 z h# A% t
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
: d* C1 L& |" u, {$ {$ C3 H - / c7 u) j- B+ L& d# W+ u x
- i2c = I2C('X', freq=400000) # create hardware I2c object. y6 ]1 o0 v+ B- K
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object0 C% V" v) x* @9 d
- 3 n8 y' i7 g/ j2 z0 E
- i2c.scan() # returns list of slave addresses
! M+ }3 F- M" a* x, o) ? - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
) k4 Y9 h7 Z6 I: [ - i2c.readfrom(0x42, 5) # read 5 bytes from slave
* _, m& e3 Y* Z9 \( n4 b1 \ z: r2 V - j; V: f9 y5 _# S: k8 q, y
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10) j# m) j" ?# E) T6 s
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
$ J, b- } P5 G( ^6 ?+ j B% n4 S h3 R, t% Q/ ~5 M: S
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
2 g1 D0 ~; t& Y6 z& XI2S总线参见 machine.I2S. - from machine import I2S, Pin. _9 T I' q4 G5 M
" g" N- w' }8 S) Z- 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 object2 o' R, B7 U. @
- i2s.write(buf) # write buffer of audio samples to I2S device) |- H9 c: k3 L$ G
% m7 y/ Z3 b& Q# E+ p' G# 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 object3 ~$ H$ d% q, J+ I) n
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 / K/ V1 V$ M( _$ I3 w# | s
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 ( F0 T% n* C v6 w t
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
+ J8 X3 S/ a+ p' S8 `9 _ - # T, Q$ [- S) J! g4 U$ H! F$ L
- can = CAN(1, CAN.LOOPBACK)
) Q% E/ P$ i: l/ s$ y) @ - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))" N4 r* N& R' V' B: l
- can.send('message!', 123) # send a message with id 123
6 v1 k/ o9 F- F7 W* ^. @7 l - can.recv(0) # receive message on FIFO 0
复制代码 $ W$ W _5 k S, i
$ T7 c6 E! t3 C+ Y5 _内部加速度计参见pyb.Accel. - from pyb import Accel0 Y) }: t- }0 r- J
- ' W9 H4 {" w! ~
- accel = Accel(): h' g0 R9 y* G$ s; D! F
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 6 ~0 i" P! j+ r9 q; y
6 V- v6 [9 u8 g% `# M1 H6 a! L
|