micropython编程爱好网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 369130|回复: 8

pyboard 快速参考手册

[复制链接]

24

主题

24

帖子

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3322
发表于 2020-4-19 10:36:57 | 显示全部楼层 |阅读模式
pyboard 的快速参考

以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0PYBLITEv1.0-ACPYBLITEv1.0.

下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:


5 k6 y8 ~- R* Y4 F! ^$ W9 B+ j; h通用板控制

pyb.

  1. import pyb
    & d; S& H; A, ~5 k/ T6 k
  2. 5 d+ c/ i, }* i% {" Z
  3. pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
    ! w7 }. F  ]0 ^! A4 x
  4. pyb.wfi() # pause CPU, waiting for interrupt
    # D3 F) ?8 A5 b: Y7 _
  5. pyb.freq() # get CPU and bus frequencies
    5 v3 b' e- D7 V$ N' O: O
  6. pyb.freq(60000000) # set CPU freq to 60MHz# u+ Y. @! r0 t0 f% I0 q3 q
  7. pyb.stop() # stop CPU, waiting for external interrupt
复制代码
2 x* R- e, [" d+ k- J2 c) n
' N! z  f! X2 N* R
延迟和计时

使用 time模块:

  1. import time* a% ^# D2 {* ^: z+ z, t
  2. 0 g* R0 c) n+ f6 z0 H1 J
  3. time.sleep(1)           # sleep for 1 second0 }8 m3 n, _' y; n
  4. time.sleep_ms(500)      # sleep for 500 milliseconds( H2 I$ c5 R5 d( @, `
  5. time.sleep_us(10)       # sleep for 10 microseconds
    / f7 K1 N) V( F9 b' ~  @1 w3 V9 y
  6. start = time.ticks_ms() # get value of millisecond counter+ T" @8 ?$ T" O4 m9 E
  7. delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
9 }/ v0 u! p3 l8 {7 s" x2 ~3 W

7 C& T  l0 \; z  W5 X内部 LED

pyb.LED.

  1. from pyb import LED
    8 N+ c4 N+ G$ D+ w) U! m( X, R
  2. 7 q+ W( m5 y: u5 y6 e7 {
  3. led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue" x/ z4 J0 j( u) m
  4. led.toggle()' @4 N$ r" k, S! L
  5. led.on()' i9 Y- o8 T- \% i# R4 v9 h
  6. led.off()
    9 J+ z+ G% C, L/ o, u% O  q4 B% U  F

  7. ; ^" j- D* @1 Z) R+ h$ P" l$ x
  8. # LEDs 3 and 4 support PWM intensity (0-255)
    . U; {9 Q7 q  u0 `& F) S( O. d3 ]
  9. LED(4).intensity()    # get intensity2 t1 I$ Z1 z7 l: I0 b* ~% _
  10. LED(4).intensity(128) # set intensity to half
复制代码
! O! ?& T* H6 i& n+ u* J  j
  I- c6 Y+ [& }: ?/ h/ a
内部开关

请参阅 pyb.Switch.

  1. from pyb import Switch) v8 O4 }/ }/ q" K! G

  2. : M& C% b$ V/ k% B4 p4 X0 y6 A
  3. sw = Switch()+ ?/ k% o) _% z. `
  4. sw.value() # returns True or False/ e  ~# n4 w9 k, J: o2 h
  5. sw.callback(lambda: pyb.LED(1).toggle())
复制代码

/ s' _+ `) N8 t# n4 P* Z* I
% ]( [9 |5 l8 Z2 c/ M! v' d$ I
引脚和 GPIO

请参阅 pyb.Pin.

  1. from pyb import Pin
    0 ?- c/ F5 K9 f1 D, |% J

  2. # x6 I3 ^& n! a$ Y& r
  3. p_out = Pin('X1', Pin.OUT_PP)
    7 w. l, X6 z: Z: s/ H7 M
  4. p_out.high()
    * [( M9 u1 m' P: k1 p
  5. p_out.low(). K7 R5 ~( I( X( E- k
  6. ' @/ y9 W# ^6 d4 D! ]6 C1 y1 p
  7. p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
    % E6 v+ I6 O- e. T" ]
  8. p_in.value() # get value, 0 or 1
复制代码
9 E' y2 ^2 |# P

1 o, ~" ^$ {. ^6 x7 h0 x( B伺服控制

请参阅pyb.Servo.

  1. from pyb import Servo4 c6 K4 o, w8 N% G- A
  2. & `- `: |; S9 T8 j4 m
  3. s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
    9 l2 g4 X0 }( B+ J' D) C/ q; h
  4. s1.angle(45) # move to 45 degrees
    # o0 }0 S0 C4 ]# R5 C! [# t- ?
  5. s1.angle(-60, 1500) # move to -60 degrees in 1500ms
    & a: x0 F0 ^% [! g! t
  6. s1.speed(50) # for continuous rotation servos
复制代码
- }; O2 a3 P$ T7 @. |  z' q

9 p: |! j( z+ s2 Q% i  H& E8 `外部中断

请参阅 pyb.ExtInt.

  1. from pyb import Pin, ExtInt$ n. t' B7 `1 ^) U
  2. 9 }) r: I9 D  i1 C( j  [* m0 @
  3. callback = lambda e: print("intr"); t/ u. z/ j- J/ i+ m: [0 @
  4. ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
8 n' X) x+ K0 B8 M0 e5 Q" e& R% n

9 a+ q( b' f6 m: f3 D计时器

请参阅pyb.Timer.

  1. from pyb import Timer* s9 c  D; o, z3 X6 T
  2. ) }( C' g$ f- C8 i5 ?! ]
  3. tim = Timer(1, freq=1000)
    " L: k  {" W7 i
  4. tim.counter() # get counter value' o; L5 w: U: C$ N$ d. V- r8 ]
  5. tim.freq(0.5) # 0.5 Hz
    # G5 Z& I( j* @; N& W
  6. tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
3 ^0 H: r2 J; f
RTC(实时时钟)

请参阅 pyb.RTC

  1. from pyb import RTC3 B, G7 d/ K) L" \3 x  \# W
  2. , G  ?9 y+ Q- w" P
  3. rtc = RTC()& x6 U* M8 a5 R1 P) Z
  4. rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time* Q. s$ E1 b; Z4 E/ }
  5. rtc.datetime() # get date and time
复制代码

5 s  W3 o1 k  ?) V. Y- P% _; ^PWM(脉宽调制)

请参阅pyb.Pinpyb.Timer.

  1. from pyb import Pin, Timer. Z% K+ O) x  G6 T
  2. 1 g' \# |( O' H1 j$ @, O
  3. p = Pin('X1') # X1 has TIM2, CH1+ A$ A# t) I. R  Y: H
  4. tim = Timer(2, freq=1000)
    + J! \( u3 o2 {
  5. ch = tim.channel(1, Timer.PWM, pin=p)9 b4 d# ~) P' L$ X& O* ]6 ?
  6. ch.pulse_width_percent(50)
复制代码

- j* q& }2 r! S1 R6 g, o# k: X4 MADC(模数转换)

请参阅pyb.Pinpyb.ADC.

  1. from pyb import Pin, ADC! I% y1 y/ X" N: F+ [3 U
  2. * H1 J, j1 x- @/ R
  3. adc = ADC(Pin('X19'))/ Z8 M  P- s" i2 x
  4. adc.read() # read value, 0-4095
复制代码

; b% ~- s- _! O* t
/ U; _. ~. s' `% |* xDAC(数模转换)

请参阅pyb.Pinpyb.DAC.

  1. from pyb import Pin, DAC  G; I0 m# u7 }4 K/ Y$ K
  2. * C. Y9 n* P. Z0 k. c  o; x
  3. dac = DAC(Pin('X5'))
    1 s/ a% T5 t! G6 |. S3 c( e
  4. dac.write(120) # output between 0 and 255
复制代码
. t9 |0 ~1 K4 b/ ], Q

. R/ P5 x5 `# W- Z& J+ n- E: F2 JUART(串行总线)

请参阅 pyb.UART.

  1. from pyb import UART
    4 L; f* w! g8 g; x. y

  2.   b0 V# w& v( m& V5 t0 f# K" u
  3. uart = UART(1, 9600)8 G2 A" {8 W. n. a0 {' ]% C$ P: Z
  4. uart.write('hello')
    8 [" H6 h! C$ [9 k8 Z# z+ a
  5. uart.read(5) # read up to 5 bytes
复制代码

" x0 N2 d: O) C1 f9 x
% A$ K8 [  n; l3 g- p2 `SPI总线

请参阅 pyb.SPI.

  1. from pyb import SPI9 V% g2 j5 m  Q4 @/ W+ K

  2. " f0 v6 ]8 M9 Y* ?5 T
  3. spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0); t6 C" v8 g* m9 m/ [
  4. spi.send('hello')
      J" Z0 H  d% H4 }
  5. spi.recv(5) # receive 5 bytes on the bus% [9 [- d6 ?5 N4 r1 r
  6. spi.send_recv('hello') # send and receive 5 bytes
复制代码

/ Q' |  `6 \* w2 B" F4 O' B
. M, }0 E) ]0 D5 PI2C总线

硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C.

  1. from machine import I2C  g$ {5 l& _( a- a3 f+ O. s
  2. ' ?; _5 s  b% G% v  c# p( e4 s, [
  3. i2c = I2C('X', freq=400000)                 # create hardware I2c object
    ' H0 B9 L( e. Q: J: B
  4. i2c = I2C(scl='X1', sda='X2', freq=100000)  # create software I2C object
    ' a/ A) J' s% s! h+ b% l

  5. & ~& k% V' }/ ]; x7 n5 b7 Z4 L
  6. i2c.scan()                          # returns list of slave addresses
      m) b5 l) S! O$ u; M9 h0 E
  7. i2c.writeto(0x42, 'hello')          # write 5 bytes to slave with address 0x42# l' `( M8 I2 {: m9 j
  8. i2c.readfrom(0x42, 5)               # read 5 bytes from slave7 f6 `3 s! d; d& i* ~3 y: I
  9. # B' q# g) i" K! o  i
  10. i2c.readfrom_mem(0x42, 0x10, 2)     # read 2 bytes from slave 0x42, slave memory 0x10( v! x9 M8 Q) l# }9 q3 b
  11. i2c.writeto_mem(0x42, 0x10, 'xy')   # write 2 bytes to slave 0x42, slave memory 0x10
复制代码

* i( Q. Q! M: R' M/ X) W
2 o% ^" P4 J8 D3 k8 D  c* W# t2 e

注意:对于传统 I2C 支持,请参阅 pyb.I2C


7 ^' p6 f* @' P& y  L9 Y; ^I2S总线

参见 machine.I2S.

  1. from machine import I2S, Pin" h+ a+ X8 V/ F7 y: ^5 L; ^$ i) A3 \3 S

  2. * Q& u8 i4 ~% `
  3. 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
    3 \" v' N7 t9 E: H" e; i' v" \# x. h
  4. i2s.write(buf)             # write buffer of audio samples to I2S device
    , @7 T3 G$ B1 r0 G$ T- f/ g

  5. $ b% M7 n2 M* ]
  6. 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
    / S# ^9 ~$ S) @5 ?5 v' q
  7. i2s.readinto(buf)          # fill buffer with audio samples from I2S device
复制代码

8 U, h1 ^* L1 Z: _

I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。

PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。


. W2 z5 M* ]5 TCAN总线(控制器局域网)

参见 pyb.CAN.

  1. from pyb import CAN% X) M$ U9 _% g3 ^" v8 M

  2. " {8 @8 o" j7 U" b. a: ]
  3. can = CAN(1, CAN.LOOPBACK)
    " a8 ~; ]+ D. n* }" e8 N
  4. can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
    * T+ o6 ?) F% ~0 y6 @
  5. can.send('message!', 123)   # send a message with id 123
    4 g6 W' S: `' V( f* s  ?* ?! d
  6. can.recv(0)                 # receive message on FIFO 0
复制代码
) |1 q* i! Q8 W8 {. a

' |  n: s9 b8 h/ `! Q内部加速度计

参见pyb.Accel.

  1. from pyb import Accel- l6 [2 J  ^/ }# r9 V

  2. ( t% g' L! O7 n3 n0 n2 l/ ~! w, [& n
  3. accel = Accel()8 ?5 g- V5 x6 _/ I- L' ~
  4. print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
  b8 c! _% Y) f- D8 R* R: g' Y0 W
. ~: _7 J; h7 B. \5 ]
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-11-15 08:13:45 | 显示全部楼层

pyboard 快速参考手册

So happens. We can communicate on this theme.
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-7 20:00:16 | 显示全部楼层

-

Also that we would do without your very good idea
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-20 17:55:02 | 显示全部楼层

-

I can not recollect.
回复

使用道具 举报

0

主题

1

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2021-10-21 20:48:49 | 显示全部楼层

Very interesting information, I am looking forward to the continuation.

dgfergus ??? 2021-8-28 11:005 \! ~- ]9 s0 P" G+ n9 ]# C
Thank you for posting this for all of us
8 e3 Y2 c# \) c9 c% s) d) U
Very interesting information, I am looking forward to the continuation.
回复

使用道具 举报

0

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-6-11 02:02:49 | 显示全部楼层

-

You commit an error. I can defend the position. Write to me in PM, we will discuss.
回复

使用道具 举报

0

主题

7

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2022-6-25 11:56:25 | 显示全部楼层

-

excellent idea and is duly
回复

使用道具 举报

0

主题

8

帖子

1022

积分

新手上路

Rank: 1

积分
1022
发表于 2024-7-12 18:37:01 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

0

主题

8

帖子

1022

积分

新手上路

Rank: 1

积分
1022
发表于 2024-7-27 01:23:40 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|micropython编程爱好网 ( 粤ICP备14010847号-3 )

粤公网安备 44030702001224号

GMT+8, 2025-9-14 16:25 , Processed in 0.218401 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表