ESP-12S学习(12)--本地MQTT点亮LED

〇、参考文章
一、原理

上一篇文章使用的是Apollo创建MQTT服务器,这次换一个,用EMQ创建本地的MQTT

同样的,下载好EMQ解压到一个不带中文路径的文件夹下F:\MQTT\emqttd\bin,在该文件夹下右键打开cmd窗口输入命令emqttd console
在这里插入图片描述
出现该窗口以及窗口内的log就是创建成功

接着打开控制台http://127.0.0.1:18083,登录用户名是admin,密码是public

ESP8266工程代码相对应的修改,在上一篇文章的基础上修改

#define MQTT_PORT	1883
#define	MQTT_PASS	public

二、应用代码的修改

mqttConnectedCb是成功连接到MQTT的回调函数

MQTT_OnConnected(&mqttClient, mqttConnectedCb);

修改为:

void mqttConnectedCb(uint32_t *args)
{
    MQTT_Client* client = (MQTT_Client*)args;
    INFO("MQTT: Connected\r\n");
    MQTT_Subscribe(client, "/mqtt/topic/led", 1);		// 订阅主题/mqtt/topic/led,服务质量是1
}

mqttDataCb是接收到数据的回调函数

MQTT_OnData(&mqttClient, mqttDataCb);

修改为:

void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len)
{
    MQTT_Client* client = (MQTT_Client*)args;

    os_printf("********************\n");
    os_printf("Rec Data:%s\n", data);
    os_printf("********************\n");

	if (os_strncmp(data, "ON", strlen("ON")) == 0) {
		GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
		MQTT_Publish(client, "/mqtt/topic/callback", "LED is open ...", strlen("LED is open ..."), 0, 0);
	}
	if (os_strncmp(data, "OFF", strlen("OFF")) == 0) {
		GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);
		MQTT_Publish(client, "/mqtt/topic/callback", "LED is colse ...", strlen("LED is colse ..."), 0, 0);
	}
	os_memset(data, 0, 3);	// 每次都清除接收到的最大位
}

os_memset(data, 0, 3);至少清除3位的数据,不然先发OFF然后发ON会打印出ONF


三、实验的结果

打开左边的Websocket
在这里插入图片描述

看到下面的订阅主题,订阅ESP8266收到控制信号之后的推送信息主题,也就是/mqtt/topic/callback
在这里插入图片描述
接下来就是推送消息了,可以看到左边是推送给ESP8266的消息,分别推送了两条,同时也就收到ESP8266推送的反馈消息,如果在GPIO12接上灯可以看到灯亮和灭

在这里插入图片描述


2020.6.24
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值