diff --git "a/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/README.md" "b/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/README.md" deleted file mode 100644 index f489fd0f260169a0c6da564027db708697384c31..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/README.md" +++ /dev/null @@ -1,35 +0,0 @@ -# 4:QuecPython 系统功能 - -本章主要介绍如何查询QuecPython的一些系统信息,并使用系统自带的一些常用功能,如:日志功能、文件功能等,具体可展开目录查看。 - -# 目录 - -
4:QuecPython 系统功能 - - -- [4.1:系统信息]() - - -- [4.2:日志功能]() - - -- [4.3:文件管理]() - - -- [4.4:时间功能]() - - -- [4.5:数据格式转换]() - - -- [4.6:电源管理]() - - -- [4.7:内存管理]() - - -- [4.8:多线程]() - - - 
\ No newline at end of file diff --git a/docs/Getting_started/zh/README.md b/docs/Getting_started/zh/README.md index 2505a5462eff8f7fbb1ba05a44045386213bdbef..5a6a0fa08fa421ab8ebaa360d3fecfa8697a010b 100644 --- a/docs/Getting_started/zh/README.md +++ b/docs/Getting_started/zh/README.md @@ -1,224 +1,222 @@ # 目录
- 1:基础知识 + 1: 背景知识 -- [1.1:物联网和低代码开发](./基础知识/物联网和低代码开发.md) +- [1.1: 物联网和低代码开发](./background/iot-and-low-code.md) -- [1.2:无线通信模块简介](./基础知识/无线通信模块简介.md) +- [1.2: 无线通信模块简介](./background/wireless-modules.md) -- [1.3:QuecPython 简介](./基础知识/QuecPython简介.md) +- [1.3: QuecPython 简介](./background/about-qpy.md) -- [1.4:硬件选型](./基础知识/无线通信模块简介.md) +- [1.4: 硬件选型](./background/selection-guide.md)
- 2:快速入门 + 2: 快速入门 -- [2.1:准备工作](./快速入门/准备工作.md) +- [2.1: 准备工作](./quick-start/preparation.md) -- [2.2:上电与连接](./快速入门/上电与连接.md) +- [2.2: 上电与连接](./quick-start/boot-and-connect.md) -- [2.3:固件烧录](./快速入门/固件烧录.md) +- [2.3: 固件烧录](./quick-start/burn-firmware.md) -- [2.4:QPYcom 基本操作](./快速入门/QPYcom基本操作.md) +- [2.4: QPYcom 基本操作](./quick-start/qpycom-basic.md)
- 3:microPython 语言基础 + 3: MicroPython 语言基础 -- [3.1:基本语法规则](./microPython语言基础/基本语法规则.md) +- [3.1: 基本语法规则](./mpy-syntax/rules.md) -- [3.2:变量和运算](./microPython语言基础/变量和运算.md) +- [3.2: 变量和运算](./mpy-syntax/vars-and-ops.md) -- [3.3:程序流程控制](./microPython语言基础/程序流程控制.md) +- [3.3: 程序流程控制](./mpy-syntax/flow-control.md) -- [3.4:常用容器类型](./microPython语言基础/常用容器类型.md) +- [3.4: 常用容器类型](./mpy-syntax/containers.md) -- [3.5:函数](./microPython语言基础/函数.md) +- [3.5: 函数](./mpy-syntax/functions.md)
- 4:QuecPython 系统功能 + 4: QuecPython 系统功能 -- [4.1:系统信息](./QuecPython系统功能/系统信息.md) +- [4.1: 系统信息](./os/os-info.md) -- [4.2:日志功能](./QuecPython系统功能/日志功能.md) +- [4.2: 日志功能](./os/log.md) -- [4.3:文件管理](./QuecPython系统功能/文件管理.md) +- [4.3: 文件管理](./os/files.md) -- [4.4:时间功能](./QuecPython系统功能/时间功能.md) +- [4.4: 时间功能](./os/time.md) -- [4.5:数据格式转换](./QuecPython系统功能/数据格式转换.md) +- [4.5: 数据格式转换](./os/data-formattng.md) -- [4.6:电源管理](./QuecPython系统功能/电源管理.md) +- [4.6: 电源管理](./os/power.md) -- [4.7:内存管理](./QuecPython系统功能/内存管理.md) +- [4.7: 内存管理](./os/ram.md) -- [4.8:多线程](./QuecPython系统功能/多线程.md) +- [4.8: 多线程](./os/threads.md)
- 5:QuecPython 硬件基础功能 + 5: QuecPython 硬件基础功能 -- [5.1:GPIO](./QuecPython硬件基础功能/GPIO.md) +- [5.1: GPIO](./hardware-basic/gpio.md) -- [5.2:外部中断](./QuecPython硬件基础功能/外部中断.md) +- [5.2: 外部中断](./hardware-basic/extint.md) -- [5.3:串口](./QuecPython硬件基础功能/串口.md) +- [5.3: 串口](./hardware-basic/uart.md) -- [5.4:I2C](./QuecPython硬件基础功能/I2C.md) +- [5.4: I2C](./hardware-basic/i2c.md) -- [5.5:SPI](./QuecPython硬件基础功能/SPI.md) +- [5.5: SPI](./hardware-basic/spi.md) -- [5.6:ADC](./QuecPython硬件基础功能/ADC.md) +- [5.6: ADC](./hardware-basic/adc.md) -- [5.7:Timer](./QuecPython硬件基础功能/Timer.md) +- [5.7: Timer](./hardware-basic/timer.md) -- [5.8:PWM](./QuecPython硬件基础功能/PWM.md) +- [5.8: PWM](./hardware-basic/pwm.md) -- [5.9:看门狗](./QuecPython硬件基础功能/看门狗.md) +- [5.9: 看门狗](./hardware-basic/wdt.md)
- 6:QuecPython 物联网基础功能 + 6: QuecPython 物联网基础功能 -- [6.1:天线、SIM 卡和网络注册](./QuecPython物联网基础功能/天线SIM卡和网络注册.md) +- [6.1: 天线、SIM 卡和网络注册](./iot-basic/preparation.md) -- [6.2:TCP 与 UDP 通信](./QuecPython物联网基础功能/TCP与UDP通信.md) +- [6.2: TCP 与 UDP 通信](./iot-basic/tcp-and-udp.md) -- [6.3:HTTP 通信](./QuecPython物联网基础功能/HTTP通信.md) +- [6.3: HTTP 通信](./iot-basic/http.md) -- [6.4:MQTT 通信](./QuecPython物联网基础功能/MQTT通信.md) +- [6.4: MQTT 通信](./iot-basic/mqtt.md) -- [6.5:SNMP 通信](./QuecPython物联网基础功能/SNMP通信.md) +- [6.5: WebSocket 通信](./iot-basic/websocket.md) -- [6.6:WebSocket 通信](./QuecPython物联网基础功能/WebSocket通信.md) - -- [6.7:通信异常处理](./QuecPython物联网基础功能/通信异常处理.md) +- [6.6: 通信异常处理](./iot-basic/exceptions.md)
- 7:QuecPython 云平台功能 + 7: QuecPython 云平台功能 -- [7.1:移远云](./QuecPython云平台功能/移远云.md) +- [7.1: 移远云](./clouds/quectel.md) -- [7.2:阿里云](./QuecPython云平台功能/阿里云.md) +- [7.2: 阿里云](./clouds/aliyun.md) -- [7.3:腾讯云](./QuecPython云平台功能/腾讯云.md) +- [7.3: 腾讯云](./clouds/tencent.md) -- [7.4:华为云](./QuecPython云平台功能/华为云.md) +- [7.4: 华为云](./clouds/huawei.md) -- [7.5:亚马逊云](./QuecPython云平台功能/亚马逊云.md) +- [7.5: 亚马逊云](./clouds/aws.md) -- [7.6:移动云](./QuecPython云平台功能/移动云.md) +- [7.6: 移动云](./clouds/onenet.md) -- [7.7:电信云](./QuecPython云平台功能/电信云.md) +- [7.7: 电信云](./clouds/ctyun.md)
- 8:QuecPython 硬件高级功能 + 8: QuecPython 硬件高级功能 -- [8.1:屏幕显示](./QuecPython硬件高级功能/屏幕显示.md) +- [8.1: 屏幕显示](./hardware-advanced/screen.md) -- [8.2:LVGL](./QuecPython硬件高级功能/LVGL.md) +- [8.2: LVGL](./hardware-advanced/lvgl.md) -- [8.3:摄像头](./QuecPython硬件高级功能/摄像头.md) +- [8.3: 摄像头](./hardware-advanced/camera.md) -- [8.4:低功耗](./QuecPython硬件高级功能/低功耗.md) +- [8.4: 低功耗](./hardware-advanced/pm.md) -- [8.5:音频和 TTS](./QuecPython硬件高级功能/音频和TTS.md) +- [8.5: 音频和 TTS](./hardware-advanced/audio.md) -- [8.6:外接存储](./QuecPython硬件高级功能/外接存储.md) +- [8.6: 外接存储](./hardware-advanced/ext-storage.md) -- [8.7:外接以太网](./QuecPython硬件高级功能/外接以太网.md) +- [8.7: 外接以太网](./hardware-advanced/ext-ethernet.md) -- [8.8:矩阵键盘](./QuecPython硬件高级功能/矩阵键盘.md) +- [8.8: 矩阵键盘](./hardware-advanced/matrix-keypad.md) -- [8.9:BT 和 BLE](./QuecPython硬件高级功能/BT和BLE.md) +- [8.9: BT 和 BLE](./hardware-advanced/bt-and-ble.md) -- [8.10:USB 网卡](./QuecPython硬件高级功能/USB网卡.md) +- [8.10: USB 网卡](./hardware-advanced/usb-wireless-card.md) -- [8.11:外接 WiFi](./QuecPython硬件高级功能/外接WiFi.md) +- [8.11: 外接 WiFi](./hardware-advanced/ext-wifi.md)
- 9:QuecPython 物联网高级功能 + 9: QuecPython 物联网高级功能 -- [9.1:APN 和数据拨号](./QuecPython物联网高级功能/APN和数据拨号.md) +- [9.1: APN 和数据拨号](./iot-advanced/apn-and-datacall.md) -- [9.2:语音通话](./QuecPython物联网高级功能/语音通话.md) +- [9.2: 语音通话](./iot-advanced/voicecall.md) -- [9.3:短信](./QuecPython物联网高级功能/短信.md) +- [9.3: 短信](./iot-advanced/sms.md) -- [9.4:定位](./QuecPython物联网高级功能/定位.md) +- [9.4: 定位](./iot-advanced/location.md) -- [9.5:OTA 升级](./QuecPython物联网高级功能/OTA升级.md) +- [9.5: OTA 升级](./iot-advanced/ota.md) -- [9.6:AES-128 加解密](./QuecPython物联网高级功能/AES-128加解密.md) +- [9.6: AES-128 加解密](./iot-advanced/aes128.md)
- 10:其他开发资源 + 10: 其他开发资源 -- [10.1:QuecPython 编程框架](./其他开发资源/QuecPython编程框架.md) +- [10.1: QuecPython 编程框架](./other-resources/programming-framework.md) -- [10.2:HeliosSDK](./其他开发资源/HeliosSDK.md) +- [10.2: HeliosSDK](./other-resources/helios-sdk.md)
- 11:量产相关 + 11: 量产相关 -- [11.1:脚本加密和固件打包](./量产相关/脚本加密和固件打包.md) +- [11.1: 脚本加密和固件打包](./mass-production/encryption-and-packaging.md) -- [11.2:备份分区和数据安全区的使用](./量产相关/备份分区和数据安全区的使用.md) +- [11.2: 备份分区和数据安全区的使用](./mass-production/data-backup.md) -- [11.3:量产工具使用](./量产相关/量产工具使用.md) +- [11.3: 量产工具使用](./mass-production/production-tools.md) -- [11.4:产测工具使用](./量产相关/产测工具使用.md) +- [11.4: 产测工具使用](./mass-production/testing-tools.md) -- [11.5:硬件设计和生产注意事项](./量产相关/硬件设计和生产注意事项.md) +- [11.5: 硬件设计和生产注意事项](./mass-production/considerations.md)
- 12:解决方案介绍 + 12: 产品方案介绍 -- [12.1:DTU](./解决方案介绍/DTU.md) +- [12.1: DTU](./solutions/dtu.md) -- [12.2:定位器](./解决方案介绍/定位器.md) +- [12.2: 定位器](./solutions/tracker.md) -- [12.3:对讲机](./解决方案介绍/对讲机.md) +- [12.3: 对讲机](./solutions/poc.md) -- [12.4:电表](./解决方案介绍/电表.md) +- [12.4: 电表](./solutions/smart-meter.md) -- [12.5:云喇叭](./解决方案介绍/云喇叭.md) +- [12.5: 云喇叭](./solutions/payment-speaker.md) -- [12.6:门磁开关](./解决方案介绍/门磁开关.md) +- [12.6: 门磁开关](./solutions/door-sensor.md) -- [12.7:学生卡](./解决方案介绍/学生卡.md) +- [12.7: 学生卡](./solutions/student-card.md) -- [12.8:充电桩](./解决方案介绍/充电桩.md) +- [12.8: 充电桩](./solutions/charging-pile.md)
- 13:附录 + 13: 附录 -- [13.1:QuecPython 开发板板载资源列表](./附录/QuecPython开发板板载资源列表.md) +- [13.1: QuecPython 开发板板载资源列表](./appendix/evb-resources.md) -- [13.2:QuecPython 错误码汇总](./附录/QuecPython错误码汇总.md) +- [13.2: QuecPython 错误码汇总](./appendix/error-code.md) -- [13.3:QuecPython 异常处理流程](./附录/QuecPython异常处理流程.md) +- [13.3: QuecPython 异常处理流程](./appendix/exception-handling.md)
diff --git "a/docs/Getting_started/zh/QuecPython\344\272\221\345\271\263\345\217\260\345\212\237\350\203\275/README.md" b/docs/Getting_started/zh/appendix/README.md similarity index 100% rename from "docs/Getting_started/zh/QuecPython\344\272\221\345\271\263\345\217\260\345\212\237\350\203\275/README.md" rename to docs/Getting_started/zh/appendix/README.md diff --git "a/docs/Getting_started/zh/QuecPython\347\211\251\350\201\224\347\275\221\345\237\272\347\241\200\345\212\237\350\203\275/README.md" b/docs/Getting_started/zh/background/README.md similarity index 100% rename from "docs/Getting_started/zh/QuecPython\347\211\251\350\201\224\347\275\221\345\237\272\347\241\200\345\212\237\350\203\275/README.md" rename to docs/Getting_started/zh/background/README.md diff --git "a/docs/Getting_started/zh/QuecPython\347\211\251\350\201\224\347\275\221\351\253\230\347\272\247\345\212\237\350\203\275/README.md" b/docs/Getting_started/zh/clouds/README.md similarity index 100% rename from "docs/Getting_started/zh/QuecPython\347\211\251\350\201\224\347\275\221\351\253\230\347\272\247\345\212\237\350\203\275/README.md" rename to docs/Getting_started/zh/clouds/README.md diff --git "a/docs/Getting_started/zh/QuecPython\347\241\254\344\273\266\345\237\272\347\241\200\345\212\237\350\203\275/README.md" b/docs/Getting_started/zh/hardware-advanced/README.md similarity index 100% rename from "docs/Getting_started/zh/QuecPython\347\241\254\344\273\266\345\237\272\347\241\200\345\212\237\350\203\275/README.md" rename to docs/Getting_started/zh/hardware-advanced/README.md diff --git a/docs/Getting_started/zh/hardware-advanced/matrix-keypad.md b/docs/Getting_started/zh/hardware-advanced/matrix-keypad.md new file mode 100644 index 0000000000000000000000000000000000000000..da7f5c4afaaeb6ba7b45228db9301886d61431a2 --- /dev/null +++ b/docs/Getting_started/zh/hardware-advanced/matrix-keypad.md @@ -0,0 +1,162 @@ +# KeyPad - 矩阵键盘 + +本文将介绍什么是矩阵键盘,以及如何在QuecPython平台上使用keypad矩阵键盘功能。 + +## 什么是矩阵键盘 + +矩阵键盘是一种常见的输入设备,通常用于电子设备和计算机中。它由多个按键组成,按键排列成一个矩阵形式,并通过连接线与控制器相连。 + +其基本工作原理是通过行列扫描技术来检测按键的状态。具体来说,矩阵键盘中的按键被分为若干行和列,行列交叉部分形成了一个二维矩阵。控制器会依次扫描每一行或每一列,当检测到某一个按键被按下时,在该按键所处的行和列之间建立联系,从而确定该按键的位置和状态。 + +这种工作原理使得矩阵键盘具有很高的灵活性和可编程性,因为可以通过编程设置哪些按键被映射到哪些行和列上。此外,矩阵键盘还具有体积小、成本低、反应速度快等优点,因此被广泛应用于各种类型的电子设备中。 + +## 如何使用矩阵键盘 + +### 1. 硬件准备 + +在使用keypad矩阵键盘功能之前,需要准备以下硬件: + +- QuecPython开发板 +- keypad矩阵键盘模块 + +将keypad矩阵键盘模块连接到开发板的矩阵键盘接口上,具体支持的模块和引脚对应关系请查看[矩阵键盘](../../../API_reference/zh/QuecPython类库/machine.KeyPad.html)API文档,同时需要注意,并不是所有开发板均引出了矩阵键盘引脚,请自行查看开发板原理图或资源列表,本文以QuecPython_EC2X_EVB_V1.0为例,开发板上搭载EC200UCNAA型号模块。如自行设计PCB则需要API文档和模块硬件设计手册同时参考,但引脚定义以API文档为准,电路特性以硬件设计手册为准。 + +### 2.硬件电路 + +本文使用的搭载EC200U的开发板中矩阵键盘相关原理图接线: + + + + + + + + + +通过API文档和上图我们可以知道EC200U系列模块支持4行3列的矩阵键盘,其中KEYOUT对应的是软件中的行号,从0开始,KEYIN对应的是软件中的列号,从1开始。 + +由于开发板只是引出了引脚,所以我们还需要自行购买矩阵键盘模块,使用杜邦线进行连接,连接的实物图如图所示: + + + +### 3. 示例代码 + +下面是一个完整的示例代码: + +```python +import machine # 导入 'machine' 模块以便于使用硬件组件 +import utime # 导入 'utime' 模块以便于进行时间相关的任务 + +keypad = machine.KeyPad() # 初始化一个名为 'keypad' 的 KeyPad 类对象。 + +keypad.init() # 初始化 keypad 对象 + +# 定义回调函数,此函数将在按下或释放按键时被触发 +def keypadCallback(return_list): + ''' + return_list[0]: 1表示按下,0表示抬起 + return_list[1] : row 行 + return_list[2] : col 列 + ''' + if return_list[0] == 1: + print("按下的按键位置在第 {} 行 {}列".format(return_list[1], return_list[2])) + elif return_list[0] == 0: + print("释放的按键位置在第 {} 行 {}列".format(return_list[1], return_list[2])) + + +# 将回调函数设置为先前定义的 'keypadCallback' 函数 +keypad.set_callback(keypadCallback) +print('开始测试,请按下按键') + +# 程序等待60秒钟 +utime.sleep(60) + +keypad.deinit() # 取消初始化 keypad 对象 +print('已退出!') # 打印一条消息表示程序已经退出。 +``` + +以上代码会在按键按下或释放时进行打印,关于API的详细说明参见[矩阵键盘](../../../API_reference/zh/QuecPython类库/machine.KeyPad.html)。 + +### 5.典型问题解答 + +买到的EVB没有引出引脚怎么进行测试? + +EVB没有引出是不方便测试的,可以自行设计PCB板进行测试验证。 + +按键工作一会后失灵了是怎么回事? + +检查创建的矩阵键盘对象是否是全局变量,如是局部变量请修改为全局变量。 + +KEYOUT一定是代表行,KEYIN一定是代表列吗? + +矩阵键盘的KEYOUT不一定是行,它可以是列或其他任何方向。矩阵键盘的KEYIN和KEYOUT可以组成一个矩阵,其中KEYIN是行,KEYOUT是列,也可以反过来,KEYIN是列,KEYOUT是行。因此,KEYOUT的方向取决于键盘的设计和实现。 + +设计EC600N模块的矩阵键盘硬件电路时,55号引脚需要接地,但是会导致通电开机模块就进入下载模式怎么办? + +严格按照硬件设计手册说明选择下拉电阻,仍不能解决可以采用软件扫描方式实现矩阵键盘功能,此方法将不受限于硬件引脚功能,可以在多种模块上兼容使用,其他模块类似处理。 + +如下是软件实现矩阵键盘的示例代码: + +```python +# 导入所需的模块 +from machine import Pin +from utime import sleep_ms + +# 定义键盘矩阵的行列数及按键对应的字符 +NUM_ROWS = 3 +NUM_COLS = 3 + +key_matrix = [ +['1', '2', '3'], +['4', '5', '6'], +['7', '8', '9'], +] + +# 定义行列引脚 +row_pins = [Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_DISABLE, 0), Pin(Pin.GPIO12, Pin.OUT, Pin.PULL_DISABLE, 0), Pin(Pin.GPIO13, Pin.OUT, Pin.PULL_DISABLE, 0)] +col_pins = [Pin(Pin.GPIO9, Pin.IN, Pin.PULL_PU, 1), Pin(Pin.GPIO8, Pin.IN, Pin.PULL_PU, 1), Pin(Pin.GPIO14, Pin.IN, Pin.PULL_PU, 1)] + +# 定义全局变量,用于判断按键是否被按下或释放 +key_pressed = False +key_released = False + +# 扫描键盘矩阵的函数 +def scan_keys(): + + global key_pressed, key_released + + # 循环扫描每一列 + for i in range(NUM_COLS): + row_pins[i].write(0) + + # 循环扫描每一行 + for j in range(NUM_ROWS): + # 如果检测到按键被按下且之前未被按下,则将全局变量设置为按下状态,并返回按键对应的字符 + if not col_pins[j].read() and not key_pressed: + key_pressed = True + key_released = False + return key_matrix[j][i] + + row_pins[i].write(1) + + # 如果按键被按下且之前未被释放,则将全局变量设置为释放状态,并返回 None + if key_pressed and not key_released: + key_released = True + key_pressed = False + + return None + +# 循环检测键盘矩阵 +while True: + key = scan_keys() + # 如果检测到按键被按下,则打印出按键对应的字符 + if key is not None: + print('Key pressed:', key) + sleep_ms(50) +``` + +此示例代码仅供参考,实际使用还请自行完善逻辑。 + +# 总结 + +本文介绍了如何在QuecPython平台上使用keypad矩阵键盘功能,并列举了比较常见的问题类型,以及自行实现矩阵按键功能的示例,如有疑问或更好的建议欢迎联系我们,也可以直接向我们提交文档贡献,后续本文将继续完善和补充更多应用案例。 \ No newline at end of file diff --git "a/docs/Getting_started/zh/QuecPython\347\241\254\344\273\266\351\253\230\347\272\247\345\212\237\350\203\275/README.md" b/docs/Getting_started/zh/hardware-basic/README.md similarity index 100% rename from "docs/Getting_started/zh/QuecPython\347\241\254\344\273\266\351\253\230\347\272\247\345\212\237\350\203\275/README.md" rename to docs/Getting_started/zh/hardware-basic/README.md diff --git a/docs/Getting_started/zh/hardware-basic/adc.md b/docs/Getting_started/zh/hardware-basic/adc.md new file mode 100644 index 0000000000000000000000000000000000000000..ae6067027e327950068a0322637b3ec17ef4e9a8 --- /dev/null +++ b/docs/Getting_started/zh/hardware-basic/adc.md @@ -0,0 +1,140 @@ +# ADC - 电压采集功能 + +本文主要介绍什么是 ADC、怎么使用 ADC、ADC 可以做什么等相关问题。 + +## ADC 简介 + +### 什么是 ADC + +ADC(Analog to Digital Converter) 即模拟数字转换器即 [A/D 转换器](https://baike.baidu.com/item/A%2FD转换器/4883848?fromModule=lemma_inlink),对于嵌入式应用开发来说,可以简单理解为:在单片机或我们的模组上有一个引脚可以读取电路中的电压值。一般软件开发人员主要关注如何读出 ADC 引脚的电压值,并将电压值做一些运算从而间接得出外部传感器当前所测量的环境值,如温度值、亮度值等。 + +### 怎么使用 ADC + +#### 硬件设计 + +对于嵌入式产品开发来说,可靠的硬件电路是软件开发的前提条件。 + +ADC 相关电路设计需要参考每个型号模组的硬件设计手册和参考设计手册,可以在主页的 [下载区](/download/) 检索下载,但具体功能引脚仍需以 QuecPython 的 [ADC 功能 API](../../../API_reference/zh/QuecPython类库/misc.ADC.html) 介绍的引脚号为准。关于 ADC 功能常见的应用电路也可以通过搜素引擎了解更多信息。简单应用电路也可参考 QuecPython 的学习开发板,开发板可以通过天猫旗舰店、京东旗舰店等移远通信官方销售渠道获取,开发板的硬件设计同样是参考的上述硬件文档,开发板的原理图也可以在主页的 [下载区](/download/) 检索下载。 + +#### 软件应用 + +使用 QuecPython 开发的模组,想要读取 ADC 引脚的电压需要先完成 QuecPython 开发环境的搭建,再参考 [ADC 功能的 API 介绍文档](../../../API_reference/zh/QuecPython类库/misc.ADC.html) 进行如下命令行测试即可打印出 ADC 通道 0 引脚当前的电压值,单位为毫安 (mA)。 + +```python +>>>from misc import ADC +>>>adc = ADC() +>>>adc.open() +>>>voltage = adc.read(ADC.ADC0) +>>>print("ADC channel 0 voltage = {}mA".format(voltage)) +``` + +### ADC 功能测试 + +使用 QPYcom 工具和模组进行交互,下面实例是基于 ADC0。 + + + +## ADC 功能应用实例 + +亮度传感器是一种能够检测周围环境亮度的传感器。在 QuecPython 平台上,您可以使用光敏电阻或光敏二极管作为亮度传感器,并使用相应的代码来读取其值。在本文档中,我们将讨论如何在 QuecPython 平台上使用光敏电阻作为亮度传感器。 + +### 所需材料 + +- QuecPython 模块(选择支持 ADC 的模块即可,参见 [ADC](../../../API_reference/zh/QuecPython类库/misc.ADC.html)) +- 光敏电阻 +- 高精度电阻(具体以硬件设计手册为准) +- 充足的导线(杜邦线即可) +- 如有自带光敏电阻的 QuecPython 开发板上述材料均包含 + +### 电路连接 + +以 QuecPython 开发板为例,以下是 EC600X_QuecPython_EVB_V3.1 版本开发板光敏电阻电路连接图: + +
+ +如上两图所示,左边图中的 R22 即为光敏电阻,型号为 GT36528,右图为连接到 QuecPython 模块 ADC 引脚的电路,模块型号为 EC600U。 + +上图电路可等效为下图所示电路: + + + +### 原理分析 + +想要得到当前光照度,首先我们需要知道光敏电阻在当前光照条件下的电阻值,再根据电阻值与光照度之间的关系计算得出光照度,电阻值我们不能直接通过 API 接口读出,但我们可以使用 ADC 的 API 读出电路中光敏电阻的电压值,再通过欧姆定律我们就可以计算得出光敏电阻的阻值,又由于 ADC 的测量电压范围有限,所以我们设计了电子电路进行分压,将电路中某一点的电压限制在 ADC 的测量范围内,再测量电路中这一点的电压,间接换算出光敏电阻的阻值,具体分析和计算原理如下。 + +如上图所示等效电路, R3 和 R4 为串联关系,R22 与 R3、R4 组合的整体为并联关系,R14 与 R22、R3、R4 组成的整体为串联关系,根据欧姆定律及并联分流的特点我们可以得出,A 点的电流为通过 R22 支路的电流和通过 R3、R4 支路的电流之和,则可以列出如下表达式。 + +$$ +\frac{V_{3.3}-V_A}{R_{14}}=\frac{V_A}{R_{22}}+\frac{V_A}{R_{3}+R_{4}} +$$ + +再经过换算我们可以得出光敏电阻 R22 的数学表达式如下: + +$$ +R_{22}=\frac{(R_3+R_4)R_{14}V_{A}}{(R_3+R_4)(V_{3.3}-V_A)-(R_{14}V_A)} +$$ + +到这里,也许有些人会有疑问,R81 为什么没有被计算到?因为 R81 接到的是 ADC 引脚,我们可以认为只是接到了一个电压表上,所以并不会分压,无需加入计算中。即 ADC0 测得的电压即为 B 点的电压,那么 B 点电压对于我们来说是可以通过 API 变为已知的。但是在上述表达式中又并未用到 B 点电压,是怎么回事呢? + +从上述表达式中我们可以看出,表达式右侧的所有变量只有 A 点电压是未知量,左侧是待求量,一个表达式中有两个未知量是求不出结果的,所以我们需要将未知量 A 点电压变为已知量,此时就用到了已知量 B 点电压。我们再根据欧姆定律和串并联电路的知识可以知道,R22 所在支路的电压和 R3、R4 所在支路的电压是相同的,并且是 A 点电压。又由于整个支路是串联的,则支路上每一点电流是相同的,我们根据欧姆定律可以得出如下表达式: + +$$ +\frac{V_A}{R_3+R_4}=\frac{V_B}{R_4} +$$ + +由上述表达式我们可以换算得出 A 点电压和 B 点电压的关系: + +$$ +V_A =\frac{R_3+R_4}{R4}V_B +$$ + +将上述表达式整理再统一单位后代入真实数值我们可以得到表达式: + +$$ +V_A = 5.02V_B +$$ + +再将这一结果和真实数值代入 R22 的表达式可以得到如下表达式: + +
+ +$$ +\begin{aligned} +R_{22}&=\frac{(R_3+R_4)R_{14}V_{A}}{(R_3+R_4)(V_{3.3}-V_A)-(R_{14}V_A)}\\ +&=\frac{((40.2+10)*1000)* 40.2 *1000* 5.02 *V_B}{((40.2+10)* 1000)*(3.3-5.02* V_B)-(40.2 *1000* 5.02*V_B)}\\ +&=\frac{10130560800 *V_B}{165660-453808* V_B} +\end{aligned} +$$ + +### 代码实现 + +在写代码之前我们需要了解到光敏电阻阻值和光照亮度之间的数学关系,一般需要通过实验测试得到,此示例仅展示我们如何获取光敏电阻的阻值,单位为欧姆,在代码中计算时一定记得统一为国际单位制再进行计算。 + +```python +from misc import ADC +import utime + +class lightSensor(): + def __init__(self, ADC_channel): + self.adc = ADC() + self.adc_channel = ADC_channel + self.adc.open() + + def readResistanceValue(self): + Vb = self.adc.read(self.adc_channel)/1000 + R22 = (10130560800*Vb) / (165660-(453808*Vb)) + return R22 + +if __name__ == "__main__": + + gt36528 = lightSensor(ADC.ADC0) + + while True: + resistanceValue = gt36528.readResistanceValue() + print("resistance value = {} Ohm".format(resistanceValue)) + utime.sleep(1) +``` + +## 总结 + +ADC 功能的一般常见用法在此做了详细的介绍,如有疑问或更好的建议欢迎联系我们,也可以直接向我们提交文档贡献,后续本文将继续完善和补充更多应用案例。 diff --git a/docs/Getting_started/zh/hardware-basic/pwm.md b/docs/Getting_started/zh/hardware-basic/pwm.md new file mode 100644 index 0000000000000000000000000000000000000000..caf091e2ac106801866fc426ca325cad548304bb --- /dev/null +++ b/docs/Getting_started/zh/hardware-basic/pwm.md @@ -0,0 +1,112 @@ +# PWM - 脉宽调制 + +## PWM 简介 + +### 什么是 PWM + +[PWM](https://baike.baidu.com/item/脉冲宽度调制/10813756?fromtitle=PWM&fromid=3034961&fr=aladdin) 代表脉冲宽度调制(Pulse Width Modulation),是一种常见的电子信号调制技术。它通过改变信号的脉冲宽度来控制电路或设备的输出功率或速度。PWM 信号是一个周期性的信号,包含一个固定频率的基准信号和一个可变的占空比信号。占空比指的是脉冲宽度与周期之间的比率,它控制着信号的平均电平,从而控制电路或设备的输出功率或速度。 + +PWM 技术在电子工程、控制系统和机械工程等领域得到广泛应用。例如,在电机控制中,PWM 信号可以用来控制电机的转速和转向。在电源管理中,PWM 信号可以用来调节直流-直流转换器的输出电压和电流。在 LED 灯控制中,PWM 信号可以用来控制 LED 的亮度和颜色。 + +需要注意的是,在使用 PWM 技术时,需要选择适当的频率和占空比,以满足具体应用的需求。同时,还需要考虑 PWM 信号的稳定性和噪声等因素,以确保电路或设备的正常运行和可靠性。 + +### 怎么使用 PWM + +使用 PWM 技术需要通过特定的电路或芯片来生成 PWM 信号,支持 QuecPython 开发的模组大部分都具有此功能,具体可见 [PWM 功能 API 文档](../../../API_reference/zh/QuecPython类库/misc.PWM.html) 确认是否支持此功能,可以按照以下步骤进行: + +#### 硬件设计 + +根据上述 [PWM 功能 API 文档](../../../API_reference/zh/QuecPython类库/misc.PWM.html) 介绍的引脚号和模组的硬件设计文档(从 [下载区](/download/) 获取)设计好硬件电路即可。设计硬件电路注意需要注意电平转换,以及电平转换电路的最大输出频率。 + +如模组本身不支持或支持的数量不够用,则可以使用模组支持的任意一个 [GPIO](../../../API_reference/zh/QuecPython类库/machine.Pin.html) 结合 [定时器](../../../API_reference/zh/QuecPython类库/machine.Timer.html) 来粗略模拟输出 PWM 信号,硬件设计相同,软件实现可见下文。 + +#### 软件应用 + +当使用模组自带 PWM 功能时: + +```python +>>>from misc import PWM +>>>pwm = PWM(PWM.PWM0, PWM.ABOVE_MS, 1, 5) +>>>pwm.open() +``` + +当自行模拟 PWM 功能时需要注意 QuecPython 对于时序控制并不是很精确,请自行根据需求实现相关代码。 + +#### PWM 功能测试 + +在命令行中执行上面三行代码即可让模组的 PWM0 引脚输出一个周期为 5ms,占空比为 20%的方波,借助 [逻辑分析仪](https://baike.baidu.com/item/逻辑分析仪/2364388?fr=aladdin) 我们可以看到输出的波形。交互界面及逻辑分析仪获取到的波形如下图。 + + + + + +如上图所示,填写的参数和实际抓取到的波形是能够对应上的,有关 API 具体参数含义可以仔细阅读 API 介绍文档进行理解。 + +对于 QuecPython 的 PWM API 需要注意的是,填的参数不能超出填写范围,否则将会出现报错,这是常见问题。 + +一般使用 PWM 功能主要步骤是: + +1. 设置 PWM 参数:根据具体应用需求,设置 PWM 信号的频率和占空比等参数。频率决定信号的周期,占空比决定信号的平均电平和电路或设备的输出功率或速度。对于 QuecPython API,则需要填写高电平时间和周期来决定占空比和频率。即占空比 = 高电平时间/周期,频率 = 1 秒/周期(单位:秒)。 +2. 连接 PWM 输出:将 PWM 信号的输出端口连接到需要控制的电路或设备,如电机、LED 等。通常需要使用适当的电路元件,如电容、电感、MOSFET 或三极管等,来控制 PWM 信号的幅值和波形。 +3. 调试和优化:根据实际情况,调试 PWM 电路或程序,以确保 PWM 信号的稳定性和准确性。可以通过示波器、数字万用表等仪器来监测 PWM 信号的波形和电平等参数,进行优化和调整。 + +需要注意的是,在使用 PWM 技术时,需要根据具体应用需求选择合适的 PWM 芯片或电路,即选择合适的模组,并合理设置参数和连接电路。同时,还需要注意 PWM 信号的稳定性、可靠性和噪声等因素,以确保电路或设备的正常运行和安全性。 + +## PWM 功能应用实例 + +在本文中,我们将使用 QuecPython 板载的 PWM 功能,实现一个呼吸灯的效果。呼吸灯是一种灯光效果,类似于人类呼吸时的变化。它可以在各种电子设备中使用,例如嵌入式系统、智能家居、玩具等。 + +### 准备工作 + +我们需要使用 QuecPython 开发板、以及一个直插式 LED 灯(部分板载贴片式 LED 即可测试,详情请看电路原理图确认)。将 LED 灯连接到 QuecPython 开发板上。将 LED 的长脚连接到开发板的 PWM0 引脚,将短脚连接到开发板的 GND 引脚。 + +### 代码实现 + +以下是实现呼吸灯效果的 QuecPython 代码。代码中的注释将帮助您理解代码的工作原理。 + +```python +# 导入所需模块 +from misc import PWM +from utime import sleep_ms + +# 设置 PWM 通道和频率 +PWM_CHANNEL = PWM.PWM0 +PWM_FREQ_Hz = 50 + +# 初始化 PWM 占空比和周期时长 +pwm_duty = 100 # PWM 占空比初始值为 100% +cycleTime = 1000 // PWM_FREQ_Hz # 周期时长(单位:ms) + +while True: + # 根据当前 PWM 占空比计算高电平时间 + highTime = cycleTime * pwm_duty // 100 + + # 创建 PWM 对象并打开 + pwm = PWM(PWM_CHANNEL, PWM.ABOVE_MS, highTime, cycleTime) + pwm.open() + + # 根据 PWM 占空比的变化情况更新 PWM 占空比值 + if pwm_duty >= 100: + pwm_duty_change_step = -10 # 如果 PWM 占空比达到了 100%,则向负方向降低 + if pwm_duty <= 0: + pwm_duty_change_step = 10 # 如果 PWM 占空比达到了 0%,则向正方向增加 + pwm_duty += pwm_duty_change_step # 更新 PWM 占空比 + + # 等待一段时间,再进行下一次循环操作 + sleep_ms(100) +``` + +这段代码通过使用 `misc` 模块和 `utime` 模块中的函数实现对 PWM(脉冲宽度调制)信号的控制。PWM 信号的特点是占空比可以调整,因此可以通过占空比来控制输出的平均电压。在这段代码中,先选择一个 PWM 通道(`PWM_CHANNEL = PWM.PWM0`)和设定 PWM 信号的频率(`PWM_FREQ_Hz = 50`)。然后通过循环语句不断改变 PWM 信号的占空比,从而使输出的电平产生周期性的变化。 + +具体来说,代码循环中的每个步骤如下: + +1. 根据当前的 PWM 占空比值计算出 PWM 信号的高电平时间(`highTime = cycleTime * pwm_duty // 100`)。这里 `cycleTime` 表示一个 PWM 信号的周期时长,单位为毫秒,由设定的 PWM 频率和公式 `cycleTime = 1000 / PWM_FREQ_Hz` 计算得出。`pwm_duty` 表示当前的 PWM 占空比,范围在 0%~100%之间。因此,当 `pwm_duty` 为 100%时,高电平时间等于一个周期的时长;当 `pwm_duty` 为 0%时,高电平时间为 0。 +2. 创建一个 PWM 对象,并指定输出方式为“高电平持续时间大于等于给定时间”(`PWM.ABOVE_MS`),同时将高电平时间和周期时长设置为计算得到的值。然后通过 `open()` 方法打开 PWM 输出。 +3. 根据当前 PWM 占空比的变化趋势更新 PWM 占空比值。当 PWM 占空比达到 100%时,向负方向(即减小 PWM 占空比)变化;当 PWM 占空比达到 0%时,向正方向(即增加 PWM 占空比)变化。 +4. 等待一段时间(这里是 100 毫秒),然后进入下一次循环。 + +这样,即可实现对 PWM 信号的控制,从而产生周期性变化的平均电压输出。 + +## 总结 + +PWM 功能在此做了详细的介绍,如有疑问或更好的建议欢迎联系我们,也可以直接向我们提交文档贡献,后续本文将继续完善和补充更多应用案例。 diff --git "a/docs/Getting_started/zh/microPython\350\257\255\350\250\200\345\237\272\347\241\200/README.md" b/docs/Getting_started/zh/iot-advanced/README.md similarity index 100% rename from "docs/Getting_started/zh/microPython\350\257\255\350\250\200\345\237\272\347\241\200/README.md" rename to docs/Getting_started/zh/iot-advanced/README.md diff --git "a/docs/Getting_started/zh/\345\205\266\344\273\226\345\274\200\345\217\221\350\265\204\346\272\220/README.md" b/docs/Getting_started/zh/iot-basic/README.md similarity index 100% rename from "docs/Getting_started/zh/\345\205\266\344\273\226\345\274\200\345\217\221\350\265\204\346\272\220/README.md" rename to docs/Getting_started/zh/iot-basic/README.md diff --git a/docs/Getting_started/zh/iot-basic/exceptions.md b/docs/Getting_started/zh/iot-basic/exceptions.md new file mode 100644 index 0000000000000000000000000000000000000000..2ee1a9eb1155bc8648c0fc1d0eb66a1737c4035b --- /dev/null +++ b/docs/Getting_started/zh/iot-basic/exceptions.md @@ -0,0 +1,62 @@ +# 通信异常处理 + +## 通信异常简介 + +当使用 QuecPython 进行网络通信时,有时可能会遇到异常情况。这些异常情况可能包括连接超时、连接被拒绝、传输错误等等,可能出现的错误码及含义可见 [错误码汇总](./../appendix/error-code.html) 章节。在本文中,我们将探讨如何处理这些异常情况,以确保您的网络通信顺利进行,以 socket 通信为例,其他网络通信类同。 + +可能出现的异常情况有: + +- Socket 创建失败:由于系统资源不足或权限不足等原因导致 Socket 对象创建失败。 +- Socket 绑定失败:如果两个程序在同一台机器上绑定相同的 IP 地址和端口号进行通信,则会导致绑定失败。 +- 远程主机拒绝连接:可能是由于远程主机未启动或端口未开放。 +- 网络不可达:可能是由于网络故障或路由器设置有误。 +- 连接超时:可能是由于远程主机响应过慢或网络传输延迟较大。 +- 目标主机主动关闭连接:目标主机或服务端主动关闭连接时,客户端也会抛出异常。 +- socket 被关闭:可能是由于网络原因或程序逻辑设计有误。 +- socket 已经被其他线程或机制关闭:可能是由于多个线程同时操作一个 socket 对象而导致的,也可能是 socket 对象被 gc 自动回收导致的。 +- 数据接收超时:可能是由于网络传输延迟较大或远程主机响应过慢。 + +## 异常处理代码示例 + +```python +import usocket as socket + +try: + # 创建 socket 对象 + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +except OSError as e: + print('Socket 创建失败:', e) + +try: + # 绑定 socket,这里的 ip 地址为模块拨号成功获取到的 + s.bind(('10.145.58.21', 8888)) +except OSError as e: + print('Socket 绑定失败:', e) + +try: + # 连接远程主机 + s.connect(('www.example.com', 80)) +except OSError as e: + print('连接服务器异常:', e) + +try: + # 发送数据 + s.send(b'Hello, world!') +except OSError as e: + print('发送数据异常:', e) + +# 接收数据 +try: + data = s.recv(1024) +except OSError as e: + print('接收数据异常:', e) + +# 关闭 socket +s.close() +``` + +以上是分步使用 try-except 语句块来捕获异常,我们为了方便也可以使用一个 try-except 语句块来捕获整个流程的异常,同时我们在接收和发送数据时使用 API 先查询连接状态再进行操作也可以避免大多异常。 + +## 总结 + +在 QuecPython 中进行网络通信时,可能会出现各种异常情况。为了保证程序的稳定性和可靠性,需要针对不同的异常情况采取相应的处理措施。例如,可以通过设置超时时间来防止连接超时或数据接收超时;可以捕获相应的异常来判断 socket 是否被关闭或网络是否可达等情况。通过这些措施,可以有效地避免网络通信异常,提高程序的可靠性和稳定性。除了以上三种异常,还有 Socket 创建失败、Socket 绑定失败以及目标主机主动关闭连接等其他异常情况,我们也需要进行相应的处理。本文介绍了一些常见的异常情况及其处理方法,希望对您有所帮助。 diff --git "a/docs/Getting_started/zh/\345\237\272\347\241\200\347\237\245\350\257\206/README.md" b/docs/Getting_started/zh/mass-production/README.md similarity index 100% rename from "docs/Getting_started/zh/\345\237\272\347\241\200\347\237\245\350\257\206/README.md" rename to docs/Getting_started/zh/mass-production/README.md diff --git a/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_0.png b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccbc981bd8e9fcce475a2828773675188848a5e Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_0.png differ diff --git a/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_1.png b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b21d3f232d041f6ef76f51aac7db874cceaf3b46 Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_1.png differ diff --git a/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_2.png b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_2.png new file mode 100644 index 0000000000000000000000000000000000000000..856a43a7e652746a524d17b1b3d98ed7cfae1edb Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_2.png differ diff --git a/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_3.png b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2939806d74474026a6a392c16e0b0e95be46a039 Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-advanced/matrix-keypad/keypad_3.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/adc/adc_0.png b/docs/Getting_started/zh/media/hardware-basic/adc/adc_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1c10f5f4a3dbaf17ed0aed577e9d0c6de13e2c Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/adc/adc_0.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/adc/adc_1.png b/docs/Getting_started/zh/media/hardware-basic/adc/adc_1.png new file mode 100644 index 0000000000000000000000000000000000000000..42861328ae75675564c189c91942a92ab6006bdf Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/adc/adc_1.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/adc/adc_2.png b/docs/Getting_started/zh/media/hardware-basic/adc/adc_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7b46a98d18c309ab93adec062eca7e6ec66ad8ac Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/adc/adc_2.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/adc/adc_3.png b/docs/Getting_started/zh/media/hardware-basic/adc/adc_3.png new file mode 100644 index 0000000000000000000000000000000000000000..89a36362d7d649d47b5f7a502b144d827aca9019 Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/adc/adc_3.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_0.png b/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_0.png new file mode 100644 index 0000000000000000000000000000000000000000..aec7390f55748fce445af07cdd78f9acdfc461bd Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_0.png differ diff --git a/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_1.png b/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_1.png new file mode 100644 index 0000000000000000000000000000000000000000..31a3e7b62dcdbd2c0691b809bbbdb9823e79c825 Binary files /dev/null and b/docs/Getting_started/zh/media/hardware-basic/pwm/pwm_1.png differ diff --git "a/docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250/README.md" b/docs/Getting_started/zh/mpy-syntax/README.md similarity index 100% rename from "docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250/README.md" rename to docs/Getting_started/zh/mpy-syntax/README.md diff --git a/docs/Getting_started/zh/os/README.md b/docs/Getting_started/zh/os/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c422c1463ea853286b83539f4962114028edc622 --- /dev/null +++ b/docs/Getting_started/zh/os/README.md @@ -0,0 +1,24 @@ +# 4: QuecPython 系统功能 + +本章主要介绍如何查询 QuecPython 的一些系统信息,并使用系统自带的一些常用功能,如: 日志功能、文件功能等,具体可展开目录查看。 + +
目录 + +- [4.1: 系统信息]() + +- [4.2: 日志功能]() + +- [4.3: 文件管理]() + +- [4.4: 时间功能]() + +- [4.5: 数据格式转换]() + +- [4.6: 电源管理]() + +- [4.7: 内存管理]() + +- [4.8: 多线程]() + + 
diff --git "a/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/\347\263\273\347\273\237\344\277\241\346\201\257.md" b/docs/Getting_started/zh/os/os-info.md similarity index 30% rename from "docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/\347\263\273\347\273\237\344\277\241\346\201\257.md" rename to docs/Getting_started/zh/os/os-info.md index 8e20c9ac6b89605b8ee72bfd3bafddc98662c28e..8f23eafed3c31915bd8aa773b8a20cd3d870259c 100644 --- "a/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/\347\263\273\347\273\237\344\277\241\346\201\257.md" +++ b/docs/Getting_started/zh/os/os-info.md @@ -1,6 +1,6 @@ # 系统信息 -本文主要介绍如何使用uos、usys、modem等模块查询模组的固件信息、模组剩余内存大小等用户经常关注的信息,本文将不断补充,以方便用户了解模组的基本信息。 +本文主要介绍如何使用 uos、usys、modem 等模块查询模组的固件信息、模组剩余内存大小等用户经常关注的信息,本文将不断补充,以方便用户了解模组的基本信息。 ## 查询固件版本信息 @@ -12,11 +12,11 @@ # ('sysname=EC600U-CNLB', 'nodename=EC600U', 'release=1.13.0', 'version=v1.12 on Sat_Nov_19_2022_5:29:48_PM', 'machine=EC600U with QUECTEL', 'qpyver=V0002') ``` -如上所示我们可以查询到模组型号machine=EC600U with QUECTEL,即EC600U,但固件中对型号的区分是sysname=EC600U-CNLB,即这个固件可以在EC600UCNLB这个子型号中使用,一般严格遵循字母数字一一对应原则,但是也有例外情况存在,固件具体适用的模组型号以下载区的固件描述和移远官方技术人员描述为准。还可以查询到固件的编译日期和microPython版本version=v1.12 on Sat_Nov_19_2022_5:29:48_PM,一般用于判断BETA版本(仅用于测试严禁量产的版本)新旧,由于BETA版本仅仅用于测试,所以QuecPython版本并非是正式发布的,故版本号信息不会变更,只能通过编译时间来确认版本,建议用户进行版本控制时也使用这种方式判断版本,拿到测试版本进行测试时也可以方便的进行版本控制。qpyver=V0002这个字段即为QuecPython固件官网发布的正式版本号,在此不过多赘述。 +如上所示我们可以查询到模组型号 machine = EC600U with QUECTEL,即 EC600U,但固件中对型号的区分是 sysname = EC600U-CNLB,即这个固件可以在 EC600UCNLB 这个子型号中使用,一般严格遵循字母数字一一对应原则,但是也有例外情况存在,固件具体适用的模组型号以下载区的固件描述和移远官方技术人员描述为准。还可以查询到固件的编译日期和 microPython 版本 version = v1.12 on Sat_Nov_19_2022_5: 29: 48_PM,一般用于判断 BETA 版本(仅用于测试严禁量产的版本)新旧,由于 BETA 版本仅仅用于测试,所以 QuecPython 版本并非是正式发布的,故版本号信息不会变更,只能通过编译时间来确认版本,建议用户进行版本控制时也使用这种方式判断版本,拿到测试版本进行测试时也可以方便的进行版本控制。qpyver = V0002 这个字段即为 QuecPython 固件官网发布的正式版本号,在此不过多赘述。 为什么要查询固件版本? -在开发的过程中难免会遇到一些问题,并找到官方人员或技术前辈咨询,那么此时需要提供的信息中,固件版本就是必不可少的,除此之外使用uos库查询固件版本还有如下方法: +在开发的过程中难免会遇到一些问题,并找到官方人员或技术前辈咨询,那么此时需要提供的信息中,固件版本就是必不可少的,除此之外使用 uos 库查询固件版本还有如下方法: ```python >>> import uos @@ -25,7 +25,7 @@ # (sysname='EC600U-CNLB', nodename='EC600U', release='1.13.0', version='v1.12 on Sat_Nov_19_2022_5:29:48_PM', machine='EC600U with QUECTEL', qpyver='V0002') ``` -如上所示,此接口和uos.uname()返回的信息是一样的,只是返回值兼容了microPython的用法,更方便用户在脚本中访问返回值中“=”右边的信息,具体用法参考[uos - 基本系统服务](../../../API_reference/zh/QuecPython标准库/uos.html)。 +如上所示,此接口和 uos.uname()返回的信息是一样的,只是返回值兼容了 microPython 的用法,更方便用户在脚本中访问返回值中“=”右边的信息,具体用法参考 [uos - 基本系统服务](../../../API_reference/zh/QuecPython标准库/uos.html)。 除此之外我们还可以使用如下方法获取固件版本信息: @@ -38,11 +38,11 @@ # 'EC600UCNLBR03A02M08_OCPU_QPY' ``` -如上所示,常见的两种返回值主要区别为是否包含BETA字段,包含BETA字段的固件为非正式发布版本固件,仅能用于测试,不用于项目量产,BETA后为编译固件的日期,12月7日。我们一般仅需关注是否包含BETA字段和BETA后的日期。 +如上所示,常见的两种返回值主要区别为是否包含 BETA 字段,包含 BETA 字段的固件为非正式发布版本固件,仅能用于测试,不用于项目量产,BETA 后为编译固件的日期,12 月 7 日。我们一般仅需关注是否包含 BETA 字段和 BETA 后的日期。 -此版本号除了使用QuecPython脚本查询外还可以使用AT+GMR命令进行查询,在这里不是我们的重点。 +此版本号除了使用 QuecPython 脚本查询外还可以使用 AT+GMR 命令进行查询,在这里不是我们的重点。 -AT命令仅需一行即可查询,脚本需要两行,怎么解决? +AT 命令仅需一行即可查询,脚本需要两行,怎么解决? ```python >>> import modem;modem.getDevFwVersion() # 两行合为一行,交互界面回车即可返回结果 @@ -76,27 +76,27 @@ mem = gc.mem_free() print('剩余可用RAM空间:{}KB'.format(mem / 1024)) ``` -如上所示我们使用uos.statvfs这个函数查询了根目录下'usr'和'bak'两个文件夹的状态信息,可以获取到文件夹的剩余空间大小。关于根目录和这两个文件夹做如下简介,根目录:对于用户来说是不允许操作的,所以对根目录做的任何操作都会导致报OSerror异常。'usr'目录:此目录是允许客户做文件读写操作的,通常客户代码等文件均是主要存放在这里,如需扩展请看[外扩存储](./../QuecPython硬件高级功能/外接存储.html)章节。'bak'目录:此目录是用于量产时存放客户需要备份的重要文件,可读不可写,存放重要文件请看[备份分区和数据安全区的使用](./../量产相关/备份分区和数据安全区的使用.html)章节。 +如上所示我们使用 uos.statvfs 这个函数查询了根目录下'usr'和'bak'两个文件夹的状态信息,可以获取到文件夹的剩余空间大小。关于根目录和这两个文件夹做如下简介,根目录:对于用户来说是不允许操作的,所以对根目录做的任何操作都会导致报 OSerror 异常。'usr'目录:此目录是允许客户做文件读写操作的,通常客户代码等文件均是主要存放在这里,如需扩展请看 [外扩存储](./../hardware-advanced/ext-storage.html) 章节。'bak'目录:此目录是用于量产时存放客户需要备份的重要文件,可读不可写,存放重要文件请看 [备份分区和数据安全区的使用](./../mass-production/data-backup.html) 章节。 -其他uos相关使用请查看[uos - 基本系统服务](../../../API_reference/zh/QuecPython标准库/uos.html)。 +其他 uos 相关使用请查看 [uos - 基本系统服务](../../../API_reference/zh/QuecPython标准库/uos.html)。 -## 查询microPython虚拟机版本 +## 查询 microPython 虚拟机版本 ```python ->>> try:import usys as sys -... except ImportError:import sys +>>> try:import usys as sys +... except ImportError:import sys >>> sys.implementation # 返回值 # (name='micropython', version=(1, 13, 0), mpy=10245) ``` -如上所示可以直接查询到microPython虚拟机版本是1.13.0版本,虽然可以查询到microPython虚拟机版本,但是不少用法仍和microPython不同,需要注意。以上示例使用try-except语句进行import的原因就是不同时期的固件microPython虚拟机版本不同,部分模块出现了更名的情况,为避免出现异常导致程序退出运行,使用了python的异常处理语法。后续QuecPython将为避免出现此类情况,在移植microPython新虚拟机时即将模块命名同历史版本进行兼容,方便用户的使用。 +如上所示可以直接查询到 microPython 虚拟机版本是 1.13.0 版本,虽然可以查询到 microPython 虚拟机版本,但是不少用法仍和 microPython 不同,需要注意。以上示例使用 try-except 语句进行 import 的原因就是不同时期的固件 microPython 虚拟机版本不同,部分模块出现了更名的情况,为避免出现异常导致程序退出运行,使用了 python 的异常处理语法。后续 QuecPython 将为避免出现此类情况,在移植 microPython 新虚拟机时即将模块命名同历史版本进行兼容,方便用户的使用。 -## 查询microPython语言版本 +## 查询 microPython 语言版本 ```python ->>> try:import usys as sys -... except ImportError:import sys +>>> try:import usys as sys +... except ImportError:import sys >>> sys.version # 返回值 # '3.4.0' @@ -105,9 +105,9 @@ print('剩余可用RAM空间:{}KB'.format(mem / 1024)) # (3, 4, 0) ``` -如上所示,使用了两个API进行的查询,两个API的主要差异为返回值形式不同。当前查询的microPython语言版本是3.4.0,在语法上是兼容电脑端CPython的3.4.0版本,后续是否有变更可以使用此接口查询。 +如上所示,使用了两个 API 进行的查询,两个 API 的主要差异为返回值形式不同。当前查询的 microPython 语言版本是 3.4.0,在语法上是兼容电脑端 CPython 的 3.4.0 版本,后续是否有变更可以使用此接口查询。 -## 查询设备的IMEI +## 查询设备的 IMEI ```python >>> import modem @@ -116,19 +116,19 @@ print('剩余可用RAM空间:{}KB'.format(mem / 1024)) # '866327040830317' ``` -如上所示,获取设备的IMEI号虽然十分简单,但是又特别的常用,所以在这里介绍一下如何查询。那么,IMEI是什么呢? +如上所示,获取设备的 IMEI 号虽然十分简单,但是又特别的常用,所以在这里介绍一下如何查询。那么,IMEI 是什么呢? -物联网模块的IMEI是国际移动设备身份码(International Mobile Equipment Identity)的缩写,它是用于识别物联网模块的唯一标识符。在物联网场景中,IMEI可以用于以下几个方面: +物联网模块的 IMEI 是国际移动设备身份码(International Mobile Equipment Identity)的缩写,它是用于识别物联网模块的唯一标识符。在物联网场景中,IMEI 可以用于以下几个方面: -1. 设备识别和管理:通过IMEI,可以唯一地识别和管理物联网设备,包括设备的制造商、型号和版本等信息。这些信息对于设备的维护和升级非常重要。 -2. 安全性和防盗:IMEI可以用于防止设备被盗或丢失。如果设备的IMEI被注册到一个中央数据库中,就可以通过该数据库来追踪设备的位置和使用情况。 -3. 远程管理和控制:IMEI可以用于远程管理和控制物联网设备。例如,如果设备出现故障或需要更新固件,就可以通过IMEI来远程诊断和修复设备。 -4. 数据统计和分析:IMEI可以用于统计和分析物联网设备的使用情况。例如,可以根据IMEI来确定设备的使用时间、位置、频率和使用模式等信息,以便更好地了解设备的使用情况和优化设备的性能。 +1. 设备识别和管理:通过 IMEI,可以唯一地识别和管理物联网设备,包括设备的制造商、型号和版本等信息。这些信息对于设备的维护和升级非常重要。 +2. 安全性和防盗:IMEI 可以用于防止设备被盗或丢失。如果设备的 IMEI 被注册到一个中央数据库中,就可以通过该数据库来追踪设备的位置和使用情况。 +3. 远程管理和控制:IMEI 可以用于远程管理和控制物联网设备。例如,如果设备出现故障或需要更新固件,就可以通过 IMEI 来远程诊断和修复设备。 +4. 数据统计和分析:IMEI 可以用于统计和分析物联网设备的使用情况。例如,可以根据 IMEI 来确定设备的使用时间、位置、频率和使用模式等信息,以便更好地了解设备的使用情况和优化设备的性能。 -总之,IMEI是物联网设备非常重要的标识符,可以用于设备管理、安全性、远程管理和数据分析等方面。 +总之,IMEI 是物联网设备非常重要的标识符,可以用于设备管理、安全性、远程管理和数据分析等方面。 -使用modem库查询其他设备信息不再赘述,请查看[modem - 设备相关](./../API_reference/zh/QuecPython类库/modem.html)。 +使用 modem 库查询其他设备信息不再赘述,请查看 [modem - 设备相关](./../API_reference/zh/QuecPython类库/modem.html)。 -# 总结 +## 总结 -用户经常关注的模块相关的,可以通过microPython脚本查询到的信息均在此做了介绍,如有疑问或更好的建议欢迎联系我们,或直接向我们提交文档贡献,后续本文将继续完善和补充。 \ No newline at end of file +用户经常关注的模块相关的,可以通过 microPython 脚本查询到的信息均在此做了介绍,如有疑问或更好的建议欢迎联系我们,也可以直接向我们提交文档贡献,后续本文将继续完善和补充。 diff --git a/docs/Getting_started/zh/os/time.md b/docs/Getting_started/zh/os/time.md new file mode 100644 index 0000000000000000000000000000000000000000..bfbea624a1498856c08c7b6162c028699cce646a --- /dev/null +++ b/docs/Getting_started/zh/os/time.md @@ -0,0 +1,142 @@ +# 时间功能 + +在使用 QuecPython 开发物联网应用程序时,时间功能对于一些用户来说是非常重要的一部分。本文将介绍如何在 QuecPython 中使用时间功能。 + +主要围绕以下几个功能展开介绍: + +[ntptime - NTP 对时](../../../API_reference/zh/QuecPython组件库/ntptime.html) + +[class RTC – 实时时钟](../../../API_reference/zh/QuecPython类库/machine.RTC.html) + +[utime - 时间相关功能](../../../API_reference/zh/QuecPython标准库/utime.html) + +[machine.Timer - 硬件定时器](../../../API_reference/zh/QuecPython类库/machine.Timer.html) + +## 时间同步 + +在一些需要准确时间的应用中,可以通过与网络时间服务器进行同步来保证时间的准确性,虽然不主动对时我们也可以在模块联网的时候从网络获取到时间,但是这个时间出现过不准确的情况,所以建议先进行时间同步。在 QuecPython 中,可以使用 `ntptime` 模块与 NTP 服务器进行时间同步,但是此功能依赖于网络,在使用此功能前务必确保我们的网络已经正常,可以参见 [天线、SIM 卡和网络注册](./../iot-basic/preparation.html) 章节。并且确保您的卡没有被限制 ip 访问范围,如有限制需要联系运营商将 NTP 服务器加入白名单,或者自己实现对时功能确保时间能够被校准。 + +当前我们的 `ntptime` 模块默认支持五个常用服务器域名:"ntp.aliyun.com", "pool.ntp.org", "asia.pool.ntp.org", "cn.ntp.org.cn", "cn.pool.ntp.org",当其中任何一个异常时,都将自动切换下一个域名,如仍不能满足您的需求,您可以选择设置自己更为可靠的服务器。 + +```python +import utime +import ntptime + +# 设置 NTP 服务器 +ntptime.host = "pool.ntp.org" + +# 同步时间(以同步东八区时间为例) +ntptime.settime(timezone=8) + +# 获取同步后的时间戳 +current_timestamp = utime.time() + +# 将时间戳转换为本地时间 +local_time = utime.localtime(current_timestamp) + +# 打印本地时间 +print(local_time) +``` + +在上面的代码中,`ntptime.host` 变量设置了 NTP 服务器的地址,`ntptime.settime()` 函数与 NTP 服务器进行时间同步,`utime.time()` 函数获取同步后的时间戳。 + + 需要注意的是,并不能过于频繁的进行 NTP 对时,下面的文章将会继续介绍原因。 + +## 获取当前时间 + +获取当前时间是最基本的时间操作。在 QuecPython 中,可以使用 `utime` 模块获取当前时间上一部分也有实际用到,但是实际上可以更简单,并且 `utime` 模块还有其他更加实用的时间功能,具体查看 API 介绍,这里介绍用的较多的。 + +```python +import utime + +# 直接获取本地时间 +local_time = utime.localtime() + +# 打印本地时间 +print(local_time) + +# 设置时区,不建议使用,建议使用 ntptime +utime.setTimeZone(offset) + +# 休眠即延时 +utime.sleep(1) +utime.sleep_ms(1) +utime.sleep_us(1) +``` + +在上面的代码中,`utime.localtime()` 函数可以直接获取本地时间,十分方便,但是前提是 RTC 时间已经是正确的,因为这里的时间实际来源于 RTC 时间,关于 RTC 的介绍详见下文。 + +`utime` 模块中的设置时区实际并不好用,不如使用 ntptime 对时的同时设置时区。 + +`utime` 模块中的 sleep 延时功能有着很多的用处,同时也有一些使用建议。 + +1. 首先从其字面含义来说,在我们想让模块处于睡眠状态时(依赖其他前提条件,详见 [低功耗](./../hardware-advanced/pm.html) 章节),需要正在执行这个函数。 + +2. 之所以调用这个函数时模块可以处于睡眠,是因为调用这个函数时,模块主动让出了 CPU 执行权限,基于这个特性,当我们在使用多线程时每个死循环里也必须使用这个函数,来主动让出 CPU 执行权限,使得各个线程均能够正常得到调度,sleep 时间无特殊要求,详见 [多线程](./threads.html) 章节。 + +3. 使用 sleep 函数来进行软件延时。需要注意 sleep 的软件延时并不精准,无法作为高精度延时来使用,并且虽然具有 sleep_us 这个函数,但是并不能进行微秒级的延时,延时的最小时间需要实测确认。 + +4.`utime.sleep`、`utime.sleep_ms` 及 `utime.sleep_us` 函数的调用会导致程序休眠阻塞。 + +`utime` 模块除了这些功能,还有一个比较实用的功能,可以测量两段脚本之间的执行时间,详见 API 介绍文档,不过多赘述。 + +## RTC 实时时钟 + +RTC(Real Time Clock) 实时时钟是一种硬件设备,它可以提供独立于操作系统的时间计时服务,即使设备关机(不断电)也能保持时间的准确性。在 QuecPython 中,可以使用 `machine` 模块访问 RTC 实时时钟。对于 RTC 的所有用法参见 [class RTC – 实时时钟](../../../API_reference/zh/QuecPython类库/machine.RTC.html) 章节,下面主要介绍常用操作与注意事项。 + +```python +from machine import RTC + +# 初始化 RTC 实时时钟 +rtc = RTC() + +# 设置 RTC 时间 +rtc.datetime([2020, 3, 12, 1, 12, 12, 12, 0]) + +# 获取 RTC 时间 +rtc_time = rtc.datetime() + +# 打印 RTC 时间 +print(rtc_time) +``` + +在上面的代码中,主要介绍了如何使用 RTC 获取和设置模块的时间,至此,我们可以知道,虽然 `utime` 和 `RTC` 都能够获取时间,但是只有 `RTC` 是能够设置时间的,所以 `utime` 的时间也是来源于 `RTC` 设置的时间,整个系统中的时间,除了从网络中获取的,其余均来自于 `RTC`,网络中同步的时间,如基站提供的时间、NTP 服务器提供的时间则是通过 `RTC` 来设置到系统中的。 + +上面提到不能频繁进行 NTP 对时的原因也在这里,因为 RTC 每设置一次时间都会擦写模块内部的 flash,会导致 flash 的寿命减少,flash 的擦写次数上限一般为 10 万次。 + +`RTC` 模块中还有一个函数对于部分场景比较实用,`rtc.set_alarm`,具体用法和适用的模块详见对应的 API 介绍文档,这个函数同样会擦写 flash,不宜频繁调用。其实用性主要体现在,部分型号可以在关机后由 `RTC` 唤醒开机,而开机时间就是由这个函数进行设置的,这个功能可以应用于对功耗要求较高的场景,除此之外还可以对一般的低功耗模式进行唤醒,详见 [低功耗](./../hardware-advanced/pm.html)。 + +## 综合示例代码 + +以下是一个完整的示例代码,该代码实现了获取当前时间、RTC 时间、时间同步、时间格式化、时间延时等功能。 + +```python +import utime +import machine +import ntptime + +# 同步东八区时间 +ntptime.host = "pool.ntp.org" +ntptime.settime(timezone=8) +current_timestamp = utime.localtime() +print("Synchronized time:", current_timestamp) + +# 获取 RTC 时间 +rtc = machine.RTC() +rtc_time = rtc.datetime() +print("RTC time:", rtc_time) + +# 获取当前时间 +current_timestamp = utime.localtime() +print("Current timestamp:", current_timestamp) + +# 延时 +utime.sleep(1) +print("Delay 1 second.") +utime.sleep_ms(500) +print("Delay 500ms.") +``` + +## 总结 + +用户经常关注的时间相关的功能应用均在此做了介绍,如有疑问或更好的建议欢迎联系我们,也可以直接向我们提交文档贡献,后续本文将继续完善和补充。 diff --git "a/docs/Getting_started/zh/\350\247\243\345\206\263\346\226\271\346\241\210\344\273\213\347\273\215/README.md" b/docs/Getting_started/zh/other-resources/README.md similarity index 100% rename from "docs/Getting_started/zh/\350\247\243\345\206\263\346\226\271\346\241\210\344\273\213\347\273\215/README.md" rename to docs/Getting_started/zh/other-resources/README.md diff --git "a/docs/Getting_started/zh/\351\207\217\344\272\247\347\233\270\345\205\263/README.md" b/docs/Getting_started/zh/quick-start/README.md similarity index 100% rename from "docs/Getting_started/zh/\351\207\217\344\272\247\347\233\270\345\205\263/README.md" rename to docs/Getting_started/zh/quick-start/README.md diff --git a/docs/Getting_started/zh/sidebar.yaml b/docs/Getting_started/zh/sidebar.yaml index 072c898835028adebc614388e105afb958c9be49..9b53f50148c369135ce54f3b1690d39564adaadc 100644 --- a/docs/Getting_started/zh/sidebar.yaml +++ b/docs/Getting_started/zh/sidebar.yaml @@ -1,228 +1,226 @@ items: -- label: 1:基础知识 - file: 基础知识/README.md +- label: '1: 背景知识' + file: background/README.md items: - - label: 1.1:物联网和低代码开发 - file: 基础知识/物联网和低代码开发.md - - label: 1.2:无线通信模块简介 - file: 基础知识/无线通信模块简介.md - - label: 1.3:QuecPython 简介 - file: 基础知识/QuecPython 简介.md - - label: 1.4:硬件选型 - file: 基础知识/硬件选型.md + - label: '1.1: 物联网和低代码开发' + file: background/iot-and-low-code.md + - label: '1.2: 无线通信模块简介' + file: background/wireless-modules.md + - label: '1.3: QuecPython 简介' + file: background/about-qpy.md + - label: '1.4: 硬件选型' + file: background/selection-guide.md -- label: 2:快速入门 - file: 快速入门/README.md +- label: '2: 快速入门' + file: quick-start/README.md items: - - label: 2.1:准备工作 - file: 快速入门/准备工作.md - - label: 2.2:上电与连接 - file: 快速入门/上电与连接.md - - label: 2.3:固件烧录 - file: 快速入门/固件烧录.md - - label: 2.4:QPYcom 基本操作 - file: 快速入门/QPYcom 基本操作.md + - label: '2.1: 准备工作' + file: quick-start/preparation.md + - label: '2.2: 上电与连接' + file: quick-start/boot-and-connect.md + - label: '2.3: 固件烧录' + file: quick-start/burn-firmware.md + - label: '2.4: QPYcom 基本操作' + file: quick-start/qpycom-basic.md -- label: 3:microPython 语言基础 - file: microPython语言基础/README.md +- label: '3: MicroPython 语言基础' + file: mpy-syntax/README.md items: - - label: 3.1:基本语法规则 - file: microPython语言基础/基本语法规则.md - - label: 3.2:变量和运算 - file: microPython语言基础/变量和运算.md - - label: 3.3:程序流程控制 - file: microPython语言基础/程序流程控制.md - - label: 3.4:常用容器类型 - file: microPython语言基础/常用容器类型.md - - label: 3.5:函数 - file: microPython语言基础/函数.md + - label: '3.1: 基本语法规则' + file: mpy-syntax/rules.md + - label: '3.2: 变量和运算' + file: mpy-syntax/vars-and-ops.md + - label: '3.3: 程序流程控制' + file: mpy-syntax/flow-control.md + - label: '3.4: 常用容器类型' + file: mpy-syntax/containers.md + - label: '3.5: 函数' + file: mpy-syntax/functions.md -- label: 4:QuecPython 系统功能 - file: QuecPython系统功能/README.md +- label: '4: QuecPython 系统功能' + file: os/README.md items: - - label: 4.1:系统信息 - file: QuecPython系统功能/系统信息.md - - label: 4.2:日志功能 - file: QuecPython系统功能/日志功能.md - - label: 4.3:文件管理 - file: QuecPython系统功能/文件管理.md - - label: 4.4:时间功能 - file: QuecPython系统功能/时间功能.md - - label: 4.5:数据格式转换 - file: QuecPython系统功能/数据格式转换.md - - label: 4.6:电源管理 - file: QuecPython系统功能/电源管理.md - - label: 4.7:内存管理 - file: QuecPython系统功能/内存管理.md - - label: 4.8:多线程 - file: QuecPython系统功能/多线程.md + - label: '4.1: 系统信息' + file: os/os-info.md + - label: '4.2: 日志功能' + file: os/log.md + - label: '4.3: 文件管理' + file: os/files.md + - label: '4.4: 时间功能' + file: os/time.md + - label: '4.5: 数据格式转换' + file: os/data-formattng.md + - label: '4.6: 电源管理' + file: os/power.md + - label: '4.7: 内存管理' + file: os/ram.md + - label: '4.8: 多线程' + file: os/threads.md -- label: 5:QuecPython 硬件基础功能 - file: QuecPython硬件基础功能/README.md +- label: '5: QuecPython 硬件基础功能' + file: hardware-basic/README.md items: - - label: 5.1:GPIO - file: QuecPython硬件基础功能/GPIO.md - - label: 5.2:外部中断 - file: QuecPython硬件基础功能/外部中断.md - - label: 5.3:串口 - file: QuecPython硬件基础功能/串口.md - - label: 5.4:I2C - file: QuecPython硬件基础功能/I2C.md - - label: 5.5:SPI - file: QuecPython硬件基础功能/SPI.md - - label: 5.6:ADC - file: QuecPython硬件基础功能/ADC.md - - label: 5.7:Timer - file: QuecPython硬件基础功能/Timer.md - - label: 5.8:PWM - file: QuecPython硬件基础功能/PWM.md - - label: 5.9:看门狗 - file: QuecPython硬件基础功能/看门狗.md + - label: '5.1: GPIO' + file: hardware-basic/gpio.md + - label: '5.2: 外部中断' + file: hardware-basic/extint.md + - label: '5.3: 串口' + file: hardware-basic/uart.md + - label: '5.4: I2C' + file: hardware-basic/i2c.md + - label: '5.5: SPI' + file: hardware-basic/spi.md + - label: '5.6: ADC' + file: hardware-basic/adc.md + - label: '5.7: Timer' + file: hardware-basic/timer.md + - label: '5.8: PWM' + file: hardware-basic/pwm.md + - label: '5.9: 看门狗' + file: hardware-basic/wdt.md -- label: 6:QuecPython 物联网基础功能 - file: QuecPython物联网基础功能/README.md +- label: '6: QuecPython 物联网基础功能' + file: iot-basic/README.md items: - - label: 6.1:天线、SIM 卡和网络注册 - file: QuecPython物联网基础功能/天线SIM卡和网络注册.md - - label: 6.2:TCP 与 UDP 通信 - file: QuecPython物联网基础功能/TCP与UDP通信.md - - label: 6.3:HTTP 通信 - file: QuecPython物联网基础功能/HTTP通信.md - - label: 6.4:MQTT 通信 - file: QuecPython物联网基础功能/MQTT通信.md - - label: 6.5:SNMP 通信 - file: QuecPython物联网基础功能/SNMP通信.md - - label: 6.6:WebSocket 通信 - file: QuecPython物联网基础功能/WebSocket通信.md - - label: 6.7:通信异常处理 - file: QuecPython物联网基础功能/通信异常处理.md + - label: '6.1: 天线、SIM 卡和网络注册' + file: iot-basic/preparation.md + - label: '6.2: TCP 与 UDP 通信' + file: iot-basic/tcp-and-udp.md + - label: '6.3: HTTP 通信' + file: iot-basic/http.md + - label: '6.4: MQTT 通信' + file: iot-basic/mqtt.md + - label: '6.5: WebSocket 通信' + file: iot-basic/websocket.md + - label: '6.6: 通信异常处理' + file: iot-basic/exceptions.md -- label: 7:QuecPython 云平台功能 - file: QuecPython云平台功能/README.md +- label: '7: QuecPython 云平台功能' + file: clouds/README.md items: - - label: 7.1:移远云 - file: QuecPython云平台功能/移远云.md - - label: 7.2:阿里云 - file: QuecPython云平台功能/阿里云.md - - label: 7.3:腾讯云 - file: QuecPython云平台功能/腾讯云.md - - label: 7.4:华为云 - file: QuecPython云平台功能/华为云.md - - label: 7.5:亚马逊云 - file: QuecPython云平台功能/亚马逊云.md - - label: 7.6:移动云 - file: QuecPython云平台功能/移远云.md - - label: 7.7:电信云 - file: QuecPython云平台功能/电信云.md - -- label: 8:QuecPython 硬件高级功能 - file: QuecPython硬件高级功能/README.md + - label: '7.1: 移远云' + file: clouds/quectel.md + - label: '7.2: 阿里云' + file: clouds/aliyun.md + - label: '7.3: 腾讯云' + file: clouds/tencent.md + - label: '7.4: 华为云' + file: clouds/huawei.md + - label: '7.5: 亚马逊云' + file: clouds/aws.md + - label: '7.6: 移动云' + file: clouds/onenet.md + - label: '7.7: 电信云' + file: clouds/ctyun.md + +- label: '8: QuecPython 硬件高级功能' + file: hardware-advanced/README.md items: - - label: 8.1:屏幕显示 - file: QuecPython硬件高级功能/屏幕显示.md - - label: 8.2:LVGL - file: QuecPython硬件高级功能/LVGL.md - - label: 8.3:摄像头 - file: QuecPython硬件高级功能/摄像头.md - - label: 8.4:低功耗 - file: QuecPython硬件高级功能/低功耗.md - - label: 8.5:音频和 TTS - file: QuecPython硬件高级功能/音频和TTS.md - - label: 8.6:外接存储 - file: QuecPython硬件高级功能/外接存储.md - - label: 8.7:外接以太网 - file: QuecPython硬件高级功能/外接以太网.md - - label: 8.8:矩阵键盘 - file: QuecPython硬件高级功能/矩阵键盘.md - - label: 8.9:BT 和 BLE - file: QuecPython硬件高级功能/BT和BLE.md - - label: 8.10:USB 网卡 - file: QuecPython硬件高级功能/USB网卡.md - - label: 8.11:外接 WiFi - file: QuecPython硬件高级功能/外接WiFi.md - -- label: 9:QuecPython 物联网高级功能 - file: QuecPython物联网高级功能/README.md + - label: '8.1: 屏幕显示' + file: hardware-advanced/screen.md + - label: '8.2: LVGL' + file: hardware-advanced/lvgl.md + - label: '8.3: 摄像头' + file: hardware-advanced/camera.md + - label: '8.4: 低功耗' + file: hardware-advanced/pm.md + - label: '8.5: 音频和 TTS' + file: hardware-advanced/audio.md + - label: '8.6: 外接存储' + file: hardware-advanced/ext-storage.md + - label: '8.7: 外接以太网' + file: hardware-advanced/ext-ethernet.md + - label: '8.8: 矩阵键盘' + file: hardware-advanced/matrix-keypad.md + - label: '8.9: BT 和 BLE' + file: hardware-advanced/bt-and-ble.md + - label: '8.10: USB 网卡' + file: hardware-advanced/usb-wireless-card.md + - label: '8.11: 外接 WiFi' + file: hardware-advanced/ext-wifi.md + +- label: '9: QuecPython 物联网高级功能' + file: iot-advanced/README.md items: - - label: 9.1:APN 和数据拨号 - file: QuecPython物联网高级功能/APN和数据拨号.md + - label: '9.1: APN 和数据拨号' + file: iot-advanced/apn-and-datacall.md - - label: 9.2:语音通话 - file: QuecPython物联网高级功能/语音通话.md + - label: '9.2: 语音通话' + file: iot-advanced/voicecall.md - - label: 9.3:短信 - file: QuecPython物联网高级功能/短信.md + - label: '9.3: 短信' + file: iot-advanced/sms.md - label: 9.4:定位 - file: QuecPython物联网高级功能/定位.md + label: '9.4: 定位' + file: iot-advanced/location.md - label: 9.5:OTA 升级 - file: QuecPython物联网高级功能/OTA升级.md + label: '9.5: OTA 升级' + file: iot-advanced/ota.md - label: 9.6:AES-128 加解密 - file: QuecPython物联网高级功能/AES-128加解密.md + label: '9.6: AES-128 加解密' + file: iot-advanced/aes128.md -- label: 10:其他开发资源 - file: 其他开发资源/README.md +- label: '10: 其他开发资源' + file: other-resources/README.md items: - - label: 10.1:QuecPython 编程框架 - file: 其他开发资源/QuecPython编程框架.md - - label: 10.2:HeliosSDK - file: 其他开发资源/HeliosSDK.md + - label: '10.1: QuecPython 编程框架' + file: other-resources/programming-framework.md + - label: '10.2: HeliosSDK' + file: other-resources/helios-sdk.md -- label: 11:量产相关 - file: 量产相关/README.md +- label: '11: 量产相关' + file: mass-production/README.md items: - - label: 11.1:脚本加密和固件打包 - file: 量产相关/脚本加密和固件打包.md - - label: 11.2:备份分区和数据安全区的使用 - file: 量产相关/备份分区和数据安全区的使用.md - - label: 11.3:量产工具使用 - file: 量产相关/量产工具使用.md - - label: 11.4:产测工具使用 - file: 量产相关/产测工具使用.md - - label: 11.5:硬件设计和生产注意事项 - file: 量产相关/硬件设计和生产注意事项.md - -- label: 12:解决方案介绍 - file: 解决方案介绍/README.md + - label: '11.1: 脚本加密和固件打包' + file: mass-production/encryption-and-packaging.md + - label: '11.2: 备份分区和数据安全区的使用' + file: mass-production/data-backup.md + - label: '11.3: 量产工具使用' + file: mass-production/production-tools.md + - label: '11.4: 产测工具使用' + file: mass-production/testing-tools.md + - label: '11.5: 硬件设计和生产注意事项' + file: mass-production/considerations.md + +- label: '12: 产品方案介绍' + file: solutions/README.md items: - - label: 12.1:DTU - file: 解决方案介绍/README.md - - label: 12.2:定位器 - file: 解决方案介绍/定位器.md - - label: 12.3:对讲机 - file: 解决方案介绍/对讲机.md - - label: 12.4:电表 - file: 解决方案介绍/电表.md - - label: 12.5:云喇叭 - file: 解决方案介绍/云喇叭.md - - label: 12.6:门磁开关 - file: 解决方案介绍/门磁开关.md - - label: 12.7:学生卡 - file: 解决方案介绍/学生卡.md - - label: 12.8:充电桩 - file: 解决方案介绍/充电桩.md - -- label: 13:附录 - file: 附录/README.md + - label: '12.1: DTU' + file: solutions/dtu.md + - label: '12.2: 定位器' + file: solutions/tracker.md + - label: '12.3: 对讲机' + file: solutions/poc.md + - label: '12.4: 电表' + file: solutions/smart-meter.md + - label: '12.5: 云喇叭' + file: solutions/payment-speaker.md + - label: '12.6: 门磁开关' + file: solutions/door-sensor.md + - label: '12.7: 学生卡' + file: solutions/student-card.md + - label: '12.8: 充电桩' + file: solutions/charging-pile.md + +- label: '13: 附录' + file: appendix/README.md items: - - label: 13.1:QuecPython 开发板板载资源列表 - file: 附录/QuecPython开发板板载资源列表.md - - label: 13.2:QuecPython 错误码汇总 - file: 附录/QuecPython错误码汇总.md - - label: 13.3:QuecPython 异常处理流程 - file: 附录/QuecPython异常处理流程.md + - label: '13.1: QuecPython 开发板板载资源列表' + file: appendix/evb-resources.md + - label: '13.2: QuecPython 错误码汇总' + file: appendix/error-code.md + - label: '13.3: QuecPython 异常处理流程' + file: appendix/exception-handling.md diff --git "a/docs/Getting_started/zh/\351\231\204\345\275\225/README.md" b/docs/Getting_started/zh/solutions/README.md similarity index 100% rename from "docs/Getting_started/zh/\351\231\204\345\275\225/README.md" rename to docs/Getting_started/zh/solutions/README.md