ESP8266例程解析⑨MQTT+smartconfig解析

一、概述

  • MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。详细介绍可参考:https://blog.csdn.net/qq_25205045/article/details/85490447
    https://blog.csdn.net/qq_25205045/article/details/85490427

  • smartconfig就是:

    1. wifi模块通电,没有可用的wifi, 进入混杂模式, 开始监听信号覆盖范围内的所有wifi数据帧
    2. 手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,
    3. 智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密出WIFI 用户名 密码
      详细介绍可参考链接:https://blog.csdn.net/qq_25205045/article/details/85269742
  • 提示:有了MQTT和smartconfig成功经验之后再看,如果没有就点概述里面几个链接看完

二、代码分析
所谓MQTT+smartconfig 在我的理解里就是
smartconfig的wifi联网一直在定时器回调函数里,每间隔一定时间就执行一次,通过接收APP发的UDP广播中wifi的账号和密码,从而达到连接的目的
然后在确定ESP8266连上网之后 执行MQTT的一系列相关操作(订阅、主题、会话等)
通过GPIO12灯的亮灭表示是是否连上网

void user_init(void)
 {
	uart_init(BIT_RATE_115200, BIT_RATE_115200);//串口准备
	os_delay_us(60000);//系统延时

	//LED初始化
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); //选择GPIO15,此GPIO连接是绿灯
	GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1); //默认GPIO15为高,也就是关灯

	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //选择GPIO12,此GPIO连接是红灯
	GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0); //默认GPIO12为低,也就是开灯,表示配网不成功!
	CFG_Load();
	//开始MQTT连接
	MQTT_InitConnection(&mqttClient, sysCfg.mqtt_host, sysCfg.mqtt_port,
			sysCfg.security);
	MQTT_InitClient(&mqttClient, sysCfg.device_id, sysCfg.mqtt_user,
			sysCfg.mqtt_pass, sysCfg.mqtt_keepalive, 1);
	MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);
	MQTT_OnConnected(&mqttClient, mqttConnectedCb);
	MQTT_OnDisconnected(&mqttClient, mqttDisconnectedCb);
	MQTT_OnPublished(&mqttClient, mqttPublishedCb);
	MQTT_OnData(&mqttClient, mqttDataCb);

	os_timer_disarm(&checkTimer_wifistate);	//启动定时器前先取消定时器定时
	os_timer_setfn(&checkTimer_wifistate, (os_timer_func_t *) Check_WifiState,
	NULL);	//设置定时器回调函数   连接网络
	os_timer_arm(&checkTimer_wifistate, 1000, 1);	//启动定时器
	keyInit();    //按键准备
	INFO("\r\nSystem started ...\r\n");
}

你可能感兴趣的:(ESP8266,MQTT)