diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ADC\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ADC\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index 14101ba6516f263aea9616f97401a51ed1bf56e6..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ADC\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,38 +0,0 @@ -# BSP-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功能应用实例 - -- [读取环境光照强度](../外设应用开发/外设-亮度传感器应用开发.html) - -- [读取环境温度值](../外设应用开发/外设-温度传感器应用开发.html) - diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-Audio\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-Audio\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index aa3c41fe494c4d0b7e96fe67db9db9ee682703bd..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-Audio\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,240 +0,0 @@ -# BSP-Audio应用开发 - -## 硬件连接 - -| 开发板型号 | 开发板对应PIN脚 | 开发板上对应的连接位置 | 对应的音频通道 | -| -------------------------------------------------------- | ------------------------------ | ---------------------- | -------------- | -| EC600N_QuecPython_EVB_V2.0
EC600N_QuecPython_EVB_V3.1 | PIN21、PIN22 | J7 | 通道0 | -| EC600U_QuecPython_EVB_V2.0 | PIN21、PIN22
PIN109、PIN110 | J7
J6的PIN14、PIN15 | 通道0
通道2 | - -针对EC600N_QuecPython_EVB_2.0和EC600N_QuecPython_EVB_3.1 通道0的硬件连接图如下: - -喇叭直接开发板的SPK-、SPK+ - -image-20230208141755278 - -针对EC600U_QuecPython_EVB_2.0 通道0的硬件连接图如下: - -喇叭直接开发板的SPK-、SPK+,另外短接PIN40引脚 - -audio_03 - -针对EC600U_QuecPython_EVB_2.0 通道2的硬件连接图如下: - -喇叭直接开发板的J6的PIN14、PIN15引脚 - -![audio_03](../media/BSP应用开发/BSP_Audio_3.png) - -## GPIO查找 - -Q:拉高GPIO,PIN引脚如何查找对应的GPIO? - -A:请认真查看下面步骤。 - -注:不同型号对应PIN脚可能不同,对应的GPIO也不同,以原理图和wiki为准,以下以EC600N为例步骤查询: - -①查看原理图,找到AUDIO模块的CTRL对应的引脚。 - -![image-20230228171622911](../media/BSP应用开发/BSP_Audio_4.png) - -![image-20230228171622911](../media/BSP应用开发/BSP_Audio_5.png) - -②在原理图找到PIN40,然后移步到wiki上面查找对应的GPIO口即可。 - -![image-20230228171812796](../media/BSP应用开发/BSP_Audio_6.png) - - - -## 软件实现 - -### Audio - -下载验证: - -1. 根据测试场景,调整下面代码的注释。 - - ```python - import utime as time - import audio - from machine import Pin - import utime - - #以EC600NCNLF为例: - def example_audio_mp3(): - aud = audio.Audio(0) # 配置通道0 - # aud = audio.Audio(2) # 配置通道2 - aud.setVolume(2) #设置音量大小 - # 使能外接喇叭播放 - gpio=Pin(Pin.GPIO9, Pin.OUT, Pin.PULL_PD, 1) #GPIO配置拉高 - print(gpio.read()) #查看引脚电平状态 - # U: 表示用户目录, 将文件下载到 /usr 文件下 - # 以下格式选一种来演示 - aud.play(2, 1, "U:/audio_audio_haixiu.mp3") #mp3格式 - #aud.play(2, 1, "U:/audio_audio_connect_ok.amr") #amr格式 - # aud.play(2, 1, "U:/audio_audio_haixiu.wav") #wav格式 - pass - - if __name__ == "__main__": - example_audio_mp3() - - ``` - -2. 将随包的 audio_audio_haixiu.mp3 和修改好的 example_audio_file.py 文件下载到开发板中。 - -3. 运行 example_audio_file.py 脚本即可。 - - - -注意: - -以EC600N和EC600U为例验证(注意各个开发板引脚不同) - -- 对于EC600N的3.1V版本的开发板,配置通道0,需要GPIO拉高 -- 对于EC600N的2.0V版本的开发板,配置通道0,需要GPIO拉高 -- 对于EC600U的通道0的话,代码注释掉配置通道2,短接PIN40,需要GPIO拉高 -- 对于EC600U的通道2的话,代码注释掉配置通道0,接引脚J6的14、15引脚,需要GPIO拉高 - - - -### TTS - -下载验证: - -1.根据测试场景,调整下面代码的注释。 - -参数及详情请看wiki链接:[QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=tts) - -以下以EC600NCNLF_QuecPython_EVB_3.1 版本测试 - -```python -# -*- coding: UTF-8 -*- -#注意,python文件开头需要加上“-- coding: UTF-8 --” -import audio -import utime -from machine import Pin -# tts = audio.TTS(0) -tts = audio.TTS(2) -#参数具体看wiki -#tts播放中文示例: -gpio=Pin(Pin.GPIO9, Pin.OUT, Pin.PULL_PD, 1) #GPIO配置拉高 -print(gpio.read()) -tts.play(1, 1, 2, '移联万物,志存高远') - -#以下是各种场景使用,用到可以去掉注释,用不到可以忽略 -# 1. -#TTS引擎自动决定是以号码形式播放还是以数值的形式播放 -#TTS引擎以数值形式播放 -# tts.play(1,1,2, '[n2]12345') -# utime.sleep(2) -# #TTS引擎以号码形式播放 -# tts.play(1,1,2, '[n1]12345') -# utime.sleep(2) - -# 2. -#TTS引擎以默认语速5播放语音 -#TTS引擎以默认语速的0.5倍速播放语音 -# tts.play(1,1,2, '[s0]12345') -# utime.sleep(2) -# #TTS引擎以默认语速的2倍语速播放语音 -# tts.play(1,1,2, '[s10]12345') -# utime.sleep(3) - -# 3. -# 语调设置: -#TTS引擎以默认语调基频减64Hz播放语音 -# tts.play(1,1,2, '[t0]12345') -# utime.sleep(2) -# #TTS引擎以默认语调基频加128Hz播放语音 -# tts.play(1,1,2, '[t10]12345') - -# 4. -# 汉字指定拼音: -#汉字:声调用后接一位数字 1 ~ 5 分别表示阴平、阳平、上声、去声和轻声 5 个声调。 -# tts.play(1,1,2, '乐[=le4]') -# utime.sleep(2) -# tts.play(1,1,2, '乐[=yue4]') -# utime.sleep(2) - -# 5. -#变声,默认女声 -# tts.play(1, 1, 2, '[m51]移远通信,移联万物') #男生 -# utime.sleep(3) -# tts.play(1, 1, 2, '[m53]移远通信,客户第一') #女声 -# utime.sleep(3) -# tts.play(1, 1, 2, '[m54]移远通信,以人为本') #童声 -# utime.sleep(3) - - - -``` - -2.将随包的example_tts_file.py 文件下载到开发板中。 - -3.运行example_tts_file.py 脚本即可。 - - - -### Record - -下载验证: - -1.根据测试场景,调整下面代码的注释。 - -参数及详情请看wiki链接:[QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=record) - -以下以EC600NCNLF_QuecPython_EVB_3.1 版本测试 - -```python -import utime -import audio -from machine import Pin - - -flag = 1 -''' -外接喇叭播放录音文件,EC600N参数通道选择0,EC600U参数通道选择0或者2 -''' -aud = audio.Audio(0) -tts = audio.TTS(0) - -aud.setVolume(11) -#使能把电平拉高,GPIO的选择根据各个模块的audio引脚不同在wiki上选择不同的GPIO -audio_EN = Pin(Pin.GPIO9, Pin.OUT, Pin.PULL_PD, 1)#GPIO配置拉高 - -def record_callback(args): - global flag - print('file_name:{}'.format(args[0])) - print('file_size:{}'.format(args[1])) - print('record_sta:{}'.format(args[2])) - - record_sta = args[2] - if record_sta == 3: - print('The recording is over, play it') - tts.play(1, 0, 2, '录音结束,准备播放录音文件') - aud.play(1, 0, record.getFilePath(path)) - flag = 0 - elif record_sta == -1: - print('The recording failure.') - tts.play(1, 0, 2, '录音失败') - flag = 0 - -record = audio.Record() -record.start('U:/recordfile.wav',5) -record.end_callback(record_callback) -path='U:/recordfile.wav' - -while 1: - utime.sleep(1) - if flag: - pass - else: - break - -``` - -2.将随包的example_record_file.py 文件下载到开发板中。 - -3.运行example_record_file.py 脚本即可。 - - - diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ExtInt\345\274\225\350\204\232\344\270\255\346\226\255\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ExtInt\345\274\225\350\204\232\344\270\255\346\226\255\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index 4737cd695298a248d8f0c1f7b73f59003969c08f..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-ExtInt\345\274\225\350\204\232\344\270\255\346\226\255\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,81 +0,0 @@ -# BSP-ExtInt引脚中断应用开发 - -## Extlnt概述 - -​ GPIO介绍过后,接着介绍外部中断,普通GPIO可以随时查询Pin引脚的电平状态,但却不能及时发现电平的变化,而外部中断就能完美的解决这个问题。若设定了上升沿触发外部中断时,当电平从低电平上升到高电平瞬间,就会触发外部中断,从而在电平变化时立马执行回调函数。 - -### 功能描述 - -用于配置I/O引脚在发生外部事件时中断 - -### API介绍 - -[QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=extint) - -### 快速开发 - -#### PIN对应关系 - -示列: - -①查看原理图,找出按键PIN脚。(可咨询FAE获取或者Q群文件获取) - -BSP_Extlnt_1 - -②查看wiki里的machine-硬件功能模块下的Pin模块,可查找到PIN脚对应的GPIO。 - -image-20230223113733659 - -#### 命令行操作 - -使用QPYcom工具和模组进行交互,示例如下: - -以EC600NCNLF为例,详情Extlnt接口链接:[QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=extint) - -![image-20230223112920719](../media/BSP应用开发/BSP_Extlnt_3.png) - - - -#### 代码操作 - -```python -from machine import ExtInt -import utime -def fun1(args): - print(args) - print("key1 extint") -def fun2(args): - print(args) - print("key2 extint") -extint1 = ExtInt(ExtInt.GPIO13, ExtInt.IRQ_RISING, ExtInt.PULL_PD, fun1) #S4 kye1 -extint2 = ExtInt(ExtInt.GPIO12, ExtInt.IRQ_FALLING, ExtInt.PULL_PU, fun2) #S5 kye2 -extint1.enable() -extint2.enable() -while True: - utime.sleep_ms(200) -``` - -把上面的代码编写成.py文件,使用QPYcom工具下载到模组里面运行,按键按下key1、key2,即可看到以下结果显示: - -image-20230223112041989 - -## 名词解释 - -低电平:通常用0来表示低电平 - -高电平:通常用1来表示高电平 - -上升沿:从低电平上升到高电平的边沿 - -下降沿:从高电平上升到低电平的边沿 - -回调函数:一个普通函数,在满足设定条件下被触发执行这个函数 - -浮空:Pin引脚直出,没有默认电平,处于不稳定状态 - -上拉:Pin引脚内部有个电阻拉到VCC,默认为高电平 - -下拉:Pin引脚内部有个电阻拉到GND,默认为低电平 - -中断:停止执行当前的程序去执行另一段程序,这个过程叫中断 - diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-GPIO\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-GPIO\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index 8cc36eb68faef328dc3deb7e698af1099a5d1f40..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-GPIO\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,93 +0,0 @@ -# BSP-GPIO应用开发 - -## GPIO概述 - -​ GPIO:(General-purpose input/output),通用型之输入输出的简称。本文介绍如何使用QuecPython里的GPIO,GPIO通常用于连接驱动LED、蜂鸣器、继电器、读取外部IC的引脚电平状态等等. - -### 功能描述 - -GPIO可以输出高电平、低电平两种状态,设置为1即高电平,0即为低电平 - -![image-20210906154509891](../media/BSP应用开发/BSP_GPIO_1.png) - -GPIO可以读取外部电平状态,读到高电平返回1,读到低电平返回0 - -![image-20210906154519521](../media/BSP应用开发/BSP_GPIO_2.png) - - - -### API介绍 - -API链接:[PIN_API库](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin) - -### 快速开发 - -#### PIN对应关系 - -示列: - -①查看原理图,找出按键PIN脚。(可咨询FAE获取或者Q群文件获取) - -![image-20230216151528680](../media/BSP应用开发/BSP_GPIO_3.png) - -②查看wiki里的machine-硬件功能模块下的Pin模块,可查找到PIN脚对应的GPIO。 - -![image-20230216151558683](../media/BSP应用开发/BSP_GPIO_4.png) - - - -#### 命令行操作 - -使用QPYcom工具和模组进行交互,示例如下: - -以EC600NCNLF为例,详情Pin接口链接:[QuecPython 类库 (quectel.com)](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=pin) - -![image-20230202174401956](../media/BSP应用开发/BSP_GPIO_5.png) - - - -#### 代码操作 - -```python -from machine import Pin -import utime - -gpio1 = Pin(Pin.GPIO1, Pin.OUT, Pin.PULL_DISABLE, 0) -gpio2 = Pin(Pin.GPIO2, Pin.OUT, Pin.PULL_DISABLE, 0) -gpio3 = Pin(Pin.GPIO3, Pin.OUT, Pin.PULL_DISABLE, 0) - -while True: - gpio1.write(1) - gpio2.write(1) - gpio3.write(1) - print('Output high level') - utime.sleep_ms(500) - gpio1.write(0) - gpio2.write(0) - gpio3.write(0) - print('Output low level') - utime.sleep_ms(500) -``` - -把上面的代码编写成.py文件,使用QPYcom工具下载到模组里面运行,即可看到以下结果显示。 - -![image-20230202174657701](../media/BSP应用开发/BSP_GPIO_6.png) - - - -## 名词解释 - -低电平:通常用0来表示低电平 - -高电平:通常用1来表示高电平 - -浮空:Pin引脚直出,没有默认电平,处于不稳定状态 - -上拉:Pin引脚内部有个电阻拉到VCC,默认为高电平 - -下拉:Pin引脚内部有个电阻拉到GND,默认为低电平 - -输入:Pin引脚的电平状态随外部变化 - -输出:Pin引脚的电平驱动外围电路 - diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-PWM\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-PWM\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index d73149d9d63a40c77277693256d6b073262265ee..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-PWM\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,55 +0,0 @@ -# BSP-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功能应用实例 - -- 暂无。 \ No newline at end of file diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/README.md" "b/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/README.md" deleted file mode 100644 index 128017ca9eab0d0d3c68d2166423030ad918c784..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/README.md" +++ /dev/null @@ -1,17 +0,0 @@ -# BSP应用开发 - -BSP应用开发主要介绍模组自带外设功能的基础知识及入门测试操作,例如GPIO、UART等。部分测试需要依赖外设设备,本部分内容主要介绍基本概念和理论,实际操作验证通过文章最后的链接跳转到外设应用文档部分。 - -# BSP应用开发文档目录 - -- [BSP-Audio应用开发](BSP-Audio应用开发.md) -- [BSP-GPIO应用开发](BSP-GPIO应用开发.md) -- [BSP-ExtInt引脚中断应用开发](BSP-ExtInt引脚中断应用开发.md) -- [BSP-UART应用开发](BSP-UART应用开发.md) -- [BSP-IIC(I2C)应用开发](BSP-IIC(I2C)应用开发.md) -- [BSP-SPI应用开发](BSP-SPI应用开发.md) -- [BSP-ADC应用开发](BSP-ADC应用开发.md) -- [BSP-PWM应用开发](BSP-PWM应用开发.md) -- [BSP-Timer应用开发](BSP-Timer应用开发.md) -- [BSP-RTC应用开发](BSP-RTC应用开发.md) -- [BSP-WDT看门狗应用开发](BSP-WDT看门狗应用开发.md) \ No newline at end of file diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" "b/docs/Getting_started/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" deleted file mode 100644 index bbd24906de52c7d68ae208c10900b0c6e5d7b57f..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" +++ /dev/null @@ -1,64 +0,0 @@ -# OTA升级-文件 - -## 什么是OTA升级-文件 - -OTA:Over-the-Air Technology空中下载技术,是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。 - -OTA升级-文件就是利用这项技术对模块进行文件升级。在QuecPython中该功能接口为[APP_FOTA](../../API_reference/zh/QuecPython类库/app_fota.html)。为阅读体验以下均命名为APP_FOTA。 - -## 怎么使用APP_FOTA - -### 升级准备 - -在之前的引言中已经说到OTA升级需要使用到HTTP服务器作为升级内容的存放点。对于APP_FOTA而言,服务器需要存储客户需要升级文件内容。此部分工作由客户自主完成。目的就是得到一个可以访问下载到该文件的URL地址即可。 - -### 硬件设计 - -APP_FOTA升级主要为网络侧与模块内部交互,除前提条件模块需要组网成功外无需其他外围硬件支持。 - -### 软件应用 - -QuecPython中APP_FOTA功能支持单文件下载与批量文件下载。API接口分别为:**fota.download(url, file_name)**与**fota.bulk_download(info=[])**,有关API的详细介绍请参考[APP_FOTA](../../API_reference/zh/QuecPython类库/app_fota.html)。 - -需要注意是:调用APP_FOTA接口后文件不是直接下载到**usr**分区(模块存放用户文件的分区),而是下载到一个临时的**.updater**文件夹中。该文件夹可能存在与**usr.updater**文件夹下,也可能存在于**./fota/usr/.updater**。但对于实际使用不需要关注这些。只需了解APP_FOTA后文件并非直接存在**usr**目录,需要**fota.set_update_flag()**设置升级标志位后重启模组才会自动将对应文件搬运至**usr**目录。 - -示例代码如下: - -```python -import app_fota -from misc import Power -import utime as time - - -files = ["000_Grey_Test.py"] -download_list = [] -url = r'%s' % "http://112.31.84.164:8300/upload/Grey/" - -for file in files: - download_list.append({'url': (url + file), 'file_name': '/usr/%s' % file}) - -if download_list: - print("downlist: %d\r\n" % len(download_list), download_list) - fota = app_fota.new() - result = fota.bulk_download(download_list) - fota.set_update_flag() - - print("update ....", result) - time.sleep(1) - Power.powerRestart() # 重启模块 -``` - -## APP_FOTA文件下载测试 - -使用QPYcom工具和模组进行交互,下载示例代码至模组进行运行。 - -下载DEMO代码 - -APP_FOTA_DEMO运行前: - -![APP_FOTA_1](media/APP_FOTA_1.jpg) - -APP_FOTA_DEMO运行后: - -![APP_FOTA_2](media/APP_FOTA_2.jpg) - diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/README.md" "b/docs/Getting_started/zh/OTA\345\215\207\347\272\247/README.md" deleted file mode 100644 index 3eb800034fb0f63ce26d7e90bee4c133ab38fc3b..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/README.md" +++ /dev/null @@ -1,8 +0,0 @@ -# OTA升级 - -OTA:Over-the-Air Technology空中下载技术,是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。QuecPython的OTA升级包含两部分:[OTA升级-固件](OTA升级-固件.md)及[OTA升级-文件](OTA升级-文件.md)。由于此部分功能测试需用到HTTP服务器作为升级内容的存放点,该部分内容先介绍基本概念和理论,实际操作以操作演示为主进行讲解。 - -# OTA升级文档目录 - -- [OTA升级-固件](OTA升级-固件.md) -- [OTA升级-文件](OTA升级-文件.md) \ No newline at end of file diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_1.jpg" "b/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_1.jpg" deleted file mode 100644 index 067326f9d71975013cd7ccf17d392ad384ce459a..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_1.jpg" and /dev/null differ diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" "b/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" deleted file mode 100644 index ce6d54bf961a433073ff7748e657323ec476b0ec..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" and /dev/null differ diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_DEMO.py" "b/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_DEMO.py" deleted file mode 100644 index cd5cb23b61120eed5c454eae9fc7fd8f7046c1fe..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_DEMO.py" +++ /dev/null @@ -1,22 +0,0 @@ -import app_fota -from misc import Power -import utime as time - - -files = ["000_Grey_Test.py"] - -download_list = [] -url = r'%s' % "http://112.31.84.164:8300/upload/Grey/" - -for file in files: - download_list.append({'url': (url + file), 'file_name': '/usr/%s' % file}) - -if download_list: - print("downlist: %d\r\n" % len(download_list), download_list) - fota = app_fota.new() - result = fota.bulk_download(download_list) - fota.set_update_flag() - - print("update ....", result) - time.sleep(1) - Power.powerRestart() # 重启模块 diff --git "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/README.md" "b/docs/Getting_started/zh/QuecPython\344\272\221\345\271\263\345\217\260\345\212\237\350\203\275/README.md" similarity index 100% rename from "docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/README.md" rename to "docs/Getting_started/zh/QuecPython\344\272\221\345\271\263\345\217\260\345\212\237\350\203\275/README.md" diff --git "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/QuecPython\345\205\245\351\227\250\345\255\246\344\271\240\350\267\257\347\272\277.md" "b/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/QuecPython\345\205\245\351\227\250\345\255\246\344\271\240\350\267\257\347\272\277.md" deleted file mode 100644 index 6ebe614882230d4224abccbee7fba0f1d5a22b25..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/QuecPython\345\205\245\351\227\250\345\255\246\344\271\240\350\267\257\347\272\277.md" +++ /dev/null @@ -1,45 +0,0 @@ -# QuecPython 入门学习路线 - - QuecPython 移植于 MicroPython 开源库,开发者在移远通信模块上 使 用 MicroPython 即可调用模块软件功能和外部硬件接口,进行二次开发。与open C相比,QuecPython开发具有轻松入门、语法简介、随写随测等优点,大大降低了用户开发学习的门槛。 - -## 入门要求 - -物联网开发向上承接了互联网,向下承接了嵌入式硬件。QuecPython开发需要有一定的嵌入式开发经验,了解相关硬件知识,API接口等。 - -## 语法学习 - -QuecPython移植于MicroPython,无论是在功能接口定义还是目录结构形式都与MicroPython保持高度的一致。MicroPython是Python3语言的精简高效实现,开发者在入门学习时因掌握基础的Pyhton3语法。需要注意的是Python3与QuecPython只是语法上兼容,脚本里导入的库和函数会存在差异,不能将电脑端运行的脚本放在QuecPyhton上运行,QuecPython相关库可参考官网WIKI。 - -## 开发板选型 - -目前QuecPython的开发板有QuecPython 开发板、核心板和DTU开发板等,用户可根据自身需求选择对应的开发板。如果是初学者可购买QuecPython 开发板,它资源相对丰富,适合入门学习。其他两种型号开发板可用于项目调试上,只需要用到部分硬件资源。 - -## 快速上手 - -一、Hello World打印 - -1.开发板接入电脑,需要安装驱动和烧录模块固件,具体的操作方法参照《QPYcom工具使用说明》 - -2.hello world打印 - -(1)交互窗口打印 - -如下图所示,使用QPYcom工具,端口连接“QuecPython的交互端口”,选择“交互”界面,进行如下交互打印。 - -![](E:\QuecPython网站搬移\V1\teedoc_with_qpydoc\docs\development_guide\zh\media\QuecPython快速入门\快速入门_入门学习_1.jpg) - -(2)编写*test_helloworld.py*文件打印 - -创建*test_helloworld.py*文件,编写脚本如下所示 - -```python -import utime # 导入定时模块 -print_num = 5 # 定义打印次数 -while print_num: - print("hello world") - print_num -= 1 # 自减 - utime.sleep(2) # 延迟2秒 -``` - - - diff --git "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/README.md" "b/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/README.md" deleted file mode 100644 index 264592ff2d6bc53c1ed7bf6566b206aad5bbb544..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/README.md" +++ /dev/null @@ -1,9 +0,0 @@ -# QuecPython快速入门 - -QuecPython快速入门是每一位开发者拿到每一块新的模组或者开发板都必须看的一篇文档,在这里你可以快速的学习到如何搭建好QuecPython的开发环境,测试刚到手的模组。 - -# QuecPython快速入门文档目录 - -- [QuecPython入门学习路线](QuecPython入门学习路线.html) -- [从Python到MicroPython](从Python到MicroPython.html) -- [从AT命令到QuecPython](从AT命令到QuecPython.html) \ No newline at end of file diff --git "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216AT\345\221\275\344\273\244\345\210\260QuecPython.md" "b/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216AT\345\221\275\344\273\244\345\210\260QuecPython.md" deleted file mode 100644 index d5596f6d82ee47fcd05261901e09d15e87a64249..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216AT\345\221\275\344\273\244\345\210\260QuecPython.md" +++ /dev/null @@ -1,45 +0,0 @@ -# 从 AT 到 QuecPython - -## 关于模块 - -无线通信模块(模组)是实现数据上云和远程通信的必不可少的组件,在各类物联网场景中已经得到了极为广泛的应用。其本质可理解为一种将主芯片、无线基带、存储器、功放等器件集成在一起,用于完成本地电路与云端服务的数据通信功能的高密度、小体积、带屏蔽罩的“核心板”。 - -就像电脑插上网卡就可以上网一样,在嵌入式系统中加入了模块,系统就具有了连接无线网络的可能性。 - -![](E:\QuecPython网站搬移\V1\teedoc_with_qpydoc\docs\development_guide\zh\media\QuecPython快速入门\快速入门_AT_1.jpg) - -​ EC200A_TE-A_EVB板 - -## 模块的标准开发方式 - -在大部分应用场景中,本地电路上的主处理器(主控)通过特定的接口(通常为串口)与模块建立连接,发送特定的指令(AT 指令)控制模块实现包括数据上传、无线通话、设备定位等在内的一系列功能。这种工作方式通常称为标准模式或传统模式,是当前应用最普遍、历史最悠久的模块使用方式。 - -![](E:\QuecPython网站搬移\V1\teedoc_with_qpydoc\docs\development_guide\zh\media\QuecPython快速入门\快速入门_AT_2.png) - -如上图所示,在标准模式中,通信模块是作为主控(MCU,如 STM32)的一个外设的角色而存在的。两者之间通过 UART 串口相连接,基于 AT 指令进行双向交互。系统的主要业务逻辑(用户应用,APP)在 MCU 中运行,其他外设通过 UART、I2C 等接口与 MCU 相连,受 MCU 控制。 - -在标准模式下,主控中运行的用户 APP 需要包含较为复杂的 AT 指令发送和解析功能,例如对于 URC(Unsolicited Result Code,非请求结果码)的处理等。对于新手而言,整体开发难度较大。 - -## 模块的 OpenCPU 开发方式 - -模块所搭载的主芯片为了满足无线通信的需要,通常具有较高的性能和较多的资源,同时也配备了包括 GPIO、ADC、I2C 等在内的丰富的外设接口,运行着较为完备的操作系统(RTOS 或 Linux),因而在一定程度上具备了取代传统模式中的主控的能力。部分厂家会开放模块内部的软硬件资源供用户使用。这种使用模块作为主处理器,对模块进行二次开发的应用模式常被称为 OpenCPU(不同厂家可能有不同的称呼,如移远的 QuecOpen、芯讯通的 OpenLinux 等)。 - -![](E:\QuecPython网站搬移\V1\teedoc_with_qpydoc\docs\development_guide\zh\media\QuecPython快速入门\快速入门_AT_3.png) - -如图所示,与标准模式相比,OpenCPU 模式由于将模块本身作为主控使用,用户应用(APP)直接置于模块内部运行,整个系统中无需外部处理器(MCU),因而可以有效地达到精简硬件设计、降低器件成本、缩小产品尺寸的目的。在单片机价格居高不下的当下,OpenCPU 方案受到了众多公司的青睐。 - -但是,OpenCPU 方案也具有较为明显的局限性。由于这一模式通常需要用户直接在模块底层运行的操作系统的基础上进行开发,技术门槛较高,传统的、不具备系统级开发经验的单片机开发者很难适应。其次,由于 OpenCPU 技术支持难度大,模块厂家通常只向大客户提供相关的工具和资料,入门较为不便。最后,不同厂家、不同型号的模块,其 OpenCPU 开发环境和开发工具存在较大差别,用户编写的程序在不同模块间的移植存在一定的难度。 - -## 使用脚本语言开发模块 - -传统的 OpenCPU 开发通常使用 C 语言,因此也被称作 CSDK 开发。用户需要直接修改和控制底层的操作系统,具有较高的难度和一定的风险性。部分模块厂商通过在 CSDK 的基础上移植解释器 / 虚拟机的方式,使得用户可以使用 Lua、Python 等脚本语言对模块进行开发。 - -与 C 语言相比,脚本语言在语法和使用方式上普遍较为简单,开发者无需花费太多时间和精力即可掌握,并可相对轻松地实现业务逻辑,便于项目的快速开发和功能迭代。同时,在使用脚本语言进行开发时,开发者通常也无需考虑内存回收、基础任务调度等底层细节,显著降低了模块二次开发的技术门槛。最后,对于不同型号的模块,只要它们运行的是同一种脚本语言解释器,用户编写的程序通常只需少量修改(甚至无需修改)即可完成移植。 - -## 关于 QuecPython - -Python 是一种热门的解释型脚本语言。因其语法简单、功能丰富的特点,被广泛应用于服务器、数据库、图像处理、人工智能等领域。MicroPython 是 Python 语言的精简高效实现。它基本兼容 Python 3.4 版本的语法特性,同时进行了针对性优化,使其能够在微控制器和其他资源受限的环境中运行。目前,MicroPython 已经支持包括 STM32、ESP32、RP2040 在内的多种硬件平台。 - -移远将 MicroPython 移植到了多款 4G 和 NB-IoT 模块上,并增加了大量与无线通信相关的功能库,称之为 QuecPython。由此,用户可以使用 MicroPython 脚本对移远通信模块进行快速便捷的二次开发。 - -目前,QuecPython 方案已经在智能家电、工业控制、智慧交通等场景得到应用。各类公司基于 QuecPython 方案推出的产品包括车载定位器、DTU、4G 对讲机等数十种。 \ No newline at end of file diff --git "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216Python\345\210\260MicroPython.md" "b/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216Python\345\210\260MicroPython.md" deleted file mode 100644 index 6570738f8c27778ea97d1299450533e64642b675..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\344\273\216Python\345\210\260MicroPython.md" +++ /dev/null @@ -1,21 +0,0 @@ -# 从 Python 到 MicroPython - -Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。作为一种代表极简主义的编程语言,和传统的 C/C++、Java、C# 等语言相比,Python 对代码格式的要求相对宽松。在开发 Python 程序时,可以专注于解决问题本身,而不用顾虑语法的细枝末节。 - -下方展示了一个使用 Python 语言编写的 while 循环示例。可以看出,Python 语法较为简洁,易于掌握,可读性较高。 - -```python -x = 256 -total = 0 -while x > 0: - if total > 500: - break - total += x - x = x // 2 -``` - -作为一种解释型语言,Python 具备较好的可移植性,可在多种不同软硬件平台上运行。使用 Python 编写的程序不需提前编译成二进制代码,可以直接从源代码运行。此外,Python 具有脚本语言中最丰富和强大的类库。这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问等绝大部分应用场景。用 Python 语言开发程序时,许多功能可以通过调用库实现,开发者通常无需从零编写。 - -MicroPython 可理解为一个可以运行在微处理器上的 Python 解释器,它使得用户可以编写 Python 脚本来控制硬件。MicroPython 继承了 Python 的完备的 REPL 交互功能,可以通过 REPL 串口随时输入代码执行,便于测试。MicroPython 还内置了文件系统,用户可以随意向设备端上传任意文件内容,并对目录结构进行修改。基于这一点,设备端可以同时储存多个程序脚本和其他文件,用户可根据需要手动选择并运行,类似于手机 App 的机制,极为灵活。此外,得益于 Python 解释型语言的特性,用户在使用 MicroPython 进行开发时,无需因为代码的更改而反复编译代码和烧录固件,仅需将修改过的代码重新上传至设备内即可。 - -目前,MicroPython 已经支持在包括 STM32、Raspberry Pi Pico、ESP32 等数十种硬件平台上运行。 \ No newline at end of file diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/README.md" "b/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" similarity index 100% rename from "docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/README.md" rename to "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" diff --git "a/docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-UART\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/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" similarity index 100% rename from "docs/Getting_started/zh/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP-UART\345\272\224\347\224\250\345\274\200\345\217\221.md" rename to "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" diff --git "a/docs/Getting_started/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\345\233\272\344\273\266.md" "b/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" similarity index 100% rename from "docs/Getting_started/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\345\233\272\344\273\266.md" rename to "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" diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP.xxx.png" "b/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" similarity index 100% rename from "docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP.xxx.png" rename to "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" diff --git "a/docs/Getting_started/zh/media/OTA\345\215\207\347\272\247/OTA.xxx.png" "b/docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/README.md" similarity index 100% rename from "docs/Getting_started/zh/media/OTA\345\215\207\347\272\247/OTA.xxx.png" rename to "docs/Getting_started/zh/QuecPython\347\263\273\347\273\237\345\212\237\350\203\275/README.md" diff --git a/docs/Getting_started/zh/README.md b/docs/Getting_started/zh/README.md index 558b86529c37057bc31140346083276d7ff68ab2..df298f90b9e29b792fbc821cdd377615f3fd54a7 100644 --- a/docs/Getting_started/zh/README.md +++ b/docs/Getting_started/zh/README.md @@ -1,14 +1,224 @@ -# 开发指南 +# 目录 -开发指南主要包括QuecPython的入门操作和一些功能使用案例、测试方法等。 +
+ 1:基础知识 -# 开发指南文档目录 +- [1.1:物联网和低代码开发](./基础知识/物联网和低代码开发.md) -- [QuecPython快速入门](./QuecPython快速入门/README.md) -- [BSP应用开发](./BSP应用开发/README.md) -- [OTA升级](./OTA升级/README.md) -- [多线程应用开发](./多线程应用开发/README.md) -- [外设应用开发](./外设应用开发/README.md) -- [网络通信应用开发](./网络通信应用开发/README.md) -- ... +- [1.2:无线通信模块简介]() +- [1.3:QuecPython 简介]() + +- [1.4:硬件选型]() + +
+ +
+ 2:快速入门 + +- [2.1:准备工作]() + +- [2.2:上电与连接]() + +- [2.3:固件烧录]() + +- [2.4:QPYcom 基本操作]() + +
+ +
+ 3:microPython 语言基础 + +- [3.1:基本语法规则]() + +- [3.2:变量和运算]() + +- [3.3:程序流程控制]() + +- [3.4:常用容器类型]() + +- [3.5:函数]() + +
+ +
+ 4:QuecPython 系统功能 + +- [4.1:系统信息]() + +- [4.2:日志功能]() + +- [4.3:文件管理]() + +- [4.4:时间功能]() + +- [4.5:数据格式转换]() + +- [4.6:电源管理]() + +- [4.7:内存管理]() + +- [4.8:多线程]() + +
+ +
+ 5:QuecPython 硬件基础功能 + +- [5.1:GPIO]() + +- [5.2:外部中断]() + +- [5.3:串口]() + +- [5.4:I2C]() + +- [5.5:SPI]() + +- [5.6:ADC]() + +- [5.7:Timer]() + +- [5.8:PWM]() + +- [5.9:看门狗]() + +
+ +
+ 6:QuecPython 物联网基础功能 + +- [6.1:天线、SIM 卡和网络注册]() + +- [6.2:TCP 与 UDP 通信]() + +- [6.3:HTTP 通信]() + +- [6.4:MQTT 通信]() + +- [6.5:SNMP 通信]() + +- [6.6:WebSocket 通信]() + +- [6.7:通信异常处理]() + +
+ +
+ 7:QuecPython 云平台功能 + +- [7.1:移远云]() + +- [7.2:阿里云]() + +- [7.3:腾讯云]() + +- [7.4:华为云]() + +- [7.5:亚马逊云]() + +- [7.6:移动云]() + +- [7.7:电信云]() + +
+ +
+ 8:QuecPython 硬件高级功能 + +- [8.1:屏幕显示]() + +- [8.2:LVGL]() + +- [8.3:摄像头]() + +- [8.4:低功耗]() + +- [8.5:音频和 TTS]() + +- [8.6:外接存储]() + +- [8.7:外接以太网]() + +- [8.8:矩阵键盘]() + +- [8.9:BT 和 BLE]() + +- [8.10:USB 网卡]() + +- [8.11:外接 WiFi]() + +
+ +
+ 9:QuecPython 物联网高级功能 + +- [9.1:APN 和数据拨号]() + +- [9.2:语音通话]() + +- [9.3:短信]() + +- [9.4:定位]() + +- [9.5:OTA 升级]() + +- [9.6:AES-128 加解密]() + +
+ +
+ 10:其他开发资源 + +- [10.1:QuecPython 编程框架]() + +- [10.2:HeliosSDK]() + +
+ +
+ 11:量产相关 + +- [11.1:脚本加密和固件打包]() + +- [11.2:备份分区和数据安全区的使用]() + +- [11.3:量产工具使用]() + +- [11.4:产测工具使用]() + +- [11.5:硬件设计和生产注意事项]() + +
+ +
+ 12:解决方案介绍 + +- [12.1:DTU]() + +- [12.2:定位器]() + +- [12.3:对讲机]() + +- [12.4:电表]() + +- [12.5:云喇叭]() + +- [12.6:门磁开关]() + +- [12.7:学生卡]() + +- [12.8:充电桩]() + +
+ +
+ 13:附录 + +- [13.1:QuecPython 开发板板载资源列表]() + +- [13.2:QuecPython 错误码汇总]() + +- [13.3:QuecPython 异常处理流程]() + +
diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_ADC_0.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_ADC_0.png" deleted file mode 100644 index 4a1c10f5f4a3dbaf17ed0aed577e9d0c6de13e2c..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_ADC_0.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_1.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_1.png" deleted file mode 100644 index fcb08d697c48526a3d31d0de3559e2453ac06f98..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_1.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_2.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_2.png" deleted file mode 100644 index 659f13c654502c31389d77c146dfd8d03a2748d0..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_2.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_3.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_3.png" deleted file mode 100644 index e3e33b45a92fb5c5c6f00f117ad026a3dd7a16a4..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_3.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_4.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_4.png" deleted file mode 100644 index 878de8f049992468a6d825b6845825b45893f17f..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_4.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_5.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_5.png" deleted file mode 100644 index f64bad3af1b232c354bf1dbe4b6c7faa2f59ef58..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_5.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_6.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_6.png" deleted file mode 100644 index 7e7ea53562aadf68516d9d3d72824bc274bc8ea5..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Audio_6.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_1.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_1.png" deleted file mode 100644 index dc1213e8cc6352144694f13f1eca7c8995595321..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_1.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_2.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_2.png" deleted file mode 100644 index 43a9b0cbedd0336dfea46e2e8a68c027222412cc..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_2.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_3.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_3.png" deleted file mode 100644 index 7b1cceab1dfa140b2a122ec487af5c74348ad3ff..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_3.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_4.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_4.png" deleted file mode 100644 index 9b5ffe2f6f12b049fdc05861a1eb26e4eda13c71..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_Extlnt_4.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_1.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_1.png" deleted file mode 100644 index b9bc03507e44a7147e7785e78f947a4fabc6c704..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_1.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_2.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_2.png" deleted file mode 100644 index 57b30c80fa4a47470d969e0ac716a9d5f2f063d3..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_2.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_3.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_3.png" deleted file mode 100644 index 261173b350be8348cb845bcfdff2544481956ee7..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_3.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_4.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_4.png" deleted file mode 100644 index 9fe37930e9e3e811a6163bac692f6f37792c8c67..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_4.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_5.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_5.png" deleted file mode 100644 index 77b668003fbc2b929d01d3b714aae5ca301ecfa4..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_5.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_6.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_6.png" deleted file mode 100644 index 2879e2ea4dc7ff0a6294d2f2b034e10c8fbce37f..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_GPIO_6.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_0.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_0.png" deleted file mode 100644 index aec7390f55748fce445af07cdd78f9acdfc461bd..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_0.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_1.png" "b/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_1.png" deleted file mode 100644 index 31a3e7b62dcdbd2c0691b809bbbdb9823e79c825..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/BSP\345\272\224\347\224\250\345\274\200\345\217\221/BSP_PWM_1.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_1.jpg" "b/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_1.jpg" deleted file mode 100644 index 1fbd574da096010ab53817f8e3c59470981c2ea6..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_1.jpg" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_2.png" "b/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_2.png" deleted file mode 100644 index 6d8b9da3bb73c70d8421a4149e1ceeabbdc3dfd0..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_2.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_3.png" "b/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_3.png" deleted file mode 100644 index 3ca1d6d734f837a8b9ad246ee701ce022c2c3620..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_AT_3.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_\345\205\245\351\227\250\345\255\246\344\271\240_1.jpg" "b/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_\345\205\245\351\227\250\345\255\246\344\271\240_1.jpg" deleted file mode 100644 index 35853a3f265a6b4be9851fc77e633b916f5ae303..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/QuecPython\345\277\253\351\200\237\345\205\245\351\227\250/\345\277\253\351\200\237\345\205\245\351\227\250_\345\205\245\351\227\250\345\255\246\344\271\240_1.jpg" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_0.png" "b/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_0.png" deleted file mode 100644 index 42861328ae75675564c189c91942a92ab6006bdf..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_0.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_1.png" "b/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_1.png" deleted file mode 100644 index 7b46a98d18c309ab93adec062eca7e6ec66ad8ac..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_1.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_2.png" "b/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_2.png" deleted file mode 100644 index 89a36362d7d649d47b5f7a502b144d827aca9019..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276_\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250_2.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-Queue.png" "b/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-Queue.png" deleted file mode 100644 index 9896a301f381c4843277fdf012debb71d5f451f5..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-Queue.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-allocate_lock.png" "b/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-allocate_lock.png" deleted file mode 100644 index 05f76571f08c16fa8c36e966b0a7c849fb7a168d..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-allocate_lock.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-start_new_thread.png" "b/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-start_new_thread.png" deleted file mode 100644 index e84107a49481f4e822eea1652a84180e6342b125..0000000000000000000000000000000000000000 Binary files "a/docs/Getting_started/zh/media/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/_thread-start_new_thread.png" and /dev/null differ diff --git "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-LCD\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/microPython\350\257\255\350\250\200\345\237\272\347\241\200/README.md" similarity index 100% rename from "docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-LCD\345\272\224\347\224\250\345\274\200\345\217\221.md" rename to "docs/Getting_started/zh/microPython\350\257\255\350\250\200\345\237\272\347\241\200/README.md" diff --git a/docs/Getting_started/zh/sidebar.yaml b/docs/Getting_started/zh/sidebar.yaml index 4bf99ba4e36c44fb39a271cad5eb1c0e540b6c83..072c898835028adebc614388e105afb958c9be49 100644 --- a/docs/Getting_started/zh/sidebar.yaml +++ b/docs/Getting_started/zh/sidebar.yaml @@ -1,87 +1,228 @@ items: -- label: QuecPython快速入门 - file: QuecPython快速入门/README.md +- label: 1:基础知识 + file: 基础知识/README.md items: - - label: QuecPython入门学习路线 - file: QuecPython快速入门/QuecPython入门学习路线.md - - label: 从Python到MicroPython - file: QuecPython快速入门/从Python到MicroPython.md - - label: 从AT命令到QuecPython - file: QuecPython快速入门/从AT命令到QuecPython.md -- label: BSP应用开发 - file: BSP应用开发/README.md + - label: 1.1:物联网和低代码开发 + file: 基础知识/物联网和低代码开发.md + - label: 1.2:无线通信模块简介 + file: 基础知识/无线通信模块简介.md + - label: 1.3:QuecPython 简介 + file: 基础知识/QuecPython 简介.md + - label: 1.4:硬件选型 + file: 基础知识/硬件选型.md + +- label: 2:快速入门 + file: 快速入门/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: 3:microPython 语言基础 + file: microPython语言基础/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: 4:QuecPython 系统功能 + file: QuecPython系统功能/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: 5:QuecPython 硬件基础功能 + file: QuecPython硬件基础功能/README.md items: - - label: BSP-Audio应用开发 - file: BSP应用开发/BSP-Audio应用开发.md - - label: BSP-GPIO应用开发 - file: BSP应用开发/BSP-GPIO应用开发.md - - label: BSP-ExtInt引脚中断应用开发 - file: BSP应用开发/BSP-ExtInt引脚中断应用开发.md - - label: BSP-UART应用开发 - file: BSP应用开发/BSP-UART应用开发.md - - label: BSP-IIC(I2C)应用开发 - file: BSP应用开发/BSP-IIC(I2C)应用开发.md - - label: BSP-SPI应用开发 - file: BSP应用开发/BSP-SPI应用开发.md - - label: BSP-ADC应用开发 - file: BSP应用开发/BSP-ADC应用开发.md - - label: BSP-PWM应用开发 - file: BSP应用开发/BSP-PWM应用开发.md - - label: BSP-Timer定时器应用开发 - file: BSP应用开发/BSP-Timer定时器应用开发.md - - label: BSP-RTC应用开发 - file: BSP应用开发/BSP-RTC应用开发.md - - label: BSP-WDT看门狗应用开发 - file: BSP应用开发/BSP-WDT看门狗应用开发.md -- label: OTA升级 - file: OTA升级/README.md + + - 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: 6:QuecPython 物联网基础功能 + file: QuecPython物联网基础功能/README.md items: - - label: OTA升级-固件 - file: OTA升级/OTA升级-固件.md - - label: OTA升级-文件 - file: OTA升级/OTA升级-文件.md -- label: 多线程应用开发 - file: 多线程应用开发/README.md + + - 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: 7:QuecPython 云平台功能 + file: QuecPython云平台功能/README.md items: - - label: 多线程-创建线程 - file: 多线程应用开发/多线程-创建线程.md - - label: 多线程-互斥锁应用 - file: 多线程应用开发/多线程-互斥锁应用.md - - label: 多线程-消息队列应用 - file: 多线程应用开发/多线程-消息队列应用.md -- label: 外设应用开发 - file: 外设应用开发/README.md + + - 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 items: - - label: 外设-摄像头应用开发 - file: 外设应用开发/外设-摄像头应用开发.md - - label: 外设-外扩存储应用开发 - file: 外设应用开发/外设-外扩存储应用开发.md - - label: 外设-矩阵键盘应用开发 - file: 外设应用开发/外设-矩阵键盘应用开发.md - - label: 外设-外挂以太网芯片应用开发 - file: 外设应用开发/外设-外挂以太网芯片应用开发.md - - label: 外设-外挂WiFi应用开发 - file: 外设应用开发/外设-外挂WiFi应用开发.md - - label: 外设-亮度传感器应用开发 - file: 外设应用开发/外设-亮度传感器应用开发.md - - label: 外设-温度传感器应用开发 - file: 外设应用开发/外设-温度传感器应用开发.md -- label: 网络通信应用开发 - file: 网络通信应用开发/README.md + + - 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 + items: + + - label: 9.1:APN 和数据拨号 + file: QuecPython物联网高级功能/APN和数据拨号.md + + - label: 9.2:语音通话 + file: QuecPython物联网高级功能/语音通话.md + + - label: 9.3:短信 + file: QuecPython物联网高级功能/短信.md + + label: 9.4:定位 + file: QuecPython物联网高级功能/定位.md + + label: 9.5:OTA 升级 + file: QuecPython物联网高级功能/OTA升级.md + + label: 9.6:AES-128 加解密 + file: QuecPython物联网高级功能/AES-128加解密.md + +- label: 10:其他开发资源 + file: 其他开发资源/README.md + items: + + - label: 10.1:QuecPython 编程框架 + file: 其他开发资源/QuecPython编程框架.md + - label: 10.2:HeliosSDK + file: 其他开发资源/HeliosSDK.md + +- label: 11:量产相关 + file: 量产相关/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 + 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 items: - - label: 网络通信应用开发-数据拨号 - file: 网络通信应用开发/网络通信应用开发-数据拨号.md - - label: 网络通信应用开发-TCP与UDP通信 - file: 网络通信应用开发/网络通信应用开发-TCP与UDP通信.md - - label: 网络通信应用开发-HTTP通信 - file: 网络通信应用开发/网络通信应用开发-HTTP通信.md - - label: 网络通信应用开发-MQTT通信 - file: 网络通信应用开发/网络通信应用开发-MQTT通信.md - - label: 网络通信应用开发-SNMP通信 - file: 网络通信应用开发/网络通信应用开发-SNMP通信.md - - label: 网络通信应用开发-WebSocket通信 - file: 网络通信应用开发/网络通信应用开发-WebSocket通信.md - - label: 网络通信应用开发-通信异常处理 - file: 网络通信应用开发/网络通信应用开发-通信异常处理.md + - label: 13.1:QuecPython 开发板板载资源列表 + file: 附录/QuecPython开发板板载资源列表.md + - label: 13.2:QuecPython 错误码汇总 + file: 附录/QuecPython错误码汇总.md + - label: 13.3:QuecPython 异常处理流程 + file: 附录/QuecPython异常处理流程.md diff --git "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\345\244\226\346\214\202WiFi\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/\345\205\266\344\273\226\345\274\200\345\217\221\350\265\204\346\272\220/README.md" similarity index 100% rename from "docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\345\244\226\346\214\202WiFi\345\272\224\347\224\250\345\274\200\345\217\221.md" rename to "docs/Getting_started/zh/\345\205\266\344\273\226\345\274\200\345\217\221\350\265\204\346\272\220/README.md" diff --git "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\346\221\204\345\203\217\345\244\264\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/\345\237\272\347\241\200\347\237\245\350\257\206/README.md" similarity index 100% rename from "docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\346\221\204\345\203\217\345\244\264\345\272\224\347\224\250\345\274\200\345\217\221.md" rename to "docs/Getting_started/zh/\345\237\272\347\241\200\347\237\245\350\257\206/README.md" diff --git "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250\345\272\224\347\224\250\345\274\200\345\217\221.md" "b/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250\345\272\224\347\224\250\345\274\200\345\217\221.md" deleted file mode 100644 index 4c6acbac50d17c693d28bb8068e6608c970abd95..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/\345\244\226\350\256\276\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\226\350\256\276-\344\272\256\345\272\246\344\274\240\346\204\237\345\231\250\345\272\224\347\224\250\345\274\200\345\217\221.md" +++ /dev/null @@ -1,123 +0,0 @@ -# 亮度传感器应用介绍 - -亮度传感器是一种能够检测周围环境亮度的传感器。在 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) -``` - -$$ - -$$ - -$$ - -$$ - -$$ - -$$ - -$$ - -$$ - -$$ - -$$ diff --git "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/README.md" "b/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/README.md" deleted file mode 100644 index 1dd2c0bb319f61e96e5dbd831252fe3dd4429f49..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/README.md" +++ /dev/null @@ -1,9 +0,0 @@ -# 多线程应用开发 - -多线程应用开发主要介绍模组支持的多线程功能,学习了多线程后,使读者在做项目时更加灵活编写代码,本部分内容主要介绍基本概念和理论,实际操作验证通过文章最后的链接跳转到应用文档。 - -# 多线程应用开发文档目录 - -- [多线程-创建线程应用开发](多线程-创建线程.md) -- [多线程-互斥锁应用开发](多线程-互斥锁应用.md) -- [多线程-消息队列应用开发](多线程-消息队列应用.md) diff --git "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\344\272\222\346\226\245\351\224\201\345\272\224\347\224\250.md" "b/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\344\272\222\346\226\245\351\224\201\345\272\224\347\224\250.md" deleted file mode 100644 index b1a4fd30c82ecd918c06e42ae277e3d5ffebe522..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\344\272\222\346\226\245\351\224\201\345\272\224\347\224\250.md" +++ /dev/null @@ -1,44 +0,0 @@ -# 多线程-互斥锁应用 -## 什么是多线程-互斥锁 - -本文介绍如何使用QuecPython的多线程-互斥锁功能,互斥锁可以资源不会冲突,通常用于保护硬件接口通信的完整性,如SPI、I2C通信命令要严格的指令顺序才能正确通信。 - -## 怎么使用多线程-互斥锁 - -### 软件应用 - -使用QuecPython开发的模组,调用\_thread模块中的_thread.allocate_lock()可以创建互斥锁,具体参数参考[_thread功能的API介绍文档](/../../API_reference/zh/QuecPython标准库/_thread-多线程.html),互斥锁必须成对使用。 - -```python -import utime -import _thread - -def thread_1(): - while True: - for i in range(3): - lock.acquire() - print('thread_1', i) - utime.sleep_ms(2000) - lock.release() - -def thread_2(): - while True: - for i in range(3): - lock.acquire() - print('thread_2', i) - utime.sleep_ms(2000) - lock.release() - -lock = _thread.allocate_lock() -_thread.start_new_thread(thread_1, ()) -_thread.start_new_thread(thread_2, ()) -``` -注意:线程里调用lock.acquire后进入阻塞并切换上下文,直到系统获得锁立即往下执行,lock.release()释放锁,有等待锁的线程会立即执行。 - - -## _thread功能测试 - -使用QPYcom工具执行代码,可以看出两条线程在打印信息,值得注意的是执行到utime.sleep_ms(2000)的时候并没有切换线程,是因为锁还没释放。 - -![](../media\多线程应用开发/_thread-allocate_lock.png) - diff --git "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\345\210\233\345\273\272\347\272\277\347\250\213.md" "b/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\345\210\233\345\273\272\347\272\277\347\250\213.md" deleted file mode 100644 index 4f143a9440cf91531d30df7aa07dbfba01583a78..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\345\210\233\345\273\272\347\272\277\347\250\213.md" +++ /dev/null @@ -1,39 +0,0 @@ -# 多线程-创建线程 -## 什么是多线程 - -本文介绍如何使用QuecPython的多线程功能,多线程可以让应用程序的多个功能看起来在同时运行。 - -## 怎么使用多线程 - -### 软件应用 - -使用QuecPython开发的模组,调用\_thread模块中的_thread.start_new_thread()可以创建新线程,具体参数参考[_thread功能的API介绍文档](/../../API_reference/zh/QuecPython标准库/_thread-多线程.html),创建线程不会阻塞当前代码往下执行。 - -```python -import utime -import _thread - -def thread_1(): - while True: - for i in range(10): - print('thread_1', i) - utime.sleep_ms(1000) - -def thread_2(): - while True: - for i in range(10): - print('thread_2', i) - utime.sleep_ms(1000) - -_thread.start_new_thread(thread_1, ()) -_thread.start_new_thread(thread_2, ()) -``` -注意:线程里需要调用utime.sleep代码才能上下文切换。 - - -## _thread功能测试 - -使用QPYcom工具执行代码,可以看出两条线程在打印信息。 - -![](../media/多线程应用开发/_thread-start_new_thread.png) - diff --git "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\346\266\210\346\201\257\351\230\237\345\210\227\345\272\224\347\224\250.md" "b/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\346\266\210\346\201\257\351\230\237\345\210\227\345\272\224\347\224\250.md" deleted file mode 100644 index 4fe77fceae34873db2f347613b1447cc42b4074f..0000000000000000000000000000000000000000 --- "a/docs/Getting_started/zh/\345\244\232\347\272\277\347\250\213\345\272\224\347\224\250\345\274\200\345\217\221/\345\244\232\347\272\277\347\250\213-\346\266\210\346\201\257\351\230\237\345\210\227\345\272\224\347\224\250.md" +++ /dev/null @@ -1,44 +0,0 @@ -# 多线程-消息队列 -## 什么是多线程-消息队列 - -本文介绍如何使用QuecPython的多线程-消息队列功能,消息队列用于线程间通信,如A是中断回调线程接收数据,B是普通线程处理数据,A线程把接收到的数据通过Queue发送到B线程后立即结束A线程,从而减少A线程占用CPU的时间。 - -## 怎么使用多线程-消息队列 - -### 软件应用 - -使用QuecPython开发的模组,调用queue模块中的queue.Queue()可以创建消息队列,具体参数参考[queue功能的API介绍文档](/../../API_reference/zh/QuecPython标准库/Queue - 普通队列.html),获取队列数据时,若队列有数据则立即返回,否则进入阻塞并切换上下文,直到队列有数据才继续往下执行。 - -```python -import _thread -from queue import Queue -import utime - -# 初始化队列 -q = Queue(maxsize=100) - -def thread_get(): - while True: - # q.get 会阻塞等待消息过来,每当有q.put()执行完后 q.get()会收到数据,解除阻塞往下执行 - item = q.get() - print("q.get:", item) - -# 开启线程在哪等待消息 -_thread.start_new_thread(thread_get, ()) -# put消息到队列 -q.put(1) -utime.sleep(1) -q.put() # 空数据默认 None -utime.sleep(1) -q.put(None) # 空数据默认 None -utime.sleep(1) -q.put(3) -``` - - -## queue功能测试 - -使用QPYcom工具执行代码,可以看出每当q.put()数据后,等待消息的线程立即执行打印数据。 - -![](../media\多线程应用开发/_thread-Queue.png) - diff --git "a/docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250.md" "b/docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250/README.md" similarity index 100% rename from "docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250.md" rename to "docs/Getting_started/zh/\345\277\253\351\200\237\345\205\245\351\227\250/README.md" diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-TCP\344\270\216UDP\351\200\232\344\277\241.md" "b/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-TCP\344\270\216UDP\351\200\232\344\277\241.md" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-WebSocket\351\200\232\344\277\241.md" "b/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-WebSocket\351\200\232\344\277\241.md" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-\346\225\260\346\215\256\346\213\250\345\217\267.md" "b/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-\346\225\260\346\215\256\346\213\250\345\217\267.md" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-HTTP\351\200\232\344\277\241.md" "b/docs/Getting_started/zh/\350\247\243\345\206\263\346\226\271\346\241\210\344\273\213\347\273\215/README.md" similarity index 100% rename from "docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-HTTP\351\200\232\344\277\241.md" rename to "docs/Getting_started/zh/\350\247\243\345\206\263\346\226\271\346\241\210\344\273\213\347\273\215/README.md" diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-MQTT\351\200\232\344\277\241.md" "b/docs/Getting_started/zh/\351\207\217\344\272\247\347\233\270\345\205\263/README.md" similarity index 100% rename from "docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-MQTT\351\200\232\344\277\241.md" rename to "docs/Getting_started/zh/\351\207\217\344\272\247\347\233\270\345\205\263/README.md" diff --git "a/docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-SNMP\351\200\232\344\277\241.md" "b/docs/Getting_started/zh/\351\231\204\345\275\225/README.md" similarity index 100% rename from "docs/Getting_started/zh/\347\275\221\347\273\234\351\200\232\344\277\241\345\272\224\347\224\250\345\274\200\345\217\221/\347\275\221\347\273\234\351\200\232\344\277\241-SNMP\351\200\232\344\277\241.md" rename to "docs/Getting_started/zh/\351\231\204\345\275\225/README.md"