当前位置:   article > 正文

STM32F103C8T6连接ESP-12F模块上位机MQTTX的使用(含源码)_mqtt 上位机

mqtt 上位机

1.效果实现

源码资料下载

链接:https://pan.baidu.com/s/1ne6Nlz2bZ27wMcNSFxf5Qw
提取码:5l30

通过MQTTX上位机能够控制最小系统板的LED灯的亮灭,value后面的值写0/1即可控制亮灭

2.硬件连接

需要查找资料根据具体的WIFI模块引脚连接用CubeMX去进行配置,我用的是ESP-12F模块用CubeMX引脚配置具体如下

根据下图可知我们需要连接7根线除RST外按图接线,RST我们接上配置的PA4引脚,配置的为GPIO-output模式,然后就可以开始编写代码,我这里使用的是ESP-12F,换成ESP-01S也可以

注意接线除RST外要按图接好,否则会连不上网

3.代码编写(按照网盘下载的工程为例,这里写的比较简略)

将网盘的代码下载下来,将其中的USER代码复制到自己的工程文件夹下面

然后在项目中开始编写代码,可以按照我的工程文件的main.c添加的代码来编写

  1. //1
  2. /* USER CODE BEGIN Includes */
  3. #include "MQTT_Conf.h"//头文件包含
  4. /* USER CODE END Includes */
  5. //2
  6. ///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
  7. int fputc(int ch, FILE *f)
  8. {
  9. /* 发送一个字节数据到串口DEBUG_USART */
  10. HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  11. return (ch);
  12. }
  13. int main(void)
  14. {
  15. /* USER CODE BEGIN 1 */
  16. char PUB_BUF[256];//上传数据的buf
  17. /* USER CODE END 1 */
  18. /* MCU Configuration--------------------------------------------------------*/
  19. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  20. HAL_Init();
  21. /* USER CODE BEGIN Init */
  22. /* USER CODE END Init */
  23. /* Configure the system clock */
  24. SystemClock_Config();
  25. /* USER CODE BEGIN SysInit */
  26. /* USER CODE END SysInit */
  27. /* Initialize all configured peripherals */
  28. MX_GPIO_Init();
  29. MX_USART1_UART_Init();
  30. MX_USART2_UART_Init();
  31. /* USER CODE BEGIN 2 */
  32. unsigned char *dataPtr = NULL;
  33. const char *topics[] = {SUB_TOPIC};
  34. ESP8266_LINK_Init();
  35. OneNet_Subscribe(topics, 1);
  36. /* USER CODE END 2 */
  37. /* Infinite loop */
  38. /* USER CODE BEGIN WHILE */
  39. while (1)
  40. {
  41. // HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//要调试MQTTX能否接受到单片机发的消息时候可以取消注释查看,能够通过MQTTX收到hello的消息
  42. // sprintf(PUB_BUF,"hello");
  43. // OneNet_Publish(PUB_TOPIC,PUB_BUF);
  44. HAL_Delay(2000);
  45. dataPtr = ESP8266_GetIPD(3); // 完成需要15个毫秒,三次循环,一次5个毫秒
  46. if (dataPtr != NULL)
  47. OneNet_RevPro(dataPtr); //获取数据并在里面进行解析
  48. HAL_Delay(10);
  49. /* USER CODE END WHILE */
  50. /* USER CODE BEGIN 3 */
  51. }
  52. /* USER CODE END 3 */
  53. }

main.c编写好代码后要找到MQTT_Conf.h的头文件打开

里面进行esp8266的通信串口选择和复位引脚的设置,里面的ESP8266_WIFI_INFO改成对应自己的WIFI名称和密码,"AT+CWJAP=\"WIFI名称\",\"WIFI密码\"\r\n"

ESP8266_ONENET_INFO用的是公共服务器可以进这个网址查看免费的公共 MQTT 服务器 | EMQ

  1. /***********************************************************************************************
  2. * ESP8266 连接MQTT配置文件
  3. * 端口占用如下:
  4. * 1:一个GPIO复位引脚
  5. * 2:一个串口
  6. * 3:3V3 和GND
  7. * 使用说明如下:
  8. * 1:更改复位引脚和选定的串口
  9. * 2:更换自己的串口重定向
  10. * 3:更换订阅和发布的主题
  11. * 4:配置设备ID信息
  12. * 5:配置wife密码和MQTT服务器
  13. * 6:调用 ESP8266_LINK_Init()连接函数
  14. * 7:根据所需调用esp8266.h和onenet.h的函数
  15. ************************************************************************************************/
  16. #ifndef __MQTT_CONF_H
  17. #define __MQTT_CONF_H
  18. #include "stdio.h"
  19. #include "string.h"
  20. #include "onenet.h"
  21. #include "Common.h"
  22. #include "esp8266.h"
  23. #include "mqttkit.h"
  24. #include "cJSON.h"
  25. #include "main.h"
  26. #define ESP8266_REST_Pin GPIO_PIN_4 //复位引脚设置为PA4
  27. #define ESP8266_REST_GPIO_Port GPIOA
  28. #define ESP_UART huart2 //esp8266的通信串口
  29. #define USER_PRINTF printf //定义用户自己的串口重定向函数
  30. //#define SUB_TOPIC "lls_app_v0" //订阅主题(需要加引号)
  31. #define SUB_TOPIC "iot/160/ggf" //订阅主题(需要加引号)
  32. #define PUB_TOPIC "iot/160/wsd" //发布主题
  33. //#define PUB_TOPIC "Taichi-Maker-Sub-C8:C9:A3:5D:A1:A4" //发布主题
  34. #define PROID "446433vyug" //设备ID(可随便)
  35. #define AUTH_INFO "123" //密码 (可随便)
  36. #define DEVID "742860946" //(可随便)
  37. #define ESP8266_WIFI_INFO "AT+CWJAP=\"Xiaomi_3CDA\",\"15270605571\"\r\n" //TP-LINK_5D25是wife名称 18296885326是wife密码
  38. //#define ESP8266_WIFI_INFO "AT+CWJAP=\"oplus_co_apecsu\",\"123456789.\"\r\n" //TP-LINK_5D25是wife名称 18296885326是wife密码
  39. //#define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"mqtt.llsmqttport.xyz\",1883\r\n"//broker-cn.emqx.io 是mqtt服务器地址,1883是端口号
  40. #define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"broker.emqx.io\",1883\r\n"//broker-cn.emqx.io 是mqtt服务器地址,1883是端口号
  41. extern unsigned char a_esp8266_buf; //ESP8266 01s串口通信缓冲区
  42. //esp8266连接初始化
  43. #define ESP8266_LINK_Init() \
  44. do { \
  45. HAL_UART_Receive_IT(&ESP_UART, (uint8_t *)&a_esp8266_buf, 1);\
  46. ESP8266_Init();\
  47. while (OneNet_DevLink())\
  48. {\
  49. HAL_Delay(500);\
  50. }\
  51. } while(0U)
  52. #endif

4.MQTTX的配置

下载安装软件----->MQTTX:全功能 MQTT 客户端工具进去点击右上角的Download下载安装

打开软件新建连接配置

点击添加订阅添加

5.实现效果

打开主函数循环中的注释,烧录程序

连接上网络后收到一次hello的显示如下,就代表代码没有问题,实现了接收单片机的数据

用MQTTX控制单片机,以下代码在onenet.c的OneNet_RevPro函数中,通过以下代码即可实现控制LED的亮灭

  1. case MQTT_PKT_PUBLISH: //接收的Publish消息
  2. result = MQTT_UnPacketPublish(cmd, &cmdid_topic, &topic_len, &req_payload, &req_len, &qos, &pkt_id);
  3. if(result == 0)
  4. {
  5. USER_PRINTF( "topic: %s, topic_len: %d, payload: %s, payload_len: %d\r\n",
  6. cmdid_topic, topic_len, req_payload, req_len);
  7. //解析数据包
  8. json=cJSON_Parse(req_payload);
  9. if(!json)USER_PRINTF("Error before:[%s]\n",cJSON_GetErrorPtr());
  10. else
  11. {
  12. //解析开关值
  13. json_vlaue=cJSON_GetObjectItem(json,"target");
  14. USER_PRINTF("json_target= %s\r\n",json_vlaue->string);//先把键值输出来,就是看看叫什么名字
  15. USER_PRINTF("json_vlaue= %s\r\n",json_vlaue->valuestring);//接着看看数值是多少
  16. // json_vlaue=cJSON_GetObjectItem(json,"value");
  17. // USER_PRINTF("josn_value=%d",json_vlaue->valueint);
  18. //从value-int中获取结果
  19. if(strstr(json_vlaue->valuestring,"led")!=NULL)//标准字符串判断,这个就是判断是不是控制LED
  20. {
  21. json_vlaue=cJSON_GetObjectItem(json,"value");
  22. if(json_vlaue->valueint)//对0/1进行判断
  23. {
  24. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
  25. }
  26. else
  27. {
  28. HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
  29. };
  30. }
  31. }
  32. cJSON_Delete(json);
  33. }
  34. break;

 以上内容均为个人实践加理解写出,供大家参考,有帮助到大家可以点赞支持。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/470171
推荐阅读
相关标签
  

闽ICP备14008679号