pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: . E9 ?: _, \( b" Y4 }, \ h
通用板控制见 pyb. - import pyb; C* I7 @: `- e- T
- 0 [2 ^7 X& F0 |1 Y" b2 j
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)! g+ T) Y# k. {
- pyb.wfi() # pause CPU, waiting for interrupt! {4 x( k9 r$ O) [6 Y
- pyb.freq() # get CPU and bus frequencies e3 s( g8 D6 q* R) f( a2 [
- pyb.freq(60000000) # set CPU freq to 60MHz
; |% Y! r G* C0 w h - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
( p% E# i7 ~/ L9 }% p$ L) A$ a7 W
4 t4 z. o; i) m; d4 y延迟和计时使用 time模块: - import time, t: e5 e5 N' p6 B5 a6 O/ u
2 w, J l d- F0 D4 r8 T3 L+ `- time.sleep(1) # sleep for 1 second
3 m% Q' t4 S1 G( T - time.sleep_ms(500) # sleep for 500 milliseconds
9 x8 q4 S+ H& z# j6 y - time.sleep_us(10) # sleep for 10 microseconds
5 ^- l X( E* l- H" S% Q, @3 G - start = time.ticks_ms() # get value of millisecond counter: k5 [& n. {2 |+ l
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
2 |7 s0 d! `- h5 V& p4 s; H* h! j, b" a% y+ f3 }# d8 o0 [
内部 LED见 pyb.LED. - from pyb import LED4 B. U! ~+ C! M: Q
* b! a9 ~( {4 x- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue t& s5 I! U/ l8 f9 j6 B
- led.toggle()- j1 H7 ^! V, h9 \
- led.on()
5 I3 k% D( t- }/ [6 c4 u - led.off()* b: v# @+ b. G& r
) S4 N: g/ s" B1 P5 l: k. ]- # LEDs 3 and 4 support PWM intensity (0-255)
; S& A- m2 m3 v - LED(4).intensity() # get intensity
/ N, A- b. H) o& e& C - LED(4).intensity(128) # set intensity to half
复制代码
: w' F& u% I+ z& s* _: m* R
G. u. P. R4 ^* F内部开关请参阅 pyb.Switch. - from pyb import Switch
5 Q# S8 U. t5 p2 W5 N& h3 i - ) q) D/ W" Y+ W1 a; C( K# Q
- sw = Switch()
, E& l! w4 V5 J, @( | - sw.value() # returns True or False# p+ J/ c' l. l" o* ?& k
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 : G) W- a5 ~) q1 _# q
7 n" C2 }8 _. z7 O
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin0 |% P4 ^0 W% H& M) F
- ( H* N! }' m) a; w
- p_out = Pin('X1', Pin.OUT_PP)1 P- N& ^8 S4 d! d; J1 |* A( W* B
- p_out.high()
/ c5 z, E$ U1 _ e2 v% [ - p_out.low()$ A, t# _! R6 a. ?: E
- . s" ]8 h j$ t0 P( D% [% ~( S
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
7 B# @) T$ t6 V% S0 Y( g6 C - p_in.value() # get value, 0 or 1
复制代码
. K- \( i5 U; I5 u% ^' U# U' U# H [* i3 a
伺服控制请参阅pyb.Servo. - from pyb import Servo
1 w' d" H; D. _: H1 V+ m
$ s/ M; A9 M" k# s3 q1 ? }- s1 = Servo(1) # servo on position 1 (X1, VIN, GND): d8 h* P7 {( H; n
- s1.angle(45) # move to 45 degrees3 t# b4 S5 F; r$ u
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms0 l8 S+ [, J# R
- s1.speed(50) # for continuous rotation servos
复制代码 $ {, A! ~2 l* L2 E% |+ b+ @
" Z! e* [3 p! g4 S+ \$ B外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt1 E; x- d! N3 J* p% v
( C, X: l3 K& H- callback = lambda e: print("intr")! Q* X$ N& g' X
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 : n8 j f" l: p+ n* \1 B
' H1 ^3 j# O% L3 S/ s4 [计时器请参阅pyb.Timer. - from pyb import Timer
0 Q8 ?# I4 K3 p; z
* r: C6 Y. g# C% e2 s- tim = Timer(1, freq=1000)
/ o. j3 k5 A# d: U! H0 ^ - tim.counter() # get counter value# p" p6 f, H; N% J4 e
- tim.freq(0.5) # 0.5 Hz5 a: H) @# R, `' D) W. o6 o
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
2 I' F6 B4 ?+ K' DRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC. ? P/ Z' c B8 q7 \; S7 E
: P3 q+ Q, D4 p: [3 A0 I- rtc = RTC()7 z/ u- A& o3 C2 A8 h
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time* y$ ~3 ^6 T1 f5 w
- rtc.datetime() # get date and time
复制代码
, `' k* s% S `% z0 f- CPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
6 L, q# c+ T o6 L z - , G3 ]6 C4 r8 F6 W
- p = Pin('X1') # X1 has TIM2, CH1
/ _4 {# A6 `* f% A3 u) T8 J - tim = Timer(2, freq=1000)" ~+ k e6 s" t6 R/ V# K2 j1 x
- ch = tim.channel(1, Timer.PWM, pin=p)
2 m* X/ y7 Z! }8 o5 ^; m% g6 V - ch.pulse_width_percent(50)
复制代码
8 D4 N. P9 R& XADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
9 u# G6 ~) ^* {4 E+ v! l/ O+ n
1 E5 ^4 Q- M( F7 Q- adc = ADC(Pin('X19'))9 t* p# _: w' ]
- adc.read() # read value, 0-4095
复制代码 5 {) j2 }; T2 v6 y, K9 A+ D8 b
( I& C3 `; q: F( z- A# [DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC( v1 ~; E6 ]' b" ]% L) B
- ! {0 z1 G0 {7 O+ y9 C a) Y
- dac = DAC(Pin('X5'))7 z% {$ d% t: t. J0 H/ o: s8 t' c
- dac.write(120) # output between 0 and 255
复制代码
# l ^2 d; e. k }6 u$ C: a( s" `; |. c- S* |
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
4 x/ d) N5 h) o8 \) N, b - . n9 Q& s5 u3 G* h
- uart = UART(1, 9600)
! Q# W* Q( ?8 B* ~2 r( v5 S - uart.write('hello')
* g# Y! w. Y8 B* Z+ m7 N - uart.read(5) # read up to 5 bytes
复制代码 0 { Q% z* c( R& W: Y
6 d6 D9 w& {, ] [% o' N
SPI总线请参阅 pyb.SPI. - from pyb import SPI& g, w" X2 h4 [- j7 m! I
4 n: w* e. C/ y- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)& Z- e9 X% `6 Z& w
- spi.send('hello')( S* |3 X8 Z! S' V5 V, ^
- spi.recv(5) # receive 5 bytes on the bus
% J, @) g2 W( E! M8 l# y M - spi.send_recv('hello') # send and receive 5 bytes
复制代码 ! s% w6 n6 K) ?* D( A$ F6 ~
4 H, K& W4 A& I% ?/ |: _I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
( X7 u1 k* e- r
% I2 M$ \/ A, P- Z1 M! F- i2c = I2C('X', freq=400000) # create hardware I2c object
* s: v; {3 V$ Z1 Y8 E - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
- L5 ~1 ?: @6 M1 w - / l7 Y b5 i0 e* o0 f V
- i2c.scan() # returns list of slave addresses j0 i: G) P: Z/ ^4 v2 h( z# p
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x420 L8 I1 w5 ]3 H4 r# p/ |' ?
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
/ [0 `- b2 C! H3 J% d
0 K' L; Q* u8 s& Z" H- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
, D! M% O7 J5 |' Y' ~ - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
. M/ D4 N* ~- |6 a
9 t. w, j* F! {" ^5 P) E3 i+ O9 F注意:对于传统 I2C 支持,请参阅 pyb.I2C。 # E- ^& [& P: M+ F. ^. y. a
I2S总线参见 machine.I2S. - from machine import I2S, Pin
$ e6 [' G, t/ V h' q% T
' n4 U7 b* K( u! K9 n! R- 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 object6 U- `8 |3 I8 U+ Z! D! |
- i2s.write(buf) # write buffer of audio samples to I2S device
3 O" p+ h# R5 I5 ^, c: f9 Y% S
, x' m" D& D b# U% B) i; [- 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
2 o0 p" O" J5 _# q: H- ~ - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 $ l g, {6 t6 s& o. X6 w' n
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 1 {9 t9 G$ h4 s" U" ]7 W
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN$ Z. i e0 y& Z9 `5 l
- - ~& w4 C3 J% q5 r$ u
- can = CAN(1, CAN.LOOPBACK); H/ [2 U. {/ {/ ^' k
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
; q1 |3 b/ r' ~- o+ @7 |6 r8 | - can.send('message!', 123) # send a message with id 123
6 T+ O f* ?! H/ ]0 Y1 C, [ - can.recv(0) # receive message on FIFO 0
复制代码
; I- B' V9 I9 x6 N N" s: R* }5 v* ^
( s. M3 ~3 c0 K1 z内部加速度计参见pyb.Accel. - from pyb import Accel3 x9 {+ j( [; I# U/ ~, S; D5 T
8 [& K% o& j, n N2 A7 h- accel = Accel()
# X5 K4 V2 E: W, o# ` - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
% z9 j. Y8 {& Q) ^) s- t! @0 [& r1 @! r' D3 r
|