基于ESP-IDF4.1

  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stddef.h>
  4. #include <string.h>
  5. #include "esp_wifi.h"
  6. #include "esp_system.h"
  7. #include "nvs_flash.h"
  8. #include "esp_event.h"
  9. #include "esp_netif.h"
  10. #include "protocol_examples_common.h"
  11.  
  12. #include "freertos/FreeRTOS.h"
  13. #include "freertos/task.h"
  14. #include "freertos/semphr.h"
  15. #include "freertos/queue.h"
  16.  
  17. #include "lwip/sockets.h"
  18. #include "lwip/dns.h"
  19. #include "lwip/netdb.h"
  20.  
  21. #include "esp_log.h"
  22. #include "mqtt_client.h"
  23.  
  24. static const char *TAG = "MQTT_EXAMPLE";
  25.  
  26. static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
  27. {
  28. esp_mqtt_client_handle_t client = event->client;
  29. int msg_id;
  30. // your_context_t *context = event->context;
  31. switch (event->event_id) {
  32. case MQTT_EVENT_CONNECTED:
  33. ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
  34. msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0);
  35. ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
  36.  
  37. msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
  38. ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
  39.  
  40. msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
  41. ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
  42.  
  43. msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
  44. ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
  45. break;
  46. case MQTT_EVENT_DISCONNECTED:
  47. ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
  48. break;
  49.  
  50. case MQTT_EVENT_SUBSCRIBED:
  51. ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
  52. msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
  53. ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
  54. break;
  55. case MQTT_EVENT_UNSUBSCRIBED:
  56. ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
  57. break;
  58. case MQTT_EVENT_PUBLISHED:
  59. ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
  60. break;
  61. case MQTT_EVENT_DATA:
  62. ESP_LOGI(TAG, "MQTT_EVENT_DATA");
  63. printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
  64. printf("DATA=%.*s\r\n", event->data_len, event->data);
  65. break;
  66. case MQTT_EVENT_ERROR:
  67. ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
  68. break;
  69. default:
  70. ESP_LOGI(TAG, "Other event id:%d", event->event_id);
  71. break;
  72. }
  73. return ESP_OK;
  74. }
  75.  
  76. //mqtt时间处理程序
  77. static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
  78. ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
  79. mqtt_event_handler_cb(event_data);
  80. }
  81.  
  82. //启动mqtt
  83. static void mqtt_app_start(void)
  84. {
  85. esp_mqtt_client_config_t mqtt_cfg = {.uri = CONFIG_BROKER_URL,};
  86.  
  87. #if CONFIG_BROKER_URL_FROM_STDIN
  88. char line[128];
  89.  
  90. if (strcmp(mqtt_cfg.uri, "FROM_STDIN") == 0) {
  91. int count = 0;
  92. printf("Please enter url of mqtt broker\n");
  93. while (count < 128) {
  94. //从stdin获取下一个字符
  95. int c = fgetc(stdin);
  96. if (c == '\n') {
  97. line[count] = '\0';
  98. break;
  99. } else if (c > 0 && c < 127) {
  100. line[count] = c;
  101. ++count;
  102. }
  103. vTaskDelay(10 / portTICK_PERIOD_MS);
  104. }
  105. mqtt_cfg.uri = line;
  106. printf("Broker url: %s\n", line);
  107. } else {
  108. ESP_LOGE(TAG, "Configuration mismatch: wrong broker url");
  109. abort();
  110. }
  111. #endif
  112.  
  113. esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
  114. esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
  115. esp_mqtt_client_start(client);
  116. }
  117.  
  118. //入口
  119. void app_main(void)
  120. {
  121. ESP_LOGI(TAG, "[APP] Startup..");
  122. ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());
  123. ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());
  124.  
  125. esp_log_level_set("*", ESP_LOG_INFO);
  126. esp_log_level_set("MQTT_CLIENT", ESP_LOG_VERBOSE);
  127. esp_log_level_set("MQTT_EXAMPLE", ESP_LOG_VERBOSE);
  128. esp_log_level_set("TRANSPORT_TCP", ESP_LOG_VERBOSE);
  129. esp_log_level_set("TRANSPORT_SSL", ESP_LOG_VERBOSE);
  130. esp_log_level_set("TRANSPORT", ESP_LOG_VERBOSE);
  131. esp_log_level_set("OUTBOX", ESP_LOG_VERBOSE);
  132.  
  133. ESP_ERROR_CHECK(nvs_flash_init());
  134. ESP_ERROR_CHECK(esp_netif_init());
  135. ESP_ERROR_CHECK(esp_event_loop_create_default());
  136.  
  137. //连接网络
  138. ESP_ERROR_CHECK(example_connect());
  139.  
  140. mqtt_app_start();
  141. }

原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/protocols/mqtt/tcp

ESP32-mqtt笔记的更多相关文章

  1. ESP32学习笔记(一) 环境搭建与下载

    ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...

  2. ESP32 学习笔记 - Ubuntu安装

    最近买了一个ESP32的开发板,以前只玩过ESP8266,没经验只能自己一步步摸索 现在把学习的过程记录下来,以免过了一段时间就忘记了 第一步安装 VMware 可以在我的网盘下载 链接:https: ...

  3. ESP32 学习笔记 - 环境搭建

    打开终端 输入命令 sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-seria ...

  4. ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键

    LittlevGL 添加自定义字体获取字库 ttf 文件可以从一些网站上获取字库文件,比如请注意字体许可证 生成源文件使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件 ...

  5. SpringBoot 集成MQTT配置

    目录 1. 前言 2. MQTT介绍 3. SpringBoot 集成MQTT 3.1 导入mqtt库 3.2 配置MQTT订阅者 3.3 配置MQTT发布者 3.4 MQTT消息处理和发送 3.4. ...

  6. ESP32 IDF 获取天气信息

    一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...

  7. MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt

    0 前言     2014年8月yeelink推出基于MQTT协议的开关类型设备控制API.相比于基于HTTP RESTful的轮训方式,通过订阅相关主题消息,能够远程控制类应用实时性更好. 本文使用 ...

  8. MQTT协议笔记之订阅

    前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...

  9. MQTT协议笔记之消息流

    前言 前面的笔记已把所有消息类型都过了一遍,这里从消息流的角度尝试解读一下. 网络故障 在任何网络环境下,都会出现一方连接失败,比如离开公司大门那一刻没有了WIFI信号.但持续连接的另一端-服务器可能 ...

  10. MQTT协议笔记之发布流程

    MQTT协议笔记之发布流程 前言 这次要讲到客户端/服务器的发布消息行为,与PUBLISH相关的消息类型,会在这里看到. PUBLISH 客户端发布消息经由服务器分发到所有对应的订阅者那里.一个订阅者 ...

随机推荐

  1. CUDA上深度学习模型量化的自动化优化

    CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...

  2. 微调BERT:序列级和令牌级应用程序

    微调BERT:序列级和令牌级应用程序 Fine-Tuning BERT for Sequence-Level and Token-Level Applications 为自然语言处理应用程序设计了不同 ...

  3. zookeeper分布式锁,解决了羊群效应, 真正的zookeeper 分布式锁

    zookeeper 实现分布式锁,监听前一个节点来避免羊群效应, 思路:很简单,但是实现起来要麻烦一些, 而且我也是看了很多帖子,发现很多帖子的代码,下载下来逐步调试之后发现,看起来是对的,但在并发情 ...

  4. 使用ElementTree解析,操作xml

    一.最近在实际工作中需要对一部分接口进行测试,接口的入参与出参都是xml格式的数据,所以用到了python内部模块ElementTree对xml进行解析,并根据实际需求操作xml数据 二.代码示例 # ...

  5. 十六、.net core(.NET 6)搭建基于Redis的Hangfire定时器

    搭建基于Redis的Hangfire定时器 Hangfire的定时配置信息会自动生成在指定到数据库内,包括关系型数据库或非关系型数据库内.目前为止,它在Redis.Oracle上面,可以支持最短15秒 ...

  6. 【无线通信篇01 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇

    演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...

  7. 题解 P5318 【【深基18.例3】查找文献】

    题目传送门 根据本蒟蒻细致粗略的分析 这明显是一道水题模(du)板(liu)题 可我竟然没有一遍AC; 为更好地食用本题解需要了解以下内容 1.dfs(大法师深搜) 2.bfs(冰法师广搜)/dij最 ...

  8. 【模拟7.25】回家(tarjan V-DCC点双连通分量的求法及缩点 求割点)模板题

    作为一道板子题放在第二题令人身心愉悦,不到一个小时码完连对拍都没打. 关于tarjan割点的注意事项: 1.在该板子中我们求的是V-DCC,而不是缩点,V-DCC最少有两个点组成,表示出掉一个块里的任 ...

  9. 小Z的袜子(hose) &&作业 (莫队)

    莫队:一种非常优雅的暴力,时间复杂度一般情况下是n*根号n,还是很优秀的. 今天水了三道莫队题,对普通莫队有了些了解 1.莫队l和r为指针,维护当前区间的某些信息,一般可以是当前区间不同权值的个数,( ...

  10. bzoj2839 集合计数(容斥+组合)

    集合计数 内存限制:128 MiB 时间限制:1000 ms 标准输入输出     题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 ...