pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: $ k& N: L4 V2 f2 k3 o& a" R/ Y+ c
通用板控制见 pyb. - import pyb
( s$ d6 B' d( ? w - 7 T! [' O+ S. F; r
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
* r& s6 Y" i) R& M! T q" n - pyb.wfi() # pause CPU, waiting for interrupt m- l1 s1 H: B0 M4 V+ e h5 J
- pyb.freq() # get CPU and bus frequencies
$ f p& X: s2 H/ j - pyb.freq(60000000) # set CPU freq to 60MHz* A3 i" S8 c1 t9 X
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
& e( i1 A0 s5 b& }: v5 A. o7 }# d% @5 J3 l5 g
延迟和计时使用 time模块: - import time; u0 ?4 y/ w3 y
1 ^9 P6 I% @' V" X5 V* b- Z$ T- time.sleep(1) # sleep for 1 second
7 M/ d$ D$ J7 N6 A- c2 z - time.sleep_ms(500) # sleep for 500 milliseconds3 r) [7 ]- B4 l$ n9 x3 J% n/ N
- time.sleep_us(10) # sleep for 10 microseconds
# R. Z( R: f. Y6 G8 d7 l - start = time.ticks_ms() # get value of millisecond counter5 E: R2 V$ F# x2 n
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 f" M9 q, {0 ]" c
, G% b6 ~/ I6 k% }内部 LED见 pyb.LED. - from pyb import LED4 P' C7 L" A( T& o& R0 J
- 9 B+ {* u1 d1 q0 u
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
) ?" l" i9 v% H9 k2 ^8 j* w - led.toggle()
m% `# d b2 P, m Y - led.on()
% j& z- S+ [9 C, }* N; x - led.off()/ S, \, f! m! c8 P! }
- A X3 a2 n" W |8 S- # LEDs 3 and 4 support PWM intensity (0-255)
7 b4 f; h( V( \ - LED(4).intensity() # get intensity
# `2 n4 |" J/ y2 Q! Z$ M; J6 T" h4 w - LED(4).intensity(128) # set intensity to half
复制代码 # g& L5 [+ R! [* B. n
8 Z( p! S& r" O/ Y2 ~+ O+ [内部开关请参阅 pyb.Switch. - from pyb import Switch& m- u% v5 _, }
. S9 n$ p* Q$ c, h" I# ?$ Q6 F- sw = Switch()
Z6 }4 x& q; v5 B R: w' } - sw.value() # returns True or False
& @ p5 u1 S" j, q* D) k - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
& X9 s+ I: c8 i, y6 o3 ]9 }& A$ w8 C/ U* Q0 Q% J
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin; ~ B& I. `6 C: X+ E$ e+ u
/ t" {8 ~; V# r: p& N6 P- p_out = Pin('X1', Pin.OUT_PP)
0 f9 s* E" _; ^9 H) \ - p_out.high()8 h8 v& P% Z& v* S- t7 @
- p_out.low()2 d3 V p% L h' t4 C y8 Y
5 f+ N) @; A- y( t- [( [! x- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
# H8 J% t( ^# |& b; ^ - p_in.value() # get value, 0 or 1
复制代码
7 j9 o% N; S) M* G% @, A) W+ v2 d) b# r' n" t6 B
伺服控制请参阅pyb.Servo. - from pyb import Servo
& `- U/ b( M0 V9 W& O
0 B$ E0 J: S; y# ?4 @, W- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
# F( s4 q+ k! b3 } - s1.angle(45) # move to 45 degrees$ n8 u% e. V7 g' B
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms& o9 j( a+ t7 \6 _8 N) E% @7 ^
- s1.speed(50) # for continuous rotation servos
复制代码 3 K% x' |- B1 p6 N" o
" Q2 c- @% G6 j+ p
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
( j. m0 m" ?3 w6 m
7 _, S0 U9 [7 i5 Y& D: Q1 i- callback = lambda e: print("intr")
$ B1 R0 a) k% l% |- E - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
% }3 `/ M( @( S7 V8 f* c
% x' E9 h( u1 {/ o计时器请参阅pyb.Timer. - from pyb import Timer
- v/ x5 W+ M6 d9 M - 8 e8 V+ S( O. C
- tim = Timer(1, freq=1000), t4 A! E$ b* q/ G. N
- tim.counter() # get counter value
' h* D) n% w: c3 t. p - tim.freq(0.5) # 0.5 Hz w; V o+ V6 m# |& Z( ^
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
9 d8 [0 R( X+ q( S {7 ~( g' wRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC# l' d, a: U: o9 ^# [3 g. ?( |# E
- 5 }7 E# Q. k( k) w5 J
- rtc = RTC() G) U! P7 `: I
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time! z( U0 Y6 j8 [
- rtc.datetime() # get date and time
复制代码 0 D6 i; K/ P3 j# z: P2 S
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
: C4 I! E; }2 l - ! M2 U3 ]3 N9 Q. I
- p = Pin('X1') # X1 has TIM2, CH1
1 b$ ]; L3 D" u, Z* E/ V' u - tim = Timer(2, freq=1000) [. }4 X# k3 j0 d
- ch = tim.channel(1, Timer.PWM, pin=p)
0 X# ^ y/ A* b( g7 r3 @$ G& F - ch.pulse_width_percent(50)
复制代码
' J) Q" L3 l! qADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
& Z) B) K4 I3 W
8 E+ R) |5 J- l9 A& f1 o- adc = ADC(Pin('X19'))$ N" F/ E/ Z3 x7 h
- adc.read() # read value, 0-4095
复制代码
: t" I) a7 l4 M/ E6 d$ B3 T
& ?. M( e- x' t/ QDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
% z5 j$ n2 U8 D" g4 @ d" C, w" n
" Z( C/ O3 h# g6 b6 s; n9 ]1 D, J- dac = DAC(Pin('X5'))& P$ D9 ]0 |; k- b
- dac.write(120) # output between 0 and 255
复制代码
5 C- N- C/ |& S- l4 R9 g
; Q- w: b6 [2 p# wUART(串行总线)请参阅 pyb.UART. - from pyb import UART
, z; h( N! ~& t" Q0 G" E
; v" U# z0 C, f/ N! `" u- uart = UART(1, 9600)* k2 {' w7 ^: `9 L4 H4 {, I
- uart.write('hello')
& t* r7 j( t, Y# c6 t0 I' | - uart.read(5) # read up to 5 bytes
复制代码
4 i7 ~* C2 F8 y" t8 T3 Z$ n+ N7 y0 J5 _
SPI总线请参阅 pyb.SPI. - from pyb import SPI- S1 L, t; ^4 W
, n! K2 f" q- U& s4 h8 Z2 A- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
; x, I g3 D6 A" L1 ?/ u5 p - spi.send('hello')
& H/ I4 I! R& ^6 Z - spi.recv(5) # receive 5 bytes on the bus4 c% G, @+ t! K" [8 S9 W: z
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 % X y2 K9 L+ V) Q4 f0 y# B6 V! f
7 t) G' M. f* OI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
( T q h# S2 g% B' {
5 D' h6 s U1 q2 K2 ]% c0 `- i2c = I2C('X', freq=400000) # create hardware I2c object6 v! Y: x& a- j6 U
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
6 j6 E& C; l. H; s9 M+ I" D) v - / B1 R% l* y& j$ \* L
- i2c.scan() # returns list of slave addresses* Z5 ]; Q& `- ~( P% T" k$ d, F- |8 X
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42. r9 L+ M- Y0 o. ^& }
- i2c.readfrom(0x42, 5) # read 5 bytes from slave; E& m/ _, L% g: \ r# o' }/ c% F
+ \. u0 P2 p7 v- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10* M% n+ X$ }8 U3 J2 s+ F u, E
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
; {' R% I0 e/ M. a% i
/ U& @+ E- L, U5 R9 a/ c注意:对于传统 I2C 支持,请参阅 pyb.I2C。 % `5 ?8 a$ L/ N# P& H6 w' D
I2S总线参见 machine.I2S. - from machine import I2S, Pin
6 H! R q7 P' l: Z! [6 J+ y# B1 [ - ' X% f' \1 S% V- @, k& y$ y
- 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. w7 x2 k P. }
- i2s.write(buf) # write buffer of audio samples to I2S device8 U: o E3 S0 d7 M
- 5 ~: J& \& N. N
- 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 d7 [7 ~( V& d
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
) r( G4 u4 o- e8 O4 J3 NI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 / Q1 E8 {* ^% M+ V: P$ @
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN) z" E0 w: B. @" j/ o/ x0 w; u
- J' K/ l" z6 Q8 H+ S- can = CAN(1, CAN.LOOPBACK)
. C6 C: Y6 f2 h- q" z% m) F - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
. A, A: ~* n4 P1 e+ Q - can.send('message!', 123) # send a message with id 123
, X. n% k. w" e6 ^9 D5 k$ ? - can.recv(0) # receive message on FIFO 0
复制代码
' X' O( ^0 f6 V* h) O! U8 j' X4 }" j9 Y# X2 v
内部加速度计参见pyb.Accel. - from pyb import Accel5 ~4 Y# i) a3 g% b7 j* ~% S
- 3 d. A0 J. W8 W4 s+ i+ g
- accel = Accel()
/ ? v' L2 o% T- a V9 z - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
! z/ d0 X# x2 }& R7 v
0 w9 c8 d* B" D- B0 r |