移远EC800m-cn使用QuecPython 实现4G、GPS、MQTT开发

官网主页:https://python.quectel.com/home
官网文档中心(拥有从入门到精通的各种文档介绍、优先必看):
https://python.quectel.com/doc/
官网文件下载中心(常用于下载各类资料):https://python.quectel.com/download
官网wiki(常用于API库、视频教程、手把手教程下载):https://python.quectel.com/wiki/#/
工单系统:https://workorder.quectel.com/
Quecpython中文社区:https://forumschinese.quectel.com/c/function-subjects/quectpython/43
移远QuecPython开发交流群:445121768
移远QuecPython开发交流群 II:1030038922
微信公众号:QuecPython
移远OTA升级平台: https://cloudota.quectel.com/ 
移远IoT管理平台:https://python.quectel.com/doc/doc/Advanced_development/zh/QuecPythonCloud/QuecCloud.html

一、硬件介绍

博主手中的硬件是EC800X_核心板”熵”,图片见下:

二、开发环境搭建

官方帮助:https://www.yuque.com/exdream/myqpy/cmg21n

2.1 驱动安装

根据官方文档可知,本EC800M应该安装ASR_USB_Driver.zip驱动;

驱动安装后如下图:

2.2 烧录固件

移远 LTE Cat.1 无线通信模块以及搭载这些模块的开发板(核心板)在出厂时通常烧录有标准 AT 固件或 QuecOpen 固件,如需基于 QuecPython 对模块进行开发,需要手动为其重新烧录专门的 QuecPython 固件。

烧录步骤如下(重要!!!每步都不能缺失):

  1. 群共享下载QFlash_V6.2_CN.zip;
  2. 解压运行QFlash_V6.2_CN.zip并在线升级至QFlash_V6.3_CN.zip;
  3. 给EC800M下发通过AT下发ATI获取名称为EC800MCNGAR06,根据名称下载固件QPY_OCPU_V0001_EC800M_CNGA_FW.zip
  4. 解压驱动后,使用QFlash_V6.3_CN.zip升级固件,升级固件前先卸载SIM卡,拆线天线;
  5. 通过QPYcom下发AT+QDOWNLOAD=1指令,进入下载模式。进入下载模式后,可见Quectel Download Port 串口;
  6. 解压zip固件包,并升级固件;
  7. 出现PASS表示烧录成功;
  8. 关闭QFlash并断电重启模块;
  9. 重启模块后出现Quectel USB MI05 COM Port驱动;
  10. 使用QPYcom执行第一条Python语句;

二、QuecPython开发

官方资料:
https://www.yuque.com/exdream/myqpy/tggcn3
https://python.quectel.com/doc/Quick_start/zh/QuecPythonStart/dev_env.html
https://python.quectel.com/doc/Quick_start/zh/QuecPythonStart/app_dev.html
https://python.quectel.com/doc/FAQ/zh/QP_test/QP_test.html
注意事项:
1、建议不要将程序命名为:main.py,建议使用其他名字,例如:start.py等等;
2、如果里面存在死循环,那么在程序运行时无法中断,对于此情况,暂时只能通过重刷固件解决。
3、如果真的想使用main.py程序,同时又需要使用死循环,记得在死循环里面加一个可中断的条件,例如(1.如下的例子是在一个线程里面加入了死循环,同时在这个死循环里面加入了中断退出的条件,当一直输出时,可通过GPIO2对应的按键中断输出;

巧用GPIO解决loop死循环问题:

import log
import _thread
from machine import Pin
import utime
log.basicConfig(level=log.NOTSET)
KEY_log = log.getLogger("KEY")
gpio2 = Pin(Pin.GPIO2, Pin.IN, Pin.PULL_DISABLE, 0)
def in_capture():
    KEY_log.debug("in_capture start!")
    while True:
        KEY_log.info("1111")
        utime.sleep(1)
        if gpio2.read() == 0:
            KEY_log.info("in_capture thread end")
            break
        else:
            pass
if __name__ == "__main__":
    _thread.start_new_thread(in_capture, ())

2.1 编写脚本;

官方链接:https://python.quectel.com/doc/Quick_start/zh/QuecPythonStart/app_dev.html

把编辑好的代码,点击加号选择文件(或者直接从左边拖到右边),文件就下载到模组里面了。

如下图:在QPYcom工具的【文件】选项卡中选中脚本文件,点击“运行”

自动跳转至【交互】界面,即可看到模组的执行结果。