一文让你搞懂MQTT+SSL(MBEDTLS)-------附带源码

        是不是还在为找源码而痛苦,这里就要现成,正所谓:前人栽树后人乘凉,估计老铁这会已经找累了吧(哈哈哈哈);

 

 废话不多说,上源码,稍等!!!这不点一个赞支持一下吗???

 这两个例子都可以;建议使用第一个,别问为什么,因为我使用的是第一个;

MQTT连接平台的关键代码:很关键



 mqtt_params.handle_event.h_fp = example_event_handle;//example_event_handle 这个函数是回调函数,当你订阅平台后,平台会给你返回一个订阅响应  SUB_ACK对应一个数字;可以跳到这里面自己看一下
    mqtt_params.handle_event.pcontext = NULL;

    pclient = IOT_MQTT_Construct(&mqtt_params);//IOT_MQTT_Construct 特别关键 ,里面进行了SSL加密 对mqtt 进行初始化,连接服务器
    if (NULL == pclient) {
        EXAMPLE_TRACE("MQTT construct failed");
        return -1;
    }

    res = example_subscribe(pclient);//订阅你需要的主题
    if (res < 0) {
        IOT_MQTT_Destroy(&pclient);
        return -1;
    }

    while (1) {
        if (0 == loop_cnt % 20) {
            example_publish(pclient);//发送你想要发送的消息嘿嘿
        }

        IOT_MQTT_Yield(pclient, 200);

        loop_cnt += 1;
    }

example_subscribe

这个函数的重要性不仅仅是 订阅这么简单,他还负责接收来自平台的消息;看代码!!!

 

int example_subscribe(void *handle)
{
    int res = 0;
    char product_key[IOTX_PRODUCT_KEY_LEN] = {0};
    char device_name[IOTX_DEVICE_NAME_LEN] = {0};
    const char *fmt = "/%s/%s/user/get";
    char *topic = NULL;
    int topic_len = 0;

    HAL_GetProductKey(product_key);
    HAL_GetDeviceName(device_name);

    topic_len = strlen(fmt) + strlen(product_key) + strlen(device_name) + 1;
    if (topic_len > CONFIG_MQTT_TOPIC_MAXLEN) {
        HAL_Printf("topic too long\n");
        return -1;
    }
    topic = g_topic_name;
    memset(topic, 0, CONFIG_MQTT_TOPIC_MAXLEN);
    HAL_Snprintf(topic, topic_len, fmt, product_key, device_name);

    res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive, NULL);
    if (res < 0) {
        HAL_Printf("subscribe failed\n");
        return -1;
    }

    return 0;
}
void example_message_arrive(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
{
    iotx_mqtt_topic_info_t     *topic_info = (iotx_mqtt_topic_info_pt) msg->msg;

    switch (msg->event_type) {
        case IOTX_MQTT_EVENT_PUBLISH_RECEIVED:
            /* print topic name and topic message */
            HAL_Printf("Message Arrived: \n");
            HAL_Printf("Topic  : %.*s\n", topic_info->topic_len, topic_info->ptopic);
            HAL_Printf("Payload: %.*s\n", topic_info->payload_len, topic_info->payload);
            HAL_Printf("\n");
            break;
        default:
            break;
    }
}

example_message_arrive ()这个函数就是接收来自平台的消息,ok打完收工;

附上代码连接https://help.aliyun.com/document_detail/96575.html

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32F4X7是一款高性能的微控制器,支持uC/OS、FreeRTOS、LWIP、SSLMQTT等多种工具。它通过使用MDK5开发工具,能够提供稳定可靠的开发环境。 W5500是一款硬件模块,是一种以太网控制器,用于实现物联网设备的网络连接。它能够与STM32F4X7微控制器结合使用,实现MQTT协议的通信。在这个例程中,W5500与STM32F4X7通过SPI接口进行通信使用MQTT协议实现设备之间的数据传输。 在这个例程和说明中,首先需要配置W5500模块的网络参数,包括IP地址、子网掩码、网关和DNS服务器等。然后,通过MQTT协议连接到MQTT服务器。在连接成功后,可以通过MQTT协议发布和订阅主题,进行设备之间的数据交换。 MQTT是一种轻量级的消息队列传输协议,它具有低带宽和低功耗的特点,适用于物联网设备的通信。通过使用MQTT协议,设备可以以发布订阅的方式进行消息传递,实现设备之间的数据交互。 这个例程和说明提供了详细的配置和使用指南,帮助开发者快速上手使用W5500和MQTT协议。同时,MDK5开发工具提供了丰富的调试和分析功能,帮助开发者进行代码的验证和调试,保证系统稳定可靠。 总而言之,STM32F4X7与uC/OS、FreeRTOS、LWIP、SSLMQTT等工具的结合使用,以及W5500和MQTT协议的应用,能够提供稳定可靠的物联网解决方案。通过使用MDK5开发工具,开发者可以快速开发和验证自己的物联网应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值