STM32 EC200N-CN MQTT链接服务器开发实录

这篇具有很好参考价值的文章主要介绍了STM32 EC200N-CN MQTT链接服务器开发实录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

开发环境

硬件:STM32F091CBT6 、EC200N-CN模块板 、USB-TTL串口助手

软件:VS CODE  、 STM32CUBEMX、IAR 8.32

1.硬件设计

连接好EC200N-CN模块和单片机主板。

EC200N-CN模块设计时注意供电和IO电平转换。

EC200N-CN是低功耗的,其主串口用的是1.8V电压域的,一般使用的STM32F0系列单片机IO口是3.3V电平的,两者连接的时候需要电平转换。

电平转换在EC200N的硬件设计手册里有电路图。

我这边设计的EC200N-CN模块预留了

PWRKEY(模块开关机引脚)

RESET_N(模块复位引脚)

主串口-RXD

主串口-TXD引脚。

基本这几个引脚就够一般的物联网应用使用了。

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

注意注意:

我遇到的大坑1:

上电后,PWKEY引脚一定要低电平才行,低电平才能打开模块,否则模块不开机收不到AT指令,一开始犯了这个错误,因为模块自己印出来的PWKEY通过三极管做了反向处理,理解错了开机电平,导致模块一直不开机。

我遇到的大坑2:

和单片机通讯时,单片机这边因为电平转换要加上拉电阻。

如果没有上拉电阻,两者无法通讯。

EC200N-CN和STM32F091CB 串口通讯故障排查。

即使加了上拉电阻后,任然存在一个BUG。

后面才解决掉。

2.程序编写

配置好单片机IO口的串口模块、波特率,然后就直接发送AT指令就可以了。

ATI

AT+CPIN?

AT+CSQ

AT+CGREG?

AT+CGATT?

AT+QMTCFG="recv/mode",0,0,1
AT+QMTOPEN=0,"www.sukon-cloud.com",9006 链接物联网平台
AT+QMTCONN=0,"SMETTest","SMETTest","123456" 登录平台
AT+QMTPUBEX=0,0,0,0,"sys/device/SMETTest/variant_data",85 发布MQTT消息
{"type":"variant_data","version":"1.0","time":1638766638000,"params":{"UAV":220.9}}

在收到>后发送保文数据。

常用AT指令说明


1、AT
说明: 检测AT指令收发是否正常
模组收到指令回复:

AT
OK


2、AT+CPIN?
说明: 查询SIM卡状态(是否插入SIM卡、锁定SIM卡、解锁SIM卡),返回 READY则表示模组正常
模组收到指令回复:

AT+CPIN?
+CPIN: READY

OK


3、AT+CREG?
说明: 查询当前网络注册状态,正常则回复 +CREG: 0,1
模组收到指令回复:

AT+CREG?
+CREG: 0,1

OK


4、AT+CEREG?
说明: 查询当前EPS网络注册状态,正常则回复 +CEREG: 0,1
模组收到指令回复:

AT+CEREG?
+CEREG: 0,1

OK

5.AT+QMTCFG="recv/mode",0,0,1

模组收到指令回复:

AT+QMTCFG="recv/mode",0,0,1
OK

6.AT+QMTOPEN=0,"www.sukon-cloud.com",9006

模组收到指令回复:

00> AT+QMTOPEN=0,"www.sukon-cloud.com",9006
00> 
00> OK
00> 
00> +QMTOPEN: 0,0

7.AT+QMTCONN=0,"SMETTest","SMETTest","123456"

模组收到指令回复:

00> AT+QMTCONN=0,"SMETTest","SMETTest","123456"
00> 
00> OK
00> 
00> +QMTCONN: 0,0,0

8.AT+QMTPUBEX

AT+QMTPUBEX=0,0,0,0,"sys/device/SMETTest/variant_data",85

模组收到指令回复:

00> AT+QMTPUBEX=0,0,0,0,"sys/device/SMETTest/variant_data",85
00> 
00> >

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

模组收到指令回复:

9.{"type":"variant_data","version":"1.0","time":1638766638000,"params":{"UAV":220.9}}

模组收到指令回复:

00> > {"type":"variant_data","version":"1.0","time":1638766638000,"params":{"UAV":220.5}}
00> 
00> OK

测试程序:

char Sendbuf[EC20_SEND_BUFF_SIZE];
ErrorStatus F_TestEC200N(uint8_t *cmd)
{
    // scanf("%s",buf);

    uint8_t lu8_cmd =0;
    lu8_cmd = (uint8_t)(*cmd);
    memset(&Sendbuf[0],0x00,EC20_SEND_BUFF_SIZE);
    // sprintf((char*)&Sendbuf[0],"%s\r\n","AT+CPIN?");  
    
    switch (lu8_cmd)
    {
    case 0:
        return 1;
        break;
    case 1:
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT");  
        break;
    case 2:
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","ATI");  
        break;       
    case 3://查询SIM卡
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+CPIN?");  
        break;      
    case 4://查询信号,31最大,小于10证明信号超级不好
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+CSQ");  
        break;      
    case 5://查询PS注册情况,注册则返回1,证明获取IP,可以进行网络使用啦
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+CGREG?");  
        break;         
    case 6://附着网络是否成功
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+CGATT?");  
        break;    
    case 7://设置数据格式
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTCFG=\"recv/mode\",0,0,1");  
        break;   

    case 8://打开工业物联网云端口
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTOPEN=0,\"www.sukon-cloud.com\",9006");  
        break;   

    case 9://这步执行成功后,设备应该在线了。
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTCONN=0,\"SMETTest\",\"SMETTest\",\"123456\"");  
        break;          
    case 10://发送数据命令
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTPUBEX=0,0,0,0,\"sys/device/SMETTest/variant_data\",85");  
        gu16_len = strlen(Sendbuf);
        MX_FEED_IWDG();   
        HAL_UART_Transmit(&huart4, (uint8_t *)&Sendbuf,61, 0xffff);//huart1需要根据你的配置修改
        MX_FEED_IWDG();   
        MX_FEED_IWDG(); 
        HAL_Delay(800);  
        
        memset(&Sendbuf[0],0x00,EC20_SEND_BUFF_SIZE);
        sprintf((char*)&Sendbuf[0],"%s\r\n","{\"type\":\"variant_data\",\"version\":\"1.0\",\"time\":1638766638000,\"params\":{\"UAV\":220.5}}");   
        gu16_len = strlen(Sendbuf);        
        HAL_UART_Transmit(&huart4, (uint8_t *)&Sendbuf,87, 0xffff);//huart1需要根据你的配置修改
        (*cmd) = 0;           
        return 1;
        break;    
    case 11://Paload数据
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","{\"type\":\"variant_data\",\"version\":\"1.0\",\"time\":1638766638000,\"params\":{\"UAV\":220.5}}");  
        break;      

    case 20://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=0");  
        break;    
        
    case 21://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=1");  
        break;   

    case 22://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=2");  
        break;   

    case 23://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=3");  
        break;           
        
    case 24://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=4");  
        break;    

    case 25://清除链接
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n"," AT+QMTDISC=5");  
        break;           
        
    default:
        break;
    }       
    MX_FEED_IWDG();   
    HAL_UART_Transmit(&huart4, (uint8_t *)&Sendbuf,86, 0xffff);//huart1需要根据你的配置修改
    (*cmd) = 0;        
}

在编程的时候,遇到一个问题,我使用sprintf函数转存要发送的字符串,sprintf输出双引号的时候,要加“\”如下

    case 8://打开工业物联网云端口
        /* code */
        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTOPEN=0,\"www.sukon-cloud.com\",9006");  
        break;   

遇到一个BUG

我选用了速控云的物联网平台,往平台上上传数据。

平台的教程后面再说,看我心情和时间想不想写。

ec200 mqtt,物联网教程,单片机,stm32,嵌入式硬件

发送如下指令后,

AT+QMTPUBEX=0,0,0,0,"sys/device/SMETTest/variant_data",85

 再次发送

{"type":"variant_data","version":"1.0","time":1638766638000,"params":{"UAV":220.9}}

 服务器收到的总是HEX数据   一堆00000003241234124  然后一堆数字

经过排查发现,我发送的时候,为了方便,没有计算当前AT指令的长度。每次发送都是发送  固定长度字节的数据(长于当前AT指令的总长度) 

HAL_UART_Transmit(&huart4, (uint8_t *)&Sendbuf,EC20_SEND_BUFF_SIZE, 0xffff);
//EC20_SEND_BUFF_SIZE 为 150

而AT+QMTPUBEX= 指令之后模块会回复  >  然后用户输入要发送的数据,因为我多发了很多 00  导致服务器收到了很多0000  然后整条报文都被识别为hex报文。

AT+QMTPUBEX=0,0,0,0,"sys/device/SMETTest/variant_data",85

修改:  按实际发送大小发送,确保 AT+QMTPUBEX= 指令之后不能发一些无关的字符。

修改后,可以顺利上传平台了。文章来源地址https://www.toymoban.com/news/detail-685640.html

        sprintf((char*)&Sendbuf[0],"%s\r\n","AT+QMTPUBEX=0,0,0,0,\"sys/device/SMETTest/variant_data\",85");  
        gu16_len = strlen(Sendbuf);
        MX_FEED_IWDG();   
        HAL_UART_Transmit(&huart4, (uint8_t *)&Sendbuf,61, 0xffff);//huart1需要根据你的配置修改

到了这里,关于STM32 EC200N-CN MQTT链接服务器开发实录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)

    具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示)。 有关 MQTT 报文的一些标识在我前面的 一篇文章 中讲过,感兴趣的可以去看看( 有关代码部分讲解的内容也在那里 ,这里就不细讲了,主要讲如何连接的) 插一嘴,如果

    2024年02月06日
    浏览(57)
  • STM32 + ESP32(AT固件 MQTT协议) + MQTTX(桌面终端) + (EMQX消息服务器)

    翻出老物件,搭建一个简单的 IOT 开发环境,也算是废物利用了 ,接下来加传感器。 1. STM32  采集数据:      RTOS。      资源相对比较丰富,可以根据项目需求定制。 2. ESP32  网络传输(AT固件 MQTT协议) :     AT:封装好的接口,扩展性不是那么好,业务简单的话将就可以

    2024年02月08日
    浏览(78)
  • ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布

    目录 写在前面 三种方案(利用ESP32连接EMQX下的MQTT) 步骤 ESP32烧录固件并AT指令进行测试。 下载固件  烧录工具下载 烧录固件(选择ESP32)  关于AT 指令与MQTT服务器断开后自动重连MQTT服务器 关于AT指令设置上电自动连接WIFI 关于AT指令设置断开后自动重新连接WIFI STM32对接E

    2023年04月12日
    浏览(49)
  • ESP8266+STM32+MQTT发送数据到阿里云服务器(三、配置ESP8266模块并测试连接)

    1、固件烧录器 2、固件 3、串口工具 4、ESP866模块 5、USB转TTL模块 (以上软件工具文末分享的链接有,硬件请淘宝自行购买) 硬件如下图: 1、按照下面对照关系进行接线 USB转TTL ESP8266 3.3V 3V3 GND GND RX TX TX RX IO0 GND 2、打开固件烧录工具图标 3、点击“ OK ” 4、在出现的界面中,

    2024年03月23日
    浏览(52)
  • 从零开始用Nodejs搭建一个MQTT服务器,并且用stm32通过esp8266进行消息订阅和发布

    最近在做一个物联网项目,需要用到服务器进行数据的存储和数据的请求和发送,之前我用过onenet平台上的http服务,虽然能通过get和post请求进行数据的提交和发送,但是平台上的数据发生改变却不能主动推送给esp8266,与我此次的项目不符合,所以pass。然后我了解了下mqtt协

    2024年02月04日
    浏览(52)
  • STM32F103C8T6+ESP-01S+MQTT服务器实现数据上传和接收(一)

    文章目录 STM32F103C8T6+ESP-01S+MQTT服务器实现数据的上传和接收(二) ESP-01S推荐使用安信可官网1471号固件,烧录配置如下图。 请替换其中里面的内容 使用PA9、PA10分别连接ESP8266的RXD、TXD引脚。 由于每次发送的AT指令都会被8266通过串口再发送回来,为了缓解串口的压力,并且更

    2024年04月17日
    浏览(51)
  • 4G/5G卡使用 EC200-CN

    在串口中查看4G卡网口如下为enx020c29a39b6d  输入如下命令启动自动获取3s后按ctrl+c   输入minicom -D /dev/ttyUSB2后先输入: ATE1启动回显。 AT+qnetdevctl=1,1,1播号回复ok表示成功。   查看ip已成功获取  

    2024年02月20日
    浏览(51)
  • EC200U-CN学习(三)

    EC200U系列内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于Windows 7/8/8.1/10、Linux和Android等操作系统下的USB驱动),极大地拓展了其在M2M领域的应用范围,如POS、POC、ETC、共享设备、数据卡、能源控制、安防以及工业级PDA等。 芯片上方引脚 K

    2024年02月15日
    浏览(34)
  • Quectel EC200A-CN移植

    usb-serial-option,USB转串口驱动,生产/dev/ttyUSB0-2,分别是DM,AT,PPP 需要使能内核选项如下: USB网卡驱动,模块可通过AT配置成RNDIS或者ecm,默认是ecm。 需要使能内核选项 增加usb vid和pid 增加vid和pid,设备连接,使用lsusb命令查看设备的vid和pid,如下图所示: 文件修改:linux-3.10/drivers

    2024年02月06日
    浏览(57)
  • 一个小型的物联网实验,让stm32实验板和Android studio写的APP同时连接上mqtt服务器实现远程控制实验板状态

    目录 一、前言 二、实验工具 1.野火F103开发板  2.MQTT代理工具mqtt.fx  三、安卓APP代码  1.建立工程 2.导入Java jar包 3.布局文件activity_main 4.Mainactivity 5、配置联网权限 6.测试APP  7.导出apk安装包  四、STM32实验板代码 1.main函数 2.esp8266  3.onenet  4.小总结 五、测试 1.测试app与mqtt的

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包