Selaa lähdekoodia

【完善】文档打包成PDF更加好看

tangyuxin 7 vuotta sitten
vanhempi
sitoutus
7aaad70f98
37 muutettua tiedostoa jossa 445 lisäystä ja 508 poistoa
  1. 1 4
      docs/01-Getting_Started_Guide.md
  2. 7 11
      docs/03-Basic_Module/01-rtthread.md
  3. 19 22
      docs/03-Basic_Module/02-utime.md
  4. 19 23
      docs/03-Basic_Module/03-sys.md
  5. 46 48
      docs/03-Basic_Module/04-math.md
  6. 10 13
      docs/03-Basic_Module/05-uio.md
  7. 5 8
      docs/03-Basic_Module/06-ucollections.md
  8. 8 11
      docs/03-Basic_Module/07-ustruct.md
  9. 7 10
      docs/03-Basic_Module/08-array.md
  10. 8 11
      docs/03-Basic_Module/09-gc.md
  11. 2 6
      docs/03-MicroPython_libraries.md
  12. 33 34
      docs/04-Hardware_Control_Module/01-machine.md
  13. 18 19
      docs/04-Hardware_Control_Module/02-machine-Pin.md
  14. 24 25
      docs/04-Hardware_Control_Module/03-machine-I2C.md
  15. 18 19
      docs/04-Hardware_Control_Module/04-machine-SPI.md
  16. 12 13
      docs/04-Hardware_Control_Module/05-machine-UART.md
  17. 13 16
      docs/05-System_Module/01-uos.md
  18. 16 18
      docs/05-System_Module/02-uselect.md
  19. 10 13
      docs/05-System_Module/03-uctypes.md
  20. 5 7
      docs/05-System_Module/04-uerrno.md
  21. 11 12
      docs/05-System_Module/05-_thread.md
  22. 16 18
      docs/06-Tools_Module/01-cmath.md
  23. 8 10
      docs/06-Tools_Module/02-ubinascii.md
  24. 14 16
      docs/06-Tools_Module/03-uhashlib.md
  25. 6 9
      docs/06-Tools_Module/04-uheapq.md
  26. 6 8
      docs/06-Tools_Module/05-ujson.md
  27. 18 20
      docs/06-Tools_Module/06-ure.md
  28. 4 8
      docs/06-Tools_Module/07-uzlib.md
  29. 11 13
      docs/06-Tools_Module/08-urandom.md
  30. 30 32
      docs/07-Network_Module/01-usocket.md
  31. 1 2
      docs/08-Packages_Management.md
  32. 1 3
      docs/09-Net_Programming_Guide/01-introduction.md
  33. 3 2
      docs/09-Net_Programming_Guide/02-HttpClient.md
  34. 10 4
      docs/09-Net_Programming_Guide/03-HttpServer.md
  35. 9 2
      docs/09-Net_Programming_Guide/04-MQTT.md
  36. 14 13
      docs/09-Net_Programming_Guide/05-Cloud-OneNET.md
  37. 2 5
      docs/README.md

+ 1 - 4
docs/01-Getting_Started_Guide.md

@@ -2,8 +2,7 @@
 
 ## 开始使用 MicroPython
 
-!!! note "注意"
-     RT-Thread MicroPython 需要运行在 **RT-Thread 3.0** 版本以上。
+> **注意**:RT-Thread MicroPython 需要运行在 **RT-Thread 3.0** 版本以上。
 
 ### 选择合适的 BSP 平台
 
@@ -111,5 +110,3 @@ while True:
 ```
 
 针对自己的开发板修改引脚号,使用**粘贴模式**输入以上脚本,即可通过按键 KEY 控制 LED 灯的亮灭。
-
-----------

+ 7 - 11
docs/03-Basic_Module/01-rtthread.md

@@ -1,21 +1,19 @@
-# **rtthread** – 系统相关函数
+## **rtthread** – 系统相关函数
 
+**rtthread** 模块提供了与 RT-Thread 操作系统相关的功能,如查看栈使用情况等。
 
-!!! abstract "简介"
-     **rtthread** 模块提供了与 RT-Thread 操作系统相关的功能,如查看栈使用情况等。
+### 函数
 
-## 函数
-
-### rtthread.current_tid()  
+#### rtthread.current_tid()  
 返回当前线程的 id 。
 
-### rtthread.is_preempt_thread()  
+#### rtthread.is_preempt_thread()  
 返回是否是可抢占线程。
 
-### rtthread.stacks_analyze()  
+#### rtthread.stacks_analyze()  
 返回当前系统线程和栈使用信息。
 
-## 示例 
+### 示例
 
 ```
 >>> import rtthread
@@ -34,5 +32,3 @@ SysMonitor  30  suspend 0x000000a4 0x00000200    32%   0x00000005 000
 timer        4  suspend 0x00000080 0x00000200    25%   0x00000009 000
 >>> 
 ```
-
-----------

+ 19 - 22
docs/03-Basic_Module/02-utime.md

@@ -1,7 +1,6 @@
-# **utime** – 时间相关函数
+## **utime** – 时间相关函数
 
-!!! abstract "简介"
-    **utime** 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。
+**utime** 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。
 
 **初始时刻**: `Unix` 使用 `POSIX` 系统标准,从 1970-01-01 00:00:00 `UTC` 开始。
 嵌入式程序从 2000-01-01 00:00:00 `UTC` 开始。
@@ -14,9 +13,9 @@
 
 如果实际时间不是通过系统 / MicroPython RTC 维持,那么下面函数结果可能不是和预期的相同。
 
-## 函数
+### 函数
 
-### **utime.localtime**([secs])  
+#### **utime.localtime**([secs])  
    从初始时间的秒转换为元组: (年, 月, 日, 时, 分, 秒, 星期, ``yearday``) 。如果 ``secs`` 是空或者 ``None``,那么使用当前时间。  
 
 - `year ` 年份包括世纪(例如2014)。 
@@ -28,29 +27,29 @@
 - `weekday` 范围 0-6 对应周一到周日  
 - `yearday` 范围 1-366  
 
-### **utime.mktime**()  
+#### **utime.mktime**()  
    时间的反函数,它的参数是完整8参数的元组,返回值一个整数自2000年1月1日以来的秒数。
 
-### **utime.sleep**(seconds)  
+#### **utime.sleep**(seconds)  
   休眠指定的时间(秒),``Seconds`` 可以是浮点数。注意有些版本的 MicroPython不支持浮点数,为了兼容可以使用 ``sleep_ms()`` 和 ``sleep_us()``函数。
 
-### **utime.sleep_ms**(ms)  
+#### **utime.sleep_ms**(ms)  
   延时指定毫秒,参数不能小于0。
 
-### **utime.sleep_us**(us)  
+#### **utime.sleep_us**(us)  
   延时指定微秒,参数不能小于0。
 
-### **utime.ticks_ms**()  
+#### **utime.ticks_ms**()  
   返回不断递增的毫秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在``ticks_diff()``。  
   注: 直接在这些值上执行标准数学运算(+,-)或关系运算符(<,>,>,> =)会导致无效结果。执行数学运算然后传递结果作为参数给`ticks_diff()` 或 ` ticks_add() ` 也将导致函数产生无效结果。
 
-### **utime.ticks_us**()  
+#### **utime.ticks_us**()  
   和上面 `ticks_ms()` 类似,只是返回微秒。
 
-### **utime.ticks_cpu**()  
+#### **utime.ticks_cpu**()  
   与 ``ticks_ms()`` 和 ``ticks_us()`` 类似,具有更高精度 (使用 CPU 时钟),并非每个端口都实现此功能。
 
-### **utime.ticks_add**(ticks, delta)
+#### **utime.ticks_add**(ticks, delta)
   给定一个数字作为节拍的偏移值 `delta`,这个数字的值是正数或者负数都可以。
   给定一个 `ticks` 节拍值,本函数允许根据节拍值的模算数定义来计算给定节拍值之前或者之后 `delta` 个节拍的节拍值 。
   `ticks` 参数必须是 `ticks_ms()`, `ticks_us()`, or `ticks_cpu()` 函数的直接返回值。然而,`delta` 可以是一个任意整数或者是数字表达式。`ticks_add` 函数对计算事件/任务的截至时间很有用。(注意:必须使用 `ticksdiff()` 函数来处理
@@ -58,37 +57,37 @@
 
 代码示例:
 ```python
-# 查找 100ms 之前的节拍值
+## 查找 100ms 之前的节拍值
 print(utime.ticks_add(utime.ticks_ms(), -100))
 
-# 计算操作的截止时间然后进行测试
+## 计算操作的截止时间然后进行测试
 deadline = utime.ticks_add(utime.ticks_ms(), 200)
 while utime.ticks_diff(deadline, utime.ticks_ms()) > 0:
     do_a_little_of_something()
 
-# 找出本次移植节拍值的最大值
+## 找出本次移植节拍值的最大值
 print(utime.ticks_add(0, -1))
 ```
 
-### **utime.ticks_diff**(ticks1, ticks2)
+#### **utime.ticks_diff**(ticks1, ticks2)
    计算两次调用 `ticksms()`, `ticks_us()`, 或 `ticks_cpu()`之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 `ticks_diff()` 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 `ticks*()` 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:
 
 代码示例:
 ```python
-# 等待 GPIO 引脚有效,但是最多等待500微秒
+## 等待 GPIO 引脚有效,但是最多等待500微秒
 start = time.ticks_us()
 while pin.value() == 0:
     if time.ticks_diff(time.ticks_us(), start) > 500:
         raise TimeoutError
 ```
 
-### **utime.time**()
+#### **utime.time**()
   返回从开始时间的秒数(整数),假设 `RTC` 已经按照前面方法设置好。如果 `RTC` 没有设置,函数将返回参考点开始计算的秒数 (对于 `RTC` 没有后备电池的板子,上电或复位后的情况)。如果你开发便携版的 MicroPython 应用程序,你不要依赖函数来提供超过秒级的精度。如果需要高精度,使用 `ticks_ms()` 和 `ticks_us()` 函数。如果需要日历时间,使用不带参数的 `localtime()` 是更好选择。
 
 !!! tip "与 CPython 的区别"
     在 `CPython` 中,这个函数用浮点数返回从 `Unix` 开始时间(1970-01-01 00:00 `UTC`)的秒数,通常是毫秒级的精度。在 MicroPython 中,只有 `Unix` 版才使用相同开始时间,如果允许浮点精度,将返回亚秒精度。嵌入式硬件通常没有用浮点数表示长时间访问和亚秒精度,所以返回值是整数。一些嵌入式系统硬件不支持 `RTC` 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。
 
-##   示例 
+###   示例 
 
 ```
 >>> import utime
@@ -106,5 +105,3 @@ while pin.value() == 0:
 ```
 
 更多内容可参考 [`utime`](http://docs.micropython.org/en/latest/pyboard/library/utime.html#module-utime)  。
-
-----------

+ 19 - 23
docs/03-Basic_Module/03-sys.md

@@ -1,56 +1,54 @@
-# **sys** – 系统特有功能函数
+## **sys** – 系统特有功能函数
 
-!!! abstract "简介"
-    **sys** 模块提供系统特有的功能。
+**sys** 模块提供系统特有的功能。
 
-## 函数
+### 函数
 
-### **sys.exit**(retval=0)  
+#### **sys.exit**(retval=0)  
   终止当前程序给定的退出代码。 函数会抛出 `SystemExit` 异常。
-### **sys.print_exception**(exc, file=sys.stdout)  
+#### **sys.print_exception**(exc, file=sys.stdout)  
   打印异常与追踪到一个类似文件的对象 file (或者缺省 `sys.stdout` ).
 
-!!! tip "与 CPython 的区别"
-    这是 CPython 中回溯模块的简化版本。不同于 `traceback.print_exception()`,这个函数用异常值代替了异常类型、异常参数和回溯对象。文件参数在对应位置,不支持更多参数。CPython 兼容回溯模块在 `micropython-lib`。  
+> 提示:这是 CPython 中回溯模块的简化版本。不同于 `traceback.print_exception()`,这个函数用异常值代替了异常类型、异常参数和回溯对象。文件参数在对应位置,不支持更多参数。CPython 兼容回溯模块在 `micropython-lib`。  
 
-## 常数
+### 常数
 
-### **sys.argv**  
+#### **sys.argv**  
   当前程序启动时参数的可变列表。
 
-### **sys.byteorder**  
+#### **sys.byteorder**  
   系统字节顺序 (“little” or “big”).
 
-### **sys.implementation**  
+#### **sys.implementation**  
   关于当前 Python 实现的信息,对于 MicroPython 来说,有以下属性:  
   - 名称 -  ‘’micropython“  
   - 版本 - 元组(主要,次要,小),比如(1,9,3) 
 
-### **sys.modules**  
+#### **sys.modules**  
   已加载模块的字典。在一部分移植中,它可能不包含内置模块。
 
-### **sys.path**  
+#### **sys.path**  
   用来搜索导入模块地址的列表。
 
-### **sys.platform**  
+#### **sys.platform**  
   返回当前平台的信息。
 
-### **sys.stderr**  
+#### **sys.stderr**  
   标准错误流。
 
-### **sys.stdin**  
+#### **sys.stdin**  
   标准输入流。
 
-### **sys.stdout**  
+#### **sys.stdout**  
   标准输出流。
 
-### **sys.version**  
+#### **sys.version**  
   符合的 Python 语言版本,如字符串。
 
-### **sys.version_info**  
+#### **sys.version_info**  
   本次实现使用的 Python 语言版本,用一个元组的方式表示。
 
-## 示例 
+### 示例 
 
 ```
 >>> import sys
@@ -69,5 +67,3 @@
 ```
 
 更多内容可参考 [sys](http://docs.micropython.org/en/latest/pyboard/library/sys.html) 。
-
-----------

+ 46 - 48
docs/03-Basic_Module/04-math.md

@@ -1,12 +1,12 @@
-# **math** – 数学函数
+## **math** – 数学函数
 
-!!! abstract "简介"
-    **math** 模块提供了对 C 标准定义的数学函数的访问。  
-    本模块需要带有硬件 FPU,精度是32位,这个模块需要浮点功能支持。
+**math** 模块提供了对 C 标准定义的数学函数的访问。
 
-## 常数
+> 注意:本模块需要带有硬件 FPU,精度是32位,这个模块需要浮点功能支持。
 
-### **math.e**  
+### 常数
+
+#### **math.e**  
 自然对数的底数。
 
 示例:
@@ -15,7 +15,7 @@
 >>>print(math.e)
 2.718282
 ```
-### **math.pi**  
+#### **math.pi**  
 圆周长与直径的比值。
 
 示例:
@@ -25,15 +25,15 @@
 3.141593
 ```
 
-## 函数
+### 函数
 
-### **math.acos(x)**
+#### **math.acos(x)**
 传入弧度值,计算cos(x)的反三角函数。 
 
-### **math.acosh(x)** 
+#### **math.acosh(x)** 
   返回 ``x`` 的逆双曲余弦。
 
-### **math.asin(x)**
+#### **math.asin(x)**
 传入弧度值,计算sin(x)的反三角函数。 
 示例:
 
@@ -43,19 +43,19 @@
 0.5235988
 ```
 
-### **math.asinh(x)**
+#### **math.asinh(x)**
   返回``x`` 的逆双曲正弦。
 
-### **math.atan(x)**
+#### **math.atan(x)**
   返回 ``x`` 的逆切线。
 
-### **math.atan2(y, x)**
+#### **math.atan2(y, x)**
   Return the principal value of the inverse tangent of y/x.
 
-### **math.atanh(x)**
+#### **math.atanh(x)**
   Return the inverse hyperbolic tangent of x.
 
-### **math.ceil(x)**
+#### **math.ceil(x)**
 向上取整。 
 示例:
 
@@ -65,10 +65,10 @@
 6
 ```
 
-### **math.copysign(x, y)** 
+#### **math.copysign(x, y)** 
   Return x with the sign of y.
 
-### **math.cos(x)**  
+#### **math.cos(x)**  
 传入弧度值,计算余弦。 
 示例:计算cos60°
 
@@ -77,10 +77,10 @@
 0.5
 ```
 
-### **math.cosh(x)**  
+#### **math.cosh(x)**  
   Return the hyperbolic cosine of x.
 
-### **math.degrees(x)**  
+#### **math.degrees(x)**  
 弧度转化为角度。 
 示例:
 
@@ -90,13 +90,13 @@
 60.00002
 ```
 
-### **math.erf(x)**  
+#### **math.erf(x)**  
   Return the error function of x.
 
-### **math.erfc(x)**  
+#### **math.erfc(x)**  
   Return the complementary error function of x.
 
-### **math.exp(x)**  
+#### **math.exp(x)**  
 计算e的x次方(幂)。 
 示例:
 
@@ -106,10 +106,10 @@
 7.389056
 ```
 
-### **math.expm1(x)**  
+#### **math.expm1(x)**  
 计算 math.exp(x) - 1。 
 
-### **math.fabs(x)**  
+#### **math.fabs(x)**  
 计算绝对值。 
 示例:
 
@@ -122,7 +122,7 @@
 5.0
 ```
 
-### **math.floor(x)**  
+#### **math.floor(x)**  
 向下取整。 
 示例:
 
@@ -135,7 +135,7 @@
 -3
 ```
 
-### **math.fmod(x, y)**  
+#### **math.fmod(x, y)**  
 取x除以y的模。 
 示例:
 
@@ -145,10 +145,10 @@
 4.0
 ```
 
-### **math.frexp(x)**  
+#### **math.frexp(x)**  
   Decomposes a floating-point number into its mantissa and exponent. The returned value is the tuple (m, e) such that x == m * 2**e exactly. If x == 0 then the function returns (0.0, 0), otherwise the relation 0.5 <= abs(m) < 1 holds.
 
-### **math.gamma(x)**  
+#### **math.gamma(x)**  
 返回伽马函数。 
 示例:
 
@@ -158,19 +158,19 @@
 33.08715
 ```
 
-### **math.isfinite(x)**  
+#### **math.isfinite(x)**  
   Return True if x is finite.
 
-### **math.isinf(x)**  
+#### **math.isinf(x)**  
   Return True if x is infinite.
 
-### **math.isnan(x)**  
+#### **math.isnan(x)**  
   Return True if x is not-a-number
 
-### **math.ldexp(x, exp)**  
+#### **math.ldexp(x, exp)**  
   Return x * (2**exp).
 
-### **math.lgamma(x)**  
+#### **math.lgamma(x)**  
 返回伽马函数的自然对数。 
 示例:
 
@@ -180,7 +180,7 @@
 3.499145
 ```
 
-### **math.log(x)**  
+#### **math.log(x)**  
 计算以e为底的x的对数。 
 示例:
 
@@ -190,7 +190,7 @@
 2.302585
 ```
 
-### **math.log10(x)**  
+#### **math.log10(x)**  
 计算以10为底的x的对数。 
 示例:
 
@@ -200,7 +200,7 @@
 1.0
 ```
 
-### **math.log2(x)**  
+#### **math.log2(x)**  
  计算以2为底的x的对数。 
 示例:
 
@@ -210,10 +210,10 @@
 3.0
 ```
 
-### **math.modf(x)**  
+#### **math.modf(x)**  
   Return a tuple of two floats, being the fractional and integral parts of x. Both return values have the same sign as x.
 
-### **math.pow(x, y)**  
+#### **math.pow(x, y)**  
 计算 x 的 y 次方(幂)。 
 示例:
 
@@ -223,7 +223,7 @@
 8.0
 ```
 
-### **math.radians(x)**  
+#### **math.radians(x)**  
 角度转化为弧度。 
 示例:
 
@@ -233,7 +233,7 @@
 1.047198
 ```
 
-### **math.sin(x)**  
+#### **math.sin(x)**  
 传入弧度值,计算正弦。 
 示例:计算sin90°
 
@@ -242,10 +242,10 @@
 1.0
 ```
 
-### **math.sinh(x)**  
+#### **math.sinh(x)**  
   Return the hyperbolic sine of x.
 
-### **math.sqrt(x)**  
+#### **math.sqrt(x)**  
 计算平方根。 
 示例:
 
@@ -255,7 +255,7 @@
 3.0
 ```
 
-### **math.tan(x)**  
+#### **math.tan(x)**  
 传入弧度值,计算正切。 
 示例:计算tan60°
 
@@ -264,10 +264,10 @@
 1.732051
 ```
 
-### **math.tanh(x)**  
+#### **math.tanh(x)**  
   Return the hyperbolic tangent of x.
 
-### **math.trunc(x)**  
+#### **math.trunc(x)**  
 取整。 
 示例:
 
@@ -281,5 +281,3 @@
 ```
 
 更多内容可参考  [math](http://docs.micropython.org/en/latest/pyboard/library/math.html) 。
-
-----------

+ 10 - 13
docs/03-Basic_Module/05-uio.md

@@ -1,29 +1,26 @@
-# **uio** – 输入/输出流
+## **uio** – 输入/输出流
 
-!!! abstract "简介"
-    **uio** 模块包含流类型 (类似文件) 对象和帮助函数。
+**uio** 模块包含流类型 (类似文件) 对象和帮助函数。
 
-## 函数
+### 函数
 
-### **uio.open**(name, mode='r', **kwargs)  
+#### **uio.open**(name, mode='r', **kwargs)  
   打开一个文件,关联到内建函数``open()``。所有端口 (用于访问文件系统) 需要支持模式参数,但支持其他参数不同的端口。
 
-## 类
+###
 
-### **class uio.FileIO**(...)  
+#### **class uio.FileIO**(...)  
   这个文件类型用二进制方式打开文件,等于使用``open(name, “rb”)``。 不应直接使用这个实例。
 
-### **class uio.TextIOWrapper**(...)  
+#### **class uio.TextIOWrapper**(...)  
   这个类型以文本方式打开文件,等同于使用``open(name, “rt”)``不应直接使用这个实例。
 
-### **class uio.StringIO**([string])  
+#### **class uio.StringIO**([string])  
 
-### **class uio.BytesIO**([string])  
+#### **class uio.BytesIO**([string])  
   内存文件对象。`StringIO` 用于文本模式 I/O (用 “t” 打开文件),`BytesIO` 用于二进制方式 (用 “b” 方式)。文件对象的初始内容可以用字符串参数指定(`stringio`用普通字符串,`bytesio`用`bytes`对象)。所有的文件方法,如 `read(), write(), seek(), flush(), close()` 都可以用在这些对象上,包括下面方法:
 
-### **getvalue**()  
+#### **getvalue**()  
   获取缓存区内容。
 
 更多内容可参考  [uio](http://docs.micropython.org/en/latest/pyboard/library/uio.html) 。
-
-----------

+ 5 - 8
docs/03-Basic_Module/06-ucollections.md

@@ -1,11 +1,10 @@
-# **ucollections** – 收集和容器类型
+## **ucollections** – 收集和容器类型
 
-!!! abstract "简介"
-    **ucollections** 模块实现了专门的容器数据类型,它提供了 Python 的通用内置容器的替代方案,包括了字典、列表、集合和元组。
+**ucollections** 模块实现了专门的容器数据类型,它提供了 Python 的通用内置容器的替代方案,包括了字典、列表、集合和元组。
 
-## 类
+###
 
-### **ucollections.namedtuple**(name, fields)  
+#### **ucollections.namedtuple**(name, fields)  
 这是工厂函数创建一个新的 `namedtuple` 型与一个特定的字段名称和集合。`namedtuple` 是元组允许子类要访问它的字段不仅是数字索引,而且还具有属性使用符号字段名访问语法。 字段是字符串序列指定字段名称。为了兼容的实现也可以用空间分隔的字符串命名的字段(但效率较低) 。
 
 代码示例:
@@ -20,7 +19,7 @@ assert t2.name == t2[1]
 ucollections.OrderedDict(...)
 ```
 
-### **ucollections.OrderedDict**(...)  
+#### **ucollections.OrderedDict**(...)  
 字典类型的子类,会记住并保留键/值的追加顺序。当有序的字典被迭代输出时,键/值 会按照他们被添加的顺序返回 :
 
 ```python
@@ -43,5 +42,3 @@ w 5
 b 3
 
 更多的内容可参考 [ucollections](http://docs.micropython.org/en/latest/pyboard/library/ucollections.html) 。
-
-----------

+ 8 - 11
docs/03-Basic_Module/07-ustruct.md

@@ -1,14 +1,13 @@
-# **ustruct** – 打包和解包原始数据类型
+## **ustruct** – 打包和解包原始数据类型
 
-!!! abstract "简介"
-    **ustruct** 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。
+**ustruct** 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。
 
 - 支持 size/byte 的前缀: @, <, >, !.
 - 支持的格式代码: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (最后2个需要支持浮点数).
 
-## 函数
+### 函数
 
-### **ustruct.calcsize**(fmt)  
+#### **ustruct.calcsize**(fmt)  
 返回存放某一类型数据 fmt 需要的字节数。
 
 ```
@@ -37,7 +36,7 @@ fmt:数据类型
 1
 ```
 
-### **ustruct.pack**(fmt, v1, v2, ...)  
+#### **ustruct.pack**(fmt, v1, v2, ...)  
 按照格式字符串 fmt 打包参数 v1, v2, ... 。返回值是参数打包后的字节对象。
 
 ```
@@ -51,7 +50,7 @@ fmt:同上
 b'\x03\x00\x00\x00\x02\x00\x00\x00'
 ```
 
-### **ustruct.unpack**(fmt, data)  
+#### **ustruct.unpack**(fmt, data)  
 从 fmt 中解包数据。返回值是解包后参数的元组。
 
 ```
@@ -68,10 +67,10 @@ b'\x01\x02'
 (1, 2)
 ```
 
-### **ustruct.pack_into**(fmt, buffer, offset, v1, v2, ...)  
+#### **ustruct.pack_into**(fmt, buffer, offset, v1, v2, ...)  
 按照格式字符串 fmt 压缩参数 v1, v2, ... 到缓冲区 buffer,开始位置是 offset。当offset 为负数时,从缓冲区末尾开始计数。 
 
-### **ustruct.unpack_from**(fmt, data, offset=0)  
+#### **ustruct.unpack_from**(fmt, data, offset=0)  
 以 fmt 作为规则从 data 的 offset 位置开始解包数据,如果 offset 是负数就是从缓冲区末尾开始计算。返回值是解包后的参数元组。
 ```python
 >>> buf = struct.pack("bb", 1, 2)
@@ -81,5 +80,3 @@ b'\x01\x02'
 (2,)
 ```
 更多的内容可参考  [ustruct](http://docs.micropython.org/en/latest/pyboard/library/ustruct.html) 。
-
-----------

+ 7 - 10
docs/03-Basic_Module/08-array.md

@@ -1,11 +1,10 @@
-# **array** – 数字数据数组
+## **array** – 数字数据数组
 
-!!! abstract "简介"
-    **array**  模块定义了一个对象类型,它可以简洁地表示基本值的数组:字符、整数、浮点数。支持代码格式: b, B, h, H, i, I, l, L, q, Q, f, d (最后2个需要支持浮点数)。
+**array**  模块定义了一个对象类型,它可以简洁地表示基本值的数组:字符、整数、浮点数。支持代码格式: b, B, h, H, i, I, l, L, q, Q, f, d (最后2个需要支持浮点数)。
 
-## 构造函数
+### 构造函数
 
-### **class array.array**(typecode[, iterable])  
+#### **class array.array**(typecode[, iterable])  
 用给定类型的元素创建数组。数组的初始内容由 iterable 提供,如果没有提供,则创建一个空数组。
 
 ```
@@ -25,9 +24,9 @@ array('i', [2, 4, 1, 5])
 array('f')
 ```
 
-## 方法
+### 方法
 
-### **array.append**(val)  
+#### **array.append**(val)  
 将一个新元素追加到数组的末尾。 
 
 示例:
@@ -41,7 +40,7 @@ array('f', [3.0, 6.0])
 array('f', [3.0, 6.0, 7.0])
 ```
 
-### **array.extend**(iterable)  
+#### **array.extend**(iterable)  
 将一个新的数组追加到数组的末尾,注意追加的数组和原来数组的数据类型要保持一致。 
 
 示例:
@@ -55,5 +54,3 @@ array('i', [1, 2, 3, 4, 5])
 ```
 
 更多内容可参考  [array](http://docs.micropython.org/en/latest/pyboard/library/array.html) 。
-
-----------

+ 8 - 11
docs/03-Basic_Module/09-gc.md

@@ -1,25 +1,22 @@
-# **gc** – 控制垃圾回收
+## **gc** – 控制垃圾回收
 
-!!! abstract "简介"
-    **gc** 模块提供了垃圾收集器的控制接口。
+**gc** 模块提供了垃圾收集器的控制接口。
 
-## 函数
+### 函数
 
-### **gc.enable**()  
+#### **gc.enable**()  
 允许自动回收内存碎片。 
 
-### **gc.disable**()  
+#### **gc.disable**()  
 禁止自动回收,但可以通过collect()函数进行手动回收内存碎片。 
 
-### **gc.collect**()  
+#### **gc.collect**()  
 运行一次垃圾回收。
 
-### **gc.mem_alloc**()  
+#### **gc.mem_alloc**()  
 返回已分配的内存数量。 
 
-### **gc.mem_free**()  
+#### **gc.mem_free**()  
 返回剩余的内存数量。 
 
 更多内容可参考  [gc](http://docs.micropython.org/en/latest/pyboard/library/gc.html) 。
-
-----------

+ 2 - 6
docs/03-MicroPython_libraries.md

@@ -1,9 +1,8 @@
 # MicroPython 模块
 
-!!! abstract "简介"
-    - MicroPython 提供丰富的模块,每个模块提供特定的功能。了解开发的过程中一些常用的模块的使用方式,可以让你很好的使用 MicroPython 的功能。
+- MicroPython 提供丰富的模块,每个模块提供特定的功能。了解开发的过程中一些常用的模块的使用方式,可以让你很好的使用 MicroPython 的功能。
 
-    - 这些模块可以通过 env 工具的 menuconfig 功能来开启和关闭,如果你需要使用特定的模块,在 menuconfig 中选中模块名,保存退出后,重新编译运行即可。
+- 这些模块可以通过 env 工具的 menuconfig 功能来开启和关闭,如果你需要使用特定的模块,在 menuconfig 中选中模块名,保存退出后,重新编译运行即可。
 
 ## Python 标准库和微型库
 
@@ -82,6 +81,3 @@ Python 的标准库被 “微型化”后,就是 MicroPython 标准库,也
 [27]: 06-Tools_Module/08-urandom.md
 [28]: 07-Network_Module/01-usocket.md
 
-
-
-

+ 33 - 34
docs/04-Hardware_Control_Module/01-machine.md

@@ -1,70 +1,69 @@
-# **machine** – 与硬件相关的功能
+## **machine** – 与硬件相关的功能
 
-!!! abstract "简介"
-    **machine** 模块包含与特定开发板上的硬件相关的特定函数。 在这个模块中的大多数功能允许实现直接和不受限制地访问和控制系统上的硬件块(如CPU,定时器,总线等)。如果使用不当,会导致故障,死机,崩溃,在极端的情况下,硬件会损坏。
+**machine** 模块包含与特定开发板上的硬件相关的特定函数。 在这个模块中的大多数功能允许实现直接和不受限制地访问和控制系统上的硬件块(如CPU,定时器,总线等)。如果使用不当,会导致故障,死机,崩溃,在极端的情况下,硬件会损坏。
 
-## 函数
+### 函数
 
-### 复位相关函数
+#### 复位相关函数
 
-#### **machine.info**()  
+##### **machine.info**()  
   显示关于系统介绍和内存占用等信息。
 
-#### **machine.rest**()  
+##### **machine.rest**()  
   重启设备,类似于按下复位按钮。
 
-#### **machine.reset_cause**()  
+##### **machine.reset_cause**()  
   获得复位的原因,查看可能的返回值的常量。
 
-### 中断相关函数
+#### 中断相关函数
 
-#### **machine.disable_irq**()  
+##### **machine.disable_irq**()  
   禁用中断请求。返回先前的 `IRQ` 状态,该状态应该被认为是一个未知的值。这个返回值应该在 `disable_irq` 函数被调用之前被传给 `enable_irq` 函数来重置中断到初始状态。
 
-#### **machine.enable_irq**(state)  
+##### **machine.enable_irq**(state)  
   重新使能中断请求。状态参数应该是从最近一次禁用功能的调用中返回的值。
 
-### 功耗相关函数
+#### 功耗相关函数
 
-#### **machine.freq**()  
+##### **machine.freq**()  
   返回 `CPU` 的运行频率。
 
-#### **machine.idle**()  
+##### **machine.idle**()  
   阻断给 `CPU` 的时钟信号,在较短或者较长的周期里减少功耗。当中断发生时,外设将继续工作。
 
-#### **machine.sleep**()  
+##### **machine.sleep**()  
   停止 `CPU` 并禁止除了 `WLAN` 之外的所有外设。系统会从睡眠请求的地方重新恢复工作。为了确保唤醒一定会发生,应当首先配置中断源。
 
-#### **machine.deepsleep**()  
+##### **machine.deepsleep**()  
   停止 `CPU` 和所有外设(包括网络接口)。执行从主函数中恢复,就像被复位一样。复位的原因可以检查 `machine.DEEPSLEEP` 参数获得。为了确保唤醒一定会发生,应该首先配置中断源,比如一个引脚的变换或者 `RTC` 的超时。
 
-## 常数
+### 常数
 
-### **machine.IDLE**
-### **machine.SLEEP**
-### **machine.DEEPSLEEP**
+#### **machine.IDLE**
+#### **machine.SLEEP**
+#### **machine.DEEPSLEEP**
 `IRQ` 的唤醒值。
 
-### **machine.PWRON_RESET **
-### **machine.HARD_RESET **
-### **machine.WDT_RESET **
-### **machine.DEEPSLEEP_RESET **
-### **machine.SOFT_RESET**
+#### **machine.PWRON_RESET **
+#### **machine.HARD_RESET **
+#### **machine.WDT_RESET **
+#### **machine.DEEPSLEEP_RESET **
+#### **machine.SOFT_RESET**
 复位的原因。
 
-### **machine.WLAN_WAKE**
-### **machine.PIN_WAKE**
-### **machine.RTC_WAKE**
+#### **machine.WLAN_WAKE**
+#### **machine.PIN_WAKE**
+#### **machine.RTC_WAKE**
 唤醒的原因。
 
-## 类
+###
 
-### [class Pin](02-machine-Pin.md) - 控制 I/O 引脚  
-### [class I2C](03-machine-I2C.md) - I2C 协议  
-### [class SPI](04-machine-SPI.md) - SPI 协议  
-### [class UART](05-machine-UART.md) - 串口
+#### [class Pin](02-machine-Pin.md) - 控制 I/O 引脚  
+#### [class I2C](03-machine-I2C.md) - I2C 协议  
+#### [class SPI](04-machine-SPI.md) - SPI 协议  
+#### [class UART](05-machine-UART.md) - 串口
 
-## 示例 
+### 示例 
 
 ```
 >>> import machine

+ 18 - 19
docs/04-Hardware_Control_Module/02-machine-Pin.md

@@ -1,17 +1,16 @@
-# machine.Pin  
+## machine.Pin
 
-!!! abstract "简介"
-    **machine.Pin** 类是 machine 模块下面的一个硬件类,用于对引脚的配置和控制,提供对 `Pin` 设备的操作方法。
+**machine.Pin** 类是 machine 模块下面的一个硬件类,用于对引脚的配置和控制,提供对 `Pin` 设备的操作方法。
 
 `Pin` 对象用于控制输入/输出引脚(也称为 `GPIO`)。`Pin` 对象通常与一个物理引脚相关联,他可以驱动输出电压和读取输入电压。Pin 类中有设置引脚模式(输入/输出)的方法,也有获取和设置数字逻辑(`0` 或 `1`)的方法。
 
 一个 `Pin` 对象是通过一个标识符来构造的,它明确地指定了一个特定的输入输出。标识符的形式和物理引脚的映射是特定于一次移植的。标识符可以是整数,字符串或者是一个带有端口和引脚号码的元组。在 RT-Thread MicroPython 中,引脚标识符是一个由代号和引脚号组成的元组,如 `Pin(("X1", 33), Pin.OUT_PP)` 中的` ("X1", 33)`。
 
-## 构造函数
+### 构造函数
 
 在 RT-Thread MicroPython 中 `Pin` 对象的构造函数如下:
 
-### **class machine.Pin**( id, mode = -1, pull = -1,value)
+#### **class machine.Pin**( id, mode = -1, pull = -1,value)
 - **id** :由用户自定义的引脚名和 `Pin`  设备引脚号组成,如("X1", 33),"X1" 为用户自定义的引脚名,`33` 为 `RT-Thread Pin` 设备驱动在本次移植中的引脚号。
 
 - **mode** : 指定引脚模式,可以是以下几种:
@@ -26,34 +25,34 @@
 
 - **value** : `value` 的值只对输出模式和开漏输出模式有效,用来设置初始输出值。
 
-## 方法
+### 方法
 
-### **Pin.init**(mode= -1, pull= -1, *, value, drive, alt)
+#### **Pin.init**(mode= -1, pull= -1, *, value, drive, alt)
 根据输入的参数重新初始化引脚。只有那些被指定的参数才会被设置,其余引脚的状态将保持不变,详细的参数可以参考上面的构造函数。
 
-### **Pin.value**([x])
+#### **Pin.value**([x])
 如果没有给定参数 `x` ,这个方法可以获得引脚的值。  
 如果给定参数 `x` ,如 `0` 或 `1`,那么设置引脚的值为 逻辑 `0` 或 逻辑 `1`。
 
-### **Pin.name**()
+#### **Pin.name**()
 返回引脚对象在构造时用户自定义的引脚名。
 
-## 常量
+### 常量
 
 下面的常量用来配置 `Pin` 对象。  
 
-### 选择引脚模式:
-#### **Pin.IN**
-#### **Pin.OUT**
-#### **Pin.OPEN_DRAIN**
+#### 选择引脚模式:
+##### **Pin.IN**
+##### **Pin.OUT**
+##### **Pin.OPEN_DRAIN**
 
-### 选择上/下拉模式:
-#### **Pin.PULL_UP**
-#### **Pin.PULL_DOWN**
-#### **None**  
+#### 选择上/下拉模式:
+##### **Pin.PULL_UP**
+##### **Pin.PULL_DOWN**
+##### **None**  
 使用值 `None` 代表不进行上下拉。
 
-## 示例
+### 示例
 
 ```
 >>> from machine import Pin

+ 24 - 25
docs/04-Hardware_Control_Module/03-machine-I2C.md

@@ -1,17 +1,16 @@
-# machine.I2C  
+## machine.I2C
 
-!!! abstract "简介"
-     **machine.I2C** 类是 `machine` 模块下面的一个硬件类,用于对 `I2C` 的配置和控制,提供对 `I2C` 设备的操作方法。
+**machine.I2C** 类是 `machine` 模块下面的一个硬件类,用于对 `I2C` 的配置和控制,提供对 `I2C` 设备的操作方法。
 
 - `I2C` 是一种用于设备间通信的两线协议。在物理层上,它由两根线组成:`SCL`  和 `SDA` ,即时钟和数据线。
 - `I2C` 对象被创建到一个特定的总线上,它们可以在创建时被初始化,也可以之后再来初始化。
 - 打印 `I2C` 对象会打印出配置时的信息。
 
-## 构造函数
+### 构造函数
 
 在 RT-Thread MicroPython 中 `I2C` 对象的构造函数如下:
 
-### **class machine.I2C**(id= -1,  scl, sda, freq=400000)
+#### **class machine.I2C**(id= -1,  scl, sda, freq=400000)
 使用下面的参数构造并返回一个新的 `I2C` 对象:
 
 - **id** :标识特定的 `I2C`  外设。如果填入 id = -1,即选择软件模拟的方式实现 `I2C`,这时可以使用任意引脚来模拟 `I2C` 总线 ,这样在初始化时就必须指定 `scl` 和 `sda` 。  
@@ -22,63 +21,63 @@
 - **sda** : 应该是一个 `Pin` 对象,指定为一个用于 `sda` 的 `Pin` 对象。
 - **freq** :应该是为 `scl` 设置的最大频率。
 
-## 方法
+### 方法
 
-### **I2C.init**(scl, sda, freq=400000)
+#### **I2C.init**(scl, sda, freq=400000)
 初始化 `I2C` 总线,参数介绍可以参考构造函数中的参数。
 
-### **I2C.deinit**()
+#### **I2C.deinit**()
 关闭 `I2C` 总线。
 
-### **I2C.scan**()
+#### **I2C.scan**()
 扫描所有 0x08 和 0x77 之间的 `I2C` 地址,然后返回一个有响应地址的列表。如果一个设备在总线上收到了他的地址,就会通过拉低 `SDA` 的方式来响应。
 
-## I2C 基础方法
+### I2C 基础方法
 下面的方法实现了基本的 `I2C` 总线操作,可以组合成任何的 `I2C` 通信操作,如果需要对总线进行更多的控制,可以可以使用他们,否则可以使用后面介绍的标准使用方法。
 
-### **I2C.start**()
+#### **I2C.start**()
 在总线上产生一个启动信号。(`SCL` 为高时,`SDA` 转换为低)
 
-### **I2C.stop**()
+#### **I2C.stop**()
 在总线上产生一个停止信号。(`SCL` 为高时,`SDA` 转换为高)
 
-### **I2C.readinto**(buf, nack=True)
+#### **I2C.readinto**(buf, nack=True)
 从总线上读取字节并将他们存储到 `buf` 中,读取的字节数时 `buf` 的长度。在收到最后一个字节以外的所有内容后,将在总线上发送 `ACK`。在收到最后一个字节之后,如果 `NACK` 是正确的,那么就会发送一个 `NACK`,否则将会发送 `ACK`。
 
-###  **I2C.write**(buf)
+####  **I2C.write**(buf)
 将 `buf` 中的数据接入到总线,检查每个字节之后是否收到 `ACK`,并在收到 `NACK` 时停止传输剩余的字节。这个函数返回接收到的 `ACK` 的数量。
 
-## I2C 标准总线操作
+### I2C 标准总线操作
 下面的方法实现了标准 `I2C` 主设备对一个给定从设备的读写操作。
 
-### **I2C.readfrom**(addr, nbytes, stop=True)
+#### **I2C.readfrom**(addr, nbytes, stop=True)
 从 `addr` 指定的从设备中读取 n 个字节,如果 `stop = True`,那么在传输结束时会产生一个停止信号。函数会返回一个存储着读到数据的字节对象。
 
-### **I2C.readfrom_into**(addr, buf, stop=True)
+#### **I2C.readfrom_into**(addr, buf, stop=True)
 从 `addr` 指定的从设备中读取数据存储到 `buf` 中,读取的字节数将是 `buf` 的长度,如果 `stop = True`,那么在传输结束时会产生一个停止信号。  
 这个方法没有返回值。
 
-### **I2C.writeto**(addr, buf, stop=True)
+#### **I2C.writeto**(addr, buf, stop=True)
 将 `buf` 中的数据写入到 `addr` 指定的的从设备中,如果在写的过程中收到了 `NACK` 信号,那么就不会发送剩余的字节。如果 `stop = True`,那么在传输结束时会产生一个停止信号,即使收到一个 `NACK`。这个函数返回接收到的 `ACK` 的数量。
 
-## 内存操作
+### 内存操作
 
 一些 `I2C` 设备充当一个内存设备,可以读取和写入。在这种情况下,有两个与 `I2C` 相关的地址,从机地址和内存地址。下面的方法是与这些设备进行通信的便利函数。
 
-### **I2C.readfrom_mem**(addr, memaddr, nbytes, *, addrsize=8)
+#### **I2C.readfrom_mem**(addr, memaddr, nbytes, *, addrsize=8)
 从 `addr` 指定的从设备中 `memaddr` 地址开始读取 n 个字节。`addrsize` 参数指定地址的长度。返回一个存储读取数据的字节对象。
 
-### **I2C.readfrom_mem_into**(addr, memaddr, buf, *, addrsize=8)
+#### **I2C.readfrom_mem_into**(addr, memaddr, buf, *, addrsize=8)
 从 `addr` 指定的从设备中 `memaddr` 地址读取数据到 `buf` 中,,读取的字节数是 `buf` 的长度。  
 这个方法没有返回值。
 
-### **I2C.writeto_mem**(addr, memaddr, buf, *, addrsize=8)
+#### **I2C.writeto_mem**(addr, memaddr, buf, *, addrsize=8)
 将 `buf` 里的数据写入 `addr` 指定的从机的 `memaddr` 地址中。 
 这个方法没有返回值。
 
-## 示例
+### 示例
 
-### `软件模拟 I2C `
+#### `软件模拟 I2C `
 ```
 >>> from machine import Pin, I2C
 >>> clk = Pin(("clk", 43), Pin.OUT_OD)   # Select the 43 pin device as the clock
@@ -96,7 +95,7 @@ b'\x12'                               # starting at memory-address 8 in the slav
                                       # starting at address 2 in the slave
 ```
 
-### `硬件 I2C `
+#### `硬件 I2C `
 
 需要先开启 `I2C` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。  
 在构造函数的第一个参数传入 `0`,系统就会搜索名为 `i2c0` 的设备,找到之后使用这个设备来构建 `I2C` 对象:

+ 18 - 19
docs/04-Hardware_Control_Module/04-machine-SPI.md

@@ -1,16 +1,15 @@
-# machine.SPI
+## machine.SPI
 
-!!! abstract "简介"
-    **machine.SPI** 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。
+**machine.SPI** 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。
 
 - `SPI` 是一个由主机驱动的同步串行协议。在物理层,总线有三根:`SCK`、`MOSI`、`MISO`。多个设备可以共享同一总线,每个设备都由一个单独的信号 `SS` 来选中,也称片选信号。
 - 主机通过片选信号选定一个设备进行通信。`SS` 信号的管理应该由用户代码负责。(通过 [machine.Pin](02-machine-Pin.md))
 
-## 构造函数
+### 构造函数
 
 在 RT-Thread MicroPython 中 `SPI` 对象的构造函数如下:
 
-### **class machine.SPI**(id, ...)
+#### **class machine.SPI**(id, ...)
 在给定总线上构造一个 `SPI` 对象,`id` 取决于特定的移植。
 
 如果想要使用软件 `SPI` , 即使用引脚模拟 `SPI` 总线,那么初始化的第一个参数需要设置为 `-1` ,可参考 [软件 SPI 示例](#spi) 。
@@ -19,9 +18,9 @@
 
 如果没有额外的参数,`SPI` 对象会被创建,但是不会被初始化,如果给出额外的参数,那么总线将被初始化,初始化参数可以参考下面的 `SPI.init` 方法。
 
-## 方法
+### 方法
 
-### **SPI.init**(baudrate=1000000, *, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None)
+#### **SPI.init**(baudrate=1000000, *, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None)
 
 用给定的参数初始化`SPI`总线:
 
@@ -34,36 +33,36 @@
 - **mosi** :用于 `mosi` 的 `machine.Pin` 对象。
 - **miso** :用于`miso` 的 `machine.Pin` 对象。
 
-### **SPI.deinit**()
+#### **SPI.deinit**()
 关闭 `SPI` 总线。
 
-### **SPI.read**(nbytes, write=0x00)
+#### **SPI.read**(nbytes, write=0x00)
 读出 n 字节的同时不断的写入 `write` 给定的单字节。返回一个存放着读出数据的字节对象。
 
-### **SPI.readinto**(buf, write=0x00)
+#### **SPI.readinto**(buf, write=0x00)
 读出 n 字节到 `buf` 的同时不断地写入 `write` 给定的单字节。  
 这个方法返回读入的字节数。
 
-### **SPI.write**(buf)
+#### **SPI.write**(buf)
 写入 `buf` 中包含的字节。返回`None`。
 
-### **SPI.write_readinto**(write_buf, read_buf)
+#### **SPI.write_readinto**(write_buf, read_buf)
 在读出数据到 `readbuf` 时,从 `writebuf` 中写入数据。缓冲区可以是相同的或不同,但是两个缓冲区必须具有相同的长度。返回 `None`。
 
-## 常量
+### 常量
 
-### **SPI.MASTER**
+#### **SPI.MASTER**
 用于初始化 `SPI` 总线为主机。
 
-### **SPI.MSB**
+#### **SPI.MSB**
 设置从高位开始传输数据。
 
-### **SPI.LSB**
+#### **SPI.LSB**
 设置从低位开始传输数据。
 
-## 示例
+### 示例
 
-### `软件模拟 SPI `
+#### `软件模拟 SPI `
 ```
 >>> from machine import Pin, SPI
 >>> clk = Pin(("clk", 43), Pin.OUT_PP)
@@ -77,7 +76,7 @@ SoftSPI(baudrate=500000, polarity=0, phase=0, sck=clk, mosi=mosi, miso=miso)
 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
 ```
 
-### `硬件 SPI `
+#### `硬件 SPI `
 
 需要先开启 `SPI` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。  
 在构造函数的第一个参数传入 `50`,系统就会搜索名为 `spi50` 的设备,找到之后使用这个设备来构建 `SPI` 对象:

+ 12 - 13
docs/04-Hardware_Control_Module/05-machine-UART.md

@@ -1,49 +1,48 @@
-# machine.UART 
+## machine.UART
 
-!!! abstract "简介"
-    **machine.UART** 类是 machine 模块下面的一个硬件类,用于对 UART 的配置和控制,提供对 UART 设备的操作方法。
+**machine.UART** 类是 machine 模块下面的一个硬件类,用于对 UART 的配置和控制,提供对 UART 设备的操作方法。
 
 `UART` 实现了标准的 `uart/usart` 双工串行通信协议,在物理层上,他由两根数据线组成:`RX` 和 `TX`。通信单元是一个字符,它可以是 8 或 9 位宽。
 
-## 构造函数
+### 构造函数
 
 在 RT-Thread MicroPython 中 `UART` 对象的构造函数如下:
 
-### **class machine.UART**(id, ...)
+#### **class machine.UART**(id, ...)
 在给定总线上构造一个 `UART` 对象,`id` 取决于特定的移植。  
 初始化参数可以参考下面的 `UART.init` 方法。 
 
 使用硬件 UART 在初始化时只需传入 `UART` 设备的编号即可,如传入 `1` 表示 `uart1` 设备。   
 初始化方式可参考 [示例](#_3)。
 
-## 方法
+### 方法
 
-### **UART.init**(baudrate = 9600, bits=8, parity=None, stop=1)
+#### **UART.init**(baudrate = 9600, bits=8, parity=None, stop=1)
 - **baudrate** :`SCK` 时钟频率。
 - **bits** :每次发送数据的长度。
 - **parity** :校验方式。
 - **stop** :停止位的长度。
 
-### **UART.deinit**()
+#### **UART.deinit**()
 关闭串口总线。
 
-### **UART.read**([nbytes])
+#### **UART.read**([nbytes])
 读取字符,如果指定读 n 个字节,那么最多读取 n 个字节,否则就会读取尽可能多的数据。
 返回值:一个包含读入数据的字节对象。如果如果超时则返回 `None`。
 
-### **UART.readinto**(buf[, nbytes])
+#### **UART.readinto**(buf[, nbytes])
 读取字符到 `buf` 中,如果指定读 n 个字节,那么最多读取 n 个字节,否则就读取尽可能多的数据。另外读取数据的长度不超过 `buf` 的长度。
 返回值:读取和存储到 `buf` 中的字节数。如果超时则返回 `None`。
 
-### **UART.readline**()
+#### **UART.readline**()
 读一行数据,以换行符结尾。
 返回值:读入的行数,如果超时则返回 `None`。
 
-### **UART.write**(buf)
+#### **UART.write**(buf)
 将 `buf` 中的数据写入总线。
 返回值:写入的字节数,如果超时则返回 `None`。
 
-## 示例
+### 示例
 
 在构造函数的第一个参数传入`1`,系统就会搜索名为 `uart1` 的设备,找到之后使用这个设备来构建 `UART` 对象:
 

+ 13 - 16
docs/05-System_Module/01-uos.md

@@ -1,38 +1,37 @@
-# **uos** – 基本的"操作系统"服务
+## **uos** – 基本的"操作系统"服务
 
-!!! abstract "简介"
-    `uos` 模块包含了对文件系统的访问操作,是对应 CPython 模块的一个子集。
+`uos` 模块包含了对文件系统的访问操作,是对应 CPython 模块的一个子集。
 
-## 函数
+### 函数
 
-### **uos.chdir**(path)  
+#### **uos.chdir**(path)  
 更改当前目录。
 
-### **uos.getcwd**()  
+#### **uos.getcwd**()  
 获取当前目录。
 
-### **uos.listdir**([dir])
+#### **uos.listdir**([dir])
 没有参数就列出当前目录,否则列出给定目录。
 
-### **uos.mkdir**(path)  
+#### **uos.mkdir**(path)  
 创建一个目录。
 
-### **uos.remove**(path)  
+#### **uos.remove**(path)  
 删除文件。
 
-### **uos.rmdir**(path)  
+#### **uos.rmdir**(path)  
 删除目录。
 
-### **uos.rename**(old_path, new_path)  
+#### **uos.rename**(old_path, new_path)  
 重命名文件或者文件夹。
 
-### **uos.stat**(path)  
+#### **uos.stat**(path)  
 获取文件或目录的状态。
 
-### **uos.sync**()  
+#### **uos.sync**()  
 同步所有的文件系统。
 
-## 示例
+### 示例
 
 ```
 >>> import uos
@@ -55,5 +54,3 @@ stat            unlink          mount           umount
 ```
 
 更多内容可参考 [uos](http://docs.micropython.org/en/latest/pyboard/library/uos.html) 。
-
-----------

+ 16 - 18
docs/05-System_Module/02-uselect.md

@@ -1,20 +1,20 @@
-# **uselect** – 等待流事件
-!!! abstract "简介"
-    `uselect` 模块提供了等待数据流的事件功能。
+## **uselect** – 等待流事件
 
-## 常数
+`uselect` 模块提供了等待数据流的事件功能。
 
-### **select.POLLIN** - 读取可用数据  
+### 常数
 
-### **select.POLLOUT** - 写入更多数据  
+#### **select.POLLIN** - 读取可用数据  
 
-### **select.POLLERR** - 发生错误  
+#### **select.POLLOUT** - 写入更多数据  
 
-### **select.POLLHUP** - 流结束/连接终止检测  
+#### **select.POLLERR** - 发生错误  
 
-## 函数
+#### **select.POLLHUP** - 流结束/连接终止检测  
 
-### **select.select**(rlist, wlist, xlist[, timeout])  
+### 函数
+
+#### **select.select**(rlist, wlist, xlist[, timeout])  
 监控对象何时可读或可写,一旦监控的对象状态改变,返回结果(阻塞线程)。这个函数是为了兼容,效率不高,推荐用 `poll` 函数 。
 
 ```
@@ -38,9 +38,9 @@ def selectTest():
       print('received:',data,'from',addr)
 ```
 
-## Poll 类
+### Poll 类
 
-### **select.poll**()  
+#### **select.poll**()  
 创建 poll 实例。
 
 示例:
@@ -51,7 +51,7 @@ def selectTest():
 <poll>
 ```
 
-### **poll.register**(obj[, eventmask])  
+#### **poll.register**(obj[, eventmask])  
 注册一个用以监控的对象,并设置被监控对象的监控标志位 flag。 
 
 ```
@@ -63,7 +63,7 @@ flag:被监控的标志
     select.POLLOUT — 可写
 ```
 
-### **poll.unregister**(obj)  
+#### **poll.unregister**(obj)  
 解除监控的对象的注册。 
 
 ```
@@ -79,7 +79,7 @@ obj:注册过的对象
 >>>poller.unregister(s)
 ```
 
-### **poll.modify**(obj, eventmask)  
+#### **poll.modify**(obj, eventmask)  
 修改已注册的对象监控标志。 
 
 ```
@@ -96,9 +96,7 @@ flag:修改为的监控标志
 >>>poller.modify(s, READ_ONLY)
 ```
 
-### **poll.poll**([timeout])  
+#### **poll.poll**([timeout])  
 等待至少一个已注册的对象准备就绪。返回 (obj, event, ...) 元组, event 元素指定了一个流发生的事件,是上面所描述的 `select.POLL*`常量组合。 根据平台和版本的不同,在元组中可能有其他元素,所以不要假定元组的大小是 2 。如果超时,则返回空列表。
 
 更多内容可参考 [uselect](http://docs.micropython.org/en/latest/pyboard/library/uselect.html) 。
-
-----------

+ 10 - 13
docs/05-System_Module/03-uctypes.md

@@ -1,17 +1,16 @@
-# **uctypes** – 以结构化的方式访问二进制数据
+## **uctypes** – 以结构化的方式访问二进制数据
 
-!!! abstract "简介"   
-    uctypes 模块用来访问二进制数据结构,它提供 C 兼容的数据类型。 
+uctypes 模块用来访问二进制数据结构,它提供 C 兼容的数据类型。
 
-## 常量
+### 常量
 - uctypes.LITTLE_ENDIAN — 小端压缩结构。
 - uctypes.BIG_ENDIAN — 大端压缩结构类型。
 - NATIVE —  mricopython 本地的存储类型
 
 
-## 构造函数
+### 构造函数
 
-### class uctypes.struct(addr, descriptor, type)
+#### class uctypes.struct(addr, descriptor, type)
 将内存中以 c 形式打包的结构体或联合体转换为字典,并返回该字典。
 ```
 addr:开始转换的地址
@@ -36,9 +35,9 @@ type:c 结构体或联合体存储类型,默认为本地存储类型
 b'1123'
 ```
 
-## 方法
+### 方法
 
-### **uctypes.sizeof**(struct)  
+#### **uctypes.sizeof**(struct)  
 按字节返回数据的大小。参数可以是类或者数据对象 (或集合)。 
 示例:
 ```python
@@ -50,7 +49,7 @@ b'1123'
 3
 ```
 
-### **uctypes.addressof**(obj)  
+#### **uctypes.addressof**(obj)  
 返回对象地址。参数需要是 bytes, bytearray 。 
 示例:
 
@@ -60,7 +59,7 @@ b'1123'
 1073504048
 ```
 
-### **uctypes.bytes_at**(addr, size)  
+#### **uctypes.bytes_at**(addr, size)  
 捕捉从 addr 开始到 size 个地址偏移量结束的内存数据为 bytearray 对象并返回。 
 示例:
 
@@ -70,7 +69,7 @@ b'1123'
 b'0123'
 ```
 
-### **uctypes.bytearray_at**(addr, size)  
+#### **uctypes.bytearray_at**(addr, size)  
 捕捉给定大小和地址内存为 bytearray 对象。与 bytes_at() 函数不同的是,它可以被再次写入,可以访问给定地址的参数。 
 示例:
 
@@ -81,5 +80,3 @@ bytearray(b'01')
 ```
 
 更多内容可参考 [uctypes](http://docs.micropython.org/en/latest/pyboard/library/uctypes.html) 。
-
-----------

+ 5 - 7
docs/05-System_Module/04-uerrno.md

@@ -1,11 +1,10 @@
-# **uerrno** – 系统错误码模块
+## **uerrno** – 系统错误码模块
 
-!!! abstract "简介"
-    `uerrno` 模块提供了标准的 errno 系统符号,每个符号都有对应的整数值。
+`uerrno` 模块提供了标准的 errno 系统符号,每个符号都有对应的整数值。
 
-## 示例
+### 示例
 
-```
+```python
 try:
     uos.mkdir("my_dir")
 except OSError as exc:
@@ -17,6 +16,5 @@ Dictionary mapping numeric error codes to strings with symbolic error code (see
 >>> print(uerrno.errorcode[uerrno.EEXIST])
 EEXIST
 ```
-更多内容可参考 [uerrno](http://docs.micropython.org/en/latest/pyboard/library/uerrno.html) 。
 
-----------
+更多内容可参考 [uerrno](http://docs.micropython.org/en/latest/pyboard/library/uerrno.html) 。

+ 11 - 12
docs/05-System_Module/05-_thread.md

@@ -1,8 +1,8 @@
-# **_thread** – 多线程支持
-!!! abstract "简介"
-    `_thread` 模块提供了用于处理多线程的基本方法——多个控制线程共享它们的全局数据空间。为了实现同步,提供了简单的锁(也称为互斥锁或二进制信号量)。
+## **_thread** – 多线程支持
 
-## 示例
+`_thread` 模块提供了用于处理多线程的基本方法——多个控制线程共享它们的全局数据空间。为了实现同步,提供了简单的锁(也称为互斥锁或二进制信号量)。
+
+### 示例
 
 ```python
 import _thread
@@ -16,14 +16,13 @@ _thread.start_new_thread(testThread, ())
 while True:
     pass
 ```
-输出结果(启动新的线程,每隔两秒打印字符): 
 
-Hello from thread  
-Hello from thread  
-Hello from thread  
-Hello from thread  
-Hello from thread  
+输出结果(启动新的线程,每隔两秒打印字符):
 
-更多内容可参考 [_thread](http://docs.micropython.org/en/latest/pyboard/library/_thread.html)  。
+Hello from thread
+Hello from thread
+Hello from thread
+Hello from thread
+Hello from thread
 
-----------
+更多内容可参考 [_thread](http://docs.micropython.org/en/latest/pyboard/library/_thread.html)  。

+ 16 - 18
docs/06-Tools_Module/01-cmath.md

@@ -1,44 +1,42 @@
-# **cmath** – 复数的数学函数
-!!! abstract "简介"
-    `cmath` 模块提供了对复数的数学函数的访问。这个模块中的函数接受整数、浮点数或复数作为参数。他们还将接受任何有复数或浮点方法的 Python 对象:这些方法分别用于将对象转换成复数或浮点数,然后将该函数应用到转换的结果中。
+## **cmath** – 复数的数学函数
 
-## 函数
+`cmath` 模块提供了对复数的数学函数的访问。这个模块中的函数接受整数、浮点数或复数作为参数。他们还将接受任何有复数或浮点方法的 Python 对象:这些方法分别用于将对象转换成复数或浮点数,然后将该函数应用到转换的结果中。
 
-### **cmath.cos**(z)  
+### 函数
+
+#### **cmath.cos**(z)  
 返回``z``的余弦。
 
-### **cmath.exp**(z)  
+#### **cmath.exp**(z)  
 返回``z``的指数。
 
-### **cmath.log**(z)  
+#### **cmath.log**(z)  
 返回``z``的对数。
 
-### **cmath.log10**(z)  
+#### **cmath.log10**(z)  
 返回``z``的常用对数。
 
-### **cmath.phase**(z)  
+#### **cmath.phase**(z)  
 返回``z``的相位, 范围是(-pi, +pi],以弧度表示。
 
-### **cmath.polar**(z)  
+#### **cmath.polar**(z)  
 返回``z``的极坐标。
 
-### **cmath.rect**(r, phi)  
+#### **cmath.rect**(r, phi)  
 返回`模量r`和相位``phi``的复数。
 
-### **cmath.sin**(z)  
+#### **cmath.sin**(z)  
 返回``z``的正弦。
 
-### **cmath.sqrt**(z)  
+#### **cmath.sqrt**(z)  
 返回``z``的平方根。
 
-## 常数
+### 常数
 
-### **cmath.e**  
+#### **cmath.e**  
 自然对数的指数。
 
-### **cmath.pi**  
+#### **cmath.pi**  
 圆周率。
 
 更多内容可参考 [cmath](http://docs.micropython.org/en/latest/pyboard/library/cmath.html)  。
-
-----------

+ 8 - 10
docs/06-Tools_Module/02-ubinascii.md

@@ -1,10 +1,10 @@
-# **ubinascii** – 二进制/ ASCII转换
-!!! abstract "简介"
-    `ubinascii` 模块包含许多在二进制和各种 ascii 编码的二进制表示之间转换的方法。
+## **ubinascii** – 二进制/ ASCII转换
 
-## 函数
+`ubinascii` 模块包含许多在二进制和各种 ascii 编码的二进制表示之间转换的方法。
 
-### **ubinascii.hexlify**(data[, sep])  
+### 函数
+
+#### **ubinascii.hexlify**(data[, sep])  
 将字符串转换为十六进制表示的字符串。 
 
 示例:
@@ -28,7 +28,7 @@ b'68 65 6c 6c 6f 20 52 54 2d 54 68 72 65 61 64'
 b'68,65,6c,6c,6f,20,52,54,2d,54,68,72,65,61,64'
 ```
 
-### **ubinascii.unhexlify**(data)  
+#### **ubinascii.unhexlify**(data)  
 转换十六进制字符串为二进制字符串,功能和 hexlify 相反。 
 
 示例:
@@ -38,12 +38,10 @@ b'68,65,6c,6c,6f,20,52,54,2d,54,68,72,65,61,64'
 b'summer'
 ```
 
-### **ubinascii.a2b_base64**(data)  
+#### **ubinascii.a2b_base64**(data)  
 Base64编码的数据转换为二进制表示。返回字节串。
 
-### **ubinascii.b2a_base64**(data)  
+#### **ubinascii.b2a_base64**(data)  
 编码base64格式的二进制数据。返回的字符串。
 
 更多内容可参考 [ubinascii](http://docs.micropython.org/en/latest/pyboard/library/ubinascii.html)  。
-
-----------

+ 14 - 16
docs/06-Tools_Module/03-uhashlib.md

@@ -1,38 +1,36 @@
-# **uhashlib** – 哈希算法
-!!! abstract "简介"
-    `uhashlib` 模块实现了二进制数据哈希算法。
+## **uhashlib** – 哈希算法
 
-## 算法功能
+`uhashlib` 模块实现了二进制数据哈希算法。
 
-### **SHA256** 
+### 算法功能
+
+#### **SHA256** 
 当代的散列算法(SHA2系列),它适用于密码安全的目的。被包含在 MicroPython 内核中,除非有特定的代码大小限制,否则推荐任何开发板都支持这个功能。
 
-### **SHA1**
+#### **SHA1**
 上一代的算法,不推荐新的应用使用这种算法,但是 SHA1 算法是互联网标准和现有应用程序的一部分,所以针对网络连接便利的开发板会提供这种功能。
 
-### **MD5** 
+#### **MD5** 
 一种遗留下来的算法,作为密码使用被认为是不安全的。只有特定的开发板,为了兼容老的应用才会提供这种算法。
 
-## 函数
+### 函数
 
-### **class uhashlib.sha256**([data])  
+#### **class uhashlib.sha256**([data])  
 创建一个SHA256哈希对象并提供 data 赋值。
 
-### **class uhashlib.sha1**([data])  
+#### **class uhashlib.sha1**([data])  
 创建一个SHA1哈希对象并提供 data 赋值。
 
-### **class uhashlib.md5**([data])  
+#### **class uhashlib.md5**([data])  
 创建一个MD5哈希对象并提供 data 赋值。
 
-### **hash.update**(data)  
+#### **hash.update**(data)  
 将更多二进制数据放入哈希表中。
 
-### **hash.digest**()  
+#### **hash.digest**()  
 返回字节对象哈希的所有数据。调用此方法后,将无法将更多数据送入哈希。
 
-### **hash.hexdigest**()  
+#### **hash.hexdigest**()  
 此方法没有实现, 使用 ubinascii.hexlify(hash.digest()) 达到类似效果。
 
 更多内容可参考 [uhashlib](http://docs.micropython.org/en/latest/pyboard/library/uhashlib.html)  。
-
-----------

+ 6 - 9
docs/06-Tools_Module/04-uheapq.md

@@ -1,19 +1,16 @@
-# **uheapq** – 堆排序算法
+## **uheapq** – 堆排序算法
 
-!!! abstract "简介"
-    `uheapq` 模块提供了堆排序相关算法,堆队列是一个列表,它的元素以特定的方式存储。
+`uheapq` 模块提供了堆排序相关算法,堆队列是一个列表,它的元素以特定的方式存储。
 
-## 函数
+### 函数
 
-### **uheapq.heappush**(heap, item)  
+#### **uheapq.heappush**(heap, item)  
 将对象压入堆中。
 
-### **uheapq.heappop**(heap)  
+#### **uheapq.heappop**(heap)  
 从 heap 弹出第一个元素并返回。 如果是堆时空的会抛出 IndexError。
 
-### **uheapq.heapify**(x)  
+#### **uheapq.heapify**(x)  
 将列表 x 转换成堆。
 
 更多内容可参考 [uheapq](http://docs.micropython.org/en/latest/pyboard/library/uheapq.html)  。
-
-----------

+ 6 - 8
docs/06-Tools_Module/05-ujson.md

@@ -1,10 +1,10 @@
-# **ujson** – JSON编码与解码
-!!! abstract "简介"
-    `ujson` 模块提供 Python 对象到 JSON(JavaScript Object Notation) 数据格式的转换。
+## **ujson** – JSON编码与解码
 
-## 函数
+`ujson` 模块提供 Python 对象到 JSON(JavaScript Object Notation) 数据格式的转换。
 
-### **ujson.dumps**(obj)  
+### 函数
+
+#### **ujson.dumps**(obj)  
 
 将 dict 类型转换成 str。
 
@@ -23,7 +23,7 @@ obj:要转换的对象
 <class 'str'> {3: 4, 1: 2, "a": 6}
 ```
 
-### **ujson.loads**(str)  
+#### **ujson.loads**(str)  
 解析 JSON 字符串并返回对象。如果字符串格式错误将引发 ValueError 异常。 
 示例:
 
@@ -40,5 +40,3 @@ obj:要转换的对象
 ```
 
 更多内容可参考 [ujson](http://docs.micropython.org/en/latest/pyboard/library/ujson.html)  。
-
-----------

+ 18 - 20
docs/06-Tools_Module/06-ure.md

@@ -1,17 +1,17 @@
-# **ure** – 正则表达式
-!!! abstract "简介"
-    `ure` 模块用于测试字符串的某个模式,执行正则表达式操作。
+## **ure** – 正则表达式
 
-## 匹配字符集
+`ure` 模块用于测试字符串的某个模式,执行正则表达式操作。
 
+### 匹配字符集
 
-### 匹配任意字符
+
+#### 匹配任意字符
   ``'.'``
 
-### 匹配字符集合,支持单个字符和一个范围
+#### 匹配字符集合,支持单个字符和一个范围
   ``'[]'``
 
-### 支持多种匹配元字符
+#### 支持多种匹配元字符
   ``'^'``
   ``'$'``
   ``'?'``
@@ -22,33 +22,31 @@
   ``'+?'``
   ``'{m,n}'``
 
-## 函数
+### 函数
 
-### **ure.compile**(regex)  
+#### **ure.compile**(regex)  
 编译正则表达式,返回 regex 对象。
 
-### **ure.match**(regex, string)  
+#### **ure.match**(regex, string)  
 用 string 匹配 regex,匹配总是从字符串的开始匹配。
 
-### **ure.search**(regex, string)  
+#### **ure.search**(regex, string)  
 在 string 中搜索 regex。不同于匹配,它搜索第一个匹配位置的正则表达式字符串 (结果可能会是0)。
 
-### **ure.DEBUG**  
+#### **ure.DEBUG**  
 标志值,显示表达式的调试信息。
 
-## **正则表达式对象**:
+### **正则表达式对象**:
 编译正则表达式,使用 `ure.compile()` 创建实例。
 
-### **regex.match**(string)  
-### **regex.search**(string)  
-### **regex.split**(string, max_split=-1)  
+#### **regex.match**(string)  
+#### **regex.search**(string)  
+#### **regex.split**(string, max_split=-1)  
 
-## **匹配对象** :
+### **匹配对象** :
 匹配对象是 match() 和 search() 方法的返回值。
 
-### **match.group**([index])  
+#### **match.group**([index])  
 只支持数字组。
 
 更多内容可参考 [ure](http://docs.micropython.org/en/latest/pyboard/library/ure.html)  。
-
-----------

+ 4 - 8
docs/06-Tools_Module/07-uzlib.md

@@ -1,14 +1,10 @@
-# **uzlib** – zlib 解压缩
+## **uzlib** – zlib 解压缩
 
-!!! abstract "简介"
-    `uzlib` 模块实现了使用 DEFLATE 算法解压缩二进制数据 (常用的 zlib 库和 gzip 文档)。目前不支持压缩。
+`uzlib` 模块实现了使用 DEFLATE 算法解压缩二进制数据 (常用的 zlib 库和 gzip 文档)。目前不支持压缩。
 
-## 函数
+### 函数
 
-### **uzlib.decompress**(data)  
+#### **uzlib.decompress**(data)  
 返回解压后的 bytes 数据。
 
 更多内容可参考 [uzlib](http://docs.micropython.org/en/latest/pyboard/library/uzlib.html) 。
-
-----------
-

+ 11 - 13
docs/06-Tools_Module/08-urandom.md

@@ -1,10 +1,10 @@
-# **urandom** - 随机数生成模块
-!!! abstract "简介"
-    `urandom` 模块实现了伪随机数生成器。
+## **urandom** - 随机数生成模块
 
-## 函数 
+`urandom` 模块实现了伪随机数生成器。
 
-### **urandom.choice**(obj)  
+### 函数 
+
+#### **urandom.choice**(obj)  
 
 随机生成对象 obj 中的元数。
 
@@ -27,7 +27,7 @@ D
 2
 ```
 
-### **urandom.getrandbits**(size)  
+#### **urandom.getrandbits**(size)  
 
 随机生成 0 到 size 个位二进制数范围内的正整数。 比如 :
 
@@ -51,7 +51,7 @@ size:位大小
 155
 ```
 
-### **urandom.randint**(start, end)  
+#### **urandom.randint**(start, end)  
 
 随机生成一个 start 到 end 之间的整数。 
 
@@ -70,7 +70,7 @@ end:指定范围内的结束值,包含在范围内
 2
 ```
 
-### **urandom.random**()  
+#### **urandom.random**()  
 随机生成一个 0 到 1 之间的浮点数。 
 示例:
 
@@ -81,7 +81,7 @@ end:指定范围内的结束值,包含在范围内
 0.3168149
 ```
 
-### **urandom.randrange**(start, end, step)  
+#### **urandom.randrange**(start, end, step)  
 
 随机生成 start 到 end 并且递增为 step 的范围内的正整数。例如,randrange(0, 8, 2)中,随机生成的数为 0、2、4、6 中任一个。
 
@@ -102,7 +102,7 @@ step:递增基数
 2
 ```
 
-### **urandom.seed**(sed)  
+#### **urandom.seed**(sed)  
 
 指定随机数种子,通常和其他随机数生成函数搭配使用。 
 **注意:** 
@@ -153,7 +153,7 @@ end
 
    从上面可以看到生成两个随机数列表是一样的,你也可以多生成几个随机数列表查看结果。
 
-### **urandom.uniform**(start, end)  
+#### **urandom.uniform**(start, end)  
 
 随机生成start到end之间的浮点数。
 
@@ -172,5 +172,3 @@ stop:指定范围内的结束值,包含在范围内
 ```
 
 更多内容可参考 [urandom](https://docs.python.org/3/library/random.html?highlight=random#module-random) 。
-
-----------

+ 30 - 32
docs/07-Network_Module/01-usocket.md

@@ -1,32 +1,32 @@
-# **usocket** – 套接字模块
-!!! abstract "简介"
-    `usocket` 模块提供对BSD套接字接口的访问。 
+## **usocket** – 套接字模块
 
-## 常数
+`usocket` 模块提供对BSD套接字接口的访问。 
 
-### 地址簇
+### 常数
+
+#### 地址簇
 - socket.AF_INET =2 — TCP/IP – IPv4
 - socket.AF_INET6 =10 — TCP/IP – IPv6
 
-### 套接字类型
+#### 套接字类型
 - socket.SOCK_STREAM =1 — TCP流
 - socket.SOCK_DGRAM =2 — UDP数据报
 - socket.SOCK_RAW =3 — 原始套接字
 - socket.SO_REUSEADDR =4 — socket可重用
 
-### IP协议号
+#### IP协议号
 - socket.IPPROTO_TCP =16
 - socket.IPPROTO_UDP =17
 
-### 套接字选项级别
+#### 套接字选项级别
 - socket.SOL_SOCKET =4095
 
-## 函数
+### 函数
 
-### **socket.socket**(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)  
+#### **socket.socket**(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)  
 创建新的套接字,使用指定的地址、类型和协议号。
 
-### **socket.getaddrinfo**(host, port) 
+#### **socket.getaddrinfo**(host, port) 
 将主机域名(host)和端口(port)转换为用于创建套接字的5元组序列。元组列表的结构如下:
 
 ```
@@ -41,19 +41,19 @@
 [(2, 1, 0, '', ('118.31.15.152', 10000))]
 ```
 
-### **socket.close**()  
+#### **socket.close**()  
 关闭套接字。一旦关闭后,套接字所有的功能都将失效。远端将接收不到任何数据 (清理队列数据后)。 虽然在垃圾回收时套接字会自动关闭,但还是推荐在必要时用 close() 去关闭。
 
-### **socket.bind**(address)  
+#### **socket.bind**(address)  
 将套接字绑定到地址,套接字不能是已经绑定的。
 
-### **socket.listen**([backlog])  
+#### **socket.listen**([backlog])  
 监听套接字,使服务器能够接收连接。
 ```
 backlog:接受套接字的最大个数,至少为0,如果没有指定,则默认一个合理值。
 ```
 
-### **socket.accept**()  
+#### **socket.accept**()  
 接收连接请求。 
 **注意:** 
    只能在绑定地址端口号和监听后调用,返回 conn 和 address。
@@ -63,21 +63,21 @@ conn:新的套接字对象,可以用来收发消息
 address:连接到服务器的客户端地址
 ```
 
-### **socket.connect**(address)  
+#### **socket.connect**(address)  
 连接服务器。
 
 ```
 address:服务器地址和端口号的元组或列表
 ```
 
-### **socket.send**(bytes)  
+#### **socket.send**(bytes)  
 发送数据,并返回成功发送的字节数,返回字节数可能比发送的数据长度少。
 
 ```
 bytes:bytes类型数据
 ```
 
-### **socket.recv**(bufsize)  
+#### **socket.recv**(bufsize)  
 接收数据,返回接收到的数据对象。
 
 ```
@@ -90,7 +90,7 @@ bufsize:指定一次接收的最大数据量
 data = conn.recv(1024)
 ```
 
-### **socket.sendto**(bytes, address)  
+#### **socket.sendto**(bytes, address)  
 发送数据,目标由address决定,常用于UDP通信,返回发送的数据大小。
 
 ```
@@ -104,7 +104,7 @@ address:目标地址和端口号的元组
 data = sendto("hello RT-Thread", ("192.168.10.110", 100))
 ```
 
-### **socket.recvfrom**(bufsize)  
+#### **socket.recvfrom**(bufsize)  
 接收数据,常用于UDP通信,并返回接收到的数据对象和对象的地址。
 
 ```
@@ -117,7 +117,7 @@ bufsize:指定一次接收的最大数据量
 data,addr=fd.recvfrom(1024)
 ```
 
-### **socket.setsockopt**(level, optname, value)  
+#### **socket.setsockopt**(level, optname, value)  
 根据选项值设置套接字。
 
 ```
@@ -132,7 +132,7 @@ value:可以是一个整数,也可以是一个表示缓冲区的bytes类对
 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 ```
 
-### **socket.settimeout**(value)  
+#### **socket.settimeout**(value)  
 设置超时时间,单位:秒。 
 示例:
 
@@ -140,25 +140,25 @@ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 s.settimeout(2)
 ```
 
-### **socket.setblocking**(flag)  
+#### **socket.setblocking**(flag)  
 设置阻塞或非阻塞模式: 如果 flag 是 false,设置非阻塞模式。
 
-### **socket.read**([size])  
+#### **socket.read**([size])  
 Read up to size bytes from the socket. Return a bytes object. If size is not given, it reads all data available from the socket until EOF; as such the method will not return until the socket is closed. This function tries to read as much data as requested (no “short reads”). This may be not possible with non-blocking socket though, and then less data will be returned.
 
-### **socket.readinto**(buf[, nbytes])  
+#### **socket.readinto**(buf[, nbytes])  
 Read bytes into the buf. If nbytes is specified then read at most that many bytes. Otherwise, read at most len(buf) bytes. Just as read(), this method follows “no short reads” policy.
 Return value: number of bytes read and stored into buf.
 
-### **socket.readline**()  
+#### **socket.readline**()  
 接收一行数据,遇换行符结束,并返回接收数据的对象 。 
 
-### **socket.write**(buf)  
+#### **socket.write**(buf)  
 将字节类型数据写入套接字,并返回写入成功的数据大小。 
 
-## 示例
+### 示例
 
-### TCP Server example
+#### TCP Server example
 
 ```
 >>> import usocket 
@@ -172,7 +172,7 @@ b'rt-thread\r'
 >>> s.close()
 ```
 
-### TCP Client example
+#### TCP Client example
 
 ```
 >>> import usocket 
@@ -190,5 +190,3 @@ s.connect(socket.getaddrinfo('www.micropython.org', 80)[0][-1])
 ```
 
 更多的内容可参考 [usocket](http://docs.micropython.org/en/latest/pyboard/library/usocket.html) 。
-
-----------

+ 1 - 2
docs/08-Packages_Management.md

@@ -1,7 +1,6 @@
 # RT-Thread MicroPython 包管理
 
-!!! abstract "简介"  
-    MicroPython 自身不像 CPython 那样拥有广泛的标准库。但是 MicroPython 有一个相关且独立的项目 micropython-lib,它提供了来自 CPython 标准库的许多模块的实现。由于 RT-Thread 操作系统提供了很好的 `POSIX` 标准支持,所以 micropython-lib 中很多模块可以在 RT-Thread MicroPython 上直接运行。这篇文章将介绍如何利用这些扩展模块来增强 MicroPython 的功能。
+MicroPython 自身不像 CPython 那样拥有广泛的标准库。但是 MicroPython 有一个相关且独立的项目 micropython-lib,它提供了来自 CPython 标准库的许多模块的实现。由于 RT-Thread 操作系统提供了很好的 `POSIX` 标准支持,所以 micropython-lib 中很多模块可以在 RT-Thread MicroPython 上直接运行。这篇文章将介绍如何利用这些扩展模块来增强 MicroPython 的功能。
 
 ## 1. 使用 micropython-lib 源代码 
 

+ 1 - 3
docs/09-Net_Programming_Guide/01-introduction.md

@@ -1,10 +1,8 @@
 # RT-Thread MicroPython 网络编程指南
 
-!!! abstract "简介"
-    MicroPython 提供丰富的网络功能,可以加快物联网项目的开发进程,本章介绍常用的网络功能以及相关模块的使用方法。了解网络功能之后,就可以将产品轻松的接入网络,实现更多物联网功能。
+MicroPython 提供丰富的网络功能,可以加快物联网项目的开发进程,本章介绍常用的网络功能以及相关模块的使用方法。了解网络功能之后,就可以将产品轻松的接入网络,实现更多物联网功能。
 
 ## 预备知识
 
 - 在阅读本网络编程指南之前,需要先行了解 MicroPython 模块的[网络模块章节](../07-Network_Module/01-usocket.md) ,了解基本网络连接模块的使用方法。
 - 如果想要使用较为复杂的网络功能,需要在 menuconfig 中将工具模块中的模块都打开,并且必须开启网络模块中的  `usocket` 模块。
-

+ 3 - 2
docs/09-Net_Programming_Guide/02-HttpClient.md

@@ -1,5 +1,6 @@
-!!! abstract "简介"
-    本节介绍如何在 RT-Thread MicroPython 上使用 Http Client 功能,本章主要使用的模块为 `urequests` 。
+## HttpClient
+
+本节介绍如何在 RT-Thread MicroPython 上使用 Http Client 功能,本章主要使用的模块为 `urequests` 。
 
 ### 获取并安装 urequests 模块
 

+ 10 - 4
docs/09-Net_Programming_Guide/03-HttpServer.md

@@ -1,8 +1,11 @@
-!!! abstract "简介"
-    本章介绍如何使用 RT-Thread MicroPython 搭建一个 Web 服务器,需要使用到的模块为 MicroWebSrv 模块。
+## HttpServer
+
+本章介绍如何使用 RT-Thread MicroPython 搭建一个 Web 服务器,需要使用到的模块为 MicroWebSrv 模块。
+
+### 获取并安装 MicroWebSrv 模块
 
-### 获取并安装 MicroWebSrv 模块 
 - 首先从 `https://github.com/jczic/MicroWebSrv.git` 将相关文件克隆到本地。
+
 - 将 `www` 文件夹拷贝到文件系统的根目录(这里将 SD 卡作为开发板文件系统的根目录)。
 
 ![1525674983856](../figures/copy_www_dir.png)
@@ -16,7 +19,9 @@
 ### MicroWebSrv 模块的使用
 
 - 在 MSH 中,使用 ifconfig 命令查看开发板 IP 地址。
+
 - 输入 python 命令,进入 MicroPython 交互命令行。
+
 - 使用 import main 命令,启动 Web 服务器。
 
 ![1525659036361](../figures/import_start.png)
@@ -44,6 +49,7 @@
 ### 服务器功能的修改
 
 - 如果想过要通过服务器实现自己所需的功能,可以修改 main.py 文件,导入更多模块,使用 Python 语言来添加更多功能。
+
 - 在网页中展示加速度计和磁力计的例程中,下面的代码完成了这些数据的返回功能,可以参考 WebServer 的例子来对 main.py 进行修改,以达到自己想要完成的功能。
 
-![1525770559437](../figures/change_server_fuction.png)
+![1525770559437](../figures/change_server_fuction.png)

+ 9 - 2
docs/09-Net_Programming_Guide/04-MQTT.md

@@ -1,14 +1,19 @@
-!!! abstract "简介"
-    MQTT 是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 。本章介绍如何在 RT-Thread MicroPython 上使用 MQTT 功能,使用到的模块为 `umqtt.simple` 模块。
+## MQTT
+
+MQTT 是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 。本章介绍如何在 RT-Thread MicroPython 上使用 MQTT 功能,使用到的模块为 `umqtt.simple` 模块。
 
 ### 获取并安装 umqtt.simple 模块
+
 同样的可以使用包管理中的两种方式来获取,使用 upip 安装的方式可使用  `upip.install("micropython-umqtt.simple")`如图:
 
 ![1525690229174](../figures/install_umqtt_simple.png)
 
 ### umqtt.simple 模块的使用
+
 ####  MQTT 订阅功能
+
 - 使用 `iot.eclipse.org` 作为测试服务器
+
 ```python
 import time
 from umqtt.simple import MQTTClient
@@ -47,7 +52,9 @@ if __name__ == "__main__":
 ![1525665942426](../figures/sub_topic.png)
 
 ####  MQTT 发布功能
+
 - 执行下面的代码后将向 MQTT 服务器发布以 `foo_topic` 为主题的信息
+
 ```python
 from umqtt.simple import MQTTClient
 

+ 14 - 13
docs/09-Net_Programming_Guide/05-Cloud-OneNET.md

@@ -1,30 +1,31 @@
-!!! abstract "简介"
-    本节介绍如何使用 RT-Thread MicroPython 来将设备接入 OneNET 云平台,本次示例使用的接入协议为 MQTT。
+## OneNET
 
-## 准备工作
+本节介绍如何使用 RT-Thread MicroPython 来将设备接入 OneNET 云平台,本次示例使用的接入协议为 MQTT。
+
+### 准备工作
 
 - 首先需要安装 `urequests`  模块和 `umqtt.simple` 模块,安装方法参考 [HttpClient ](./02-HttpClient.md) 和 [MQTT ](./04-MQTT.md) 章节。
 - 本章实例代码在最后一节的附录中,可以在添加必要的注册信息后复制到 main.py 文件中在 MSH 中使用 python 命令来执行。
 
-## 产品创建
+### 产品创建
 
 - 想要将开发板接入 OneNET 云平台,首先要进行产品的创建,创建分为两步,第一步是注册一个用户账号,第二步是创建一个基于特定协议的产品。
 
-### 用户注册
+#### 用户注册
 
 - 为了使用 OneNET 设备云的强大功能,首先要在 OneNET 上[注册开发者账号](https://open.iot.10086.cn/doc/art436.html#104),来创建专属的“开发者中心 。
 
-### 产品创建
+#### 产品创建
 
 - 接下来需要在 OneNET 平台上[创建产品](https://open.iot.10086.cn/doc/art437.html#104)。这里要注意的是在最后选择`设备接入方式`和`设备接入协议时`,因为本次示例使用的是 MQTT 协议,所以要在设备接入方式中选择`公开协议`,设备接入协议选择 `MQTT`。
 
 ![1525764833130](../figures/choose_mqtt.png)
 
-## 硬件接入
+### 硬件接入
 
 本章节将介绍如何将设备接入到 OneNET 云平台上。并且演示一个云平台向设备发送命令,设备向云平台返回命令发送次数的示例。
 
-### 设备的注册和接入
+#### 设备的注册和接入
 
 - 成功创建设备之后,将得到的产品 ID 记录下来供后面推送数据使用。
 
@@ -46,7 +47,7 @@
 
 ![1525767167244](../figures/reg_done.png)
 
-### 云平台向设备发送命令
+#### 云平台向设备发送命令
 
 - 可以通过发送命令功能来给开发板发送几组命令。
 
@@ -58,7 +59,7 @@
 
 ![1525767520609](../figures/cmd3.png)
 
-### 设备向云平台上传数据
+#### 设备向云平台上传数据
 
 - 点击数据流管理功能来查看设备端上传的数据
 
@@ -74,13 +75,13 @@
 
 - 至此设备和 OneNET 云平台就对接好了。
 
-### 添加独立应用
+#### 添加独立应用
 
 - 为了方便使用还可以给设备[添加独立的应用](https://open.iot.10086.cn/doc/art461.html#108),效果如下图:
 
 ![1525768143233](../figures/add_app.png)
 
-## 代码讲解
+### 代码讲解
 
 - 通过修改 value 对象来修改向服务器发送的数据,这里是发送到特殊的系统 topic `$dp`
 
@@ -90,7 +91,7 @@
 
 ![1525768433046](../figures/code_review2.png)
 
-### 附录示例代码
+#### 附录示例代码
 
 ```python
 import urequests as requests

+ 2 - 5
docs/README.md

@@ -1,10 +1,7 @@
 # RT-Thread MicroPython 开发手册介绍
 
-----------
+本手册介绍了 RT-Thread MicroPython 的基础知识、常用模块,以及开发新模块的流程。带领读者了解 MicroPython ,并学会使用 MicroPython 进行开发。
 
-!!! abstract "摘要"
-     本手册介绍了 RT-Thread MicroPython 的基础知识、常用模块,以及开发新模块的流程。带领读者了解 MicroPython ,并学会使用 MicroPython 进行开发。
-     
 ## 主要特性
 
 - MicroPython 是 Python 3 编程语言的一种精简而高效的实现,它包含 Python 标准库的一个子集,并被优化为在微控制器和受限环境中运行。
@@ -54,7 +51,7 @@
     - [手机遥控车](https://www.bilibili.com/video/av15008143?from=search&seid=16285206333541196172)
     - [搭建 MQTT 服务器](http://www.360doc.com/content/17/1218/22/8473307_714341237.shtml)
 
-# MicroPython 开发资源
+## MicroPython 开发资源
 
 - [RT-Thread MicroPython 开发手册](https://www.rt-thread.org/document/site/rtthread-development-guide/micropython/docs/README/)