【4G模块】中移物联ML302 + GD32F407 使用支持MQTT协议AT指令接入阿里云物联网平台

本文档详细记录了使用GD32F407微控制器和ML302 4G模块连接阿里云物联网平台的过程。首先介绍了ML302模块的特性,然后通过GD32F407创建工程,编写LED、串口4和4G模块的驱动。接着,利用MQTT协议发送AT指令测试ML302的TCP连接,并成功连接到阿里云物联网平台,实现了数据的上行和下行。最后展示了设备在线及消息收发的成果。

目录

 

〇、目的、GD32、ML302相关简介

0.目的:

1.ML302:

2.LTE Cat.1:

3.GD32F407

    一、GD芯片创建工程写驱动:LED、串口4、4G模块

1.创建工程

2.LED的GPIO驱动

3.debug串口驱动

4.4G模组的供电、开机、串口

二、测试ML302能否正常连接TCP服务器 AT指令说明

三、使用MQTT协议连接阿里云物联网平台

四、成果展示:


〇、目的、GD32、ML302相关简介

0.目的:

使用手上的开发板(mcu为gd32f407+4G模组中移物联ML302),连接阿里云物联网平台,实现数据的上行和下行。

使用4G模组支持的mqtt协议AT指令。

其实就是测试一些这个开发板和模组,顺便学习一下......

1.ML302:

ML302 是中国移动最新推出的 LTE Cat.1 模块。ML302 支持 LTE- TDD/LTE- FDD/GSM,同时支持 GNSS/BT/
Wi- Fi Scan。采用 LCC+LGA 封装方式。ML302丰富的 Internet 协议、行业标准接口和功能,支持 Windows、Linux 和 Android 驱动。ML302 可广泛应用到 M2M多个领域中,如共享、金融支付、POC、工业控制等。

这个4G模组真的是太好用了,丰富的AT指令,想比之前的8266可以少些很多代码。

2.LTE Cat.1:

简单说,就是“低配版”的4G终端!

3.GD32F407

兆易创新为国内存储的龙头企业,主营业务包括存储器,微处理器以及传感器等。

据说芯片和ST的是pin_to_pin兼容,但是因版权还是有一些小差别,这里我使用的GD官方的开发库。(本来打算用STM32CubeMX直接生成工程,但这样还要改动底层的一些东西....)

下载GD固件库(去官网):http://www.gd32mcu.com/cn/download?kw=GD32F4
【GD32相关芯片资料】 有需要请参考 这份资料很全,GD所有芯片系列固件库、datasheet、用户手册...
 链接:百度网盘-官网公开资料 (全) 
提取码:20fc

    
一、GD芯片创建工程写驱动:LED、串口4、4G模块

1.创建工程

创建工程有两种方式:1是按照固件库中的模板直接打开直接换文件直接用,2是自己创建一个空工程,再一个一个文件添加到工程中,这里我选择的方法2。

创建工程,选择芯片型号(提前下载DFP芯片安装包),添加文件组,设置魔术棒中的选项(宏、路径...),编译....

2.LED的GPIO驱动

查看开发板原理图,找到LED的电路图和芯片的GPIO

按照GD固件库中的示例对GPIO进行编程。

led.h

#ifndef LED_H
#define LED_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "gd32f4xx.h"
#include "systick.h"
     
/* exported types */
typedef enum 
{
    LED1 = 0,
    LED2 = 1,
    LED3 = 2
} led_typedef_enum;


/*
        PD10  --> LED1
		PD11  --> LED2
*/
/* eval board low layer led */
#define LEDn                             2U

#define LED1_PIN                         GPIO_PIN_10
#define LED1_GPIO_PORT                   GPIOD
#define LED1_GPIO_CLK                    RCU_GPIOD
  
#define LED2_PIN                         GPIO_PIN_11
#define LED2_GPIO_PORT                   GPIOD
#define LED2_GPIO_CLK                    RCU_GPIOD
  

/* function declarations */
/* configures led GPIO */
void gd_eval_led_init(led_typedef_enum lednum);
/* turn on selected led */
void gd_eval_led_on(led_typedef_enum lednum);
/* turn off selected led */
void gd_eval_led_off(led_typedef_enum lednum);
/* toggle the selected led */
void gd_eval_led_toggle(led_typedef_enum lednum);


void zdw_led_loop(void);
void zdw_led1_on(void);
void zdw_led2_on(void);
void zdw_led1_off(void);
void zdw_led2_off(void);

void zdw_bsp_led_init(void);

#ifdef __cplusplus
}
#endif



#endif

led.c

#include "led.h"

/* private variables */
static uint32_t GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT};
static uint32_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN};
static rcu_periph_enum GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK};


/*!
    \brief      configure led GPIO
    \param[in]  lednum: specify the Led to be configured
      \arg        LED1
      \arg        LED2
      \arg        LED3
    \param[out] none
    \retval     none
*/
void  gd_eval_led_init (led_typedef_enum lednum)
{
    /* enable the led clock */
    rcu_periph_clock_enable(GPIO_CLK[lednum]);
    /* configure led GPIO port */ 
    gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]);
    gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);

    GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}

/*!
    \brief      turn on selected led
    \param[in]  lednum: specify the Led to be turned on
      \arg        LED1
      \arg        LED2
    \param[out] none
    \retval     none
*/
void gd_eval_led_on(led_typedef_enum lednum)
{
    GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}

/*!
    \brief   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值