pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: % @6 Z+ W* |, w. k; ~
通用板控制见 pyb. - import pyb
0 R" T6 m% T. W' y @
0 ]$ w! N2 @) ~! X: ~+ ~) q- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
, v \- s" L8 Y) A+ c- l - pyb.wfi() # pause CPU, waiting for interrupt# H, Z* Z2 Y* q4 w
- pyb.freq() # get CPU and bus frequencies( z$ k3 \+ P! a+ e2 P& K9 J, {
- pyb.freq(60000000) # set CPU freq to 60MHz) a# s* `; P' X
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 0 [) J3 ?' b9 u6 e5 ~& P/ @
6 P* X6 _* S0 K+ L: n
延迟和计时使用 time模块: - import time
( z% k9 s* ?( M. _/ t& M - 4 |1 V( F e( e" W7 a
- time.sleep(1) # sleep for 1 second% {" p8 _3 X s* N- Y8 v3 q
- time.sleep_ms(500) # sleep for 500 milliseconds/ O2 [$ s3 E3 Z. a& ^& @2 j( Y$ N
- time.sleep_us(10) # sleep for 10 microseconds
* z" Y% }( o& }. {2 f1 ^3 J - start = time.ticks_ms() # get value of millisecond counter& N' D! [; M1 {2 s
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 6 J. |, `& E4 d. b2 N
/ d" }; g0 L7 c) x. P q' r
内部 LED见 pyb.LED. - from pyb import LED
3 H8 ]/ Z1 l, s
* {# S3 p! X N+ Z- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue$ f% ?; T1 K' ^
- led.toggle()
. g- i R5 ]8 G - led.on()
' U2 m7 N0 B; v0 z - led.off()
9 {5 s# c/ D3 w4 M& a - j( E# z3 i1 A; Z5 @1 D" c8 {
- # LEDs 3 and 4 support PWM intensity (0-255)- M' f" e; k1 K, g9 k
- LED(4).intensity() # get intensity
2 w8 J9 H+ T9 @" e$ } - LED(4).intensity(128) # set intensity to half
复制代码 ' | B+ `; J8 I8 L0 _9 `2 N
, d0 X( h9 n/ H& @$ [: y内部开关请参阅 pyb.Switch. - from pyb import Switch' b0 O A, w2 E w& M) {$ `
- ' I& D7 z' S4 Y# {/ `; I7 A0 R
- sw = Switch()
8 e& X: c8 T0 G# D6 i$ |3 ^+ p - sw.value() # returns True or False
1 G b' A4 E; H7 `, r - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 $ V- Y; U+ |. T* v' S
; K" e& g" ^4 P
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
- U. |, I) T7 ~' J% Q7 X: q# ~
% Y# u. x+ c- r# }2 ~- p_out = Pin('X1', Pin.OUT_PP); {( H( F' F" p' h% P. Y* C
- p_out.high()0 u1 f, |/ m0 E9 w
- p_out.low()
. r. n8 l& s- p; K9 H( ?' [" x) e8 f
* c6 W2 E' I& j6 n- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)) p- m2 s; P& }- w
- p_in.value() # get value, 0 or 1
复制代码 ; v1 Z% m5 M- j" y5 t9 Y/ W5 l
, l# O4 u x/ f) l
伺服控制请参阅pyb.Servo. - from pyb import Servo
+ x. M% ^8 k( Z3 p# |
( l; X; N( p* O y: T, @- h- s1 = Servo(1) # servo on position 1 (X1, VIN, GND). r% m7 _: _% a6 F
- s1.angle(45) # move to 45 degrees& L+ Y4 r7 `! ]) E; H% `5 R
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms: d3 ~8 G Z9 I' y3 L& J# Q
- s1.speed(50) # for continuous rotation servos
复制代码
5 y+ X* ` R0 P+ J
) r/ v2 `6 {4 B外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt- ^" [' q5 J1 M/ Y' d. w
W$ @9 q: v" P b0 U- callback = lambda e: print("intr")7 @- Y0 Q$ S0 I5 s. D6 v' Y
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
* @% O( B+ E, `+ V* `
0 M" ~7 A) x" ^计时器请参阅pyb.Timer. - from pyb import Timer
! T/ {8 O4 H2 n; g6 L: H
; v9 P0 R5 ~' l& Z( ]6 z1 W* M- tim = Timer(1, freq=1000)
3 T/ v/ R2 T7 V' v - tim.counter() # get counter value, [( Z; j! E0 P! i
- tim.freq(0.5) # 0.5 Hz
, a5 \+ c- u d/ c. h - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
: A% s. ]* J# G' e _' d( VRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC8 u4 U. r B( o( g# K% X
- - k1 r6 ~' d; }0 B
- rtc = RTC()
; B! o* I3 ?7 H. P9 s& ]1 c - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time% u) A$ g3 N! s3 A. O. ]( P
- rtc.datetime() # get date and time
复制代码 ) \) D* |, @( c$ d0 e- N0 Y8 [
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
2 G& W' B; v4 m# q6 l- T1 j
; S) q" K1 O0 o. c1 v" k% F- p = Pin('X1') # X1 has TIM2, CH1
3 ]4 X( H5 g! A, T5 W1 } - tim = Timer(2, freq=1000)
) K4 `- X' O9 Q- X$ F - ch = tim.channel(1, Timer.PWM, pin=p)
* F- ?8 ^8 [ \+ \/ z d8 p0 Z - ch.pulse_width_percent(50)
复制代码 x3 i/ M1 s9 [. n0 w& [
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
3 R7 K- F* L8 X; k9 Z1 L1 }
7 o" q+ w* J8 P% b- adc = ADC(Pin('X19'))
' t! E1 q, R0 k0 N - adc.read() # read value, 0-4095
复制代码
$ Y9 q! @0 M" h: q1 A3 J- Z H: \) I0 A/ j# _4 S e+ n
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC `6 A4 q& }/ u6 l2 v0 H
- ) f3 `( t3 Z! @3 s8 d% j, T
- dac = DAC(Pin('X5'))" P9 U, }& e7 I8 ?. L" g1 d
- dac.write(120) # output between 0 and 255
复制代码 W( P$ N$ p6 c
5 a8 J# j5 U9 x1 h' HUART(串行总线)请参阅 pyb.UART. - from pyb import UART
% X4 V' g) O# s5 n+ S: I1 a2 p6 j - # T; U* T4 l; d. b' V
- uart = UART(1, 9600)
: l* [( P5 x& p% ~( r3 A - uart.write('hello')
) }- M% v% c! N: N' _% Z - uart.read(5) # read up to 5 bytes
复制代码 0 }! x' k7 @7 U: I
$ o- B. o/ \) K! X" B0 A6 G. c/ S, U) l
SPI总线请参阅 pyb.SPI. - from pyb import SPI3 D5 L# g* h: L! b( G! u/ n
2 j& `# P I1 t( c- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)- ?: d1 d+ D0 k; J& b
- spi.send('hello')2 c0 n' O8 D7 G* s( y
- spi.recv(5) # receive 5 bytes on the bus
1 _: I) W6 E" W' J - spi.send_recv('hello') # send and receive 5 bytes
复制代码
# z& v+ C: T- |, T
0 {& i5 G& W( G, M$ wI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
& p6 |3 w- |3 i+ b' z b - V. l; V3 V6 _% H
- i2c = I2C('X', freq=400000) # create hardware I2c object0 {) i/ v- _- v `$ t' v1 q+ @
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object. _ }) I) u) r3 {( M
& w; \( N! ^: Z& A/ h- z- i2c.scan() # returns list of slave addresses0 X8 L- b8 \ O0 y
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x426 U6 k7 {' |) g+ H# l- e) B
- i2c.readfrom(0x42, 5) # read 5 bytes from slave4 K5 m! r( {: r# o! H( s7 |$ N% R
- 1 ?" t3 q& m! e' k) E+ c
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10' s2 [# c* v; G4 E- D) M9 x
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 & ~& |; W& C, ~) k9 A: v; `
4 }- z0 ]2 d7 v `1 ^注意:对于传统 I2C 支持,请参阅 pyb.I2C。 ! N/ c+ W2 f# j- T+ G
I2S总线参见 machine.I2S. - from machine import I2S, Pin
8 m6 ^! a( j6 m* k - 1 W" j- C: C# f2 I
- 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, {5 P* I& N* \& c" H8 U
- i2s.write(buf) # write buffer of audio samples to I2S device0 J2 D# i+ d' `8 G, ?4 n8 Q& u
% U& G. T7 `: c7 w- 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
, y, p2 S1 k, `+ s: V8 y - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 5 F' R% l' I Y
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
" g+ A8 t: P5 DCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN) w8 H, ^( `% r8 l' D
1 O N1 q! S' N! S) b) i6 {- can = CAN(1, CAN.LOOPBACK)9 R* P2 I3 i% v; A6 W7 q4 v
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
1 [4 _% {. A: w; m* g- b5 l - can.send('message!', 123) # send a message with id 123; ]% F) O. `( z! U# e1 u& H: Y
- can.recv(0) # receive message on FIFO 0
复制代码 0 f# N$ x2 N% Y- d4 ^# L
1 U! Y6 m* {/ [' f" Z$ x) r* f
内部加速度计参见pyb.Accel. - from pyb import Accel
* W" U' m9 r3 M! Y: }% U7 t
8 M* W2 b$ t1 [0 s! D" O- accel = Accel()( j% f6 W. x r( x
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
1 n k. u# |/ }6 M1 C* o
3 u( h8 L0 ~# | |