中移M5311-NBIOT-低功耗OPENCPU开发-MQTT

M5311 全部技术资料文档和SIM卡封装库 链接:https://pan.baidu.com/s/1VHIwO4L85O6BtLLxbIoPRQ 提取码:7wxh

1.使用的模块M5311和开发板

2.测试环境搭建

1.安装GNU Tools ARM Embedded

链接:https://pan.baidu.com/s/1KtBCoAraLGcQD3K5keVFww  提取码:kzxy

下载下来之后解压,进入 GNU Tools ARM Embedded\GNU Tools ARM Embedded\4.9 2015q3\bin 文件夹

需要把bin路径加入环境变量

2.编译包

链接:https://pan.baidu.com/s/1_P_63FRWqI844MBFiYHbJQ 提取码:murc 
把包下载下来之后使用VSCode打开目录

然后执行下面这条命令进行编译

编译完成后烧录包在M5311-OpenCPU_v4.0.0_release\firmware\LV 下面

.\build.bat LV

3.烧录

链接:https://pan.baidu.com/s/1GaH02xHhjJcg0o-8eOYSlw 提取码:1uka 
下载烧录工具

选择COM口,点击OPEN,打开LV目录下的cfg文件,自动加载烧录配置信息

之后点击start,然后让板子重启或者开机(按住PWRKEY或者RESET按键)

3.程序

m5311_opencpu.c

/*M5311_opencpu.ccreated by xgl,2018/4/2
*/#include "m5311_opencpu.h"extern unsigned int OC_DEBUG_CHANNEL;
TaskHandle_t xHandle;
/*综合测试函数
*/
void test_all_in_one()
{int i;unsigned char temp;unsigned  char iccid[40]={0};int iccid_len;unsigned char *p = 0;int rssi,rxlevel;unsigned char temp1,temp2;unsigned char spi_rx_buf[2]= {0};unsigned char spi_tx_buf[2]= {0};unsigned char base_version[30] = {0};hal_spi_master_config_t l_config;   hal_spi_master_send_and_receive_config_t spi_send_and_receive_config;custom_uart_init();opencpu_get_base_version(base_version);opencpu_printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");opencpu_printf("OpenCpu Code Vserion 1.2 \n");  opencpu_printf(opencpu_fota_version_cb());opencpu_printf("\nBASE_VERSION:%s\n",base_version);opencpu_printf("update status:%d\n",update_status);if(opencpu_is_boot_from_sleep()==1){opencpu_printf("BOOT CAUSE:WAKE FROM SLEEP\n");}else{opencpu_printf("BOOT CAUSE:POWER_ON OR RESET\n");}opencpu_printf("M5311 opencpu ready!!\n");opencpu_printf("waiting for network...\n");opencpu_lock_light_sleep();         // 关闭PSSM//阻塞方式获取ICCID,必须要有SIM卡才能读到test_get_iccid();//获取网络注册状态,并阻塞等待网络注册成功opencpu_printf("network registering...\n");while(opencpu_cgact()!=1){vTaskDelay(1);}opencpu_printf("network register success\n");opencpu_printf("network ready!!\n");   uart_cmd = 0;mqtt_test2();opencpu_printf("opencpu_unlock_light_sleep!!\n");ril_power_saving_mode_setting_req_t psm_req1;psm_req1.mode=1;  psm_req1.req_prdc_rau=NULL;psm_req1.req_gprs_rdy_tmr=NULL;psm_req1.req_prdc_tau="01000001";psm_req1.req_act_time="00000101";opencpu_set_psmparam(&psm_req1);ril_power_saving_mode_setting_rsp_t psm_rsp1;opencpu_get_psmparam(&psm_rsp1);opencpu_printf("PSM: %d,%s,%s,%s,%s \n",psm_rsp1.mode,psm_rsp1.req_prdc_rau,psm_rsp1.req_gprs_rdy_tmr,psm_rsp1.req_prdc_tau,psm_rsp1.req_act_time);opencpu_unlock_light_sleep();     // 打开PSMopencpu_unlock_light_sleep();       // 打开PSMopencpu_unlock_light_sleep();       // 打开PSMvTaskDelete(xHandle);               // 关闭线程opencpu_printf("vTaskDelete over !!\n");
}//opencpu主任务函数
void opencpu_task_main()
{test_all_in_one();
}/*新建opencpu任务,这个函数用户不可更改
*/
void test_opencpu_start()
{xTaskCreate(opencpu_task_main,"opencpu",1024,NULL,TASK_PRIORITY_NORMAL,&xHandle);
}

opencpu_mqtt.c

#include "m5311_opencpu.h"/***************************************
以下定义适用于onenet mqtt套件
CLIENTID:对应设备名称
USER:对应产品ID
PWD:用onenet官网的token.exe工具生成。
CMDREQUEST:***************************************/
#define HOST "183.230.40.16"
#define PORT 8883
#define CLIENTID "test"
#define KEEPALIVE 120
#define USER "247845"
#define PWD "version=2018-10-31&res=products%2F247845%2Fdevices%2Ftest&et=1694376057&method=md5&sign=32%2B6jCEhKLdgXwdvpAQM8g%3D%3D"
#define CMDREQUEST "$sys/247845/test/cmd/request/"
#define CMDRESPON  "$sys/247845/test/cmd/response/"
uint8 onenetFlag = 0;/*****************************************************
ack 回调函数,publish msg 收到ack后会触发该类型函数,用户自行编写;
传入:qos>0 时在opencpu_mqttpub 中传入该函数,不关心ack 可传入null
/*****************************************************/
void opencpu_recvpuback_cb()
{opencpu_printf("OC get ack\n");vTaskDelay(2000/portTICK_RATE_MS);
}
void opencpu_recvpuback_cb1()
{opencpu_printf("last publish success,off\n");vTaskDelay(1000/portTICK_RATE_MS);opencpu_mqttdisc();
}/*****************************************************
接收到某主题的回调函数:接收到平台下对topic的推送消息是会触发该类型函数。
传入:在opencpu_mqttsub 订阅某topic时传入该类型函数。/*****************************************************/
void opencpu_defaultpublish_cb(uint32_t dup, uint32_t qos, uint32_t retained, uint32_t msgid, char *topicname, uint32_t msglen, char *msg)
{}void opencpu_userpublish_cb(uint32_t dup, uint32_t qos, uint32_t retained, uint32_t msgid, char *topicname, uint32_t msglen, char *msg)
{opencpu_printf("+MYCB:%d,%d,%d,%d,%s,%d,%s\n",dup, qos, retained, msgid, topicname,msglen, msg);vTaskDelay(2000/portTICK_RATE_MS);//opencpu_mqttpub("temp1",1,0,0,0,"from_pub_usercb", NULL);
}/*****************************
连接服务器成功的回调函数
*****************************/
void opencpu_open_cb(uint8_t result){if(result == 0 ){opencpu_printf("%s\n","MQTTCLIENT CONNECT OK");}
}/***********************************
和服务器断开的回调函数
***********************************/
void opencpu_disc_cb(){opencpu_printf("%s\n","MQTTCLIENT DISCONNECTED ");
}mqtt_test2()
{opencpu_printf("mqtt test2 start\n");opencpu_mqttdel();opencpu_mqttcfg(HOST,1883,CLIENTID,60,USER,PWD,1);int mqttopenstate = opencpu_mqttopen(1,1,0,0,0,0,0);opencpu_printf("mqtt mqtt open state %d \n",mqttopenstate);while(opencpu_mqttstat() != 5)   {vTaskDelay(1000/portTICK_RATE_MS);}onenetFlag = 1;vTaskDelay(1000/portTICK_RATE_MS);opencpu_mqttsub("$oc/devices/{id}/user/test",1,opencpu_userpublish_cb);opencpu_mqttpub("$oc/devices/{id}/user/test",0,0,0,0,"{\"id\":123458,\"dp\":{\"temperatrue\":[{\"v\":31,}],\"power\":[{\"v\":58,}]}}",NULL);vTaskDelay(1000/portTICK_RATE_MS);opencpu_mqttdisc();        // 关闭mqtt连接,避免无法进入PSM模式opencpu_mqttdel();vTaskDelay(1000/portTICK_RATE_MS);opencpu_printf("mqtt test2 over\n");
}

在编写过程中,如果mqtt没有断开是无法进入PSM模式的,使用完后请调用opencpu_mqttdisc();

中移M5311-NBIOT-低功耗OPENCPU开发-MQTT相关推荐

  1. 中移M5311与onenet资料总结

    title: 中移M5311与onenet资料总结 tags: NBIOT date: 2019-4-29 23:32:00 中移onenet再度学习 今天有个朋友问我NB模组M5311连接onene ...

  2. 中移M5310A NBIoT模组通信测试命令

    总结一下中移M5310A NBIoT模组的常用测试命令,这个命令是个脚本,可以编辑,在自己开发的串口软件上可用,有需要的请留言. 脚本是.ini格式的文件,可以直接编辑文件然后加载到脚本区.字段用\t ...

  3. 物联网-移远M26模块OpenCPU开发第3讲(看门狗)

    之前在物联网-移远M26模块OpenCPU开发第1讲中提到过需要给外部看门狗芯片喂狗才能正常工作,阅读过的读者应该知道,我是通过周期性的控制M26的一个GPIO引脚电平变化来实现喂狗的.关于其硬件参考 ...

  4. 中移M5311模块MQTT协议连接阿里云物联网平台(干货)

    一.准备三元组 在阿里云物联网平台新建产品和设备后,平台给每一个设备自动赋予三元组. 二.准备MQTT协议参数 新建产品时,阿里云物联网平台会分配一个含productkey的子域名,端口号固定是188 ...

  5. 物联网-移远M26模块OpenCPU开发第1讲

    心心恋恋的基于移远M26模块设计的用于开发OpenCPU功能的板子终于完成,废话少说,直接上图: 对于板子外观这里不作讨论,毕竟不是我设计的,期望能用吧. 可能是由于设计者经验不足的原因吧.我刚拿到板 ...

  6. 物联网-移远M26模块OpenCPU开发第2讲(FLASH处理)

    最近有个项目,需要频繁的操作移远M26的内部flash.众所周知,flash的擦写次数为10W次,超过这个次数后flash就没有用了.这个项目需要频繁的对其进行写操作,要想设备工作3~5年,10W明显 ...

  7. 从jego到无忧行,中移国际到底要做什么?

    今天一位同事向我打听"无忧行"这个业务,说是做出国准备时,在广东移动的APP上看到的.而更让他觉得奇怪的是,这项业务如果用互联网支付,要比话费支付还便宜.我打开北京移动的APP,也 ...

  8. Android BLE低功耗蓝牙开发

    啦啦啦在上一个项目中有用到BLE低功耗蓝牙开发,当时baidu google了很多资料,但大多数都是千篇一律,英文文档我这种渣渣又看不懂...总之刚开始查的很痛苦.所以要把自己的踩坑之路写下来记录下, ...

  9. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-订阅主题)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

最新文章

  1. Python最会变魔术的魔术方法,我觉得是它
  2. Mac OS X 系统自带的截图快捷键有哪些?
  3. Alpha冲刺Day2
  4. [设计模式]设计模式之禅关于接口隔离原则
  5. 将两个DataFrame拼接起来,除了concat还有append()
  6. Leetcode 112. 路径总和 (每日一题 20210910)
  7. 动画-animation
  8. 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
  9. 出现问题protected:void __thiscall CTalkCDlg::OnIdok(void)(?OnIdok@CTalkDlg@@IAEXXZ)?
  10. 天猫商城应用自定义类代码
  11. 该死的配置系统未能初始化
  12. ansys mechanical 脚本编写
  13. 【Bug】Microsoft Edge拒绝访问
  14. mac打包dmg文件
  15. c语言rst关系,为什么服务器突然回复RST——小心网络中的安全设备
  16. 三分频电路Verilog设计
  17. 计算1+22+333+4444...+nnnn的数字和
  18. react-native-growingio慢下载慢,下载很慢,下载失败
  19. 小米手机4c如何刷入开发版获取ROOT权限
  20. App Store 隐私政策网址

热门文章

  1. 必知必会的MySQL基础知识
  2. SQL server 数据库 (函数篇 2)
  3. MySQL表连接(join)
  4. Windows 7中的远程桌面增强(Graphics Remoting, Remote Desktop)
  5. Object C语法快速入门
  6. 条码生成 SDK - Zint 教程及示例
  7. 写在使用 Linux 工作一年后
  8. 一份帮助你更好地理解深度学习的资源清单 1
  9. 半年之殇:困扰半年的MSP430的I2C总线问题在今天解决,发文总结
  10. setInterval,setTimeout,clearInterval